Showing preview only (1,112K chars total). Download the full file or copy to clipboard to get everything.
Repository: auth0/Lock.Android
Branch: main
Commit: ef8b0606851f
Files: 233
Total size: 1.0 MB
Directory structure:
gitextract_04ecnqqv/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── Bug Report.yml
│ │ ├── Feature Request.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── get-prerelease/
│ │ │ └── action.yml
│ │ ├── get-release-notes/
│ │ │ └── action.yml
│ │ ├── get-version/
│ │ │ └── action.yml
│ │ ├── maven-publish/
│ │ │ └── action.yml
│ │ ├── release-create/
│ │ │ └── action.yml
│ │ ├── setup/
│ │ │ └── action.yml
│ │ └── tag-exists/
│ │ └── action.yml
│ ├── dependabot.yml
│ ├── stale.yml
│ └── workflows/
│ ├── codeql.yml
│ ├── java-release.yml
│ ├── release.yml
│ ├── sca_scan.yml
│ └── test.yml
├── .gitignore
├── .shiprc
├── .version
├── CHANGELOG.md
├── EXAMPLES.md
├── LICENSE.md
├── MIGRATION_GUIDE.md
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── release-test.jks
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── auth0/
│ │ └── android/
│ │ └── lock/
│ │ └── app/
│ │ └── DemoActivity.kt
│ └── res/
│ ├── layout/
│ │ └── demo_activity.xml
│ └── values/
│ ├── auth0.xml
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── lib/
│ ├── .gitignore
│ ├── build.gradle
│ ├── lint.xml
│ ├── proguard-rules.pro
│ └── src/
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── com_auth0_lock_passwordless_countries.json
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── auth0/
│ │ │ └── android/
│ │ │ └── lock/
│ │ │ ├── Auth0Parcelable.java
│ │ │ ├── AuthButtonSize.java
│ │ │ ├── AuthenticationCallback.java
│ │ │ ├── Constants.java
│ │ │ ├── CountryCodeActivity.java
│ │ │ ├── InitialScreen.java
│ │ │ ├── Lock.java
│ │ │ ├── LockActivity.java
│ │ │ ├── LockCallback.java
│ │ │ ├── PasswordlessIdentityHelper.java
│ │ │ ├── PasswordlessLock.java
│ │ │ ├── PasswordlessLockActivity.java
│ │ │ ├── UsernameStyle.java
│ │ │ ├── WebCallbackWrapper.java
│ │ │ ├── WebProvider.java
│ │ │ ├── adapters/
│ │ │ │ ├── Country.java
│ │ │ │ └── CountryAdapter.java
│ │ │ ├── errors/
│ │ │ │ ├── AuthenticationError.java
│ │ │ │ ├── ErrorMessageBuilder.java
│ │ │ │ ├── LoginErrorMessageBuilder.java
│ │ │ │ └── SignUpErrorMessageBuilder.java
│ │ │ ├── events/
│ │ │ │ ├── CountryCodeChangeEvent.java
│ │ │ │ ├── DatabaseChangePasswordEvent.java
│ │ │ │ ├── DatabaseEvent.java
│ │ │ │ ├── DatabaseLoginEvent.java
│ │ │ │ ├── DatabaseSignUpEvent.java
│ │ │ │ ├── FetchApplicationEvent.java
│ │ │ │ ├── LockMessageEvent.java
│ │ │ │ ├── OAuthLoginEvent.java
│ │ │ │ └── PasswordlessLoginEvent.java
│ │ │ ├── internal/
│ │ │ │ └── configuration/
│ │ │ │ ├── ApplicationDeserializer.java
│ │ │ │ ├── ApplicationFetcher.java
│ │ │ │ ├── AuthMode.java
│ │ │ │ ├── AuthType.java
│ │ │ │ ├── BaseConnection.java
│ │ │ │ ├── Configuration.java
│ │ │ │ ├── Connection.java
│ │ │ │ ├── DatabaseConnection.java
│ │ │ │ ├── GsonDeserializer.java
│ │ │ │ ├── OAuthConnection.java
│ │ │ │ ├── Options.java
│ │ │ │ ├── PasswordComplexity.java
│ │ │ │ ├── PasswordStrength.java
│ │ │ │ ├── PasswordlessConnection.java
│ │ │ │ ├── PasswordlessMode.java
│ │ │ │ └── Theme.java
│ │ │ ├── provider/
│ │ │ │ └── AuthResolver.java
│ │ │ ├── utils/
│ │ │ │ ├── CustomField.java
│ │ │ │ ├── EnterpriseConnectionMatcher.java
│ │ │ │ ├── HiddenField.java
│ │ │ │ ├── LoadCountriesTask.java
│ │ │ │ └── SignUpField.java
│ │ │ └── views/
│ │ │ ├── ActionButton.java
│ │ │ ├── AuthConfig.java
│ │ │ ├── ChangePasswordFormView.java
│ │ │ ├── CheckableOptionView.java
│ │ │ ├── ClassicLockView.java
│ │ │ ├── CountryCodeSelectorView.java
│ │ │ ├── CustomFieldsFormView.java
│ │ │ ├── FormLayout.java
│ │ │ ├── FormView.java
│ │ │ ├── HeaderView.java
│ │ │ ├── ImageCheckbox.java
│ │ │ ├── LinkTextView.java
│ │ │ ├── LogInFormView.java
│ │ │ ├── MFACodeFormView.java
│ │ │ ├── ModeSelectionView.java
│ │ │ ├── PasswordStrengthView.java
│ │ │ ├── PasswordlessFormLayout.java
│ │ │ ├── PasswordlessInputCodeFormView.java
│ │ │ ├── PasswordlessLockView.java
│ │ │ ├── PasswordlessRequestCodeFormView.java
│ │ │ ├── SignUpFormView.java
│ │ │ ├── SocialButton.java
│ │ │ ├── SocialView.java
│ │ │ ├── SocialViewAdapter.java
│ │ │ ├── SpacesItemDecoration.java
│ │ │ ├── ValidatedInputView.java
│ │ │ ├── ValidatedPasswordInputView.java
│ │ │ ├── ValidatedUsernameInputView.java
│ │ │ ├── ViewUtils.java
│ │ │ └── interfaces/
│ │ │ ├── IdentityListener.java
│ │ │ ├── LockWidget.java
│ │ │ ├── LockWidgetForm.java
│ │ │ ├── LockWidgetOAuth.java
│ │ │ └── LockWidgetPasswordless.java
│ │ └── res/
│ │ ├── color/
│ │ │ └── com_auth0_lock_text.xml
│ │ ├── drawable/
│ │ │ ├── com_auth0_lock_link_background.xml
│ │ │ ├── com_auth0_lock_tab.xml
│ │ │ └── com_auth0_lock_terms.xml
│ │ ├── layout/
│ │ │ ├── com_auth0_lock_action_button.xml
│ │ │ ├── com_auth0_lock_activity_lock.xml
│ │ │ ├── com_auth0_lock_activity_lock_passwordless.xml
│ │ │ ├── com_auth0_lock_btn_social_large.xml
│ │ │ ├── com_auth0_lock_changepwd_form_view.xml
│ │ │ ├── com_auth0_lock_checkable_option.xml
│ │ │ ├── com_auth0_lock_custom_fields_form_view.xml
│ │ │ ├── com_auth0_lock_error_layout.xml
│ │ │ ├── com_auth0_lock_header.xml
│ │ │ ├── com_auth0_lock_login_form_view.xml
│ │ │ ├── com_auth0_lock_mfa_input_code_form_view.xml
│ │ │ ├── com_auth0_lock_password_strength.xml
│ │ │ ├── com_auth0_lock_passwordless_activity_country_code.xml
│ │ │ ├── com_auth0_lock_passwordless_country_code_selector.xml
│ │ │ ├── com_auth0_lock_passwordless_input_code_form_view.xml
│ │ │ ├── com_auth0_lock_passwordless_item_country_code.xml
│ │ │ ├── com_auth0_lock_passwordless_request_code_form_view.xml
│ │ │ ├── com_auth0_lock_signup_form_view.xml
│ │ │ ├── com_auth0_lock_sso_layout.xml
│ │ │ ├── com_auth0_lock_tab.xml
│ │ │ ├── com_auth0_lock_tab_layout.xml
│ │ │ ├── com_auth0_lock_terms_layout.xml
│ │ │ └── com_auth0_lock_validated_input_view.xml
│ │ ├── values/
│ │ │ ├── attrs.xml
│ │ │ ├── auth_styles.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ids.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── values-sw400dp/
│ │ └── dimens.xml
│ └── test/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── auth0/
│ │ └── android/
│ │ └── lock/
│ │ ├── Auth0ParcelableTest.java
│ │ ├── AuthenticationCallbackTest.java
│ │ ├── ClassicBuilderTest.java
│ │ ├── LockActivityTest.java
│ │ ├── PasswordlessBuilderTest.java
│ │ ├── PasswordlessIdentityHelperTest.java
│ │ ├── PasswordlessLockActivityTest.java
│ │ ├── WebProviderTest.java
│ │ ├── errors/
│ │ │ ├── LoginErrorMessageBuilderTest.java
│ │ │ └── SignUpErrorMessageBuilderTest.java
│ │ ├── events/
│ │ │ ├── DatabaseEventTest.java
│ │ │ ├── DatabaseLoginEventTest.java
│ │ │ ├── DatabaseSignUpEventTest.java
│ │ │ ├── ErrorMessageEventTest.java
│ │ │ ├── OAuthLoginEventTest.java
│ │ │ └── PasswordlessLoginEventTest.java
│ │ ├── internal/
│ │ │ └── configuration/
│ │ │ ├── ApplicationFetcherTest.java
│ │ │ ├── ApplicationGsonTest.java
│ │ │ ├── ConfigurationTest.java
│ │ │ ├── ConnectionGsonTest.java
│ │ │ ├── ConnectionMatcher.java
│ │ │ ├── ConnectionTest.java
│ │ │ ├── DatabaseConnectionTest.java
│ │ │ ├── EnterpriseConnectionMatcherTest.java
│ │ │ ├── GsonBaseTest.java
│ │ │ ├── OAuthConnectionTest.java
│ │ │ ├── OptionsTest.java
│ │ │ ├── PasswordlessConnectionTest.java
│ │ │ └── ThemeTest.java
│ │ ├── provider/
│ │ │ └── AuthResolverTest.java
│ │ ├── utils/
│ │ │ ├── ApplicationAPI.java
│ │ │ ├── Auth0AuthenticationCallbackMatcher.java
│ │ │ ├── AuthenticationCallbackMatcher.java
│ │ │ ├── CallbackMatcher.java
│ │ │ ├── CustomFieldTest.java
│ │ │ ├── HiddenFieldTest.java
│ │ │ ├── MockAuthenticationCallback.java
│ │ │ ├── MockCallback.java
│ │ │ ├── MockLockCallback.java
│ │ │ ├── SSLTestUtils.java
│ │ │ └── TypeTokenMatcher.java
│ │ └── views/
│ │ ├── AuthConfigTest.java
│ │ ├── CustomFieldsFormViewTest.java
│ │ └── PasswordStrengthViewTest.java
│ └── resources/
│ ├── appinfo.json
│ ├── application.json
│ ├── db_connection.json
│ ├── db_connection_with_complexity.json
│ ├── empty_object.json
│ ├── enterprise_connection.json
│ ├── invalid.json
│ ├── mockito-extensions/
│ │ └── org.mockito.plugins.MockMaker
│ ├── social_connection.json
│ └── strategy.json
├── opslevel.yml
├── proguard/
│ ├── proguard-gson.pro
│ ├── proguard-lock-2.pro
│ └── proguard-otto.pro
└── settings.gradle
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
end_of_line = lf
================================================
FILE: .gitattributes
================================================
# We'll let Git's auto-detection algorithm infer if a file is text. If it is,
# enforce LF line endings regardless of OS or git configurations.
* text=auto eol=lf
# Isolate binary files in case the auto-detection algorithm fails and
# marks them as text files (which could brick them).
*.{png,jpg,jpeg,gif,webp,woff,woff2} binary
================================================
FILE: .github/CODEOWNERS
================================================
* @auth0/project-dx-sdks-engineer-codeowner
================================================
FILE: .github/ISSUE_TEMPLATE/Bug Report.yml
================================================
name: 🐞 Report a bug
description: Have you found a bug or issue? Create a bug report for this library
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
**Please do not report security vulnerabilities here**. The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues.
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have looked into the [Readme](https://github.com/auth0/Lock.Android#readme) and [Examples](https://github.com/auth0/Lock.Android/blob/main/EXAMPLES.md), and have not found a suitable solution or answer.
required: true
- label: I have looked into the [API documentation](https://javadoc.io/doc/com.auth0.android/lock/latest/index.html) and have not found a suitable solution or answer.
required: true
- label: I have searched the [issues](https://github.com/auth0/Lock.Android/issues) and have not found a suitable solution or answer.
required: true
- label: I have searched the [Auth0 Community](https://community.auth0.com) forums and have not found a suitable solution or answer.
required: true
- label: I agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md).
required: true
- type: textarea
id: description
attributes:
label: Description
description: Provide a clear and concise description of the issue, including what you expected to happen.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction
description: Detail the steps taken to reproduce this error, and whether this issue can be reproduced consistently or if it is intermittent.
placeholder: |
1. Step 1...
2. Step 2...
3. ...
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Other libraries that might be involved, or any other relevant information you think would be useful.
validations:
required: false
- type: input
id: environment-version
attributes:
label: Lock.Android version
validations:
required: true
- type: input
id: environment-platform-version
attributes:
label: Android version(s)
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/Feature Request.yml
================================================
name: 🧩 Feature request
description: Suggest an idea or a feature for this library
labels: ["feature request"]
body:
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have looked into the [Readme](https://github.com/auth0/Lock.Android#readme) and [Examples](https://github.com/auth0/Lock.Android/blob/main/EXAMPLES.md), and have not found a suitable solution or answer.
required: true
- label: I have looked into the [API documentation](https://javadoc.io/doc/com.auth0.android/lock/latest/index.html) and have not found a suitable solution or answer.
required: true
- label: I have searched the [issues](https://github.com/auth0/Lock.Android/issues) and have not found a suitable solution or answer.
required: true
- label: I have searched the [Auth0 Community](https://community.auth0.com) forums and have not found a suitable solution or answer.
required: true
- label: I agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md).
required: true
- type: textarea
id: description
attributes:
label: Describe the problem you'd like to have solved
description: A clear and concise description of what the problem is.
placeholder: I'm always frustrated when...
validations:
required: true
- type: textarea
id: ideal-solution
attributes:
label: Describe the ideal solution
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
id: alternatives-and-workarounds
attributes:
label: Alternatives and current workarounds
description: A clear and concise description of any alternatives you've considered or any workarounds that are currently in place.
validations:
required: false
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Auth0 Community
url: https://community.auth0.com
about: Discuss this SDK in the Auth0 Community forums
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### Changes
Please describe both what is changing and why this is important. Include:
- Classes and methods added, deleted, deprecated, or changed
- Screenshots of new or changed UI, if applicable
- A summary of usage if this is a new feature or change to a public API (this should also be added to relevant documentation once released)
### References
Please include relevant links supporting this change such as a:
- support ticket
- community post
- StackOverflow post
- support forum thread
Please note any links that are not publicly accessible.
### Testing
Please describe how this can be tested by reviewers. Be specific about anything not tested and reasons why. This library has unit testing, tests should be added for new logic and functionality and existing tests should complete without errors.
- [ ] This change adds unit test coverage
- [ ] This change adds integration/UI test coverage
- [ ] This change has been tested on the latest version of the platform/language or why not
### Checklist
- [ ] I have read the [Auth0 general contribution guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md)
- [ ] I have read the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md)
- [ ] All existing and new tests complete without errors
- [ ] The correct base branch is being used
================================================
FILE: .github/actions/get-prerelease/action.yml
================================================
name: Return a boolean indicating if the version contains prerelease identifiers
#
# Returns a simple true/false boolean indicating whether the version indicates it's a prerelease or not.
#
# TODO: Remove once the common repo is public.
#
inputs:
version:
required: true
outputs:
prerelease:
value: ${{ steps.get_prerelease.outputs.PRERELEASE }}
runs:
using: composite
steps:
- id: get_prerelease
shell: bash
run: |
if [[ "${VERSION}" == *"beta"* || "${VERSION}" == *"alpha"* ]]; then
echo "PRERELEASE=true" >> $GITHUB_OUTPUT
else
echo "PRERELEASE=false" >> $GITHUB_OUTPUT
fi
env:
VERSION: ${{ inputs.version }}
================================================
FILE: .github/actions/get-release-notes/action.yml
================================================
name: Return the release notes extracted from the body of the PR associated with the release.
#
# Returns the release notes from the content of a pull request linked to a release branch. It expects the branch name to be in the format release/vX.Y.Z, release/X.Y.Z, release/vX.Y.Z-beta.N. etc.
#
# TODO: Remove once the common repo is public.
#
inputs:
version:
required: true
repo_name:
required: false
repo_owner:
required: true
token:
required: true
outputs:
release-notes:
value: ${{ steps.get_release_notes.outputs.RELEASE_NOTES }}
runs:
using: composite
steps:
- uses: actions/github-script@v7
id: get_release_notes
with:
result-encoding: string
script: |
const { data: pulls } = await github.rest.pulls.list({
owner: process.env.REPO_OWNER,
repo: process.env.REPO_NAME,
state: 'all',
head: `${process.env.REPO_OWNER}:release/${process.env.VERSION}`,
});
core.setOutput('RELEASE_NOTES', pulls[0].body);
env:
GITHUB_TOKEN: ${{ inputs.token }}
REPO_OWNER: ${{ inputs.repo_owner }}
REPO_NAME: ${{ inputs.repo_name }}
VERSION: ${{ inputs.version }}
================================================
FILE: .github/actions/get-version/action.yml
================================================
name: Return the version extracted from the branch name
#
# Returns the version from the .version file.
#
# TODO: Remove once the common repo is public.
#
outputs:
version:
value: ${{ steps.get_version.outputs.VERSION }}
runs:
using: composite
steps:
- id: get_version
shell: bash
run: |
VERSION=$(head -1 .version)
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
================================================
FILE: .github/actions/maven-publish/action.yml
================================================
name: Publish release to Java
inputs:
ossr-username:
required: true
ossr-password:
required: true
signing-key:
required: true
signing-password:
required: true
java-version:
required: true
is-android:
required: true
version:
required: true
runs:
using: composite
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Java
shell: bash
run: |
curl -s "https://get.sdkman.io" | bash
source "/home/runner/.sdkman/bin/sdkman-init.sh"
sdk list java
sdk install java "$JAVA_VERSION" && sdk default java "$JAVA_VERSION"
env:
JAVA_VERSION: ${{ inputs.java-version }}
- uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 # pin@1.1.0
- name: Publish Java
shell: bash
if: inputs.is-android == 'false'
run: ./gradlew clean assemble sign publishMavenJavaPublicationToMavenRepository -PisSnapshot=false -Pversion="$VERSION" -PossrhUsername="$OSSR_USERNAME" -PossrhPassword="$OSSR_PASSWORD" -PsigningKey="$SIGNING_KEY" -PsigningPassword="$SIGNING_PASSWORD"
env:
VERSION: ${{ inputs.version }}
OSSR_USERNAME: ${{ inputs.ossr-username }}
OSSR_PASSWORD: ${{ inputs.ossr-password }}
SIGNING_KEY: ${{ inputs.signing-key }}
SIGNING_PASSWORD: ${{ inputs.signing-password }}
- name: Publish Android
shell: bash
if: inputs.is-android == 'true'
run: ./gradlew clean assemble sign publishAndroidLibraryPublicationToMavenRepository -PisSnapshot=false -Pversion="$VERSION" -PossrhUsername="$OSSR_USERNAME" -PossrhPassword="$OSSR_PASSWORD" -PsigningKey="$SIGNING_KEY" -PsigningPassword="$SIGNING_PASSWORD"
env:
VERSION: ${{ inputs.version }}
OSSR_USERNAME: ${{ inputs.ossr-username }}
OSSR_PASSWORD: ${{ inputs.ossr-password }}
SIGNING_KEY: ${{ inputs.signing-key }}
SIGNING_PASSWORD: ${{ inputs.signing-password }}
================================================
FILE: .github/actions/release-create/action.yml
================================================
name: Create a GitHub release
#
# Creates a GitHub release with the given version.
#
# TODO: Remove once the common repo is public.
#
inputs:
token:
required: true
files:
required: false
name:
required: true
body:
required: true
tag:
required: true
commit:
required: true
draft:
default: false
required: false
prerelease:
default: false
required: false
fail_on_unmatched_files:
default: true
required: false
runs:
using: composite
steps:
- uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
with:
body: ${{ inputs.body }}
name: ${{ inputs.name }}
tag_name: ${{ inputs.tag }}
target_commitish: ${{ inputs.commit }}
draft: ${{ inputs.draft }}
prerelease: ${{ inputs.prerelease }}
fail_on_unmatched_files: ${{ inputs.fail_on_unmatched_files }}
files: ${{ inputs.files }}
env:
GITHUB_TOKEN: ${{ inputs.token }}
================================================
FILE: .github/actions/setup/action.yml
================================================
name: Configure CI
description: Performs the initial configuration of the CI environment
inputs:
java:
description: The Java version to use
required: false
default: '11'
runs:
using: composite
steps:
- name: Set up JDK
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # pin@4.8.0
env:
JAVA_VERSION : ${{ inputs.java }}
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: 'temurin'
- uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 # pin@1.1.0
- name: Setup Gradle
uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # pin@4.4.4
- run: ./gradlew androidDependencies
shell: bash
================================================
FILE: .github/actions/tag-exists/action.yml
================================================
name: Return a boolean indicating if a tag already exists for the repository
#
# Returns a simple true/false boolean indicating whether the tag exists or not.
#
# TODO: Remove once the common repo is public.
#
inputs:
token:
required: true
tag:
required: true
outputs:
exists:
description: 'Whether the tag exists or not'
value: ${{ steps.tag-exists.outputs.EXISTS }}
runs:
using: composite
steps:
- id: tag-exists
shell: bash
run: |
GET_API_URL="https://api.github.com/repos/${GITHUB_REPOSITORY}/git/ref/tags/${TAG_NAME}"
http_status_code=$(curl -LI $GET_API_URL -o /dev/null -w '%{http_code}\n' -s -H "Authorization: token ${GITHUB_TOKEN}")
if [ "$http_status_code" -ne "404" ] ; then
echo "EXISTS=true" >> $GITHUB_OUTPUT
else
echo "EXISTS=false" >> $GITHUB_OUTPUT
fi
env:
TAG_NAME: ${{ inputs.tag }}
GITHUB_TOKEN: ${{ inputs.token }}
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
================================================
FILE: .github/stale.yml
================================================
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 90
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
daysUntilClose: 7
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels: []
# Set to true to ignore issues with an assignee (defaults to false)
exemptAssignees: true
# Label to use when marking as stale
staleLabel: closed:stale
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you have not received a response for our team (apologies for the delay) and this is still a blocker, please reply with additional information or just a ping. Thank you for your contribution! 🙇♂️
================================================
FILE: .github/workflows/codeql.yml
================================================
name: CodeQL
on:
merge_group:
pull_request:
types:
- opened
- synchronize
push:
branches:
- main
schedule:
- cron: "37 10 * * 2"
permissions:
actions: read
contents: read
security-events: write
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
analyze:
name: Check for Vulnerabilities
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [java]
steps:
- if: github.actor == 'dependabot[bot]' || github.event_name == 'merge_group'
run: exit 0 # Skip unnecessary test runs for dependabot and merge queues. Artifically flag as successful, as this is a required check for branch protection.
- name: Checkout
uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v4
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
================================================
FILE: .github/workflows/java-release.yml
================================================
name: Create Java and GitHub Release
on:
workflow_call:
inputs:
java-version:
required: true
type: string
is-android:
required: true
type: string
secrets:
ossr-username:
required: true
ossr-password:
required: true
signing-key:
required: true
signing-password:
required: true
github-token:
required: true
### TODO: Replace instances of './.github/actions/' w/ `auth0/dx-sdk-actions/` and append `@latest` after the common `dx-sdk-actions` repo is made public.
### TODO: Also remove `get-prerelease`, `get-version`, `release-create`, `tag-create` and `tag-exists` actions from this repo's .github/actions folder once the repo is public.
jobs:
release:
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.merged && startsWith(github.event.pull_request.head.ref, 'release/'))
runs-on: ubuntu-latest
environment: release
steps:
# Checkout the code
- uses: actions/checkout@v6
with:
fetch-depth: 0
# Get the version from the branch name
- id: get_version
uses: ./.github/actions/get-version
# Get the prerelease flag from the branch name
- id: get_prerelease
uses: ./.github/actions/get-prerelease
with:
version: ${{ steps.get_version.outputs.version }}
# Get the release notes
- id: get_release_notes
uses: ./.github/actions/get-release-notes
with:
token: ${{ secrets.github-token }}
version: ${{ steps.get_version.outputs.version }}
repo_owner: ${{ github.repository_owner }}
repo_name: ${{ github.event.repository.name }}
# Check if the tag already exists
- id: tag_exists
uses: ./.github/actions/tag-exists
with:
tag: ${{ steps.get_version.outputs.version }}
token: ${{ secrets.github-token }}
# If the tag already exists, exit with an error
- if: steps.tag_exists.outputs.exists == 'true'
run: exit 1
# Publish the release to Maven
- uses: ./.github/actions/maven-publish
with:
java-version: ${{ inputs.java-version }}
is-android: ${{ inputs.is-android }}
version: ${{ steps.get_version.outputs.version }}
ossr-username: ${{ secrets.ossr-username }}
ossr-password: ${{ secrets.ossr-password }}
signing-key: ${{ secrets.signing-key }}
signing-password: ${{ secrets.signing-password }}
# Create a release for the tag
- uses: ./.github/actions/release-create
with:
token: ${{ secrets.github-token }}
name: ${{ steps.get_version.outputs.version }}
body: ${{ steps.get_release_notes.outputs.release-notes }}
tag: ${{ steps.get_version.outputs.version }}
commit: ${{ github.sha }}
prerelease: ${{ steps.get_prerelease.outputs.prerelease }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Create GitHub Release
on:
pull_request:
types:
- closed
workflow_dispatch:
permissions:
contents: write
### TODO: Replace instances of './.github/workflows/' w/ `auth0/dx-sdk-actions/workflows/` and append `@latest` after the common `dx-sdk-actions` repo is made public.
### TODO: Also remove `get-prerelease`, `get-release-notes`, `get-version`, `maven-publish`, `release-create`, and `tag-exists` actions from this repo's .github/actions folder once the repo is public.
### TODO: Also remove `java-release` workflow from this repo's .github/workflows folder once the repo is public.
jobs:
release:
uses: ./.github/workflows/java-release.yml
with:
java-version: 8.0.382-tem
is-android: true
secrets:
ossr-username: ${{ secrets.OSSR_USERNAME }}
ossr-password: ${{ secrets.OSSR_PASSWORD }}
signing-key: ${{ secrets.SIGNING_KEY }}
signing-password: ${{ secrets.SIGNING_PASSWORD }}
github-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/sca_scan.yml
================================================
name: SCA
on:
push:
branches: ["master", "main"]
jobs:
snyk-cli:
uses: auth0/devsecops-tooling/.github/workflows/sca-scan.yml@main
secrets: inherit
================================================
FILE: .github/workflows/test.yml
================================================
name: Build and Test
on:
merge_group:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
unit:
name: Run Unit Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup
- run: ./gradlew clean test lint --continue --console=plain --max-workers=3
- uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # pin@5.5.3
================================================
FILE: .gitignore
================================================
# Created by https://www.gitignore.io/api/intellij,android,osx,windows
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
*.iml
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# .idea/shelf
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### Android ###
# Built application files
*.apk
*.ap_
# Files for the Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
### Android Patch ###
gen-external-apklibs
### OSX ###
.DS_Store
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
================================================
FILE: .shiprc
================================================
{
"files": {
"auth0/build.gradle": [],
".version": [],
"README.md": []
},
"prefixVersion": false
}
================================================
FILE: .version
================================================
3.2.2
================================================
FILE: CHANGELOG.md
================================================
# Change Log
## [3.2.1](https://github.com/auth0/Lock.Android/tree/3.2.2) (2023-01-11)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/3.2.1...3.2.2)
This patch release does not contain any functional changes, but is being released using an updated signing key for verification as part of our commitment to best security practices.
Please review [the README note for additional details.](https://github.com/auth0/Lock.Android/blob/main/README.md)
**Security**
- Bump Auth0.Android dependency to 2.8.1 [\#652](https://github.com/auth0/Lock.Android/pull/652) ([poovamraj](https://github.com/poovamraj))
## [3.2.1](https://github.com/auth0/Lock.Android/tree/3.2.1) (2022-06-24)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/3.2.0...3.2.1)
**Fixed**
- Fixing bug where custom audience was not being set in [\#645](https://github.com/auth0/Lock.Android/pull/645) ([Blake-Carrier](https://github.com/Blake-Carrier))
**Security**
- Bump GSON dependency to 2.8.9 [\#639](https://github.com/auth0/Lock.Android/pull/639) ([evansims](https://github.com/evansims))
## [3.2.0](https://github.com/auth0/Lock.Android/tree/3.2.0) (2021-10-11)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/3.1.0...3.2.0)
**Changed**
- update dependencies and sdk [\#636](https://github.com/auth0/Lock.Android/pull/636) ([lbalmaceda](https://github.com/lbalmaceda))
## [3.1.0](https://github.com/auth0/Lock.Android/tree/3.1.0) (2021-07-20)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/3.0.0...3.1.0)
**Added**
- Add support for OOB multi-factor authentication [\#632](https://github.com/auth0/Lock.Android/pull/632) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Update AndroidManifest.xml for Android 12 support [\#631](https://github.com/auth0/Lock.Android/pull/631) ([VincentJoshuaET](https://github.com/VincentJoshuaET))
## [3.0.1](https://github.com/auth0/Lock.Android/tree/3.0.1) (2021-05-27)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/3.0.0...3.0.1)
**Fixed**
- Trim username and email input to avoid NPE [\#628](https://github.com/auth0/Lock.Android/pull/628) ([lbalmaceda](https://github.com/lbalmaceda))
## [3.0.0](https://github.com/auth0/Lock.Android/tree/3.0.0) (2021-05-04)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.23.0...3.0.0)
**Closed issues**
- AuthenticationCallback methods are only called the first time I login [\#607](https://github.com/auth0/Lock.Android/issues/607)
- UnauthorizedErrors are not received in lock widget callbacks [\#606](https://github.com/auth0/Lock.Android/issues/606)
**Added**
- Add migration guide [SDK-2430] [\#615](https://github.com/auth0/Lock.Android/pull/615) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Drop Jetifier plugin usage [\#624](https://github.com/auth0/Lock.Android/pull/624) ([lbalmaceda](https://github.com/lbalmaceda))
- Enable AppLinks in the declared intent filters [\#622](https://github.com/auth0/Lock.Android/pull/622) ([lbalmaceda](https://github.com/lbalmaceda))
- Simplify library set up by declaring activities internally [\#620](https://github.com/auth0/Lock.Android/pull/620) ([lbalmaceda](https://github.com/lbalmaceda))
- Refactor broadcast receiver usage [\#619](https://github.com/auth0/Lock.Android/pull/619) ([lbalmaceda](https://github.com/lbalmaceda))
- Raise Unauthorized and Access Denied errors through callback [SDK-2480] [\#618](https://github.com/auth0/Lock.Android/pull/618) ([lbalmaceda](https://github.com/lbalmaceda))
- Update readme [\#617](https://github.com/auth0/Lock.Android/pull/617) ([lbalmaceda](https://github.com/lbalmaceda))
- Migrate sample app to use Kotlin [SDK-2431] [\#616](https://github.com/auth0/Lock.Android/pull/616) ([lbalmaceda](https://github.com/lbalmaceda))
**Removed**
- Remove support for changing the Social Button style [SDK-2430] [\#614](https://github.com/auth0/Lock.Android/pull/614) ([lbalmaceda](https://github.com/lbalmaceda))
- Remove support for Implicit Authentication flow [SDK-2430] [\#613](https://github.com/auth0/Lock.Android/pull/613) ([lbalmaceda](https://github.com/lbalmaceda))
- Remove WebView component support [SDK-2430] [\#612](https://github.com/auth0/Lock.Android/pull/612) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix filtering by Country name [SDK-2546] [\#623](https://github.com/auth0/Lock.Android/pull/623) ([lbalmaceda](https://github.com/lbalmaceda))
- Run lint and fix inspection results [\#611](https://github.com/auth0/Lock.Android/pull/611) ([lbalmaceda](https://github.com/lbalmaceda))
**Breaking changes**
- Update LockCallback and AuthenticationCallback [SDK-2480] [\#621](https://github.com/auth0/Lock.Android/pull/621) ([lbalmaceda](https://github.com/lbalmaceda))
- Use Auth0.Android v2 [SDK-2429] [\#610](https://github.com/auth0/Lock.Android/pull/610) ([lbalmaceda](https://github.com/lbalmaceda))
- Migrate to AndroidX [\#609](https://github.com/auth0/Lock.Android/pull/609) ([lbalmaceda](https://github.com/lbalmaceda))
- Bump the minimum required android version [SDK-2427] [\#608](https://github.com/auth0/Lock.Android/pull/608) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.23.0](https://github.com/auth0/Lock.Android/tree/2.23.0) (2020-09-14)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.22.0...2.23.0)
**Having project sync issues after upgrading?**
This release updates the core SDK to make it compatible with Android 11 new privacy changes. If you run into a build compile issue when importing this version, make sure that you are using the latest patch version of the Android Gradle Plugin. Check the table in the [announcement blogpost](https://android-developers.googleblog.com/2020/07/preparing-your-build-for-package-visibility-in-android-11.html) to learn to what version you should update.
**Changed**
- Improve compatibility with Kotlin and run Lint on CI [\#596](https://github.com/auth0/Lock.Android/pull/596) ([lbalmaceda](https://github.com/lbalmaceda))
- Add compatibility with Android 11: Bump SDK version [\#595](https://github.com/auth0/Lock.Android/pull/595) ([lbalmaceda](https://github.com/lbalmaceda))
- Update "37 Signals" auth style to "Basecamp" [SDK-1944] [\#593](https://github.com/auth0/Lock.Android/pull/593) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.22.0](https://github.com/auth0/Lock.Android/tree/2.22.0) (2020-08-25)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.21.1...2.22.0)
**Added**
- Support bot protection [\#589](https://github.com/auth0/Lock.Android/pull/589) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.21.1](https://github.com/auth0/Lock.Android/tree/2.21.1) (2020-08-05)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.21.0...2.21.1)
**Fixed**
- Use latest SDK patch [\#587](https://github.com/auth0/Lock.Android/pull/587) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.21.0](https://github.com/auth0/Lock.Android/tree/2.21.0) (2020-07-20)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.20.0...2.21.0)
### Read if using the SecureCredentialsManager
Starting from this version, the alias used to store the key pair in the Android Keystore is prefixed to avoid collisions between other Auth0 enabled apps. Your users will be facing a "credentials not found" scenario, requiring them to log in again **once**. Double check that you are not ignoring the errors being returned in the callback and documented [here](https://github.com/auth0/Auth0.Android#handling-exceptions).
**Changed**
- Bump SDK to version 1.24.0 [\#583](https://github.com/auth0/Lock.Android/pull/583) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Bugfix #581 | Fix social login buttons with white backgrounds [\#582](https://github.com/auth0/Lock.Android/pull/582) ([morganlutz](https://github.com/morganlutz))
## [2.20.0](https://github.com/auth0/Lock.Android/tree/2.20.0) (2020-05-26)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.19.0...2.20.0)
**Added**
- Allow to change the visible sign-up fields threshold [\#578](https://github.com/auth0/Lock.Android/pull/578) ([lbalmaceda](https://github.com/lbalmaceda))
- Add social button style for Sign In with Apple [\#575](https://github.com/auth0/Lock.Android/pull/575) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix ModeSelectionView sync issue [\#577](https://github.com/auth0/Lock.Android/pull/577) ([lbalmaceda](https://github.com/lbalmaceda))
- Center Custom Fields additional form vertically [\#576](https://github.com/auth0/Lock.Android/pull/576) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.19.0](https://github.com/auth0/Lock.Android/tree/2.19.0) (2020-04-29)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.18.0...2.19.0)
**Changed**
- Bump the SDK version to 1.23.0 [\#570](https://github.com/auth0/Lock.Android/pull/570) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fixed material library 1.1.0 tab layout height issue [\#568](https://github.com/auth0/Lock.Android/pull/568) ([ivabra](https://github.com/ivabra))
## [2.18.0](https://github.com/auth0/Lock.Android/tree/2.18.0) (2020-03-04)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.17.1...2.18.0)
**Changed**
- Update Social Button style [\#563](https://github.com/auth0/Lock.Android/pull/563) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.17.1](https://github.com/auth0/Lock.Android/tree/2.17.1) (2020-01-10)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.17.0...2.17.1)
**Fixed**
- Bump SDK version and OSS plugin version [\#560](https://github.com/auth0/Lock.Android/pull/560) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.17.0](https://github.com/auth0/Lock.Android/tree/2.17.0) (2019-12-26)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.16.0...2.17.0)
**Added**
- Improve OIDC Compliance and support new Passwordless [\#558](https://github.com/auth0/Lock.Android/pull/558) ([lbalmaceda](https://github.com/lbalmaceda))
**Security**
- Improve OIDC Compliance and support new Passwordless [\#558](https://github.com/auth0/Lock.Android/pull/558) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.16.0](https://github.com/auth0/Lock.Android/tree/2.16.0) (2019-10-24)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.15.0...2.16.0)
**Added**
- Add hidden extra sign up fields [\#552](https://github.com/auth0/Lock.Android/pull/552) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.15.0](https://github.com/auth0/Lock.Android/tree/2.15.0) (2019-07-26)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.14.1...2.15.0)
**Added**
- Add Root Attributes on sign up or user creation [\#543](https://github.com/auth0/Lock.Android/pull/543) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Update username regex to allow special chars [\#544](https://github.com/auth0/Lock.Android/pull/544) ([lbalmaceda](https://github.com/lbalmaceda))
- Use latest Android Gradle plugin version [\#542](https://github.com/auth0/Lock.Android/pull/542) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix typo in password reset string [\#541](https://github.com/auth0/Lock.Android/pull/541) ([horsejockey](https://github.com/horsejockey))
- Avoid registering multiple broadcast receiver instances [\#539](https://github.com/auth0/Lock.Android/pull/539) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.14.1](https://github.com/auth0/Lock.Android/tree/2.14.1) (2019-06-06)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.14.0...2.14.1)
**Fixed**
- Remove entirely the small social button style [\#537](https://github.com/auth0/Lock.Android/pull/537) ([lbalmaceda](https://github.com/lbalmaceda))
- Define custom email regex to validate emails [\#534](https://github.com/auth0/Lock.Android/pull/534) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.14.0](https://github.com/auth0/Lock.Android/tree/2.14.0) (2019-04-30)
From this release on, the option to display social connections in small styled buttons is no longer available due to branding compliance reasons. All the social connections will now be displayed as large styled buttons.
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.13.0...2.14.0)
**Changed**
- Remove "Small" social button style [\#529](https://github.com/auth0/Lock.Android/pull/529) ([lbalmaceda](https://github.com/lbalmaceda))
- Update google-oauth2 strategy logo [\#528](https://github.com/auth0/Lock.Android/pull/528) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.13.0](https://github.com/auth0/Lock.Android/tree/2.13.0) (2019-04-17)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.12.1...2.13.0)
**Changed**
- Use auth0.android 1.15.2 [\#526](https://github.com/auth0/Lock.Android/pull/526) ([lbalmaceda](https://github.com/lbalmaceda))
- Update facebook icon to comply with new branding [\#525](https://github.com/auth0/Lock.Android/pull/525) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.12.1](https://github.com/auth0/Lock.Android/tree/2.12.1) (2019-02-22)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.12.0...2.12.1)
**Fixed**
- Parse 'password_leaked' error message [\#522](https://github.com/auth0/Lock.Android/pull/522) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.12.0](https://github.com/auth0/Lock.Android/tree/2.12.0) (2019-01-30)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.11.0...2.12.0)
**Changed**
- Use latest Auth0.Android SDK [\#520](https://github.com/auth0/Lock.Android/pull/520) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.11.1](https://github.com/auth0/Lock.Android/tree/2.11.1) (2018-10-16)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.11.0...2.11.1)
**Fixed**
- Handle Tab change manually on ModeSelectionView [\#499](https://github.com/auth0/Lock.Android/pull/499) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.11.0](https://github.com/auth0/Lock.Android/tree/2.11.0) (2018-10-05)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.10.0...2.11.0)
**Added**
- Added showTerms feature flag [\#487](https://github.com/auth0/Lock.Android/pull/487) ([cocojoe](https://github.com/cocojoe))
**Fixed**
- Use target SDK 28 and latest Auth0 SDK version [\#484](https://github.com/auth0/Lock.Android/pull/484) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.10.0](https://github.com/auth0/Lock.Android/tree/2.10.0) (2018-09-14)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.9.0...2.10.0)
**Added**
- Allow to override the password minimum length [\#474](https://github.com/auth0/Lock.Android/pull/474) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.9.0](https://github.com/auth0/Lock.Android/tree/2.9.0) (2018-07-25)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.6...2.9.0)
**Added**
- Allow to disable 'ActiveAuth' on enterprise Connections [\#471](https://github.com/auth0/Lock.Android/pull/471) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.6](https://github.com/auth0/Lock.Android/tree/2.8.6) (2018-07-20)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.5...2.8.6)
**Fixed**
- Fix CustomTabsController issues [\#469](https://github.com/auth0/Lock.Android/pull/469) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.5](https://github.com/auth0/Lock.Android/tree/2.8.5) (2018-07-19)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.4...2.8.5)
**Fixed**
- Enable MFA support for OIDC conformant clients [\#451](https://github.com/auth0/Lock.Android/pull/451) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.4](https://github.com/auth0/Lock.Android/tree/2.8.4) (2018-07-13)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.3...2.8.4)
**Fixed**
- Fix WebAuth issues by updating SDK to 1.13.1 [\#465](https://github.com/auth0/Lock.Android/pull/465) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.3](https://github.com/auth0/Lock.Android/tree/2.8.3) (2018-03-19)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.2...2.8.3)
**Fixed**
- Disable HTTP 2 protocol [\#458](https://github.com/auth0/Lock.Android/pull/458) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.2](https://github.com/auth0/Lock.Android/tree/2.8.2) (2018-02-26)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.1...2.8.2)
**Fixed**
- Draw background and borders on programmatically created fields [\#455](https://github.com/auth0/Lock.Android/pull/455) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.1](https://github.com/auth0/Lock.Android/tree/2.8.1) (2018-02-21)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.8.0...2.8.1)
**Changed**
- Bump SDK version to 1.12.1 [\#452](https://github.com/auth0/Lock.Android/pull/452) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.8.0](https://github.com/auth0/Lock.Android/tree/2.8.0) (2017-10-19)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.7.0...2.8.0)
**Closed issues**
- Cannot navigate social login buttons using gamepad on Android TV [\#443](https://github.com/auth0/Lock.Android/issues/443)
**Added**
- Add RTL support [\#445](https://github.com/auth0/Lock.Android/pull/445) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix ValidatedInputView border color on focus change [\#446](https://github.com/auth0/Lock.Android/pull/446) ([lbalmaceda](https://github.com/lbalmaceda))
- Fix non touchscreen navigation [\#444](https://github.com/auth0/Lock.Android/pull/444) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.7.0](https://github.com/auth0/Lock.Android/tree/2.7.0) (2017-07-19)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.6.0...2.7.0)
**Changed**
- Update lib version to use auth0Scheme placeholder [\#431](https://github.com/auth0/Lock.Android/pull/431) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.6.0](https://github.com/auth0/Lock.Android/tree/2.6.0) (2017-07-12)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.5.0...2.6.0)
**Closed issues**
- NullPointerException in onResume for certain devices [\#415](https://github.com/auth0/Lock.Android/issues/415)
**Added**
- Add Password Toggle enabler/disabler [\#423](https://github.com/auth0/Lock.Android/pull/423) ([lbalmaceda](https://github.com/lbalmaceda))
- Add Hosted Login Page button to the demo. [\#422](https://github.com/auth0/Lock.Android/pull/422) ([lbalmaceda](https://github.com/lbalmaceda))
- Add "show password" button for Password fields. [\#421](https://github.com/auth0/Lock.Android/pull/421) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Change activity to context in Lock initialization [\#416](https://github.com/auth0/Lock.Android/pull/416) ([skrabacz-michal](https://github.com/skrabacz-michal))
**Fixed**
- Fix NPE when enabling or disabling Lock interaction [\#420](https://github.com/auth0/Lock.Android/pull/420) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.5.0](https://github.com/auth0/Lock.Android/tree/2.5.0) (2017-04-27)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.4.0...2.5.0)
**Added**
- Add paypal-sandbox support [\#412](https://github.com/auth0/Lock.Android/pull/412) ([ziluvatar](https://github.com/ziluvatar))
- Send login_hint on enterprise web auth when username/email is available [\#410](https://github.com/auth0/Lock.Android/pull/410) ([lbalmaceda](https://github.com/lbalmaceda))
- Add screens for Lock loading errors [\#407](https://github.com/auth0/Lock.Android/pull/407) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Allow to customize the capitalization of messages [\#408](https://github.com/auth0/Lock.Android/pull/408) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.4.0](https://github.com/auth0/Lock.Android/tree/2.4.0) (2017-03-06)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.3.0...2.4.0)
**Closed issues**
- LockBuilder withScope method not working. [\#397](https://github.com/auth0/Lock.Android/issues/397)
**Added**
- Add Passwordless auto login [\#392](https://github.com/auth0/Lock.Android/pull/392) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Update auth0.android library to version 1.6.0 [\#400](https://github.com/auth0/Lock.Android/pull/400) ([lbalmaceda](https://github.com/lbalmaceda))
- Remove "invalid client type" user message [\#391](https://github.com/auth0/Lock.Android/pull/391) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix setScope to properly send the scope attribute on Auth [\#399](https://github.com/auth0/Lock.Android/pull/399) ([lbalmaceda](https://github.com/lbalmaceda))
- Add loggingEnabled flag to the Auth0 parcel [\#398](https://github.com/auth0/Lock.Android/pull/398) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.3.0](https://github.com/auth0/Lock.Android/tree/2.3.0) (2017-01-02)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.2.1...2.3.0)
**Added**
- Send custom audience on login/signIn if is OIDC conformant [\#387](https://github.com/auth0/Lock.Android/pull/387) ([lbalmaceda](https://github.com/lbalmaceda))
- Include updated Proguard rules in the packaged aar [\#385](https://github.com/auth0/Lock.Android/pull/385) ([lbalmaceda](https://github.com/lbalmaceda))
- Support custom audience for Web Authentication [\#383](https://github.com/auth0/Lock.Android/pull/383) ([lbalmaceda](https://github.com/lbalmaceda))
- Support custom schemes for Web Authentication [\#382](https://github.com/auth0/Lock.Android/pull/382) ([lbalmaceda](https://github.com/lbalmaceda))
- Add option to hide Header Title on the Main screen [\#381](https://github.com/auth0/Lock.Android/pull/381) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Update gradle plugins and google dependencies [\#389](https://github.com/auth0/Lock.Android/pull/389) ([hzalaz](https://github.com/hzalaz))
- Use Header style and fix Submit button height when label is displayed [\#388](https://github.com/auth0/Lock.Android/pull/388) ([lbalmaceda](https://github.com/lbalmaceda))
**Deprecated**
- Deprecate useImplicitGrant method [\#372](https://github.com/auth0/Lock.Android/pull/372) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix Auth0 parcel that was losing telemetry and OIDC flag [\#384](https://github.com/auth0/Lock.Android/pull/384) ([lbalmaceda](https://github.com/lbalmaceda))
- Fix wrong label setting if login was disabled and pwd reset was first screen [\#380](https://github.com/auth0/Lock.Android/pull/380) ([lbalmaceda](https://github.com/lbalmaceda))
- Don't return to login/signup screen after pwd reset if those screens are disabled [\#379](https://github.com/auth0/Lock.Android/pull/379) ([lbalmaceda](https://github.com/lbalmaceda))
- Add authentication parameters to custom AuthProvider [\#375](https://github.com/auth0/Lock.Android/pull/375) ([lbalmaceda](https://github.com/lbalmaceda))
- Avoid sending authentication parameters on password-reset [\#373](https://github.com/auth0/Lock.Android/pull/373) ([lbalmaceda](https://github.com/lbalmaceda))
**Breaking changes**
- Use labeled submit button by default and separate signUp/logIn strings [\#386](https://github.com/auth0/Lock.Android/pull/386) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.2.1](https://github.com/auth0/Lock.Android/tree/2.2.1) (2016-11-22)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.2.0...2.2.1)
**Changed**
- Update auth0.android to fix scope issue [\#370](https://github.com/auth0/Lock.Android/pull/370) ([hzalaz](https://github.com/hzalaz))
## [2.2.0](https://github.com/auth0/Lock.Android/tree/2.2.0) (2016-11-21)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.1.1...2.2.0)
**Added**
- Allow to set a custom scope. [\#368](https://github.com/auth0/Lock.Android/pull/368) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Update to auth0.android 1.1.1 [\#369](https://github.com/auth0/Lock.Android/pull/369) ([hzalaz](https://github.com/hzalaz))
## [2.1.1](https://github.com/auth0/Lock.Android/tree/2.1.1) (2016-11-02)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.1.0...2.1.1)
**Fixed**
- Fix NPE when connection scope is missing [\#365](https://github.com/auth0/Lock.Android/pull/365) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.1.0](https://github.com/auth0/Lock.Android/tree/2.1.0) (2016-10-24)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.0.0...2.1.0)
**Added**
- Support connection_scope for OAuth Connections [\#361](https://github.com/auth0/Lock.Android/pull/361) ([lbalmaceda](https://github.com/lbalmaceda))
- Send LockException if the Theme is invalid [\#358](https://github.com/auth0/Lock.Android/pull/358) ([lbalmaceda](https://github.com/lbalmaceda))
- Add labeled submit button option [\#352](https://github.com/auth0/Lock.Android/pull/352) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Non-empty username validation for custom/imported connections [\#360](https://github.com/auth0/Lock.Android/pull/360) ([lbalmaceda](https://github.com/lbalmaceda))
- Fix Theme load from styles.xml [\#357](https://github.com/auth0/Lock.Android/pull/357) ([lbalmaceda](https://github.com/lbalmaceda))
**Breaking changes**
- Use browser by default when using WebAuthProvider. [\#355](https://github.com/auth0/Lock.Android/pull/355) ([lbalmaceda](https://github.com/lbalmaceda))
Since Google will be [blocking webview OAuth request](https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html) we switched the default authentication flow for all social connections from WebView to Browser.
Browser authentication requires a little more configuration in your `AndroidManifest.xml` file.
First make sure `LockActivity` has `singleTask` in `android:launchMode` and then add to it an `intent-filter`:
```xml
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="{YOUR_AUTH0_DOMAIN}"
android:pathPrefix="/android/{YOUR_APP_PACKAGE_NAME}/callback"
android:scheme="https" />
</intent-filter>
```
## [2.0.0](https://github.com/auth0/Lock.Android/tree/2.0.0) (2016-09-21)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.0.0-beta.4...2.0.0)
**Changed**
- Merge Enterprise and Social login events [\#347](https://github.com/auth0/Lock.Android/pull/347) ([lbalmaceda](https://github.com/lbalmaceda))
- Show button when only one enterprise connection is available [\#341](https://github.com/auth0/Lock.Android/pull/341) ([lbalmaceda](https://github.com/lbalmaceda))
- Filter social strategies by connection name [\#340](https://github.com/auth0/Lock.Android/pull/340) ([lbalmaceda](https://github.com/lbalmaceda))
- Flatten Strategies into Connections [\#335](https://github.com/auth0/Lock.Android/pull/335) ([lbalmaceda](https://github.com/lbalmaceda))
**Fixed**
- Fix OAuth connection callback for PasswordlessActivity [\#346](https://github.com/auth0/Lock.Android/pull/346) ([lbalmaceda](https://github.com/lbalmaceda))
- Fix non ro-enabled enterprise connections flow. [\#344](https://github.com/auth0/Lock.Android/pull/344) ([lbalmaceda](https://github.com/lbalmaceda))
- Fix wrong telemetry version [\#342](https://github.com/auth0/Lock.Android/pull/342) ([lbalmaceda](https://github.com/lbalmaceda))
**Breaking changes**
- [Breaking Change] Rename builder methods [\#350](https://github.com/auth0/Lock.Android/pull/350) ([lbalmaceda](https://github.com/lbalmaceda))
- Refactor AuthProviderResolver [Breaking Change][\#333](https://github.com/auth0/Lock.Android/pull/333) ([lbalmaceda](https://github.com/lbalmaceda))
## [2.0.0-beta.4](https://github.com/auth0/Lock.Android/tree/2.0.0-beta.4) (2016-08-24)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.0.0-beta.3...2.0.0-beta.4)
**Closed issues**
- Lock SSO Username Fails Validation [\#332](https://github.com/auth0/Lock.Android/issues/332)
**Fixed**
- Change username validation for SSO connections [\#334](https://github.com/auth0/Lock.Android/pull/334) ([lbalmaceda](https://github.com/lbalmaceda))
- Check that requested tokens are present on the result. [\#330](https://github.com/auth0/Lock.Android/pull/330) ([lbalmaceda](https://github.com/lbalmaceda))
- Use first available connection name when authenticating with OAuth [\#320](https://github.com/auth0/Lock.Android/pull/320) ([lbalmaceda](https://github.com/lbalmaceda))
**Added**
- Custom Style for Social Buttons [\#325](https://github.com/auth0/Lock.Android/pull/325) ([lbalmaceda](https://github.com/lbalmaceda))
- Request the user to accept Terms&Policy before Sign Up [\#319](https://github.com/auth0/Lock.Android/pull/319) ([lbalmaceda](https://github.com/lbalmaceda))
- Handle too_many_attempts API error [\#308](https://github.com/auth0/Lock.Android/pull/308) ([lbalmaceda](https://github.com/lbalmaceda))
- Add Service Terms and Privacy Policy dialog [\#307](https://github.com/auth0/Lock.Android/pull/307) ([lbalmaceda](https://github.com/lbalmaceda))
**Changed**
- Force init lock [Breaking Change][\#329](https://github.com/auth0/Lock.Android/pull/329) ([lbalmaceda](https://github.com/lbalmaceda))
- Update Auth0 lib version to latest [\#327](https://github.com/auth0/Lock.Android/pull/327) ([lbalmaceda](https://github.com/lbalmaceda))
- Hide Theme configuration on the Builder [Breaking Change][\#326](https://github.com/auth0/Lock.Android/pull/326) ([lbalmaceda](https://github.com/lbalmaceda))
- Use AuthMode constants when notifying tab change [\#323](https://github.com/auth0/Lock.Android/pull/323) ([lbalmaceda](https://github.com/lbalmaceda))
- Handle wrong Client Type error [\#321](https://github.com/auth0/Lock.Android/pull/321) ([lbalmaceda](https://github.com/lbalmaceda))
- Change SocialButton title when changing the Form mode [\#317](https://github.com/auth0/Lock.Android/pull/317) ([lbalmaceda](https://github.com/lbalmaceda))
- UI Improvements: Bigger buttons/fields [\#314](https://github.com/auth0/Lock.Android/pull/314) ([lbalmaceda](https://github.com/lbalmaceda))
- New Tab design. [\#313](https://github.com/auth0/Lock.Android/pull/313) ([lbalmaceda](https://github.com/lbalmaceda))
- Use pngs instead of vectorial xml files [\#311](https://github.com/auth0/Lock.Android/pull/311) ([lbalmaceda](https://github.com/lbalmaceda))
- Make PKCE enabled by default [\#310](https://github.com/auth0/Lock.Android/pull/310) ([lbalmaceda](https://github.com/lbalmaceda))
- Always pick defaultDbConnection if available [\#309](https://github.com/auth0/Lock.Android/pull/309) ([lbalmaceda](https://github.com/lbalmaceda))
**Breaking changes**
`Lock` & `PassworlessLock` no longer has the method `onCreate(Activity)` and it's logic is now part of the method `Lock.Builder.build(Activity)`. So to create a Lock instance you will have
```java
Lock lock = Lock.newBuilder(auth0, callback)
//Customize Lock
.build(this);
```
Also now you can create `Lock` by reading your Auth0 account credentials from a strings file
```java
Lock lock = Lock.newBuilder(callback)
//Customize Lock
.build(this);
```
and he string file should have
```xml
<resources>
<string name="com_auth0_client_id">{CLIENT_ID}</string>
<string name="com_auth0_domain">{DOMAIN}</string>
</resources>
```
`Lock.Builder` no longers allow to customize Lock's theme using the method `withTheme(Theme)` since using Android themes is preferable.
Also for all non-database authentication will use **Proof Key for Code Exchange** by default so your client type in Auth0 dashboard **must** be `Native`.
## [2.0.0-beta.3](https://github.com/auth0/Lock.Android/tree/2.0.0-beta.3) (2016-07-22)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.0.0-beta.2...2.0.0-beta.3)
**Added**
- Locally Configurable Lock sample app [\#298](https://github.com/auth0/Lock.Android/pull/298) ([lbalmaceda](https://github.com/lbalmaceda)
- Password Strength Widget [\#297](https://github.com/auth0/Lock.Android/pull/297) ([lbalmaceda](https://github.com/lbalmaceda)
**Changed**
- Update Proguard rules [\#305](https://github.com/auth0/Lock.Android/pull/305) ([lbalmaceda](https://github.com/lbalmaceda)
- Remove Fullscreen feature [\#302](https://github.com/auth0/Lock.Android/pull/302) ([lbalmaceda](https://github.com/lbalmaceda)
- Add callback setup on dashboard [\#300](https://github.com/auth0/Lock.Android/pull/300) ([lbalmaceda](https://github.com/lbalmaceda)
- Allow to customize Lock's theme programmatically [\#294](https://github.com/auth0/Lock.Android/pull/294) ([lbalmaceda](https://github.com/lbalmaceda)
- Remove unused User Profile calls. [\#293](https://github.com/auth0/Lock.Android/pull/293) ([lbalmaceda](https://github.com/lbalmaceda)
- Take email input across the forms [\#292](https://github.com/auth0/Lock.Android/pull/292) ([lbalmaceda](https://github.com/lbalmaceda)
- Allow up to 3 Social Big Buttons on Passwordless mode [\#291](https://github.com/auth0/Lock.Android/pull/291) ([lbalmaceda](https://github.com/lbalmaceda)
- Improve Custom Fields flow and layout [\#290](https://github.com/auth0/Lock.Android/pull/290) ([lbalmaceda](https://github.com/lbalmaceda)
- Handle Application without Connections [\#289](https://github.com/auth0/Lock.Android/pull/289) ([lbalmaceda](https://github.com/lbalmaceda)
- Draw the header behind the statusBar in Lollipop or greater [\#288](https://github.com/auth0/Lock.Android/pull/288) ([lbalmaceda](https://github.com/lbalmaceda)
**Fixed**
- Fix sign up request not sending the user metadata [\#303](https://github.com/auth0/Lock.Android/pull/303) ([lbalmaceda](https://github.com/lbalmaceda)
- Fix TextView extra padding. [\#296](https://github.com/auth0/Lock.Android/pull/296) ([lbalmaceda](https://github.com/lbalmaceda)
- Country code selection widget fixes [\#295](https://github.com/auth0/Lock.Android/pull/295) ([lbalmaceda](https://github.com/lbalmaceda)
**Breaking changes**
**Lock** `Builder` method
```java
public Builder allowSignIn(boolean allow) {...}
```
was renamed to
```java
public Builder allowLogIn(boolean allow) {...}
```
Also this method (and feature) is no longer supported in **Lock**
```java
public Builder fullscreen(boolean fullscreen) {...}
```
## [2.0.0-beta.2](https://github.com/auth0/Lock.Android/tree/2.0.0-beta.2) (2016-06-06)
[Full Changelog](https://github.com/auth0/Lock.Android/compare/2.0.0-beta.1...2.0.0-beta.2)
**Changed**
- Use new version of auth0-java to fix issue with json parsing [\#286](https://github.com/auth0/Lock.Android/pull/286) ([lbalmaceda](https://github.com/lbalmaceda))
- Fix issues with default values of `allow****` and `initialScreen` options [\#286](https://github.com/auth0/Lock.Android/pull/286) ([lbalmaceda](https://github.com/lbalmaceda))
**Breaking changes**
`AuthenticationCallback` no longer returns `UserProfile`, it only returns `Credentials` object with the tokens of the authenticated user:
```java
private LockCallback callback = new AuthenticationCallback() {
@Override
public void onAuthentication(Credentials credentials) {
//Authenticated
}
@Override
public void onCanceled() {
//User pressed back
}
@Override
public void onError(LockException error)
//Exception occurred
}
};
```
To request the `UserProfile`, just use `AuthenticationAPIClient` from [auth0-java](https://github.com/auth0/auth0-java)
```java
@Override
public void onAuthentication(Credentials credentials) {
AuthenticationAPIClient client = new AuthenticationAPIClient(new Auth0("YOUR_CLIENT_ID", "YOUR_DOMAIN"));
client.tokenInfo(credentials.idToken)
.start(new BaseCallback<UserProfile>() {
@Override
public void onSuccess(UserProfile payload) { }
@Override
public void onFailure(Auth0Exception error) { }
});
}
```
## [2.0.0-beta.1](https://github.com/auth0/Lock.Android/tree/2.0.0-beta.1) (2016-06-03)
First beta release of Lock for Android v2
### Declaration in AndroidManifest.xml
Now Lock for Android requires these permisssions
```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```
and this is how `LockActivity` should be declared in your Android Manifest
```xml
<activity
android:name="com.auth0.android.lock.LockActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Lock.Theme">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="YOUR_AUTH0_DOMAIN"
android:pathPrefix="/android/YOUR_APP_PACKAGE_NAME/callback"
android:scheme="https" />
</intent-filter>
</activity>
```
### Lock instance
In the previous version of **Lock**, you were asked to create a custom `Application` class and initialize the `Lock.Context` there. Now this is no longer needed. To create a new `Lock` instance and configure it, use the `Lock.Builder` class.
#### Auth0
Create an `Auth0` instance to hold your account details, which are the `AUTH0_CLIENT_ID` and the `AUTH0_DOMAIN`.
```java
Auth0 auth0 = new Auth0("YOUR_AUTH0_CLIENT_ID", "YOUR_AUTH0_DOMAIN");
```
### Authentication Callback
You'll also need a `LockCallback` implementation, we provide `AuthenticationCallback` that reports the following events:
- onAuthentication: User successfuly authenticated
- onError: An unrecoverable error ocurred during authentication
- onCanceled: User pressed back (if closable is true)
> If you need a more fine grained control you can implement `LockCallback` full interface.
```java
private LockCallback callback = new AuthenticationCallback() {
@Override
public void onAuthentication(Authentication authentication) {
//Authenticated
}
@Override
public void onCanceled() {
//User pressed back
}
@Override
public void onError(LockException error)
//Exception occurred
}
};
```
### Lock.Builder
Call the static method `Lock.newBuilder(Auth0, AuthenticationCallback)` passing the account details and the callback implementation, and start configuring the [Options](#options). After you're done, build the `Lock` instance and use it to start the `LockActivity`.
This is how your activity should look like.
```java
public class MainActivity extends Activity {
private Lock lock;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Auth0 auth0 = new Auth0(AUTH0_CLIENT_ID, AUTH0_DOMAIN);
lock = Lock.newBuilder(auth0, callback)
// ... Options
.build();
lock.onCreate(this);
}
@Override
public void onDestroy() {
lock.onDestroy(this);
super.onDestroy();
}
private void performLogin(boolean useBrowser) {
startActivity(lock.newIntent(this));
}
private LockCallback callback = new AuthenticationCallback() {
@Override
public void onAuthentication(Authentication authentication) {
//Authenticated
}
@Override
public void onCanceled() {
//User pressed back
}
@Override
public void onError(LockException error) {
//Exception occurred
}
};
}
```
> Remember to notify the `LockActivity` on every `OnCreate` and `OnDestroy` call on your Activity, as it helps to keep the Lock state.
### Options
As in the previous version, `Lock` can be configured with extra options. Check below if the behavior changed or if they only got renamed.
#### Renamed options from v1
- shouldUseEmail: Renamed to `withUsernameStyle`. Defines if it should ask for email only, username only, or both of them. By default, it'll respect the Dashboard configuration of the parameter `requires_username`.
- isClosable: Renamed to `closable`. Defines if the LockActivity can be closed. By default, it's not closable.
- setFullscreen: Renamed to `fullscreen`. Defines if the LockActivity it's displayed in fullscreen. By default, it's not fullscreen.
- shouldLoginAfterSignUp: Renamed to `loginAfterSignUp`. Whether after a SignUp the user should be logged in automatically.
- disableSignupAction: Renamed to `allowSignUp`. Shows the Sign Up form if a Database connection is configured.
- disableResetAction: Renamed to `allowForgotPassword`. Shows a link to the Forgot Password form if a Database connection is configured and it's allowed from the Dashboard.
- defaultUserPasswordConnection: Renamed to `setDefaultDatabaseConnection`. Defines which will be the default Database connection. This is useful if your application has many Database connections configured.
- setConnections: Renamed to `onlyUseConnections`. Filters the allowed connections from the list configured in the Dashboard..
- setAuthenticationParameters: Renamed to `withAuthenticationParameters`. Defines extra authentication parameters, sent on sign up and log in/sign in.
#### New options in v2
- `initialScreen(int)` allows to customize which form will show first when launching **Lock**. The possibles values are LOG_IN, SIGN_UP, and FORGOT_PASSWORD. By default LOG_IN is the initial screen.
- `allowLogIn(boolean)` shows the Log In form if a Database connection is configured. By default, this screen it's enabled.
- `allowSignUp(boolean)` shows the Sign Up form if a Database connection is configured. By default, this screen it's enabled.
- `allowForgotPassword(boolean)` shows the Forgot Password form if a Database connection is configured. By default, this screen it's enabled.
- `withSignUpFields(List<CustomFields>)` shows a second screen with extra fields after completing the sign up fields.
- `withProviderResolver(AuthProviderResolver)` pass your own AuthProviderResolver instance to query for AuthProviders.
- `withSocialButtonStyle(int)` allows to customize the Style of the Social buttons. Possible values are SMALL and BIG. If this is not specified, it will default to SMALL when many Social and Db/Enterprise connections are configured; and BIG on the rest of the cases.
- `usePKCE(boolean)` whether to use the new PKCE flow or the old Token exchange one when authenticating. By default, it won't use PKCE.
================================================
FILE: EXAMPLES.md
================================================
# Examples using Lock.Android
- [Examples using Lock.Android](#examples-using-lockandroid)
- [Passwordless & Social authentication](#passwordless--social-authentication)
- [Android App Links - Custom Scheme](#android-app-links---custom-scheme)
- [Using Proguard](#using-proguard)
## Passwordless & Social authentication
The Passwordless feature requires your Application to have the *Passwordless OTP* Grant Type enabled first. Check [this article](https://auth0.com/docs/clients/client-grant-types) to learn how to enable it.
`PasswordlessLockActivity` authenticates users by sending them an Email or SMS (similar to how WhatsApp authenticates you). In order to be able to authenticate the user, your application must have the SMS/Email connection enabled and configured in your [dashboard](https://manage.auth0.com/#/connections/passwordless).
Initialize **PasswordlessLock** and handle the release of its resources appropriately after you're doing using it.
```kotlin
// This activity will show PasswordlessLock
class MyActivity : AppCompatActivity() {
private lateinit var lock: PasswordlessLock
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val account = Auth0(this)
// Instantiate Lock once
lock = PasswordlessLock.newBuilder(account, callback)
// Customize Lock
.build(this)
}
override fun onDestroy() {
super.onDestroy()
// Important! Release Lock and its resources
lock.onDestroy(this)
}
private val callback = object : AuthenticationCallback() {
override fun onAuthentication(credentials: Credentials) {
// Authenticated
}
override fun onError(error: AuthenticationException) {
// An exception occurred
}
}
}
```
Start `PasswordlessLockActivity` from inside your `Activity`. For this, create a new intent and launch it.
```kotlin
startActivity(lock.newIntent(this))
```
## Android App Links - Custom Scheme
The default scheme used by the library to generate the Callback URL for Web Authentication is `https`. This works best for Android Marshmallow (API 23) or newer if you're using [Android App Links](https://developer.android.com/training/app-links/index.html). However, in previous Android versions, this may show the disambiguation dialog prompting the user to choose either your application or the browser to resolve the intent. You can change this behavior by using a unique custom scheme so that the OS opens the link directly with your app.
1. Update the `auth0Scheme` Manifest Placeholder value in the `app/build.gradle` file or directly in the Intent Filter definition in the `AndroidManifest.xml` file by changing the existing scheme to the new one.
2. Update the "Allowed Callback URLs" in your [Auth0 Dashboard](https://manage.auth0.com/#/clients) Application's settings to match URLs that begin with the new scheme.
3. Call `withScheme()` in the Lock.Builder/PasswordlessLock.Builder passing the scheme you want to use.
> The scheme value **must** be all lowercase. A warning message will be logged if this is not the case and authentication will never complete.
## Using Proguard
The rules should be applied automatically if your application is using `minifyEnabled = true`. If you want to include them manually check the [proguard directory](proguard).
By default you should at least use the following files:
* `proguard-gson.pro`
* `proguard-otto.pro`
* `proguard-lock-2.pro`
As this library depends on `Auth0.Android`, you should keep the files up to date with the proguard rules defined in the SDK [repository](https://github.com/auth0/Auth0.Android).
================================================
FILE: LICENSE.md
================================================
The MIT License (MIT)
Copyright (c) 2016 Auth0, Inc. <support@auth0.com> (http://auth0.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: MIGRATION_GUIDE.md
================================================
# Migration Guide
This guide will help you migrate Lock.Android from version v2.x.x to version v3.x.x.
## About this release
The new version makes use of the latest Auth0.Android SDK, bringing improvements such as:
- Open ID Connect compliant practices.
- ID token verification for Web Authentication flows.
- A new customizable networking stack.
- Simpler Android app set up.
Some of these features were previously available, but only enforced when the "OIDC" flag was explicitly enabled.
## New requirements
Using the latest core SDK comes with new constraints. Your Android application will need to:
- Require a minimum Android version of 21 and above.
- Target Java version 8 and above.
Here’s what you need in build.gradle to target Java 8 byte code for the Android and Kotlin plugins respectively.
```groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
```
## Changes to the AndroidManifest file
In the previous version you had to declare the Lock activities you planned to use. These activities are now declared internally by the library with intent filters configured using the Manifest Placeholders that you provide for the Domain and Scheme. The Manifest Merger tool will process these and include them as part of your Android application.
If your `AndroidManifest.xml` file includes declarations for `LockActivity`, `PasswordlessLockActivity` or `CountryCodeActivity`, you should remove them to avoid duplicated intent filter declarations.
If you are using a custom style for the theme or need to override the intent-filter declarations in any of these activities, you will have to declare an activity with the same component name and annotate it with `tools:node="replace"`.
Find details about the merging rules that will be used in the [Android Manifest Merger article](https://developer.android.com/studio/build/manifest-merge).
## Changes to the Public API
As part of removing legacy APIs or authentication flows no longer recommended for mobile clients, the following features are no longer available:
- Web Authentication flow using a WebView component instead of an external Browser. Please refer to [this blog post](https://auth0.com/blog/google-blocks-oauth-requests-from-embedded-browsers/) for additional information.
- Web Authentication flow using a response type other than "code".
- Authentication API methods categorized as Legacy in the [API docs](https://auth0.com/docs/api/authentication).
Continue reading for the detail of classes and methods that were impacted.
### Updated Callbacks
The widget requires a callback to receive the results in. The interface for this is `LockCallback`, which takes either an event or an error. The `onError` method got updated to receive an `AuthenticationException` instead of `LockException`. This change will help developers extract the *code* and *description* of the error and understand better what went wrong and how to recover from it.
The change impacts the abstract subclass `AuthenticationCallback`. Additionally, this class no longer has an `onCanceled` method. If you need to handle this scenario you have two options:
- Implement `LockCallback` and handle the different event types, checking for `LockEvent.CANCELED`.
- Implement `AuthenticationCallback` and check the received exception using the `AuthenticationException#isCanceled()` method.
```kotlin
// Before
val callback: LockCallback = object : AuthenticationCallback() {
override fun onAuthentication(credentials: Credentials) {
// Authenticated
}
override fun onCanceled() {
// Canceled
}
override fun onError(error: LockException) {
// Another error. Check code & description.
}
}
// After
val callback: LockCallback = object : AuthenticationCallback() {
override fun onAuthentication(credentials: Credentials) {
// Authenticated
}
override fun onError(error: AuthenticationException) {
if (error.isCanceled) {
// Canceled
} else {
// Another error. Check code & description.
}
}
}
```
### Removed classes
- `VoidCallback` is no longer available. Please, use `Callback<Void, AuthenticationException>` instead.
- `LockException` is no longer available. This impacts the `LockCallback` and `AuthenticationCallback` classes. Please, use `AuthenticationException` instead.
### Removed methods
#### From class `AuthenticationCallback`
- Removed `public void onCanceled()`. Instead, an exception will be raised through the `public void onError(AuthenticationException)` method. Check for this scenario using the `AuthenticationException#isCanceled()` method.
#### From class `Lock.Builder`
- Removed `public Builder useBrowser(boolean)`. The library will always use a third party browser app instead of a Web View to authenticate. No replacement is available.
- Removed `public Builder useImplicitGrant(boolean)`. The library will always use the "Proof Key for Code Exchange" (PKCE) flow. Your application must be configured with the type "Native" and the "OIDC Conformant" switch ON. No replacement is available.
- Removed `public Builder withAuthButtonSize(int)`. Social buttons will always have a "large button" style. No replacement is available.
#### From class `PasswordlessLock.Builder`
- Removed `public Builder useBrowser(boolean)`. The library will always use a third party browser app instead of a Web View to authenticate. No replacement is available.
- Removed `public Builder useImplicitGrant(boolean)`. The library will always use the "Proof Key for Code Exchange" (PKCE) flow. Your application must be configured with the type "Native" and the "OIDC Conformant" switch ON. No replacement is available.
- Removed `public Builder withAuthButtonSize(int)`. Social buttons will always have a "large button" style. No replacement is available.
#### From `Auth0` class
- Removed `setOIDCConformant(boolean)`. The library will only use Open ID Connect compliant flows from now on, this cannot be turned off.
- Removed `setLoggingEnabled(boolean)`. The ability to turn on the networking logs has been removed. If you need to inspect the traffic, take a look at the [Network Profiler](https://developer.android.com/studio/profile/network-profiler) tool.
### Changed methods
#### From cass `Lock.Builder`
- Changed `public Builder withAuthenticationParameters(@NonNull Map<String, Object> authenticationParameters)` to `public Builder withAuthenticationParameters(@NonNull Map<String, String> authenticationParameters)`. Request parameters must be specified as String key/values.
#### From cass `PasswordlessLock.Builder`
- Changed `public Builder withAuthenticationParameters(@NonNull Map<String, Object> authenticationParameters)` to `public Builder withAuthenticationParameters(@NonNull Map<String, String> authenticationParameters)`. Request parameters must be specified as String key/values.
### Changes to the underlying SDK
The core SDK has been updated to the version 2+. Since this is exposed as an API scoped dependency, if you were using any of the classes or methods that changed in the new major release (e.g. the `WebAuthProvider` class), you might need to update your code. Follow the [Auth0.Android Migration Guide](https://github.com/auth0/Auth0.Android/blob/main/V2_MIGRATION_GUIDE.md) to assess the impact.
## Changes in behavior
### Lock lifecycle
The widget registers a Broadcast Listener to expect and handle the different lifecycle events. The listener is registered as soon as a new instance of `Lock` or `PasswordlessLock` is created with the corresponding Builder class, and the listener is unregistered when the `onDestroy` method is invoked. Forgetting to call this method would retain unnecessary resources after the authentication is complete and the widget is no longer required, or cause the callback to receive duplicated calls.
In case you are not currently calling it, make sure to update your code adding the `lock?.onDestroy(this)` call.
```kotlin
class MyActivity : AppCompatActivity() {
private lateinit var lock: Lock
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val account = Auth0(this)
// Create a reusable Lock instance
lock = Lock.newBuilder(account, callback)
// Customize Lock
// .withScheme("myapp")
.build(this)
}
private fun launchLock() {
// Invoke as many times as needed
val intent = lock.newIntent(this)
startActivity(intent)
}
override fun onDestroy() {
super.onDestroy()
// Release Lock resources
lock.onDestroy(this)
}
}
```
### Non-recoverable errors
The `LockCallback` will get its `onError` method invoked when an [Auth0 Rule](https://auth0.com/docs/rules) returns an `Error` or `UnauthorizedError`. This was previously handled internally by Lock, causing it to display an orange toast with a generic failure message. From this release on, if you are using Auth0 Rules and throwing custom errors, you should obtain the _cause_ of the exception and read the code or description values to understand what went wrong.
================================================
FILE: README.md
================================================
> **Note**
> As part of our ongoing commitment to best security practices, we have rotated the signing keys used to sign previous releases of this SDK. As a result, new patch builds have been released using the new signing key. Please upgrade at your earliest convenience.
>
> While this change won't affect most developers, if you have implemented a dependency signature validation step in your build process, you may notice a warning that past releases can't be verified. This is expected, and a result of the key rotation process. Updating to the latest version will resolve this for you.

[](https://circleci.com/gh/auth0/Lock.Android)
[](https://opensource.org/licenses/MIT)
[](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.auth0.android%22%20AND%20a%3A%22lock%22)
[](https://deepwiki.com/auth0/Lock.Android)
📚 [Documentation](#documentation) • 🚀 [Getting Started](#getting-started) • ⏭️ [Next Steps](#next-steps) • 💬 [Feedback](#feedback)
## Documentation
- [Examples](https://github.com/auth0/Lock.android/blob/main/EXAMPLES.md)
- [Docs Site](https://auth0.com/docs/libraries/lock-android)
- [API Reference](https://javadoc.io/doc/com.auth0.android/lock/latest/index.html)
## Getting Started
### Requirements
Android API Level 21+ & Java version 8 or above is required in order to use Lock's UI.
Here’s what you need in build.gradle to target Java 8 byte code for the Android and Kotlin plugins respectively.
```groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
```
### Installation
Lock is available in [Maven Central](http://search.maven.org). To start using *Lock* add this line to the dependencies of your `build.gradle` file:
```groovy
implementation 'com.auth0.android:lock:3.2.2'
```
## Next Steps
If you haven't done yet, go to [Auth0](https://auth0.com) and create an Account, it's free! Then create a new [Application](https://manage.auth0.com/#/applications) of type *Native* and add a URL in *Allowed Callback URLs* with the following format:
```
https://{YOUR_AUTH0_DOMAIN}/android/{YOUR_APP_PACKAGE_NAME}/callback
```
The *package name* value required in the Callback URL can be found in your app's `build.gradle` file in the `applicationId` property. Both the *domain* and *client id* values can be found at the top of your Auth0 Application's settings. You're going to use them to setup the SDK. It's good practice to add them to the `strings.xml` file as string resources that you can reference later from the code. This guide will follow that practice.
```xml
<resources>
<string name="com_auth0_client_id">YOUR_AUTH0_CLIENT_ID</string>
<string name="com_auth0_domain">YOUR_AUTH0_DOMAIN</string>
</resources>
```
In your `app/build.gradle` file add the **Manifest Placeholders** for the Auth0 Domain and Auth0 Scheme properties, which are going to be used internally by the library to declare the Lock activities and register **intent-filters** that will capture the authentication result.
```groovy
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.auth0.samples"
minSdkVersion 21
targetSdkVersion 30
//...
//---> Add the next line
manifestPlaceholders = [auth0Domain: "@string/com_auth0_domain", auth0Scheme: "https"]
//<---
}
//...
}
```
The next step is to create an instance of `Auth0` with your application's information. The easiest way to create it is by using the values defined previously in the `strings.xml` file and passing an Android Context. For this to work, you must have defined the string resources using the same keys as listed above.
```kotlin
val account = Auth0(context)
```
Alternatively, you can directly pass the values.
```kotlin
val account = Auth0("{YOUR_AUTH0_CLIENT_ID}", "{YOUR_AUTH0_DOMAIN}")
```
Or, if you are using _custom domains_ and are required to specify a different URL to fetch the Lock widget configuration from, you can use the constructor that takes 3 parameters:
```kotlin
val account = Auth0("{YOUR_AUTH0_CLIENT_ID}", "{YOUR_AUTH0_DOMAIN}", "{THE_CONFIGURATION_DOMAIN}")
```
### Email/Password, Enterprise & Social authentication
Initialize **Lock** and handle the release of its resources appropriately after you're done using it.
```kotlin
// This activity will show Lock
class MyActivity : AppCompatActivity() {
private lateinit var lock: Lock
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val account = Auth0(this)
// Instantiate Lock once
lock = Lock.newBuilder(account, callback)
// Customize Lock
.build(this)
}
override fun onDestroy() {
super.onDestroy()
// Important! Release Lock and its resources
lock.onDestroy(this)
}
private val callback = object : AuthenticationCallback() {
override fun onAuthentication(credentials: Credentials) {
// Authenticated
}
override fun onError(error: AuthenticationException) {
// An exception occurred
}
}
}
```
Start `LockActivity` from inside your `Activity`. For this, create a new intent from the Lock instance and launch it.
```kotlin
startActivity(lock.newIntent(this))
```
### Customizing the widget
When using the `Builder` to instantiate the widget, you can pass different options to customize how it will behave. Some options are only available for **Lock** or **PasswordlessLock**. Below you will find a few of them. You can always explore all the available options with your IDE's auto-complete shortcut. Check the Javadocs to understand the default values.
```kotlin
// Create a new builder from Lock or LockPasswordless classes
newBuilder(account, callback)
// Shared options
.closable(true) // Allows the widget to be closed with the back button
.withScope('new-scope') // Changes the scope to be requested on authentication
.withAudience('my-api') // Changes the audience to be requested on authentication
.withScheme('myapp') // Changes the scheme part used to generate the Callback URL (more below)
// Lock specific options
.initialScreen(InitialScreen.SIGN_UP) // Allows to choose the screen to be displayed first
.allowLogIn(false) // Disables the Log In screen
.allowSignUp(false) // Disables the Sign Up screen
.allowForgotPassword(false) // Disables the Change Password screen
.setDefaultDatabaseConnection('my-connection') // When multiple are available, select one
// PasswordlessLock specific options
.useCode(true) // Requests to receive a OTP that will need to be filled in your android app to authenticate the user
.useLink(false) // Requests to receive a link that will open your android app to authenticate the user
.rememberLastLogin(true) // Saves the email or phone number to avoid re-typing it in the future
// Build the instance
.build(this)
```
## Feedback
### Contributing
We appreciate feedback and contribution to this repo! Before you get started, please see the following:
- [Auth0's general contribution guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md)
- [Auth0's code of conduct guidelines](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md)
### Raise an issue
To provide feedback or report a bug, [please raise an issue on our issue tracker](https://github.com/auth0/Lock.Android/issues).
### Vulnerability Reporting
Please do not report security vulnerabilities on the public Github issue tracker. The [Responsible Disclosure Program](https://auth0.com/whitehat) details the procedure for disclosing security issues.
---
<p align="center">
<picture
<source media="(prefers-color-scheme: light)" srcset="https://cdn.auth0.com/website/sdks/logos/auth0_light_mode.png" width="150">
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.auth0.com/website/sdks/logos/auth0_dark_mode.png" width="150">
<img alt="Auth0 Logo" src="https://cdn.auth0.com/website/sdks/logos/auth0_light_mode.png" width="150">
</picture>
</p>
<p align="center">Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout <a href="https://auth0.com/why-auth0">Why Auth0?</a></p>
<p align="center">
This project is licensed under the MIT license. See the <a href="https://github.com/auth0/lock.android/blob/main/LICENSE.md"> LICENSE</a> file for more info.</p>
================================================
FILE: app/.gitignore
================================================
# Created by https://www.gitignore.io/api/intellij,android,osx,windows
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
*.iml
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# .idea/shelf
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### Android ###
# Built application files
*.apk
*.ap_
# Files for the Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
### Android Patch ###
gen-external-apklibs
### OSX ###
.DS_Store
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
================================================
FILE: app/build.gradle
================================================
plugins {
id "com.android.application"
}
apply plugin: 'kotlin-android'
android {
compileSdkVersion 33
defaultConfig {
applicationId "com.auth0.android.lock.app"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
manifestPlaceholders = [auth0Domain: "@string/com_auth0_domain", auth0Scheme: "demo"]
}
signingConfigs {
release {
storeFile file("release-test.jks")
storePassword "android"
keyAlias "android"
keyPassword "android"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
dependencies {
testImplementation 'junit:junit:4.13.2'
implementation project(':lock')
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation "androidx.core:core-ktx:1.9.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
## Debugging
-renamesourcefileattribute SourceFile
-keepattributes SourceFile, LineNumberTable
-verbose
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.auth0.android.lock.app">
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".DemoActivity"
android:exported="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/java/com/auth0/android/lock/app/DemoActivity.kt
================================================
/*
* DemoActivity.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock.app
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.CheckBox
import android.widget.LinearLayout
import android.widget.RadioGroup
import androidx.appcompat.app.AppCompatActivity
import com.auth0.android.Auth0
import com.auth0.android.authentication.AuthenticationException
import com.auth0.android.callback.Callback
import com.auth0.android.lock.*
import com.auth0.android.provider.WebAuthProvider.login
import com.auth0.android.provider.WebAuthProvider.logout
import com.auth0.android.result.Credentials
import com.google.android.material.snackbar.Snackbar
class DemoActivity : AppCompatActivity() {
// Configured instances
private var lock: Lock? = null
private var passwordlessLock: PasswordlessLock? = null
// Views
private lateinit var rootLayout: View
private lateinit var groupSubmitMode: RadioGroup
private lateinit var checkboxClosable: CheckBox
private lateinit var groupPasswordlessChannel: RadioGroup
private lateinit var groupPasswordlessMode: RadioGroup
private lateinit var checkboxConnectionsDB: CheckBox
private lateinit var checkboxConnectionsEnterprise: CheckBox
private lateinit var checkboxConnectionsSocial: CheckBox
private lateinit var checkboxConnectionsPasswordless: CheckBox
private lateinit var checkboxHideMainScreenTitle: CheckBox
private lateinit var groupDefaultDB: RadioGroup
private lateinit var groupUsernameStyle: RadioGroup
private lateinit var checkboxLoginAfterSignUp: CheckBox
private lateinit var checkboxScreenLogIn: CheckBox
private lateinit var checkboxScreenSignUp: CheckBox
private lateinit var checkboxScreenReset: CheckBox
private lateinit var groupInitialScreen: RadioGroup
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.demo_activity)
rootLayout = findViewById(R.id.scrollView)
//Basic
groupSubmitMode = findViewById(R.id.group_submitmode)
checkboxClosable = findViewById(R.id.checkbox_closable)
checkboxHideMainScreenTitle = findViewById(R.id.checkbox_hide_title)
checkboxConnectionsDB = findViewById(R.id.checkbox_connections_db)
checkboxConnectionsEnterprise = findViewById(R.id.checkbox_connections_enterprise)
checkboxConnectionsSocial = findViewById(R.id.checkbox_connections_social)
checkboxConnectionsPasswordless = findViewById(R.id.checkbox_connections_Passwordless)
groupPasswordlessChannel = findViewById(R.id.group_passwordless_channel)
groupPasswordlessMode = findViewById(R.id.group_passwordless_mode)
//Advanced
groupDefaultDB = findViewById(R.id.group_default_db)
groupUsernameStyle = findViewById(R.id.group_username_style)
checkboxLoginAfterSignUp = findViewById(R.id.checkbox_login_after_signup)
checkboxScreenLogIn = findViewById(R.id.checkbox_enable_login)
checkboxScreenSignUp = findViewById(R.id.checkbox_enable_signup)
checkboxScreenReset = findViewById(R.id.checkbox_enable_reset)
groupInitialScreen = findViewById(R.id.group_initial_screen)
//Buttons
val advancedContainer = findViewById<LinearLayout>(R.id.advanced_container)
val checkboxShowAdvanced = findViewById<CheckBox>(R.id.checkbox_show_advanced)
checkboxShowAdvanced.setOnCheckedChangeListener { _, b -> advancedContainer.visibility = if (b) View.VISIBLE else View.GONE }
val btnShowLockClassic = findViewById<Button>(R.id.btn_show_lock_classic)
btnShowLockClassic.setOnClickListener { showClassicLock() }
val btnShowLockPasswordless = findViewById<Button>(R.id.btn_show_lock_passwordless)
btnShowLockPasswordless.setOnClickListener { showPasswordlessLock() }
val btnShowUniversalLogin = findViewById<Button>(R.id.btn_show_universal_login)
btnShowUniversalLogin.setOnClickListener { showWebAuth() }
val btnClearSession = findViewById<Button>(R.id.btn_clear_session)
btnClearSession.setOnClickListener { clearSession() }
}
private fun showWebAuth() {
login(account)
.withScheme("demo")
.withAudience(String.format("https://%s/userinfo", getString(R.string.com_auth0_domain)))
.start(this, loginCallback)
}
private fun clearSession() {
logout(account)
.withScheme("demo")
.start(this, logoutCallback)
}
private fun showClassicLock() {
val builder = Lock.newBuilder(account, callback)
.withScheme("demo")
.closable(checkboxClosable.isChecked)
.useLabeledSubmitButton(groupSubmitMode.checkedRadioButtonId == R.id.radio_use_label)
.loginAfterSignUp(checkboxLoginAfterSignUp.isChecked)
.allowLogIn(checkboxScreenLogIn.isChecked)
.allowSignUp(checkboxScreenSignUp.isChecked)
.allowForgotPassword(checkboxScreenReset.isChecked)
.allowedConnections(generateConnections())
.hideMainScreenTitle(checkboxHideMainScreenTitle.isChecked)
when (groupUsernameStyle.checkedRadioButtonId) {
R.id.radio_username_style_email -> {
builder.withUsernameStyle(UsernameStyle.EMAIL)
}
R.id.radio_username_style_username -> {
builder.withUsernameStyle(UsernameStyle.USERNAME)
}
}
when (groupInitialScreen.checkedRadioButtonId) {
R.id.radio_initial_reset -> {
builder.initialScreen(InitialScreen.FORGOT_PASSWORD)
}
R.id.radio_initial_signup -> {
builder.initialScreen(InitialScreen.SIGN_UP)
}
else -> {
builder.initialScreen(InitialScreen.LOG_IN)
}
}
if (checkboxConnectionsDB.isChecked) {
when (groupDefaultDB.checkedRadioButtonId) {
R.id.radio_default_db_policy -> {
builder.setDefaultDatabaseConnection("with-strength")
}
R.id.radio_default_db_mfa -> {
builder.setDefaultDatabaseConnection("mfa-connection")
}
else -> {
builder.setDefaultDatabaseConnection("Username-Password-Authentication")
}
}
}
// For demo purposes because options change dynamically, we release the resources of Lock here.
// In a real app, you will have a single instance and release its resources in Activity#OnDestroy.
lock?.onDestroy(this)
// Create a new instance with the updated configuration
lock = builder.build(this)
startActivity(lock!!.newIntent(this))
}
private fun showPasswordlessLock() {
val builder = PasswordlessLock.newBuilder(account, callback)
.withScheme("demo")
.closable(checkboxClosable.isChecked)
.allowedConnections(generateConnections())
.hideMainScreenTitle(checkboxHideMainScreenTitle.isChecked)
if (groupPasswordlessMode.checkedRadioButtonId == R.id.radio_use_link) {
builder.useLink()
} else {
builder.useCode()
}
// For demo purposes because options change dynamically, we release the resources of Lock here.
// In a real app, you will have a single instance and release its resources in Activity#OnDestroy.
passwordlessLock?.onDestroy(this)
// Create a new instance with the updated configuration
passwordlessLock = builder.build(this)
startActivity(passwordlessLock!!.newIntent(this))
}
private val account: Auth0 by lazy {
Auth0(getString(R.string.com_auth0_client_id), getString(R.string.com_auth0_domain))
}
private fun generateConnections(): List<String> {
val connections: MutableList<String> = ArrayList()
if (checkboxConnectionsDB.isChecked) {
connections.add("Username-Password-Authentication")
connections.add("mfa-connection")
connections.add("with-strength")
}
if (checkboxConnectionsEnterprise.isChecked) {
connections.add("ad")
connections.add("another")
connections.add("fake-saml")
connections.add("contoso-ad")
}
if (checkboxConnectionsSocial.isChecked) {
connections.add("google-oauth2")
connections.add("twitter")
connections.add("facebook")
connections.add("paypal-sandbox")
}
if (checkboxConnectionsPasswordless.isChecked) {
connections.add(if (groupPasswordlessChannel.checkedRadioButtonId == R.id.radio_use_sms) "sms" else "email")
}
if (connections.isEmpty()) {
connections.add("no-connection")
}
return connections
}
public override fun onDestroy() {
super.onDestroy()
lock?.onDestroy(this)
passwordlessLock?.onDestroy(this)
}
internal fun showResult(message: String) {
Snackbar.make(rootLayout, message, Snackbar.LENGTH_LONG).show()
}
private val callback: LockCallback = object : AuthenticationCallback() {
override fun onAuthentication(credentials: Credentials) {
showResult("OK > " + credentials.accessToken)
}
override fun onError(error: AuthenticationException) {
if (error.isCanceled) {
showResult("User pressed back.")
} else {
showResult(error.getDescription())
}
}
}
private val loginCallback: Callback<Credentials, AuthenticationException> = object : Callback<Credentials, AuthenticationException> {
override fun onFailure(error: AuthenticationException) {
showResult("Failed > " + error.getDescription())
}
override fun onSuccess(result: Credentials) {
showResult("OK > " + result.accessToken)
}
}
private val logoutCallback: Callback<Void?, AuthenticationException> = object : Callback<Void?, AuthenticationException> {
override fun onFailure(error: AuthenticationException) {
showResult("Log out cancelled")
}
override fun onSuccess(result: Void?) {
showResult("Logged out!")
}
}
}
================================================
FILE: app/src/main/res/layout/demo_activity.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="HardcodedText">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:text="Embedded Login"
android:textSize="20sp" />
<CheckBox
android:id="@+id/checkbox_show_advanced"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="false"
android:text="+Advanced" />
</LinearLayout>
<RadioGroup
android:id="@+id/group_submitmode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_use_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Submit with Label" />
<RadioButton
android:id="@+id/radio_use_icon"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Submit with Icon" />
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_closable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Can be Closed" />
<CheckBox
android:id="@+id/checkbox_hide_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="Hide Main Title" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:text="Passwordless" />
<RadioGroup
android:id="@+id/group_passwordless_channel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_use_email"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Use Email" />
<RadioButton
android:id="@+id/radio_use_sms"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Use SMS" />
</RadioGroup>
<RadioGroup
android:id="@+id/group_passwordless_mode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_use_link"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Use Link" />
<RadioButton
android:id="@+id/radio_use_code"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Use Code" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:text="Allowed Connections" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_connections_db"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="DB" />
<CheckBox
android:id="@+id/checkbox_connections_enterprise"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Enterprise" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_connections_social"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Social" />
<CheckBox
android:id="@+id/checkbox_connections_Passwordless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Passwordless" />
</LinearLayout>
</LinearLayout>
<!-- Begin Advanced -->
<LinearLayout
android:id="@+id/advanced_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:text="Advanced"
android:textSize="18sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:text="Default DB Connection" />
<RadioGroup
android:id="@+id/group_default_db"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_default_db_userpassword"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Usr-Pwd" />
<RadioButton
android:id="@+id/radio_default_db_mfa"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="MFA" />
<RadioButton
android:id="@+id/radio_default_db_policy"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Pwd Policy" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:text="Username Style" />
<RadioGroup
android:id="@+id/group_username_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_username_style_default"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Default" />
<RadioButton
android:id="@+id/radio_username_style_username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="User" />
<RadioButton
android:id="@+id/radio_username_style_email"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Email" />
</RadioGroup>
<CheckBox
android:id="@+id/checkbox_login_after_signup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="Log In after Sign Up" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Enabled Screens" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_enable_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Log In" />
<CheckBox
android:id="@+id/checkbox_enable_signup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Sign Up" />
<CheckBox
android:id="@+id/checkbox_enable_reset"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Reset Pwd" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Initial Screen" />
<RadioGroup
android:id="@+id/group_initial_screen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_initial_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Log In" />
<RadioButton
android:id="@+id/radio_initial_signup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Sign Up" />
<RadioButton
android:id="@+id/radio_initial_reset"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Reset Pwd" />
</RadioGroup>
</LinearLayout>
<!-- End Advanced -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_show_lock_classic"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="Show Classic" />
<Button
android:id="@+id/btn_show_lock_passwordless"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="Show Passwordless" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:text="Universal Login"
android:textSize="20sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:text="Above settings don't apply" />
<Button
android:id="@+id/btn_show_universal_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Login Page" />
<Button
android:id="@+id/btn_clear_session"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:text="Show Logout Page" />
</LinearLayout>
</ScrollView>
================================================
FILE: app/src/main/res/values/auth0.xml
================================================
<!--
~ auth0.xml
~
~ Copyright (c) 2016 Auth0 (http://auth0.com)
~
~ Permission is hereby granted, free of charge, to any person obtaining a copy
~ of this software and associated documentation files (the "Software"), to deal
~ in the Software without restriction, including without limitation the rights
~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
~ copies of the Software, and to permit persons to whom the Software is
~ furnished to do so, subject to the following conditions:
~
~ The above copyright notice and this permission notice shall be included in
~ all copies or substantial portions of the Software.
~
~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
~ THE SOFTWARE.
-->
<resources>
<string name="com_auth0_client_id">Owu62gnGsRYhk1v9SfB3c6IUbIJcRIze</string>
<string name="com_auth0_domain">lbalmaceda.auth0.com</string>
</resources>
================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
================================================
FILE: app/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">Lock Demo</string>
<string name="native_provider_message_invalid_authorize_url">The authorize URL is invalid.</string>
<string name="native_provider_message_canceled">Canceled</string>
<string name="native_provider_title">Native Identity Provider</string>
<string name="native_provider_message_start">About to start the authentication with a Native Identity Provider. Click next to continue or cancel to go back.</string>
<string name="native_provider_action_cancel">Cancel</string>
<string name="native_provider_action_continue">Continue</string>
<string name="native_provider_message_failed">Native authentication failed!</string>
<string name="native_provider_message_succeeded">Native authentication succeeded!</string>
<string name="hint_name">First Name</string>
<string name="hint_surname">Last Name</string>
<string name="hint_work">Work Place</string>
<string name="hint_country">Country name</string>
<string name="hint_phone">Phone Number</string>
<string name="hint_date">Your birthday</string>
</resources>
================================================
FILE: app/src/main/res/values/styles.xml
================================================
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.9.0'
repositories {
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.2.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
group = 'com.auth0.android'
repositories {
mavenCentral()
google()
}
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.enableJetifier=false
android.useAndroidX=true
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: lib/.gitignore
================================================
/build
================================================
FILE: lib/build.gradle
================================================
plugins {
id "com.auth0.gradle.oss-library.android" version "0.18.0"
}
logger.lifecycle("Using version ${version} for ${name}")
def signingKey = findProperty('signingKey')
def signingKeyPwd = findProperty('signingPassword')
oss {
name 'Lock.Android'
repository 'Lock.Android'
organization 'auth0'
description 'The easiest way of securing your Android mobile apps with Auth0 & Lock'
skipAssertSigningConfiguration true
developers {
auth0 {
displayName = 'Auth0'
email = 'oss@auth0.com'
}
lbalmaceda {
displayName = 'Luciano Balmaceda'
email = 'luciano.balmaceda@auth0.com'
}
}
}
signing {
useInMemoryPgpKeys(signingKey, signingKeyPwd)
}
android {
compileSdkVersion 31
defaultConfig {
minSdkVersion 21
targetSdkVersion 31
versionCode 1
versionName project.version
consumerProguardFiles '../proguard/proguard-gson.pro', '../proguard/proguard-otto.pro', '../proguard/proguard-lock-2.pro'
// Required since Android Gradle Plugin 4.1 - https://issuetracker.google.com/issues/154275579
buildConfigField "String", "VERSION_NAME", "\"$versionName\""
}
lintOptions {
disable 'ContentDescription', 'SyntheticAccessor'
abortOnError true
}
testOptions {
unitTests {
includeAndroidResources = true
// https://github.com/robolectric/robolectric/issues/5115
all {
systemProperty("javax.net.ssl.trustStoreType", "JKS")
maxHeapSize = "1024m"
}
}
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'com.squareup:otto:1.3.8'
api 'com.auth0.android:auth0:2.10.2'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.hamcrest:hamcrest-library:2.2'
testImplementation 'org.robolectric:robolectric:4.4'
testImplementation 'org.mockito:mockito-core:3.7.7'
testImplementation 'com.squareup.okhttp3:okhttp:4.12.0'
testImplementation 'com.squareup.okhttp3:mockwebserver:4.12.0'
testImplementation 'com.squareup.okhttp3:okhttp-tls:4.12.0'
testImplementation 'com.jayway.awaitility:awaitility:1.7.0'
testImplementation 'androidx.test.espresso:espresso-intents:3.4.0'
}
================================================
FILE: lib/lint.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="IconDuplicates">
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_evernote.png" />
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_evernote_sandbox.png" />
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_salesforce.png" />
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_salesforce_community.png" />
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_salesforce_sandbox.png" />
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_thecity.png" />
<ignore path="src/main/res/drawable-hdpi/com_auth0_lock_ic_social_thecity_sandbox.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_evernote.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_evernote_sandbox.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_salesforce.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_salesforce_community.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_salesforce_sandbox.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_thecity.png" />
<ignore path="src/main/res/drawable-mdpi/com_auth0_lock_ic_social_thecity_sandbox.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_evernote.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_evernote_sandbox.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_salesforce.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_salesforce_community.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_salesforce_sandbox.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_thecity.png" />
<ignore path="src/main/res/drawable-xhdpi/com_auth0_lock_ic_social_thecity_sandbox.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_evernote.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_evernote_sandbox.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_salesforce.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_salesforce_community.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_salesforce_sandbox.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_thecity.png" />
<ignore path="src/main/res/drawable-xxhdpi/com_auth0_lock_ic_social_thecity_sandbox.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_evernote.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_evernote_sandbox.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_salesforce.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_salesforce_community.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_salesforce_sandbox.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_thecity.png" />
<ignore path="src/main/res/drawable-xxxhdpi/com_auth0_lock_ic_social_thecity_sandbox.png" />
</issue>
</lint>
================================================
FILE: lib/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/nikolaseu/android-sdk-macosx/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: lib/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.auth0.android.lock">
<uses-permission android:name="android.permission.INTERNET" />
<application>
<!--Auth0 WebAuthProvider-->
<activity
android:name="com.auth0.android.provider.RedirectActivity"
android:exported="true"
tools:node="replace">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="${auth0Domain}"
android:pathPrefix="/android/${applicationId}/callback"
android:scheme="${auth0Scheme}" />
</intent-filter>
</activity>
<!--Auth0 WebAuthProvider End-->
<!--Auth0 Lock-->
<activity
android:name="com.auth0.android.lock.LockActivity"
android:exported="false"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Lock.Theme"/>
<!--Auth0 Lock End-->
<!--Auth0 PasswordlessLock-->
<activity
android:name="com.auth0.android.lock.PasswordlessLockActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Lock.Theme">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="${auth0Domain}"
android:pathPrefix="/android/${applicationId}/email"
android:scheme="https" />
<data
android:host="${auth0Domain}"
android:pathPrefix="/android/${applicationId}/sms"
android:scheme="https" />
</intent-filter>
</activity>
<!--Auth0 PasswordlessLock End-->
<!--Auth0 Lock Passwordless SMS Country Code Selection-->
<activity
android:name="com.auth0.android.lock.CountryCodeActivity"
android:exported="false"
android:theme="@style/Lock.Theme.ActionBar" />
<!--Auth0 Lock Passwordless SMS Country Code Selection-->
</application>
</manifest>
================================================
FILE: lib/src/main/assets/com_auth0_lock_passwordless_countries.json
================================================
{"BY":"+375","SG":"+65","TJ":"+992","BB":"+1 246","ER":"+291","IM":"+44","ID":"+62","LS":"+266","PW":"+680","MF":"+590","MM":"+95","MZ":"+258","BA":"+387","BR":"+55","CM":"+237","TL":"+670","AT":"+43","MG":"+261","MH":"+692","AR":"+54","NP":"+977","KI":"+686","NO":"+47","MO":"+853","SB":"+677","SC":"+248","KY":"+ 345","UZ":"+998","SR":"+597","KP":"+850","AI":"+1 264","AG":"+1268","MU":"+230","MN":"+976","LY":"+218","IT":"+39","SL":"+232","TM":"+993","GF":"+594","GG":"+44","SN":"+221","LA":"+856","HN":"+504","AD":"+376","UG":"+256","SK":"+421","UA":"+380","BM":"+1 441","SI":"+386","CH":"+41","AX":"+358","DO":"+1 849","GW":"+245","RS":"+381","TC":"+1 649","VU":"+678","LV":"+371","IE":"+353","CG":"+242","DJ":"+253","GY":"+595","PH":"+63","GM":"+220","NU":"+683","ES":"+34","MP":"+1 670","BJ":"+229","CA":"+1","CO":"+57","GR":"+30","SD":"+249","PM":"+508","CF":"+236","HR":"+385","MA":"+212","DM":"+1 767","NF":"+672","MK":"+389","PT":"+351","TR":"+90","SV":"+503","LI":"+423","GT":"+502","TT":"+1 868","BN":"+673","ST":"+239","KZ":"+7 7","PE":"+51","KE":"+254","BS":"+1 242","AF":"+93","TD":"+235","AW":"+297","LU":"+352","TZ":"+255","PS":"+970","ZA":"+27","GD":"+1 473","NI":"+505","BZ":"+501","GL":"+299","HT":"+509","CC":"+61","VI":"+1 340","TG":"+228","GA":"+241","ZM":"+260","TK":"+690","KR":"+82","ML":"+223","RE":"+262","NR":"+674","GH":"+233","IS":"+354","CU":"+53","AS":"+1 684","TN":"+216","IN":"+91","PA":"+507","IQ":"+964","KW":"+965","MY":"+60","NL":"+31","EG":"+20","PG":"+675","HK":"+852","SJ":"+47","VE":"+58","OM":"+968","YT":"+262","BL":"+590","DZ":"+213","BE":"+32","TW":"+886","PF":"+689","GI":"+350","ME":"+382","CZ":"+420","BT":"+975","MQ":"+596","SZ":"+268","VA":"+379","RO":"+40","MW":"+265","JE":"+44","AZ":"+994","DE":"+49","MD":"+373","AO":"+244","JM":"+1 876","CX":"+61","JO":"+962","MS":"+1664","KG":"+996","SM":"+378","LK":"+94","IR":"+98","SO":"+252","FI":"+358","TO":"+676","SA":"+966","MR":"+222","LB":"+961","MV":"+960","NG":"+234","AM":"+374","AU":"+61","DK":"+45","VG":"+1 284","NC":"+687","GU":"+1 671","BI":"+257","MX":"+52","JP":"+81","UY":"+598","CY":"+357","LR":"+231","US":"+1","KM":"+269","VC":"+1 784","CN":"+86","KH":"+855","PN":"+872","LT":"+370","TH":"+66","TV":"+688","YE":"+967","BO":"+591","BD":"+880","NZ":"+64","ET":"+251","BG":"+359","CV":"+238","IO":"+246","NE":"+227","EE":"+372","GE":"+995","LC":"+1 758","AN":"+599","GB":"+44","BH":"+973","GN":"+224","GP":"+590","MT":"+356","AL":"+355","WS":"+685","CI":"+225","VN":"+84","SY":"+963","CR":"+506","IL":"+972","RW":"+250","FJ":"+679","RU":"+7","MC":"+377","HU":"+36","NA":"+264","ZW":"+263","PY":"+595","CL":"+56","BW":"+267","PL":"+48","FR":"+33","PK":"+92","PR":"+1 939","SE":"+46","FK":"+500","KN":"+1 869","AE":"+971","QA":"+974","BF":"+226","WF":"+681","CK":"+682","CD":"+243","SH":"+290","EC":"+593","GQ":"+240","GS":"+500","FM":"+691","FO":"+298"}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/Auth0Parcelable.java
================================================
/*
* Auth0Parcelable.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import com.auth0.android.Auth0;
import com.auth0.android.util.Auth0UserAgent;
/**
* This class wraps a {@link Auth0} to make it Parcelable
*/
public class Auth0Parcelable implements Parcelable {
private static final double WITHOUT_DATA = 0x00;
private static final double WITH_DATA = 0x01;
private final Auth0 auth0;
public Auth0Parcelable(@NonNull Auth0 auth0) {
this.auth0 = auth0;
}
@NonNull
public Auth0 getAuth0() {
return auth0;
}
// PARCELABLE
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(auth0.getClientId());
dest.writeString(auth0.getDomainUrl());
dest.writeString(auth0.getConfigurationUrl());
//FIXME: Find a way to pass the NetworkingClient implementation
dest.writeString(auth0.getAuth0UserAgent().getName());
dest.writeString(auth0.getAuth0UserAgent().getVersion());
dest.writeString(auth0.getAuth0UserAgent().getLibraryVersion());
}
public static final Parcelable.Creator<Auth0Parcelable> CREATOR
= new Parcelable.Creator<Auth0Parcelable>() {
public Auth0Parcelable createFromParcel(Parcel in) {
return new Auth0Parcelable(in);
}
public Auth0Parcelable[] newArray(int size) {
return new Auth0Parcelable[size];
}
};
private Auth0Parcelable(@NonNull Parcel in) {
String clientId = in.readString();
String domain = in.readString();
String configurationDomain = in.readString();
String telemetryName = in.readString();
String telemetryVersion = in.readString();
String telemetryLibraryVersion = in.readString();
auth0 = new Auth0(clientId, domain, configurationDomain);
Auth0UserAgent userAgent = new Auth0UserAgent(telemetryName, telemetryVersion, telemetryLibraryVersion);
auth0.setAuth0UserAgent(userAgent);
}
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/AuthButtonSize.java
================================================
/*
* SocialButtonStyle.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static com.auth0.android.lock.AuthButtonSize.BIG;
import static com.auth0.android.lock.AuthButtonSize.SMALL;
import static com.auth0.android.lock.AuthButtonSize.UNSPECIFIED;
@IntDef({UNSPECIFIED, BIG, SMALL})
@Retention(RetentionPolicy.SOURCE)
public @interface AuthButtonSize {
int UNSPECIFIED = 0;
int BIG = 1;
int SMALL = 2;
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/AuthenticationCallback.java
================================================
/*
* LockAuthenticationCallback.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
import android.content.Intent;
import androidx.annotation.NonNull;
import com.auth0.android.authentication.AuthenticationException;
import com.auth0.android.result.Credentials;
import java.util.Date;
/**
* Simple implementation of the Callback used by Lock to notify the user of execution results.
* It can handle and notify of Authentication and Canceled events.
*/
public abstract class AuthenticationCallback implements LockCallback {
/**
* Called when the authentication flow finished successfully.
*
* @param credentials with the tokens.
*/
public abstract void onAuthentication(@NonNull Credentials credentials);
@Override
public void onEvent(@LockEvent int event, @NonNull Intent data) {
if (data.hasExtra(Constants.EXCEPTION_EXTRA)) {
onError((AuthenticationException) data.getSerializableExtra(Constants.EXCEPTION_EXTRA));
return;
}
if (event == LockEvent.AUTHENTICATION) {
Credentials credentials = extractCredentials(data);
onAuthentication(credentials);
} else if (event == LockEvent.CANCELED) {
onError(new AuthenticationException("a0.authentication_canceled", "The user pressed back"));
}
}
/**
* Extracts the Authentication data from the intent data.
*
* @param data the intent received at the end of the login process.
*/
private Credentials extractCredentials(Intent data) {
String idToken = data.getStringExtra(Constants.ID_TOKEN_EXTRA);
String accessToken = data.getStringExtra(Constants.ACCESS_TOKEN_EXTRA);
String tokenType = data.getStringExtra(Constants.TOKEN_TYPE_EXTRA);
String refreshToken = data.getStringExtra(Constants.REFRESH_TOKEN_EXTRA);
Date expiresAt = (Date) data.getSerializableExtra(Constants.EXPIRES_AT_EXTRA);
String scope = data.getStringExtra(Constants.SCOPE_EXTRA);
return new Credentials(idToken, accessToken, tokenType, refreshToken, expiresAt, scope);
}
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/Constants.java
================================================
/*
* Constants.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
abstract class Constants {
static final String LIBRARY_NAME = "Lock.Android";
static final String OPTIONS_EXTRA = "com.auth0.android.lock.key.Options";
static final String CONNECTION_SCOPE_KEY = "connection_scope";
static final String AUTHENTICATION_ACTION = "com.auth0.android.lock.action.Authentication";
static final String SIGN_UP_ACTION = "com.auth0.android.lock.action.SignUp";
static final String CANCELED_ACTION = "com.auth0.android.lock.action.Canceled";
static final String INVALID_CONFIGURATION_ACTION = "com.auth0.android.lock.action.InvalidConfiguration";
static final String EXCEPTION_EXTRA = "com.auth0.android.lock.extra.Exception";
static final String ERROR_EXTRA = "com.auth0.android.lock.extra.Error";
static final String ID_TOKEN_EXTRA = "com.auth0.android.lock.extra.IdToken";
static final String ACCESS_TOKEN_EXTRA = "com.auth0.android.lock.extra.AccessToken";
static final String TOKEN_TYPE_EXTRA = "com.auth0.android.lock.extra.TokenType";
static final String REFRESH_TOKEN_EXTRA = "com.auth0.android.lock.extra.RefreshToken";
static final String EXPIRES_AT_EXTRA = "com.auth0.android.lock.extra.ExpiresAt";
static final String SCOPE_EXTRA = "com.auth0.android.lock.extra.Scope";
static final String EMAIL_EXTRA = "com.auth0.android.lock.extra.Email";
static final String USERNAME_EXTRA = "com.auth0.android.lock.extra.Username";
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/CountryCodeActivity.java
================================================
/*
* CountryCodeActivity.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
/*
* CountryCodeActivity.java
*
* Copyright (c) 2015 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.ListView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.auth0.android.lock.adapters.Country;
import com.auth0.android.lock.adapters.CountryAdapter;
import com.auth0.android.lock.utils.LoadCountriesTask;
import java.util.ArrayList;
import java.util.List;
public class CountryCodeActivity extends AppCompatActivity {
public static final String COUNTRY_CODE_EXTRA = "COUNTRY_CODE";
public static final String COUNTRY_DIAL_CODE_EXTRA = "COUNTRY_DIAL_CODE";
private static final String TAG = CountryCodeActivity.class.getName();
private static LoadCountriesTask task;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.com_auth0_lock_passwordless_activity_country_code);
final ActionBar bar = getSupportActionBar();
if (bar != null) {
//If actionBar is present, remove it as the custom search view is already in the layout
bar.hide();
}
final EditText searchText = findViewById(R.id.com_auth0_lock_passwordless_sms_search_country);
final ListView listView = findViewById(R.id.com_auth0_lock_passwordless_sms_country_code_list);
List<Country> countryList = new ArrayList<>();
CountryAdapter countryAdapter = new CountryAdapter(this, countryList);
listView.setAdapter(countryAdapter);
searchText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.v(TAG, String.format("Filtering with string (%s)", s));
countryAdapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
listView.setOnItemClickListener((parent, view, position, id) -> {
Country country = countryAdapter.getItem(position);
Intent data = new Intent();
data.putExtra(COUNTRY_CODE_EXTRA, country.getIsoCode());
data.putExtra(COUNTRY_DIAL_CODE_EXTRA, country.getDialCode());
setResult(RESULT_OK, data);
finish();
});
task = new LoadCountriesTask() {
@Override
protected void onPostExecute(List<Country> result) {
task = null;
countryList.addAll(result);
countryAdapter.notifyDataSetChanged();
}
};
task.execute(this);
}
@Override
public void onStop() {
super.onStop();
if (task != null) {
Log.v(TAG, "Task was cancelled");
task.cancel(true);
}
}
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/InitialScreen.java
================================================
/*
* InitialScreen.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static com.auth0.android.lock.InitialScreen.FORGOT_PASSWORD;
import static com.auth0.android.lock.InitialScreen.LOG_IN;
import static com.auth0.android.lock.InitialScreen.SIGN_UP;
@IntDef({LOG_IN, SIGN_UP, FORGOT_PASSWORD})
@Retention(RetentionPolicy.SOURCE)
public @interface InitialScreen {
int LOG_IN = 0;
int SIGN_UP = 1;
int FORGOT_PASSWORD = 2;
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/Lock.java
================================================
/*
* Lock.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.auth0.android.Auth0;
import com.auth0.android.authentication.AuthenticationException;
import com.auth0.android.lock.LockCallback.LockEvent;
import com.auth0.android.lock.internal.configuration.Options;
import com.auth0.android.lock.internal.configuration.Theme;
import com.auth0.android.lock.provider.AuthResolver;
import com.auth0.android.lock.utils.SignUpField;
import com.auth0.android.provider.AuthHandler;
import com.auth0.android.provider.CustomTabsOptions;
import com.auth0.android.util.Auth0UserAgent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Lock {
private static final String TAG = Lock.class.getSimpleName();
private final LockCallback callback;
private final Options options;
/**
* Listens to LockActivity broadcasts and fires the correct action on the LockCallback.
*/
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent data) {
processEvent(data);
}
};
private Lock(@NonNull Options options, @NonNull LockCallback callback) {
this.options = options;
this.callback = callback;
}
/**
* Lock.Options holds the configuration used in the Auth0 Authentication API.
*
* @return the Lock.Options for this Lock instance.
*/
@NonNull
public Options getOptions() {
return options;
}
/**
* Creates a new Lock.Builder instance with the given account and callback.
*
* @param account details to use against the Auth0 Authentication API.
* @param callback that will receive the authentication results.
* @return a new Lock.Builder instance.
*/
@NonNull
public static Builder newBuilder(@Nullable Auth0 account, @NonNull LockCallback callback) {
return new Lock.Builder(account, callback);
}
/**
* Creates a new Lock.Builder instance with the given callback. The account information
* will be retrieved from the String resources file (strings.xml) using
* the keys 'com_auth0_client_id' and 'com_auth0_domain'.
*
* @param callback that will receive the authentication results.
* @return a new Lock.Builder instance.
*/
@NonNull
public static Builder newBuilder(@NonNull LockCallback callback) {
return newBuilder(null, callback);
}
/**
* Builds a new intent to launch LockActivity with the previously configured options
*
* @param context a valid Context
* @return the intent to which the user has to call startActivity or startActivityForResult
*/
@NonNull
public Intent newIntent(@NonNull Context context) {
Intent lockIntent = new Intent(context, LockActivity.class);
lockIntent.putExtra(Constants.OPTIONS_EXTRA, options);
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return lockIntent;
}
/**
* This method ensures proper Lock's lifecycle handling. Must be called from the class
* holding the Lock instance whenever you're done using it. i.e. in the Activity's onDestroy method.
*
* @param context a valid Context
*/
public void onDestroy(@NonNull Context context) {
LocalBroadcastManager.getInstance(context).unregisterReceiver(this.receiver);
}
private void initialize(@NonNull Context context) {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.unregisterReceiver(this.receiver);
IntentFilter filter = new IntentFilter();
filter.addAction(Constants.AUTHENTICATION_ACTION);
filter.addAction(Constants.SIGN_UP_ACTION);
filter.addAction(Constants.CANCELED_ACTION);
filter.addAction(Constants.INVALID_CONFIGURATION_ACTION);
lbm.registerReceiver(this.receiver, filter);
}
private void processEvent(@NonNull Intent data) {
if (data.hasExtra(Constants.EXCEPTION_EXTRA)) {
callback.onError((AuthenticationException) data.getSerializableExtra(Constants.EXCEPTION_EXTRA));
return;
}
String action = data.getAction();
switch (action) {
case Constants.AUTHENTICATION_ACTION:
Log.v(TAG, "AUTHENTICATION action received in our BroadcastReceiver");
callback.onEvent(LockEvent.AUTHENTICATION, data);
break;
case Constants.SIGN_UP_ACTION:
Log.v(TAG, "SIGN_UP action received in our BroadcastReceiver");
callback.onEvent(LockEvent.SIGN_UP, data);
break;
case Constants.CANCELED_ACTION:
Log.v(TAG, "CANCELED action received in our BroadcastReceiver");
callback.onEvent(LockEvent.CANCELED, new Intent());
break;
case Constants.INVALID_CONFIGURATION_ACTION:
Log.v(TAG, "INVALID_CONFIGURATION_ACTION action received in our BroadcastReceiver");
callback.onError(new AuthenticationException("a0.invalid_configuration", data.getStringExtra(Constants.ERROR_EXTRA)));
break;
}
}
/**
* Helper Builder to generate the Lock.Options to use on the Auth0 Authentication.
*/
@SuppressWarnings({"UnusedReturnValue"})
public static class Builder {
private static final String TAG = Builder.class.getSimpleName();
private final Options options;
private final LockCallback callback;
/**
* Creates a new Lock.Builder instance with the given account and callback.
*
* @param account details to use against the Auth0 Authentication API.
* @param callback that will receive the authentication results.
*/
public Builder(@Nullable Auth0 account, @NonNull LockCallback callback) {
this.callback = callback;
options = new Options();
options.setAccount(account);
}
/**
* Finishes the construction of the Lock.Options and generates a new Lock instance
* with those Lock.Options.
*
* @param context a valid Context
* @return a new Lock instance configured as in the Builder.
*/
@NonNull
public Lock build(@NonNull Context context) {
if (options.getAccount() == null) {
Log.w(TAG, "com.auth0.android.Auth0 account details not defined. Trying to create it from the String resources.");
try {
options.setAccount(new Auth0(context));
} catch (IllegalArgumentException e) {
throw new IllegalStateException("Missing Auth0 account information.", e);
}
}
if (callback == null) {
Log.e(TAG, "You need to specify the callback object to receive the Authentication result.");
throw new IllegalStateException("Missing callback.");
}
if (!options.allowForgotPassword() && !options.allowLogIn() && !options.allowSignUp()) {
throw new IllegalStateException("You disabled all the Lock screens (LogIn/SignUp/ForgotPassword). Please enable at least one.");
}
if (options.initialScreen() == InitialScreen.LOG_IN && !options.allowLogIn()) {
throw new IllegalStateException("You chose LOG_IN as the initial screen but you have also disabled that screen.");
}
if (options.initialScreen() == InitialScreen.SIGN_UP && !options.allowSignUp()) {
throw new IllegalStateException("You chose SIGN_UP as the initial screen but you have also disabled that screen.");
}
if (options.initialScreen() == InitialScreen.FORGOT_PASSWORD && !options.allowForgotPassword()) {
throw new IllegalStateException("You chose FORGOT_PASSWORD as the initial screen but you have also disabled that screen.");
}
Log.v(TAG, "Lock instance created");
Auth0UserAgent lockUserAgent = new Auth0UserAgent(Constants.LIBRARY_NAME, BuildConfig.VERSION_NAME, com.auth0.android.auth0.BuildConfig.VERSION_NAME);
options.getAccount().setAuth0UserAgent(lockUserAgent);
final Lock lock = new Lock(options, callback);
lock.initialize(context);
return lock;
}
/**
* Whether the LockActivity can be closed when pressing the Back key or not.
*
* @param closable or not. By default, the LockActivity is not closable.
* @return the current builder instance
*/
@NonNull
public Builder closable(boolean closable) {
options.setClosable(closable);
return this;
}
/**
* Customize Lock's appearance.
*
* @param theme to use.
* @return the current Builder instance
*/
private Builder withTheme(@NonNull Theme theme) {
options.withTheme(theme);
return this;
}
/**
* Additional Authentication parameters can be set to use with different Identity Providers.
*
* @param authenticationParameters a non-null Map containing the parameters as Key-Values
* @return the current builder instance
*/
@NonNull
public Builder withAuthenticationParameters(@NonNull Map<String, String> authenticationParameters) {
options.setAuthenticationParameters(new HashMap<>(authenticationParameters));
return this;
}
/**
* Locally filters the Auth0 Connections that are shown in the login widgets.
*
* @param connections a non-null List containing the allowed Auth0 Connections.
* @return the current builder instance
*/
@NonNull
public Builder allowedConnections(@NonNull List<String> connections) {
options.setConnections(connections);
return this;
}
/**
* Username style to use in the Login and Sign Up text fields. Defaults to the Dashboard
* configuration of "requires_username".
*
* @param style a valid UsernameStyle.
* @return the current builder instance
*/
@NonNull
public Builder withUsernameStyle(@UsernameStyle int style) {
options.setUsernameStyle(style);
return this;
}
/**
* Authentication Style to use with the given strategy or connection name. It will override any lock defaults.
*
* @param connectionName to use this style with
* @param style a valid Style with the Auth0.BackgroundColor, Auth0.Logo and Auth0.Name values defined.
* @return the current builder instance
*/
@NonNull
public Builder withAuthStyle(@NonNull String connectionName, @StyleRes int style) {
options.withAuthStyle(connectionName, style);
return this;
}
/**
* Decide which screen is going to show first when launching the Lock Activity.
*
* @param screen a valid InitialScreen.
* @return the current builder instance
*/
@NonNull
public Builder initialScreen(@InitialScreen int screen) {
options.setInitialScreen(screen);
return this;
}
/**
* Whether to show the Log In screen or not. It can be enabled/disabled locally, regardless the Dashboard configuration.
*
* @param allow whether to allow or not the login screen.
* @return the current builder instance
*/
@NonNull
public Builder allowLogIn(boolean allow) {
options.setAllowLogIn(allow);
return this;
}
/**
* Whether to show the Sign Up screen or not. It can be enabled/disabled locally, regardless the Dashboard configuration.
*
* @param allow whether to allow or not the sign up screen.
* @return the current builder instance
*/
@NonNull
public Builder allowSignUp(boolean allow) {
options.setAllowSignUp(allow);
return this;
}
/**
* Whether to show the Forgot Password screen or not. It can be enabled/disabled locally, regardless the Dashboard configuration.
*
* @param allow whether to allow or not the forgot password screen.
* @return the current builder instance
*/
@NonNull
public Builder allowForgotPassword(boolean allow) {
options.setAllowForgotPassword(allow);
return this;
}
/**
* Whether to show the password visibility toggle or not. Defaults to true
*
* @param allow whether to allow the user to toggle between showing or hiding the password or not.
* @return the current builder instance
*/
@NonNull
public Builder allowShowPassword(boolean allow) {
options.setAllowShowPassword(allow);
return this;
}
/**
* Whether if the submit button will display a label or just an icon. By default it will use the label.
* If {@link #hideMainScreenTitle(boolean)} is set to true this setting is ignored and the submit button will use label.
*
* @param useLabeledSubmitButton or icon.
* @return the current builder instance
*/
@NonNull
public Builder useLabeledSubmitButton(boolean useLabeledSubmitButton) {
options.setUseLabeledSubmitButton(useLabeledSubmitButton);
return this;
}
/**
* Control the visibility of the header's Title on the main screen, this is for Log In and Sign Up. By default it will show the header's Title on the main screen.
*
* @param hideMainScreenTitle if it should show or hide the header's Title on the main screen.
* @return the current builder instance
*/
@NonNull
public Builder hideMainScreenTitle(boolean hideMainScreenTitle) {
options.setHideMainScreenTitle(hideMainScreenTitle);
return this;
}
/**
* Change the connection name to use on the Database authentication flow.
* Defaults to the first Database connection found.
*
* @param connectionName Must exist in the Application configuration on the Dashboard.
* @return the current builder instance
*/
@NonNull
public Builder setDefaultDatabaseConnection(@NonNull String connectionName) {
options.useDatabaseConnection(connectionName);
return this;
}
/**
* Enterprise connections based on 'ad', 'adfs' and 'waad' strategies can log their
* users in from within the Lock widget using their email and password. This is known as
* Active Authentication.
* By whitelisting the connections here, the Universal Login Page is used instead and the
* login is delegated to the browser application.
* Enterprise connections allowed for this client will use Active Authentication by default.
*
* @param connections the list of 'ad', 'adfs', or 'waad' enterprise connections that will use Web Authentication instead.
* @return the current builder instance
*/
@NonNull
public Builder enableEnterpriseWebAuthenticationFor(@NonNull List<String> connections) {
options.setEnterpriseConnectionsUsingWebForm(connections);
return this;
}
/**
* Whether to login after a successful sign up callback. Defaults to true.
*
* @param login after sign up or not
* @return the current builder instance
*/
@NonNull
public Builder loginAfterSignUp(boolean login) {
options.setLoginAfterSignUp(login);
return this;
}
/**
* Uses the given AuthHandlers to query for AuthProviders on a new authentication request.
*
* @param handlers that Lock will query for AuthProviders.
* @return the current builder instance
*/
@NonNull
public Builder withAuthHandlers(@NonNull AuthHandler... handlers) {
AuthResolver.setAuthHandlers(Arrays.asList(handlers));
return this;
}
/**
* Displays the specified custom fields during sign up. If the amount of visible fields
* is greater than the value set in {@link #withVisibleSignUpFieldsThreshold(int)}, all
* of them will be shown on a separate screen after the user clicks the sign up button.
* Each field must have a unique key. Fields with repeated keys will be removed.
*
* @param customFields the custom fields to display in the sign up flow.
* @return the current builder instance
*/
@NonNull
public Builder withSignUpFields(@NonNull List<? extends SignUpField> customFields) {
final List<SignUpField> withoutDuplicates = removeDuplicatedKeys(customFields);
options.setSignUpFields(withoutDuplicates);
return this;
}
/**
* Defines the threshold at which all of the visible sign-up fields would be shown on
* a secondary screen instead of the initial one after clicking the sign-up button.
* Has a default value of 2 visible sign-up fields.
*
* @param threshold the threshold at which all the visible sign-up fields would be
* shown on a separate screen.
* @return the current builder instance
*/
@NonNull
public Builder withVisibleSignUpFieldsThreshold(int threshold) {
options.setVisibleSignUpFieldsThreshold(threshold);
return this;
}
/**
* Sets the Scope to request when performing the Authentication.
*
* @param scope to use in the Authentication.
* @return the current builder instance
*/
@NonNull
public Builder withScope(@NonNull String scope) {
options.withScope(scope);
return this;
}
/**
* Sets the Audience or API Identifier to request access to when performing the Authentication.
*
* @param audience to use in the Authentication.
* @return the current builder instance
*/
@NonNull
public Builder withAudience(@NonNull String audience) {
options.withAudience(audience);
return this;
}
/**
* Specify style and other additional configuration for when the Web Auth flow is used with Custom Tabs.
*
* @param customTabsOptions to use in the Web Auth flow.
* @return the current builder instance
*/
@NonNull
public Builder withCustomTabsOptions(@NonNull CustomTabsOptions customTabsOptions) {
options.withCustomTabsOptions(customTabsOptions);
return this;
}
/**
* Specify a custom Scheme for the redirect URL used when executing a Web Authentication flow
* via the Universal Login page.
* Default redirect url scheme is 'https'.
*
* @param scheme to use in the Web Auth redirect uri.
* @return the current builder instance
*/
@NonNull
public Builder withScheme(@NonNull String scheme) {
options.withScheme(scheme);
return this;
}
/**
* Choose a custom Privacy Policy URL to access when the user clicks the link on the Sign Up form.
* The default value is 'https://auth0.com/privacy'
*
* @param url a valid url to use.
* @return the current builder instance
*/
@NonNull
public Builder setPrivacyURL(@NonNull String url) {
options.setPrivacyURL(url);
return this;
}
/**
* Choose a custom Terms of Service URL to access when the user clicks the link on the Sign Up form.
* The default value is 'https://auth0.com/terms'
*
* @param url a valid url to use.
* @return the current builder instance
*/
@NonNull
public Builder setTermsURL(@NonNull String url) {
options.setTermsURL(url);
return this;
}
/**
* Sets the url of your support page for your application that will be used when an error occurs and Lock is unable to handle it. In this case it will show an error screen and if there is a support url will also show a button to open that page in the browser.
*
* @param url to your support page or where your customers can request assistance. By default no page is set.
* @return the current builder instance
*/
@NonNull
public Builder setSupportURL(@NonNull String url) {
options.setSupportURL(url);
return this;
}
/**
* Prompts the user to accept the Privacy Policy and Terms of Service before signing up.
* The default value is false.
*
* @param mustAcceptTerms whether the user needs to accept the terms before sign up or not.
* @return the current builder instance
*/
@NonNull
public Builder setMustAcceptTerms(boolean mustAcceptTerms) {
options.setMustAcceptTerms(mustAcceptTerms);
return this;
}
/**
* Displays the Privacy Policy and Terms of Service footer on the Sign Up screen.
* Note: The footer will always be shown if the mustAcceptTerms flag has been enabled.
* The default value is true.
*
* @param showTerms whether the Terms of Service are displayed.
* @return the current builder instance
*/
@NonNull
public Builder setShowTerms(boolean showTerms) {
options.setShowTerms(showTerms);
return this;
}
/**
* Sets the Connection Scope to request when performing an Authentication with the given Connection.
*
* @param connectionName to which specify the scopes.
* @param scope recognized by this specific authentication provider.
* @return the current builder instance
*/
@NonNull
public Builder withConnectionScope(@NonNull String connectionName, @NonNull String... scope) {
StringBuilder sb = new StringBuilder();
for (String s : scope) {
sb.append(s.trim()).append(",");
}
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1);
options.withConnectionScope(connectionName, sb.toString());
}
return this;
}
private List<SignUpField> removeDuplicatedKeys(List<? extends SignUpField> customFields) {
int originalSize = customFields.size();
final List<SignUpField> withoutDuplicates = new ArrayList<>();
Set<String> keySet = new HashSet<>();
for (SignUpField field : customFields) {
if (!keySet.contains(field.getKey())) {
withoutDuplicates.add(field);
}
keySet.add(field.getKey());
}
if (originalSize != withoutDuplicates.size()) {
Log.w(TAG, "Some of the Custom Fields had a duplicate key and have been removed.");
}
return withoutDuplicates;
}
}
}
================================================
FILE: lib/src/main/java/com/auth0/android/lock/LockActivity.java
================================================
/*
* LockActivity.java
*
* Copyright (c) 2016 Auth0 (http://auth0.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.auth0.android.lock;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.auth0.android.Auth0;
import com.auth0.android.Auth0Exception;
import com.auth0.android.authentication.AuthenticationAPIClient;
import com.auth0.android.authentication.AuthenticationException;
import com.auth0.android.authentication.ParameterBuilder;
import com.auth0.android.callback.AuthenticationCallback;
import com.auth0.android.callback.Callback;
import com.auth0.android.lock.errors.AuthenticationError;
import com.auth0.android.lock.errors.LoginErrorMessageBuilder;
import com.auth0.android.lock.errors.SignUpErrorMessageBuilder;
import com.auth0.android.lock.events.DatabaseChangePasswordEvent;
import com.auth0.android.lock.events.DatabaseLoginEvent;
import com.auth0.android.lock.events.DatabaseSignUpEvent;
import com.auth0.android.lock.events.FetchApplicationEvent;
import com.auth0.android.lock.events.LockMessageEvent;
import com.auth0.android.lock.events.OAuthLoginEvent;
import com.auth0.android.lock.internal.configuration.ApplicationFetcher;
import com.auth0.android.lock.internal.configuration.Configuration;
import com.auth0.android.lock.internal.configuration.Connection;
import com.auth0.android.lock.internal.configuration.Options;
import com.auth0.android.lock.provider.AuthResolver;
import com.auth0.android.lock.views.ClassicLockView;
import com.auth0.android.provider.AuthCallback;
import com.auth0.android.provider.AuthProvider;
import com.auth0.android.provider.WebAuthProvider;
import com.auth0.android.request.AuthenticationRequest;
import com.auth0.android.request.SignUpRequest;
import com.auth0.android.result.Challenge;
import com.auth0.android.result.Credentials;
import com.auth0.android.result.DatabaseUser;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressLint("GoogleAppIndexingApiWar
gitextract_04ecnqqv/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── Bug Report.yml │ │ ├── Feature Request.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ ├── get-prerelease/ │ │ │ └── action.yml │ │ ├── get-release-notes/ │ │ │ └── action.yml │ │ ├── get-version/ │ │ │ └── action.yml │ │ ├── maven-publish/ │ │ │ └── action.yml │ │ ├── release-create/ │ │ │ └── action.yml │ │ ├── setup/ │ │ │ └── action.yml │ │ └── tag-exists/ │ │ └── action.yml │ ├── dependabot.yml │ ├── stale.yml │ └── workflows/ │ ├── codeql.yml │ ├── java-release.yml │ ├── release.yml │ ├── sca_scan.yml │ └── test.yml ├── .gitignore ├── .shiprc ├── .version ├── CHANGELOG.md ├── EXAMPLES.md ├── LICENSE.md ├── MIGRATION_GUIDE.md ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── release-test.jks │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── auth0/ │ │ └── android/ │ │ └── lock/ │ │ └── app/ │ │ └── DemoActivity.kt │ └── res/ │ ├── layout/ │ │ └── demo_activity.xml │ └── values/ │ ├── auth0.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── lib/ │ ├── .gitignore │ ├── build.gradle │ ├── lint.xml │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── assets/ │ │ │ └── com_auth0_lock_passwordless_countries.json │ │ ├── java/ │ │ │ └── com/ │ │ │ └── auth0/ │ │ │ └── android/ │ │ │ └── lock/ │ │ │ ├── Auth0Parcelable.java │ │ │ ├── AuthButtonSize.java │ │ │ ├── AuthenticationCallback.java │ │ │ ├── Constants.java │ │ │ ├── CountryCodeActivity.java │ │ │ ├── InitialScreen.java │ │ │ ├── Lock.java │ │ │ ├── LockActivity.java │ │ │ ├── LockCallback.java │ │ │ ├── PasswordlessIdentityHelper.java │ │ │ ├── PasswordlessLock.java │ │ │ ├── PasswordlessLockActivity.java │ │ │ ├── UsernameStyle.java │ │ │ ├── WebCallbackWrapper.java │ │ │ ├── WebProvider.java │ │ │ ├── adapters/ │ │ │ │ ├── Country.java │ │ │ │ └── CountryAdapter.java │ │ │ ├── errors/ │ │ │ │ ├── AuthenticationError.java │ │ │ │ ├── ErrorMessageBuilder.java │ │ │ │ ├── LoginErrorMessageBuilder.java │ │ │ │ └── SignUpErrorMessageBuilder.java │ │ │ ├── events/ │ │ │ │ ├── CountryCodeChangeEvent.java │ │ │ │ ├── DatabaseChangePasswordEvent.java │ │ │ │ ├── DatabaseEvent.java │ │ │ │ ├── DatabaseLoginEvent.java │ │ │ │ ├── DatabaseSignUpEvent.java │ │ │ │ ├── FetchApplicationEvent.java │ │ │ │ ├── LockMessageEvent.java │ │ │ │ ├── OAuthLoginEvent.java │ │ │ │ └── PasswordlessLoginEvent.java │ │ │ ├── internal/ │ │ │ │ └── configuration/ │ │ │ │ ├── ApplicationDeserializer.java │ │ │ │ ├── ApplicationFetcher.java │ │ │ │ ├── AuthMode.java │ │ │ │ ├── AuthType.java │ │ │ │ ├── BaseConnection.java │ │ │ │ ├── Configuration.java │ │ │ │ ├── Connection.java │ │ │ │ ├── DatabaseConnection.java │ │ │ │ ├── GsonDeserializer.java │ │ │ │ ├── OAuthConnection.java │ │ │ │ ├── Options.java │ │ │ │ ├── PasswordComplexity.java │ │ │ │ ├── PasswordStrength.java │ │ │ │ ├── PasswordlessConnection.java │ │ │ │ ├── PasswordlessMode.java │ │ │ │ └── Theme.java │ │ │ ├── provider/ │ │ │ │ └── AuthResolver.java │ │ │ ├── utils/ │ │ │ │ ├── CustomField.java │ │ │ │ ├── EnterpriseConnectionMatcher.java │ │ │ │ ├── HiddenField.java │ │ │ │ ├── LoadCountriesTask.java │ │ │ │ └── SignUpField.java │ │ │ └── views/ │ │ │ ├── ActionButton.java │ │ │ ├── AuthConfig.java │ │ │ ├── ChangePasswordFormView.java │ │ │ ├── CheckableOptionView.java │ │ │ ├── ClassicLockView.java │ │ │ ├── CountryCodeSelectorView.java │ │ │ ├── CustomFieldsFormView.java │ │ │ ├── FormLayout.java │ │ │ ├── FormView.java │ │ │ ├── HeaderView.java │ │ │ ├── ImageCheckbox.java │ │ │ ├── LinkTextView.java │ │ │ ├── LogInFormView.java │ │ │ ├── MFACodeFormView.java │ │ │ ├── ModeSelectionView.java │ │ │ ├── PasswordStrengthView.java │ │ │ ├── PasswordlessFormLayout.java │ │ │ ├── PasswordlessInputCodeFormView.java │ │ │ ├── PasswordlessLockView.java │ │ │ ├── PasswordlessRequestCodeFormView.java │ │ │ ├── SignUpFormView.java │ │ │ ├── SocialButton.java │ │ │ ├── SocialView.java │ │ │ ├── SocialViewAdapter.java │ │ │ ├── SpacesItemDecoration.java │ │ │ ├── ValidatedInputView.java │ │ │ ├── ValidatedPasswordInputView.java │ │ │ ├── ValidatedUsernameInputView.java │ │ │ ├── ViewUtils.java │ │ │ └── interfaces/ │ │ │ ├── IdentityListener.java │ │ │ ├── LockWidget.java │ │ │ ├── LockWidgetForm.java │ │ │ ├── LockWidgetOAuth.java │ │ │ └── LockWidgetPasswordless.java │ │ └── res/ │ │ ├── color/ │ │ │ └── com_auth0_lock_text.xml │ │ ├── drawable/ │ │ │ ├── com_auth0_lock_link_background.xml │ │ │ ├── com_auth0_lock_tab.xml │ │ │ └── com_auth0_lock_terms.xml │ │ ├── layout/ │ │ │ ├── com_auth0_lock_action_button.xml │ │ │ ├── com_auth0_lock_activity_lock.xml │ │ │ ├── com_auth0_lock_activity_lock_passwordless.xml │ │ │ ├── com_auth0_lock_btn_social_large.xml │ │ │ ├── com_auth0_lock_changepwd_form_view.xml │ │ │ ├── com_auth0_lock_checkable_option.xml │ │ │ ├── com_auth0_lock_custom_fields_form_view.xml │ │ │ ├── com_auth0_lock_error_layout.xml │ │ │ ├── com_auth0_lock_header.xml │ │ │ ├── com_auth0_lock_login_form_view.xml │ │ │ ├── com_auth0_lock_mfa_input_code_form_view.xml │ │ │ ├── com_auth0_lock_password_strength.xml │ │ │ ├── com_auth0_lock_passwordless_activity_country_code.xml │ │ │ ├── com_auth0_lock_passwordless_country_code_selector.xml │ │ │ ├── com_auth0_lock_passwordless_input_code_form_view.xml │ │ │ ├── com_auth0_lock_passwordless_item_country_code.xml │ │ │ ├── com_auth0_lock_passwordless_request_code_form_view.xml │ │ │ ├── com_auth0_lock_signup_form_view.xml │ │ │ ├── com_auth0_lock_sso_layout.xml │ │ │ ├── com_auth0_lock_tab.xml │ │ │ ├── com_auth0_lock_tab_layout.xml │ │ │ ├── com_auth0_lock_terms_layout.xml │ │ │ └── com_auth0_lock_validated_input_view.xml │ │ ├── values/ │ │ │ ├── attrs.xml │ │ │ ├── auth_styles.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ids.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── values-sw400dp/ │ │ └── dimens.xml │ └── test/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── auth0/ │ │ └── android/ │ │ └── lock/ │ │ ├── Auth0ParcelableTest.java │ │ ├── AuthenticationCallbackTest.java │ │ ├── ClassicBuilderTest.java │ │ ├── LockActivityTest.java │ │ ├── PasswordlessBuilderTest.java │ │ ├── PasswordlessIdentityHelperTest.java │ │ ├── PasswordlessLockActivityTest.java │ │ ├── WebProviderTest.java │ │ ├── errors/ │ │ │ ├── LoginErrorMessageBuilderTest.java │ │ │ └── SignUpErrorMessageBuilderTest.java │ │ ├── events/ │ │ │ ├── DatabaseEventTest.java │ │ │ ├── DatabaseLoginEventTest.java │ │ │ ├── DatabaseSignUpEventTest.java │ │ │ ├── ErrorMessageEventTest.java │ │ │ ├── OAuthLoginEventTest.java │ │ │ └── PasswordlessLoginEventTest.java │ │ ├── internal/ │ │ │ └── configuration/ │ │ │ ├── ApplicationFetcherTest.java │ │ │ ├── ApplicationGsonTest.java │ │ │ ├── ConfigurationTest.java │ │ │ ├── ConnectionGsonTest.java │ │ │ ├── ConnectionMatcher.java │ │ │ ├── ConnectionTest.java │ │ │ ├── DatabaseConnectionTest.java │ │ │ ├── EnterpriseConnectionMatcherTest.java │ │ │ ├── GsonBaseTest.java │ │ │ ├── OAuthConnectionTest.java │ │ │ ├── OptionsTest.java │ │ │ ├── PasswordlessConnectionTest.java │ │ │ └── ThemeTest.java │ │ ├── provider/ │ │ │ └── AuthResolverTest.java │ │ ├── utils/ │ │ │ ├── ApplicationAPI.java │ │ │ ├── Auth0AuthenticationCallbackMatcher.java │ │ │ ├── AuthenticationCallbackMatcher.java │ │ │ ├── CallbackMatcher.java │ │ │ ├── CustomFieldTest.java │ │ │ ├── HiddenFieldTest.java │ │ │ ├── MockAuthenticationCallback.java │ │ │ ├── MockCallback.java │ │ │ ├── MockLockCallback.java │ │ │ ├── SSLTestUtils.java │ │ │ └── TypeTokenMatcher.java │ │ └── views/ │ │ ├── AuthConfigTest.java │ │ ├── CustomFieldsFormViewTest.java │ │ └── PasswordStrengthViewTest.java │ └── resources/ │ ├── appinfo.json │ ├── application.json │ ├── db_connection.json │ ├── db_connection_with_complexity.json │ ├── empty_object.json │ ├── enterprise_connection.json │ ├── invalid.json │ ├── mockito-extensions/ │ │ └── org.mockito.plugins.MockMaker │ ├── social_connection.json │ └── strategy.json ├── opslevel.yml ├── proguard/ │ ├── proguard-gson.pro │ ├── proguard-lock-2.pro │ └── proguard-otto.pro └── settings.gradle
SYMBOL INDEX (1408 symbols across 123 files)
FILE: lib/src/main/java/com/auth0/android/lock/Auth0Parcelable.java
class Auth0Parcelable (line 39) | public class Auth0Parcelable implements Parcelable {
method Auth0Parcelable (line 45) | public Auth0Parcelable(@NonNull Auth0 auth0) {
method getAuth0 (line 49) | @NonNull
method describeContents (line 55) | @Override
method writeToParcel (line 60) | @Override
method createFromParcel (line 73) | public Auth0Parcelable createFromParcel(Parcel in) {
method newArray (line 77) | public Auth0Parcelable[] newArray(int size) {
method Auth0Parcelable (line 82) | private Auth0Parcelable(@NonNull Parcel in) {
FILE: lib/src/main/java/com/auth0/android/lock/AuthenticationCallback.java
class AuthenticationCallback (line 41) | public abstract class AuthenticationCallback implements LockCallback {
method onAuthentication (line 48) | public abstract void onAuthentication(@NonNull Credentials credentials);
method onEvent (line 50) | @Override
method extractCredentials (line 69) | private Credentials extractCredentials(Intent data) {
FILE: lib/src/main/java/com/auth0/android/lock/Constants.java
class Constants (line 27) | abstract class Constants {
FILE: lib/src/main/java/com/auth0/android/lock/CountryCodeActivity.java
class CountryCodeActivity (line 70) | public class CountryCodeActivity extends AppCompatActivity {
method onCreate (line 79) | @Override
method onStop (line 131) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/Lock.java
class Lock (line 57) | public class Lock {
method onReceive (line 68) | @Override
method Lock (line 74) | private Lock(@NonNull Options options, @NonNull LockCallback callback) {
method getOptions (line 84) | @NonNull
method newBuilder (line 96) | @NonNull
method newBuilder (line 109) | @NonNull
method newIntent (line 120) | @NonNull
method onDestroy (line 134) | public void onDestroy(@NonNull Context context) {
method initialize (line 138) | private void initialize(@NonNull Context context) {
method processEvent (line 149) | private void processEvent(@NonNull Intent data) {
class Builder (line 178) | @SuppressWarnings({"UnusedReturnValue"})
method Builder (line 190) | public Builder(@Nullable Auth0 account, @NonNull LockCallback callba...
method build (line 203) | @NonNull
method closable (line 246) | @NonNull
method withTheme (line 258) | private Builder withTheme(@NonNull Theme theme) {
method withAuthenticationParameters (line 269) | @NonNull
method allowedConnections (line 281) | @NonNull
method withUsernameStyle (line 294) | @NonNull
method withAuthStyle (line 307) | @NonNull
method initialScreen (line 319) | @NonNull
method allowLogIn (line 331) | @NonNull
method allowSignUp (line 343) | @NonNull
method allowForgotPassword (line 355) | @NonNull
method allowShowPassword (line 367) | @NonNull
method useLabeledSubmitButton (line 380) | @NonNull
method hideMainScreenTitle (line 392) | @NonNull
method setDefaultDatabaseConnection (line 405) | @NonNull
method enableEnterpriseWebAuthenticationFor (line 422) | @NonNull
method loginAfterSignUp (line 434) | @NonNull
method withAuthHandlers (line 446) | @NonNull
method withSignUpFields (line 461) | @NonNull
method withVisibleSignUpFieldsThreshold (line 477) | @NonNull
method withScope (line 489) | @NonNull
method withAudience (line 501) | @NonNull
method withCustomTabsOptions (line 513) | @NonNull
method withScheme (line 527) | @NonNull
method setPrivacyURL (line 540) | @NonNull
method setTermsURL (line 553) | @NonNull
method setSupportURL (line 565) | @NonNull
method setMustAcceptTerms (line 578) | @NonNull
method setShowTerms (line 592) | @NonNull
method withConnectionScope (line 605) | @NonNull
method removeDuplicatedKeys (line 618) | private List<SignUpField> removeDuplicatedKeys(List<? extends SignUp...
FILE: lib/src/main/java/com/auth0/android/lock/LockActivity.java
class LockActivity (line 89) | @SuppressLint("GoogleAppIndexingApiWarning")
method LockActivity (line 118) | public LockActivity() {
method LockActivity (line 121) | @VisibleForTesting
method onCreate (line 132) | @Override
method hasValidLaunchConfig (line 159) | private boolean hasValidLaunchConfig() {
method hasValidTheme (line 177) | private boolean hasValidTheme() {
method hasValidOptions (line 184) | private boolean hasValidOptions() {
method onBackPressed (line 200) | @Override
method deliverAuthenticationResult (line 212) | private void deliverAuthenticationResult(Credentials credentials) {
method deliverAuthenticationError (line 224) | private void deliverAuthenticationError(AuthenticationException except...
method deliverSignUpResult (line 232) | private void deliverSignUpResult(DatabaseUser result) {
method requestMFAChallenge (line 241) | private void requestMFAChallenge(String mfaToken) {
method showSuccessMessage (line 268) | private void showSuccessMessage(String message) {
method showErrorMessage (line 277) | private void showErrorMessage(String message) {
method run (line 287) | @Override
method onRequestPermissionsResult (line 293) | @Override
method onActivityResult (line 301) | @Override
method onNewIntent (line 320) | @Override
method onFetchApplicationRequest (line 333) | @Subscribe
method onLockMessage (line 342) | @Subscribe
method onOAuthAuthenticationRequest (line 347) | @Subscribe
method completeDatabaseAuthenticationOnBrowser (line 402) | private void completeDatabaseAuthenticationOnBrowser() {
method onDatabaseAuthenticationRequest (line 422) | @Subscribe
method onDatabaseAuthenticationRequest (line 456) | @Subscribe
method onDatabaseAuthenticationRequest (line 484) | @Subscribe
method onSuccess (line 500) | @Override
method onFailure (line 507) | @Override
method onFailure (line 516) | @Override
method onFailure (line 523) | @Override
method onSuccess (line 535) | @Override
method onSuccess (line 542) | @Override
method onFailure (line 549) | @Override
method onSuccess (line 579) | @Override
method onFailure (line 585) | @Override
method onSuccess (line 600) | @Override
method onFailure (line 611) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/LockCallback.java
type LockCallback (line 45) | public interface LockCallback {
method onEvent (line 65) | void onEvent(@LockEvent int event, @NonNull Intent data);
method onError (line 72) | void onError(@NonNull AuthenticationException error);
FILE: lib/src/main/java/com/auth0/android/lock/PasswordlessIdentityHelper.java
class PasswordlessIdentityHelper (line 17) | class PasswordlessIdentityHelper {
method PasswordlessIdentityHelper (line 28) | PasswordlessIdentityHelper(@NonNull Context context, @PasswordlessMode...
method saveIdentity (line 33) | public void saveIdentity(@NonNull String identity, @Nullable Country c...
method getLastCountry (line 42) | @Nullable
method getLastIdentity (line 54) | @NonNull
method hasLoggedInBefore (line 64) | public boolean hasLoggedInBefore() {
method hasSameConnection (line 70) | private boolean hasSameConnection(@PasswordlessMode int lastMode) {
FILE: lib/src/main/java/com/auth0/android/lock/PasswordlessLock.java
class PasswordlessLock (line 53) | public class PasswordlessLock {
method onReceive (line 64) | @Override
method PasswordlessLock (line 70) | private PasswordlessLock(@NonNull Options options, @NonNull LockCallba...
method getOptions (line 80) | @NonNull
method newBuilder (line 94) | @NonNull
method newBuilder (line 109) | @NonNull
method newIntent (line 120) | @NonNull
method onDestroy (line 134) | public void onDestroy(@NonNull Context context) {
method initialize (line 138) | private void initialize(Context context) {
method processEvent (line 148) | private void processEvent(@NonNull Intent data) {
class Builder (line 173) | @SuppressWarnings({"UnusedReturnValue"})
method Builder (line 185) | public Builder(@Nullable Auth0 account, @NonNull LockCallback callba...
method build (line 198) | @NonNull
method hideMainScreenTitle (line 228) | @NonNull
method useCode (line 239) | @NonNull
method useLink (line 250) | @NonNull
method rememberLastLogin (line 261) | @NonNull
method closable (line 273) | @NonNull
method withTheme (line 285) | private Builder withTheme(@NonNull Theme theme) {
method withAuthStyle (line 297) | @NonNull
method withAuthenticationParameters (line 309) | @NonNull
method allowedConnections (line 321) | @NonNull
method withAuthHandlers (line 333) | @NonNull
method withScope (line 345) | @NonNull
method withAudience (line 357) | @NonNull
method withScheme (line 371) | @NonNull
method withCustomTabsOptions (line 383) | @NonNull
method setSupportURL (line 395) | @NonNull
method withConnectionScope (line 408) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/PasswordlessLockActivity.java
class PasswordlessLockActivity (line 83) | @SuppressLint("GoogleAppIndexingApiWarning")
method PasswordlessLockActivity (line 115) | public PasswordlessLockActivity() {
method PasswordlessLockActivity (line 118) | @VisibleForTesting
method onCreate (line 127) | @Override
method hasValidLaunchConfig (line 157) | private boolean hasValidLaunchConfig() {
method hasValidTheme (line 175) | private boolean hasValidTheme() {
method hasValidOptions (line 182) | private boolean hasValidOptions() {
method onBackPressed (line 198) | @Override
method deliverAuthenticationResult (line 215) | private void deliverAuthenticationResult(Credentials credentials) {
method deliverAuthenticationError (line 227) | private void deliverAuthenticationError(AuthenticationException except...
method showErrorMessage (line 235) | private void showErrorMessage(String message) {
method run (line 245) | @Override
method showLinkSentLayout (line 251) | private void showLinkSentLayout() {
method run (line 283) | @Override
method reloadRecentPasswordlessData (line 291) | private void reloadRecentPasswordlessData(boolean submitForm) {
method onActivityResult (line 303) | @Override
method onNewIntent (line 329) | @Override
method onRequestPermissionsResult (line 366) | @Override
method onFetchApplicationRequest (line 374) | @Subscribe
method onCountryCodeChangeRequest (line 383) | @Subscribe
method onPasswordlessAuthenticationRequest (line 389) | @Subscribe
method onOAuthAuthenticationRequest (line 420) | @Subscribe
method onSuccess (line 454) | @Override
method onFailure (line 465) | @Override
method onSuccess (line 474) | @Override
method onFailure (line 485) | @Override
method onSuccess (line 496) | @Override
method onFailure (line 505) | @Override
method onFailure (line 517) | @Override
method onFailure (line 523) | @Override
method onSuccess (line 535) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/WebCallbackWrapper.java
class WebCallbackWrapper (line 14) | class WebCallbackWrapper implements Callback<Credentials, Authentication...
method WebCallbackWrapper (line 18) | public WebCallbackWrapper(@NonNull AuthCallback callback) {
method onFailure (line 22) | @Override
method onSuccess (line 27) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/WebProvider.java
class WebProvider (line 23) | class WebProvider {
method WebProvider (line 32) | WebProvider(@NonNull Options options) {
method start (line 44) | public void start(@NonNull Activity activity, @NonNull String connecti...
method resume (line 86) | public boolean resume(Intent intent) {
FILE: lib/src/main/java/com/auth0/android/lock/adapters/Country.java
class Country (line 31) | public class Country implements Comparable<Country> {
method Country (line 35) | public Country(@NonNull String isoCode, @NonNull String dialCode) {
method getDialCode (line 40) | @NonNull
method getIsoCode (line 45) | @NonNull
method getDisplayName (line 50) | @NonNull
method compareTo (line 56) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/adapters/CountryAdapter.java
class CountryAdapter (line 43) | public class CountryAdapter extends BaseAdapter {
method CountryAdapter (line 52) | public CountryAdapter(@NonNull Context context, @NonNull List<Country>...
method getCount (line 59) | @Override
method getItem (line 64) | @Nullable
method getItemId (line 70) | @Override
method getView (line 75) | @NonNull
method getFilter (line 90) | @NonNull
class CountryFilter (line 95) | private class CountryFilter extends Filter {
method performFiltering (line 97) | @Override
method publishResults (line 112) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/errors/AuthenticationError.java
class AuthenticationError (line 32) | public class AuthenticationError {
method AuthenticationError (line 38) | public AuthenticationError(@StringRes int message) {
method AuthenticationError (line 42) | AuthenticationError(@StringRes int message, @Nullable String descripti...
method getMessage (line 53) | @NonNull
method getMessageRes (line 61) | int getMessageRes() {
method getCustomMessage (line 65) | String getCustomMessage() {
FILE: lib/src/main/java/com/auth0/android/lock/errors/ErrorMessageBuilder.java
type ErrorMessageBuilder (line 7) | public interface ErrorMessageBuilder<U extends Auth0Exception> {
method buildFrom (line 9) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/errors/LoginErrorMessageBuilder.java
class LoginErrorMessageBuilder (line 35) | public class LoginErrorMessageBuilder implements ErrorMessageBuilder<Aut...
method LoginErrorMessageBuilder (line 53) | public LoginErrorMessageBuilder(@StringRes int defaultMessage, @String...
method LoginErrorMessageBuilder (line 58) | public LoginErrorMessageBuilder() {
method buildFrom (line 62) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/errors/SignUpErrorMessageBuilder.java
class SignUpErrorMessageBuilder (line 33) | public class SignUpErrorMessageBuilder implements ErrorMessageBuilder<Au...
method SignUpErrorMessageBuilder (line 47) | public SignUpErrorMessageBuilder(@StringRes int defaultMessage) {
method SignUpErrorMessageBuilder (line 51) | public SignUpErrorMessageBuilder() {
method buildFrom (line 55) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/events/CountryCodeChangeEvent.java
class CountryCodeChangeEvent (line 27) | public class CountryCodeChangeEvent {
FILE: lib/src/main/java/com/auth0/android/lock/events/DatabaseChangePasswordEvent.java
class DatabaseChangePasswordEvent (line 30) | public class DatabaseChangePasswordEvent extends DatabaseEvent {
method DatabaseChangePasswordEvent (line 37) | public DatabaseChangePasswordEvent(@NonNull String email) {
FILE: lib/src/main/java/com/auth0/android/lock/events/DatabaseEvent.java
class DatabaseEvent (line 32) | public class DatabaseEvent {
method DatabaseEvent (line 36) | public DatabaseEvent(@NonNull String identity) {
method DatabaseEvent (line 44) | public DatabaseEvent(@NonNull String email, @Nullable String username) {
method getEmail (line 49) | @Nullable
method getUsername (line 54) | @Nullable
method setUsername (line 59) | public void setUsername(@Nullable String username) {
method isUsername (line 63) | private boolean isUsername(String input) {
method isEmail (line 67) | private boolean isEmail(String input) {
FILE: lib/src/main/java/com/auth0/android/lock/events/DatabaseLoginEvent.java
class DatabaseLoginEvent (line 31) | public class DatabaseLoginEvent extends DatabaseEvent {
method DatabaseLoginEvent (line 39) | public DatabaseLoginEvent(@NonNull String usernameOrEmail, @NonNull St...
method getUsernameOrEmail (line 44) | @NonNull
method getPassword (line 49) | @NonNull
method setMultifactorOTP (line 54) | public void setMultifactorOTP(@NonNull String code) {
method getMultifactorOTP (line 58) | @Nullable
method setMultifactorOOBCode (line 63) | public void setMultifactorOOBCode(@Nullable String code) {
method getMultifactorOOBCode (line 67) | @Nullable
method setMultifactorToken (line 72) | public void setMultifactorToken(@NonNull String mfaToken) {
method getMultifactorToken (line 76) | @Nullable
method setMultifactorChallengeType (line 81) | public void setMultifactorChallengeType(@NonNull String challengeType) {
method getMultifactorChallengeType (line 85) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/events/DatabaseSignUpEvent.java
class DatabaseSignUpEvent (line 40) | public class DatabaseSignUpEvent extends DatabaseEvent {
method DatabaseSignUpEvent (line 49) | public DatabaseSignUpEvent(@NonNull String email, @NonNull String pass...
method getPassword (line 56) | @NonNull
method setRootAttributes (line 61) | public void setRootAttributes(@NonNull Map<String, String> attributes) {
method setExtraFields (line 70) | public void setExtraFields(@NonNull Map<String, String> customFields) {
method getSignUpRequest (line 75) | @NonNull
method getCreateUserRequest (line 84) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/events/FetchApplicationEvent.java
class FetchApplicationEvent (line 27) | public class FetchApplicationEvent {
FILE: lib/src/main/java/com/auth0/android/lock/events/LockMessageEvent.java
class LockMessageEvent (line 5) | public class LockMessageEvent {
method LockMessageEvent (line 10) | public LockMessageEvent(@StringRes int messageRes) {
method getMessageRes (line 14) | @StringRes
FILE: lib/src/main/java/com/auth0/android/lock/events/OAuthLoginEvent.java
class OAuthLoginEvent (line 8) | public class OAuthLoginEvent {
method OAuthLoginEvent (line 21) | public OAuthLoginEvent(@NonNull OAuthConnection connection, @NonNull S...
method OAuthLoginEvent (line 32) | public OAuthLoginEvent(@NonNull OAuthConnection connection) {
method useActiveFlow (line 41) | public boolean useActiveFlow() {
method getConnection (line 50) | @NonNull
method getStrategy (line 60) | @Nullable
method getUsername (line 70) | @Nullable
method getPassword (line 80) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/events/PasswordlessLoginEvent.java
class PasswordlessLoginEvent (line 40) | public class PasswordlessLoginEvent {
method PasswordlessLoginEvent (line 50) | private PasswordlessLoginEvent(@PasswordlessMode int mode, String emai...
method requestCode (line 57) | @NonNull
method requestCode (line 62) | @NonNull
method submitCode (line 68) | @NonNull
method getMode (line 73) | @PasswordlessMode
method getEmailOrNumber (line 78) | @Nullable
method getCountry (line 83) | @Nullable
method getCode (line 88) | @Nullable
method getCodeRequest (line 100) | @NonNull
method getLoginRequest (line 123) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/ApplicationDeserializer.java
class ApplicationDeserializer (line 40) | class ApplicationDeserializer extends GsonDeserializer<List<Connection>> {
method deserialize (line 42) | @Override
method mergeConnections (line 58) | private List<Connection> mergeConnections(JsonArray list, JsonDeserial...
method parseStrategy (line 67) | private List<Connection> parseStrategy(JsonElement json, JsonDeseriali...
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/ApplicationFetcher.java
class ApplicationFetcher (line 56) | public class ApplicationFetcher {
method ApplicationFetcher (line 67) | public ApplicationFetcher(@NonNull Auth0 account) {
method fetch (line 76) | public void fetch(@NonNull Callback<List<Connection>, Auth0Exception> ...
method createGson (line 81) | @VisibleForTesting
class FetchTask (line 91) | private static class FetchTask extends AsyncTask<Callback<List<Connect...
method FetchTask (line 95) | public FetchTask(Auth0 account) {
method doInBackground (line 99) | @SafeVarargs
method makeApplicationRequest (line 106) | private void makeApplicationRequest(Auth0 account, Callback<List<Con...
method parseJSONP (line 122) | private List<Connection> parseJSONP(InputStream is) throws Auth0Exce...
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/BaseConnection.java
type BaseConnection (line 6) | interface BaseConnection {
method getName (line 13) | @NonNull
method getStrategy (line 21) | @NonNull
method valueForKey (line 32) | @Nullable
method booleanForKey (line 41) | boolean booleanForKey(String key);
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/Configuration.java
class Configuration (line 49) | public class Configuration {
method Configuration (line 83) | public Configuration(@NonNull List<Connection> connections, @NonNull O...
method getVisibleSignUpFields (line 99) | @NonNull
method getHiddenSignUpFields (line 104) | @NonNull
method getDatabaseConnection (line 109) | @Nullable
method getPasswordlessConnection (line 114) | @Nullable
method getSocialConnections (line 135) | @NonNull
method getEnterpriseConnections (line 140) | @NonNull
method getPasswordlessConnections (line 145) | @NonNull
method filterDatabaseConnections (line 150) | @Nullable
method filterConnections (line 166) | @SuppressWarnings("unchecked")
method enableWebAuthentication (line 182) | @NonNull
method parseLocalOptions (line 192) | private void parseLocalOptions(Options options) {
method authStyleForConnection (line 234) | @StyleRes
method parsePasswordlessMode (line 242) | @PasswordlessMode
method allowLogIn (line 256) | public boolean allowLogIn() {
method allowSignUp (line 260) | public boolean allowSignUp() {
method allowForgotPassword (line 264) | public boolean allowForgotPassword() {
method allowShowPassword (line 268) | public boolean allowShowPassword() {
method isUsernameRequired (line 272) | public boolean isUsernameRequired() {
method getInitialScreen (line 276) | @InitialScreen
method getUsernameStyle (line 281) | @UsernameStyle
method getPasswordlessMode (line 286) | @PasswordlessMode
method getPasswordComplexity (line 291) | @NonNull
method loginAfterSignUp (line 296) | public boolean loginAfterSignUp() {
method hasClassicConnections (line 300) | public boolean hasClassicConnections() {
method hasPasswordlessConnections (line 304) | public boolean hasPasswordlessConnections() {
method getTermsURL (line 308) | @NonNull
method getPrivacyURL (line 313) | @NonNull
method getSupportURL (line 318) | @Nullable
method mustAcceptTerms (line 323) | public boolean mustAcceptTerms() {
method showTerms (line 327) | public boolean showTerms() {
method useLabeledSubmitButton (line 331) | public boolean useLabeledSubmitButton() {
method hideMainScreenTitle (line 335) | public boolean hideMainScreenTitle() {
method usePasswordlessAutoSubmit (line 339) | public boolean usePasswordlessAutoSubmit() {
method getVisibleSignUpFieldsThreshold (line 343) | public int getVisibleSignUpFieldsThreshold() {
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/Connection.java
class Connection (line 12) | public class Connection implements BaseConnection, DatabaseConnection, O...
method Connection (line 23) | private Connection(@NonNull String strategy, Map<String, Object> value...
method parsePasswordComplexity (line 38) | private void parsePasswordComplexity() {
method getName (line 63) | @NonNull
method getStrategy (line 69) | @NonNull
method getType (line 80) | @AuthType
method valueForKey (line 107) | @Nullable
method booleanForKey (line 113) | @Override
method getPasswordComplexity (line 119) | @Override
method requiresUsername (line 125) | @Override
method showSignUp (line 130) | @Override
method showForgot (line 135) | @Override
method getMinUsernameLength (line 140) | @Override
method getMaxUsernameLength (line 145) | @Override
method isCustomDatabase (line 150) | @Override
method isActiveFlowEnabled (line 155) | @Override
method disableActiveFlow (line 160) | void disableActiveFlow() {
method getDomainSet (line 164) | @Override
method newConnectionFor (line 189) | static Connection newConnectionFor(@NonNull String strategy, Map<Strin...
method parseUsernameLength (line 193) | @SuppressWarnings("unchecked")
method intValue (line 218) | private int intValue(@Nullable Object object) {
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/DatabaseConnection.java
type DatabaseConnection (line 5) | public interface DatabaseConnection extends BaseConnection {
method getPasswordComplexity (line 15) | @NonNull
method requiresUsername (line 23) | boolean requiresUsername();
method showSignUp (line 30) | boolean showSignUp();
method showForgot (line 37) | boolean showForgot();
method getMinUsernameLength (line 44) | int getMinUsernameLength();
method getMaxUsernameLength (line 51) | int getMaxUsernameLength();
method isCustomDatabase (line 58) | boolean isCustomDatabase();
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/GsonDeserializer.java
class GsonDeserializer (line 35) | abstract class GsonDeserializer<T> implements JsonDeserializer<T> {
method requiredValue (line 37) | <U> U requiredValue(String name, Type type, JsonObject object, JsonDes...
method assertJsonObject (line 45) | void assertJsonObject(JsonElement jsonObject) throws JsonParseException {
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/OAuthConnection.java
type OAuthConnection (line 7) | public interface OAuthConnection extends BaseConnection {
method isActiveFlowEnabled (line 14) | boolean isActiveFlowEnabled();
method getDomainSet (line 21) | @NonNull
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/Options.java
class Options (line 56) | @SuppressLint("KotlinPropertyAccess")
method Options (line 99) | public Options() {
method Options (line 118) | protected Options(@NonNull Parcel in) {
method describeContents (line 191) | @Override
method writeToParcel (line 196) | @Override
method createFromParcel (line 269) | @Override
method newArray (line 274) | @Override
method getAccount (line 280) | @NonNull
method setAccount (line 285) | public void setAccount(@NonNull Auth0 account) {
method withTheme (line 289) | public void withTheme(@NonNull Theme theme) {
method getTheme (line 293) | @NonNull
method isClosable (line 298) | public boolean isClosable() {
method setClosable (line 302) | public void setClosable(boolean closable) {
method usernameStyle (line 306) | @UsernameStyle
method setUsernameStyle (line 311) | public void setUsernameStyle(@UsernameStyle int usernameStyle) {
method setAllowLogIn (line 315) | public void setAllowLogIn(boolean allowLogIn) {
method allowLogIn (line 319) | public boolean allowLogIn() {
method allowSignUp (line 323) | public boolean allowSignUp() {
method setAllowSignUp (line 327) | public void setAllowSignUp(boolean allowSignUp) {
method setAllowForgotPassword (line 331) | public void setAllowForgotPassword(boolean allowForgotPassword) {
method allowForgotPassword (line 335) | public boolean allowForgotPassword() {
method allowShowPassword (line 339) | public boolean allowShowPassword() {
method setAllowShowPassword (line 343) | public void setAllowShowPassword(boolean allow) {
method getDefaultDatabaseConnection (line 347) | @Nullable
method useDatabaseConnection (line 352) | public void useDatabaseConnection(@NonNull String defaultDatabaseConne...
method getConnections (line 356) | @Nullable
method setConnections (line 361) | public void setConnections(@NonNull List<String> connections) {
method getEnterpriseConnectionsUsingWebForm (line 365) | @Nullable
method setEnterpriseConnectionsUsingWebForm (line 370) | public void setEnterpriseConnectionsUsingWebForm(@NonNull List<String>...
method getAuthenticationParameters (line 374) | @Nullable
method setAuthenticationParameters (line 379) | public void setAuthenticationParameters(@NonNull HashMap<String, Strin...
method loginAfterSignUp (line 389) | public boolean loginAfterSignUp() {
method setLoginAfterSignUp (line 393) | public void setLoginAfterSignUp(boolean loginAfterSignUp) {
method getAuthenticationAPIClient (line 397) | @NonNull
method setUseCodePasswordless (line 402) | public void setUseCodePasswordless(boolean useCode) {
method useCodePasswordless (line 406) | public boolean useCodePasswordless() {
method setSignUpFields (line 410) | public void setSignUpFields(@NonNull List<SignUpField> signUpFields) {
method getSignUpFields (line 414) | @Nullable
method setInitialScreen (line 419) | public void setInitialScreen(@InitialScreen int screen) {
method initialScreen (line 423) | @InitialScreen
method setPrivacyURL (line 428) | public void setPrivacyURL(@NonNull String url) throws IllegalArgumentE...
method getPrivacyURL (line 435) | @Nullable
method setTermsURL (line 440) | public void setTermsURL(@NonNull String url) throws IllegalArgumentExc...
method getTermsURL (line 447) | @Nullable
method setSupportURL (line 452) | public void setSupportURL(@NonNull String url) {
method getSupportURL (line 459) | @Nullable
method setMustAcceptTerms (line 464) | public void setMustAcceptTerms(boolean mustAcceptTerms) {
method mustAcceptTerms (line 468) | public boolean mustAcceptTerms() {
method setShowTerms (line 472) | public void setShowTerms(boolean showTerms) {
method showTerms (line 476) | public boolean showTerms() {
method withAuthStyle (line 480) | public void withAuthStyle(@NonNull String connectionName, @StyleRes in...
method getAuthStyles (line 484) | @Nullable
method setUseLabeledSubmitButton (line 489) | public void setUseLabeledSubmitButton(boolean useLabeledSubmitButton) {
method useLabeledSubmitButton (line 493) | public boolean useLabeledSubmitButton() {
method setHideMainScreenTitle (line 497) | public void setHideMainScreenTitle(boolean hideMainScreenTitle) {
method hideMainScreenTitle (line 501) | public boolean hideMainScreenTitle() {
method setRememberLastPasswordlessLogin (line 505) | public void setRememberLastPasswordlessLogin(boolean remember) {
method rememberLastPasswordlessAccount (line 509) | public boolean rememberLastPasswordlessAccount() {
method withConnectionScope (line 513) | public void withConnectionScope(@NonNull String connectionName, @NonNu...
method getConnectionsScope (line 517) | @Nullable
method withScope (line 522) | public void withScope(@NonNull String scope) {
method getScope (line 526) | @Nullable
method withAudience (line 531) | public void withAudience(@NonNull String audience) {
method getAudience (line 535) | @Nullable
method withScheme (line 540) | public void withScheme(@NonNull String scheme) {
method getScheme (line 544) | @Nullable
method setVisibleSignUpFieldsThreshold (line 549) | public void setVisibleSignUpFieldsThreshold(int threshold) {
method visibleSignUpFieldsThreshold (line 553) | public int visibleSignUpFieldsThreshold() {
method withCustomTabsOptions (line 557) | public void withCustomTabsOptions(@NonNull CustomTabsOptions customTab...
method getCustomTabsOptions (line 561) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/PasswordComplexity.java
class PasswordComplexity (line 5) | public class PasswordComplexity {
method PasswordComplexity (line 10) | public PasswordComplexity(@PasswordStrength int policy, @Nullable Inte...
method getPasswordPolicy (line 20) | @PasswordStrength
method getMinLengthOverride (line 30) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/PasswordlessConnection.java
type PasswordlessConnection (line 3) | public interface PasswordlessConnection extends BaseConnection {
FILE: lib/src/main/java/com/auth0/android/lock/internal/configuration/Theme.java
class Theme (line 48) | public class Theme implements Parcelable {
method Theme (line 57) | private Theme(int headerTitle, int headerLogo, int headerColor, int he...
method resolveStringResource (line 66) | @SuppressLint("ResourceType")
method resolveColorResource (line 77) | @SuppressLint("ResourceType")
method resolveDrawableResource (line 89) | @SuppressLint("ResourceType")
method getHeaderTitle (line 100) | @NonNull
method getHeaderLogo (line 105) | @NonNull
method getHeaderColor (line 110) | @ColorInt
method getHeaderTitleColor (line 115) | @ColorInt
method getPrimaryColor (line 120) | @ColorInt
method getDarkPrimaryColor (line 125) | @ColorInt
method getCustomHeaderTitleRes (line 130) | int getCustomHeaderTitleRes() {
method getCustomHeaderLogoRes (line 134) | int getCustomHeaderLogoRes() {
method getCustomHeaderColorRes (line 138) | int getCustomHeaderColorRes() {
method getCustomHeaderTitleColorRes (line 142) | int getCustomHeaderTitleColorRes() {
method getCustomPrimaryColorRes (line 146) | int getCustomPrimaryColorRes() {
method getCustomDarkPrimaryColorRes (line 150) | int getCustomDarkPrimaryColorRes() {
method Theme (line 154) | protected Theme(@NonNull Parcel in) {
method describeContents (line 163) | @Override
method writeToParcel (line 168) | @Override
method createFromParcel (line 179) | @Override
method newArray (line 184) | @Override
method newBuilder (line 191) | static Builder newBuilder() {
class Builder (line 195) | static class Builder {
method withHeaderTitle (line 204) | public Builder withHeaderTitle(@StringRes int title) {
method withHeaderLogo (line 209) | public Builder withHeaderLogo(@DrawableRes int logo) {
method withHeaderColor (line 214) | public Builder withHeaderColor(@ColorRes int color) {
method withHeaderTitleColor (line 219) | public Builder withHeaderTitleColor(@ColorRes int color) {
method withPrimaryColor (line 224) | public Builder withPrimaryColor(@ColorRes int primary) {
method withDarkPrimaryColor (line 229) | public Builder withDarkPrimaryColor(@ColorRes int darkPrimary) {
method build (line 234) | public Theme build() {
FILE: lib/src/main/java/com/auth0/android/lock/provider/AuthResolver.java
class AuthResolver (line 18) | public final class AuthResolver {
method AuthResolver (line 21) | private AuthResolver() {
method setAuthHandlers (line 29) | public static void setAuthHandlers(@NonNull List<AuthHandler> handlers) {
method providerFor (line 41) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/utils/CustomField.java
class CustomField (line 50) | public class CustomField extends SignUpField {
method CustomField (line 96) | public CustomField(@DrawableRes int icon, @FieldType int type, @NonNul...
method CustomField (line 109) | public CustomField(@DrawableRes int icon, @FieldType int type, @NonNul...
method configureField (line 116) | public void configureField(@NonNull ValidatedInputView field) {
method findValue (line 136) | @Nullable
method getHint (line 146) | @StringRes
method getIcon (line 151) | @DrawableRes
method getType (line 156) | @FieldType
method CustomField (line 161) | protected CustomField(@NonNull Parcel in) {
method writeToParcel (line 168) | @Override
method createFromParcel (line 177) | @Override
method newArray (line 182) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/utils/EnterpriseConnectionMatcher.java
class EnterpriseConnectionMatcher (line 39) | public class EnterpriseConnectionMatcher {
method EnterpriseConnectionMatcher (line 48) | public EnterpriseConnectionMatcher(@NonNull List<OAuthConnection> conn...
method parse (line 59) | @Nullable
method extractUsername (line 92) | @Nullable
method extractDomain (line 107) | @Nullable
method domainForConnection (line 126) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/utils/HiddenField.java
class HiddenField (line 7) | public class HiddenField extends SignUpField {
method HiddenField (line 18) | public HiddenField(@NonNull String key, @NonNull String value, @Custom...
method getValue (line 23) | @NonNull
method HiddenField (line 28) | protected HiddenField(@NonNull Parcel in) {
method writeToParcel (line 33) | @Override
method createFromParcel (line 40) | @Override
method newArray (line 45) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/utils/LoadCountriesTask.java
class LoadCountriesTask (line 46) | public abstract class LoadCountriesTask extends AsyncTask<Context, Void,...
method doInBackground (line 51) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/utils/SignUpField.java
class SignUpField (line 10) | public abstract class SignUpField implements Parcelable {
method SignUpField (line 15) | SignUpField(@NonNull String key, @CustomField.Storage int storage) {
method getStorage (line 26) | @CustomField.Storage
method getKey (line 31) | @NonNull
method SignUpField (line 36) | SignUpField(Parcel in) {
method describeContents (line 41) | @Override
method writeToParcel (line 46) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/ActionButton.java
class ActionButton (line 50) | @SuppressLint("ViewConstructor")
method ActionButton (line 60) | public ActionButton(@NonNull Context context, @NonNull Theme lockTheme) {
method init (line 65) | private void init(Theme lockTheme) {
method generateStateBackground (line 82) | private Drawable generateStateBackground(Theme lockTheme) {
method setOnClickListener (line 101) | @Override
method showProgress (line 112) | public void showProgress(boolean show) {
method setLabel (line 130) | public void setLabel(@StringRes int stringRes) {
method showLabel (line 140) | public void showLabel(boolean showLabel) {
FILE: lib/src/main/java/com/auth0/android/lock/views/AuthConfig.java
class AuthConfig (line 16) | public class AuthConfig {
method AuthConfig (line 22) | public AuthConfig(@NonNull OAuthConnection connection, @StyleRes int s...
method getConnection (line 27) | @NonNull
method getName (line 32) | @NonNull
method getLogo (line 39) | @NonNull
method getBackgroundColor (line 49) | @ColorInt
method getIdForResource (line 66) | int getIdForResource(@NonNull Context context, @StyleableRes int index) {
method styleForStrategy (line 80) | @StyleRes
FILE: lib/src/main/java/com/auth0/android/lock/views/ChangePasswordFormView.java
class ChangePasswordFormView (line 40) | public class ChangePasswordFormView extends FormView implements TextView...
method ChangePasswordFormView (line 46) | public ChangePasswordFormView(@NonNull Context context) {
method ChangePasswordFormView (line 51) | public ChangePasswordFormView(@NonNull LockWidgetForm lockWidget, @Nul...
method init (line 57) | private void init(String email) {
method getActionEvent (line 66) | @NonNull
method getUsernameOrEmail (line 72) | @NonNull
method validateForm (line 77) | @Override
method submitForm (line 82) | @Nullable
method onEditorAction (line 93) | @Override
method onEmailChanged (line 101) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/CheckableOptionView.java
class CheckableOptionView (line 39) | public class CheckableOptionView extends LinearLayout {
method CheckableOptionView (line 47) | public CheckableOptionView(@NonNull Context context) {
method CheckableOptionView (line 52) | public CheckableOptionView(@NonNull Context context, @NonNull Attribut...
method CheckableOptionView (line 57) | public CheckableOptionView(@NonNull Context context, @NonNull Attribut...
method init (line 62) | private void init(AttributeSet attrs) {
method updateStatus (line 79) | private void updateStatus() {
method setText (line 94) | public void setText(@NonNull String text) {
method setChecked (line 103) | public void setChecked(boolean checked) {
method setMandatory (line 114) | public void setMandatory(boolean mandatory) {
FILE: lib/src/main/java/com/auth0/android/lock/views/ClassicLockView.java
class ClassicLockView (line 60) | @SuppressWarnings("NullableProblems")
method ClassicLockView (line 81) | public ClassicLockView(@NonNull Context context, @NonNull Bus lockBus,...
method init (line 89) | private void init() {
method showWaitForConfigurationLayout (line 99) | private void showWaitForConfigurationLayout() {
method showContentLayout (line 108) | private void showContentLayout() {
method configure (line 167) | public void configure(@Nullable Configuration configuration) {
method showConfigurationMissingLayout (line 178) | private void showConfigurationMissingLayout(final boolean showRetry) {
method showChangePasswordForm (line 206) | @Override
method updateHeaderTitle (line 218) | private void updateHeaderTitle(@StringRes int titleRes) {
method resetHeaderTitle (line 223) | private void resetHeaderTitle() {
method addSubForm (line 228) | private void addSubForm(@NonNull FormView form) {
method removeSubForm (line 238) | private void removeSubForm() {
method onBackPressed (line 256) | public boolean onBackPressed() {
method showProgress (line 277) | public void showProgress(boolean show) {
method showSignUpTerms (line 286) | private void showSignUpTerms(boolean show) {
method showSignUpTermsDialog (line 298) | @SuppressLint("StringFormatInvalid")
method getConfiguration (line 318) | @NonNull
method onFormSubmit (line 324) | @Override
method showCustomFieldsForm (line 329) | @Override
method showMFACodeForm (line 337) | public void showMFACodeForm(@NonNull DatabaseLoginEvent event) {
method onOAuthLoginRequest (line 343) | @Override
method showTopBanner (line 348) | @Override
method showBottomBanner (line 356) | @Override
method updateButtonLabel (line 363) | @Override
method onEmailChanged (line 370) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/CountryCodeSelectorView.java
class CountryCodeSelectorView (line 48) | public class CountryCodeSelectorView extends LinearLayout {
method CountryCodeSelectorView (line 61) | public CountryCodeSelectorView(@NonNull Context context) {
method CountryCodeSelectorView (line 66) | public CountryCodeSelectorView(@NonNull Context context, @NonNull Attr...
method CountryCodeSelectorView (line 71) | public CountryCodeSelectorView(@NonNull Context context, @NonNull Attr...
method init (line 76) | private void init() {
method setupBackground (line 88) | private void setupBackground() {
method prepareTask (line 99) | private void prepareTask() {
method setSelectedCountry (line 126) | public void setSelectedCountry(@NonNull Country country) {
method getSelectedCountry (line 138) | @Nullable
method onDetachedFromWindow (line 143) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/CustomFieldsFormView.java
class CustomFieldsFormView (line 50) | @SuppressLint("ViewConstructor")
method CustomFieldsFormView (line 67) | public CustomFieldsFormView(@NonNull LockWidgetForm lockWidget, @NonNu...
method init (line 78) | private void init() {
method defineFieldParams (line 85) | private LinearLayout.LayoutParams defineFieldParams() {
method addCustomFields (line 96) | private void addCustomFields() {
method setEventRootProfileAttributes (line 108) | static void setEventRootProfileAttributes(DatabaseSignUpEvent event, L...
method getActionEvent (line 135) | @NonNull
method validateForm (line 143) | @Override
method submitForm (line 156) | @Nullable
method onEditorAction (line 162) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/FormLayout.java
class FormLayout (line 50) | public class FormLayout extends RelativeLayout implements ModeSelectionV...
method FormLayout (line 74) | public FormLayout(@NonNull Context context) {
method FormLayout (line 79) | public FormLayout(@NonNull LockWidgetForm lockWidget) {
method init (line 85) | private void init() {
method displayInitialScreen (line 121) | private void displayInitialScreen() {
method addSocialLayout (line 140) | private void addSocialLayout() {
method addSeparator (line 145) | private void addSeparator() {
method changeFormMode (line 162) | @SuppressLint("WrongConstant")
method showOnlyEnterprise (line 188) | public void showOnlyEnterprise(boolean show) {
method showSignUpForm (line 200) | private void showSignUpForm() {
method showLogInForm (line 211) | private void showLogInForm() {
method showCustomFieldsForm (line 222) | private void showCustomFieldsForm(@NonNull DatabaseSignUpEvent event) {
method removePreviousForm (line 231) | private void removePreviousForm() {
method getExistingForm (line 238) | @Nullable
method onBackPressed (line 248) | public boolean onBackPressed() {
method onActionPressed (line 258) | @Nullable
method onModeSelected (line 279) | @Override
method getSelectedMode (line 285) | @SuppressLint("WrongConstant")
method onEmailChanged (line 292) | @Override
method refreshIdentityInput (line 297) | public void refreshIdentityInput() {
FILE: lib/src/main/java/com/auth0/android/lock/views/FormView.java
class FormView (line 32) | public abstract class FormView extends RelativeLayout {
method FormView (line 34) | public FormView(@NonNull Context context) {
method getActionEvent (line 38) | @Nullable
method validateForm (line 41) | public abstract boolean validateForm();
method submitForm (line 50) | @Nullable
FILE: lib/src/main/java/com/auth0/android/lock/views/HeaderView.java
class HeaderView (line 41) | @SuppressLint("ViewConstructor")
method HeaderView (line 47) | public HeaderView(@NonNull Context context, @NonNull Theme lockTheme) {
method init (line 52) | private void init(Theme lockTheme) {
method setColor (line 68) | public void setColor(@ColorRes int color) {
method setTitle (line 77) | public void setTitle(@NonNull String title) {
method showTitle (line 81) | public void showTitle(boolean show) {
method setLogo (line 90) | public void setLogo(@DrawableRes int logo) {
FILE: lib/src/main/java/com/auth0/android/lock/views/ImageCheckbox.java
class ImageCheckbox (line 25) | public class ImageCheckbox extends AppCompatImageButton implements Check...
method ImageCheckbox (line 33) | public ImageCheckbox(@NonNull Context context) {
method ImageCheckbox (line 37) | public ImageCheckbox(@NonNull Context context, @NonNull AttributeSet a...
method ImageCheckbox (line 41) | public ImageCheckbox(@NonNull Context context, @NonNull AttributeSet a...
method setChecked (line 64) | @Override
method isChecked (line 77) | @Override
method toggle (line 82) | @Override
method onCreateDrawableState (line 87) | @NonNull
method onFocusChanged (line 97) | @Override
method setOnCheckedChangeListener (line 103) | void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
type OnCheckedChangeListener (line 107) | interface OnCheckedChangeListener {
method onCheckedChanged (line 108) | void onCheckedChanged(ImageButton view, boolean isChecked);
FILE: lib/src/main/java/com/auth0/android/lock/views/LinkTextView.java
class LinkTextView (line 16) | public class LinkTextView extends androidx.appcompat.widget.AppCompatTex...
method LinkTextView (line 19) | public LinkTextView(@NonNull Context context) {
method LinkTextView (line 24) | public LinkTextView(@NonNull Context context, @NonNull AttributeSet at...
method LinkTextView (line 29) | public LinkTextView(@NonNull Context context, @NonNull AttributeSet at...
method init (line 34) | private void init() {
method onFocusChanged (line 40) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/LogInFormView.java
class LogInFormView (line 52) | public class LogInFormView extends FormView implements TextView.OnEditor...
method LogInFormView (line 69) | public LogInFormView(@NonNull Context context) {
method LogInFormView (line 74) | public LogInFormView(@NonNull LockWidgetForm lockWidget) {
method init (line 80) | private void init() {
method setupMultipleConnectionUI (line 114) | private void setupMultipleConnectionUI() {
method setupSingleConnectionUI (line 150) | private void setupSingleConnectionUI(final OAuthConnection connection) {
method resetDomain (line 161) | private void resetDomain() {
method getUsername (line 173) | private String getUsername() {
method getPassword (line 184) | private String getPassword() {
method submitForm (line 188) | @Nullable
method getActionEvent (line 218) | @NonNull
method validateForm (line 236) | @Override
method onBackPressed (line 256) | public boolean onBackPressed() {
method showSSOMessage (line 266) | private void showSSOMessage(boolean show) {
method onEditorAction (line 273) | @Override
method setLastEmail (line 281) | public void setLastEmail(@Nullable String email) {
method onEmailChanged (line 286) | @Override
method clearEmptyFieldsError (line 291) | public void clearEmptyFieldsError() {
FILE: lib/src/main/java/com/auth0/android/lock/views/MFACodeFormView.java
class MFACodeFormView (line 38) | @SuppressLint("ViewConstructor")
method MFACodeFormView (line 51) | public MFACodeFormView(@NonNull LockWidget lockWidget, @Nullable Strin...
method init (line 62) | private void init() {
method getActionEvent (line 69) | @NonNull
method getInputText (line 80) | private String getInputText() {
method validateForm (line 84) | @Override
method submitForm (line 89) | @Nullable
method onEditorAction (line 95) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/ModeSelectionView.java
class ModeSelectionView (line 39) | @SuppressLint("ViewConstructor")
method ModeSelectionView (line 47) | public ModeSelectionView(@NonNull Context context, @NonNull ModeSelect...
method init (line 53) | private void init() {
method setSelectedMode (line 76) | public void setSelectedMode(@AuthMode int mode) {
method toggleBoldText (line 84) | private void toggleBoldText(View tabView, boolean bold) {
method onTabSelected (line 89) | @Override
method onTabUnselected (line 95) | @Override
method onTabReselected (line 101) | @Override
type ModeSelectedListener (line 107) | public interface ModeSelectedListener {
method onModeSelected (line 108) | void onModeSelected(@AuthMode int mode);
method getSelectedMode (line 110) | @AuthMode
FILE: lib/src/main/java/com/auth0/android/lock/views/PasswordStrengthView.java
class PasswordStrengthView (line 41) | public class PasswordStrengthView extends LinearLayout {
method PasswordStrengthView (line 67) | public PasswordStrengthView(@NonNull Context context) {
method init (line 72) | private void init() {
method showPolicy (line 92) | @SuppressLint("StringFormatInvalid")
method hasIdenticalCharacters (line 118) | private boolean hasIdenticalCharacters(@NonNull String input) {
method hasUppercaseCharacters (line 124) | private boolean hasUppercaseCharacters(@NonNull String input) {
method hasLowercaseCharacters (line 130) | private boolean hasLowercaseCharacters(@NonNull String input) {
method hasNumericCharacters (line 136) | private boolean hasNumericCharacters(@NonNull String input) {
method hasSpecialCharacters (line 142) | private boolean hasSpecialCharacters(@NonNull String input) {
method hasMinimumLength (line 148) | private boolean hasMinimumLength(@NonNull String input, int length) {
method atLeastThree (line 154) | private boolean atLeastThree(boolean a, boolean b, boolean c, boolean ...
method allThree (line 163) | private boolean allThree(boolean a, boolean b, boolean c) {
method getMinimumLength (line 167) | private int getMinimumLength() {
method setStrength (line 193) | @SuppressWarnings("DeprecatedIsStillUsed")
method setPasswordComplexity (line 204) | public void setPasswordComplexity(@NonNull PasswordComplexity complexi...
method isValid (line 215) | public boolean isValid(@Nullable String password) {
FILE: lib/src/main/java/com/auth0/android/lock/views/PasswordlessFormLayout.java
class PasswordlessFormLayout (line 46) | public class PasswordlessFormLayout extends LinearLayout implements Pass...
method PasswordlessFormLayout (line 56) | public PasswordlessFormLayout(@NonNull Context context) {
method PasswordlessFormLayout (line 61) | public PasswordlessFormLayout(@NonNull LockWidgetPasswordless lockWidg...
method init (line 67) | private void init() {
method addSocialLayout (line 87) | private void addSocialLayout() {
method addSeparator (line 92) | private void addSeparator() {
method addPasswordlessRequestCodeLayout (line 112) | private void addPasswordlessRequestCodeLayout() {
method addPasswordlessInputCodeLayout (line 119) | private void addPasswordlessInputCodeLayout(@NonNull String emailOrNum...
method onBackPressed (line 129) | public boolean onBackPressed() {
method codeSent (line 153) | public void codeSent(@NonNull String emailOrNumber) {
method onActionPressed (line 174) | @Nullable
method onCodeNeedToResend (line 184) | @Override
method onCountryCodeSelected (line 206) | public void onCountryCodeSelected(@NonNull String country, @NonNull St...
method loadPasswordlessData (line 212) | public void loadPasswordlessData(@NonNull String emailOrNumber, @Nulla...
FILE: lib/src/main/java/com/auth0/android/lock/views/PasswordlessInputCodeFormView.java
class PasswordlessInputCodeFormView (line 47) | @SuppressLint("ViewConstructor")
method PasswordlessInputCodeFormView (line 68) | @SuppressLint("LambdaLast")
method init (line 78) | private void init(@NonNull String identity) {
method selectPasswordlessMode (line 92) | private void selectPasswordlessMode(@NonNull String identity) {
method getActionEvent (line 118) | @NonNull
method getInputText (line 124) | private String getInputText() {
method validateForm (line 128) | @Override
method submitForm (line 133) | @Nullable
method run (line 140) | @Override
method onClick (line 146) | @Override
method onEditorAction (line 154) | @Override
type OnCodeResendListener (line 162) | public interface OnCodeResendListener {
method onCodeNeedToResend (line 167) | void onCodeNeedToResend();
FILE: lib/src/main/java/com/auth0/android/lock/views/PasswordlessLockView.java
class PasswordlessLockView (line 54) | @SuppressWarnings("NullableProblems")
method PasswordlessLockView (line 67) | public PasswordlessLockView(@NonNull Context context, @NonNull Bus loc...
method init (line 74) | private void init() {
method showWaitForConfigurationLayout (line 84) | private void showWaitForConfigurationLayout() {
method showContentLayout (line 92) | private void showContentLayout() {
method configure (line 115) | public void configure(@Nullable Configuration configuration) {
method showConfigurationMissingLayout (line 126) | private void showConfigurationMissingLayout(final boolean showRetry) {
method updateHeaderTitle (line 154) | @Override
method resetHeaderTitle (line 160) | @Override
method onBackPressed (line 171) | public boolean onBackPressed() {
method showProgress (line 181) | public void showProgress(boolean show) {
method onPasswordlessCodeSent (line 194) | @Override
method getConfiguration (line 199) | @NonNull
method onFormSubmit (line 205) | @Override
method onOAuthLoginRequest (line 210) | @Override
method onClick (line 216) | @Override
method onCountryCodeChangeRequest (line 225) | @Override
method onCountryCodeSelected (line 236) | public void onCountryCodeSelected(@NonNull String country, @NonNull St...
method loadPasswordlessData (line 240) | public void loadPasswordlessData(@NonNull String input, @Nullable Coun...
FILE: lib/src/main/java/com/auth0/android/lock/views/PasswordlessRequestCodeFormView.java
class PasswordlessRequestCodeFormView (line 48) | @SuppressLint("ViewConstructor")
method PasswordlessRequestCodeFormView (line 60) | public PasswordlessRequestCodeFormView(@NonNull LockWidgetPasswordless...
method init (line 69) | private void init(boolean showTitle) {
method selectPasswordlessMode (line 80) | private void selectPasswordlessMode(boolean showTitle) {
method getActionEvent (line 112) | @NonNull
method getInputText (line 125) | @SuppressLint("KotlinPropertyAccess")
method validateForm (line 130) | @Override
method submitForm (line 135) | @Nullable
method onCountryCodeSelected (line 147) | public void onCountryCodeSelected(@NonNull String isoCode, @NonNull St...
method onClick (line 152) | @Override
method onEditorAction (line 160) | @Override
method setInputText (line 168) | public void setInputText(@NonNull String text) {
FILE: lib/src/main/java/com/auth0/android/lock/views/SignUpFormView.java
class SignUpFormView (line 53) | public class SignUpFormView extends FormView implements TextView.OnEdito...
method SignUpFormView (line 64) | public SignUpFormView(@NonNull Context context) {
method SignUpFormView (line 69) | public SignUpFormView(@NonNull LockWidgetForm lockWidget) {
method init (line 75) | private void init() {
method addCustomFields (line 101) | private void addCustomFields(List<CustomField> customFields) {
method defineFieldParams (line 115) | private LinearLayout.LayoutParams defineFieldParams() {
method getActionEvent (line 125) | @Override
method getUsername (line 132) | @Nullable
method getEmail (line 137) | @NonNull
method getPassword (line 142) | @NonNull
method validateForm (line 147) | @Override
method submitForm (line 166) | @Nullable
method onEditorAction (line 184) | @Override
method setLastEmail (line 192) | public void setLastEmail(@Nullable String email) {
method onEmailChanged (line 197) | @Override
method clearEmptyFieldsError (line 202) | public void clearEmptyFieldsError() {
FILE: lib/src/main/java/com/auth0/android/lock/views/SocialButton.java
class SocialButton (line 18) | @SuppressLint("Instantiatable")
method SocialButton (line 27) | public SocialButton(Context context, AttributeSet attrs) {
method SocialButton (line 32) | public SocialButton(Context context) {
method init (line 37) | private void init() {
method getTouchFeedbackBackground (line 46) | private StateListDrawable getTouchFeedbackBackground(@ColorInt int pre...
method setStyle (line 74) | public void setStyle(AuthConfig config, @AuthMode int mode) {
FILE: lib/src/main/java/com/auth0/android/lock/views/SocialView.java
class SocialView (line 49) | @SuppressLint("ViewConstructor")
method SocialView (line 62) | @SuppressLint("LambdaLast")
method init (line 70) | private void init() {
method generateAuthConfigs (line 89) | private List<AuthConfig> generateAuthConfigs(List<OAuthConnection> con...
method onAuthenticationRequest (line 98) | @Override
method setCurrentMode (line 108) | public void setCurrentMode(@AuthMode int mode) {
FILE: lib/src/main/java/com/auth0/android/lock/views/SocialViewAdapter.java
class SocialViewAdapter (line 39) | class SocialViewAdapter extends RecyclerView.Adapter<SocialViewAdapter.V...
method SocialViewAdapter (line 48) | public SocialViewAdapter(Context context, @NonNull List<AuthConfig> au...
method onCreateViewHolder (line 53) | @Override
method onBindViewHolder (line 60) | @Override
method getItemCount (line 65) | @Override
method setButtonMode (line 75) | public void setButtonMode(@AuthMode int mode) {
method setCallback (line 84) | public void setCallback(OAuthListener callback) {
class ViewHolder (line 88) | public class ViewHolder extends RecyclerView.ViewHolder implements Vie...
method ViewHolder (line 91) | public ViewHolder(@NonNull View v) {
method onClick (line 97) | @Override
type OAuthListener (line 109) | public interface OAuthListener {
method onAuthenticationRequest (line 115) | void onAuthenticationRequest(@NonNull OAuthConnection connection);
FILE: lib/src/main/java/com/auth0/android/lock/views/SpacesItemDecoration.java
class SpacesItemDecoration (line 9) | class SpacesItemDecoration extends RecyclerView.ItemDecoration {
method SpacesItemDecoration (line 13) | public SpacesItemDecoration(int space, @LinearLayoutCompat.Orientation...
method getItemOffsets (line 18) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/ValidatedInputView.java
class ValidatedInputView (line 73) | public class ValidatedInputView extends LinearLayout {
method ValidatedInputView (line 113) | public ValidatedInputView(@NonNull Context context) {
method ValidatedInputView (line 118) | public ValidatedInputView(@NonNull Context context, @NonNull Attribute...
method ValidatedInputView (line 123) | public ValidatedInputView(@NonNull Context context, @NonNull Attribute...
method init (line 128) | private void init(AttributeSet attrs) {
method onAttachedToWindow (line 177) | @Override
method onDetachedFromWindow (line 183) | @Override
method beforeTextChanged (line 190) | @Override
method onTextChanged (line 194) | @Override
method afterTextChanged (line 198) | @Override
method runValidation (line 206) | private void runValidation() {
method notifyEmailChanged (line 213) | private void notifyEmailChanged(String emailInput) {
method setupInputValidation (line 223) | @SuppressLint("StringFormatInvalid")
method updateBorder (line 303) | @CallSuper
method createBackground (line 311) | private void createBackground() {
method setDataType (line 324) | public void setDataType(@DataType int type) {
method getDataType (line 336) | @SuppressLint("KotlinPropertyAccess")
method validate (line 348) | public boolean validate() {
method validate (line 360) | protected boolean validate(boolean validateEmptyFields) {
method getText (line 403) | @NonNull
method setText (line 413) | public void setText(@Nullable String text) {
method setEnabled (line 420) | @Override
method isEnabled (line 428) | @Override
method setAllowShowPassword (line 439) | public void setAllowShowPassword(boolean allow) {
method setHint (line 449) | public void setHint(@StringRes int hint) {
method setErrorDescription (line 458) | public void setErrorDescription(@Nullable String error) {
method setIcon (line 467) | public void setIcon(@DrawableRes int icon) {
method clearInput (line 474) | public void clearInput() {
method addTextChangedListener (line 487) | public void addTextChangedListener(@NonNull TextWatcher watcher) {
method setOnEditorActionListener (line 496) | public void setOnEditorActionListener(@NonNull TextView.OnEditorAction...
method setIdentityListener (line 505) | public void setIdentityListener(@NonNull IdentityListener listener) {
FILE: lib/src/main/java/com/auth0/android/lock/views/ValidatedPasswordInputView.java
class ValidatedPasswordInputView (line 12) | public class ValidatedPasswordInputView extends ValidatedInputView {
method ValidatedPasswordInputView (line 17) | public ValidatedPasswordInputView(@NonNull Context context) {
method ValidatedPasswordInputView (line 22) | public ValidatedPasswordInputView(@NonNull Context context, @NonNull A...
method ValidatedPasswordInputView (line 27) | public ValidatedPasswordInputView(@NonNull Context context, @NonNull A...
method init (line 32) | public void init() {
method validate (line 37) | @Override
method updateBorder (line 46) | @Override
method setPasswordPolicy (line 60) | @Deprecated
method setPasswordComplexity (line 71) | public void setPasswordComplexity(@NonNull PasswordComplexity complexi...
FILE: lib/src/main/java/com/auth0/android/lock/views/ValidatedUsernameInputView.java
class ValidatedUsernameInputView (line 43) | public class ValidatedUsernameInputView extends ValidatedInputView {
method ValidatedUsernameInputView (line 51) | public ValidatedUsernameInputView(@NonNull Context context) {
method ValidatedUsernameInputView (line 56) | public ValidatedUsernameInputView(@NonNull Context context, @NonNull A...
method ValidatedUsernameInputView (line 61) | public ValidatedUsernameInputView(@NonNull Context context, @NonNull A...
method init (line 66) | private void init() {
method configureFrom (line 75) | public void configureFrom(@Nullable DatabaseConnection connection) {
method setUsernameStyle (line 90) | @SuppressLint("StringFormatInvalid")
method validate (line 104) | @Override
FILE: lib/src/main/java/com/auth0/android/lock/views/ViewUtils.java
class ViewUtils (line 55) | abstract class ViewUtils {
method dipToPixels (line 76) | static float dipToPixels(Resources resources, int dip) {
method getRoundedBackground (line 88) | static ShapeDrawable getRoundedBackground(@NonNull View view, @ColorIn...
method getRoundedOutlineBackground (line 121) | static ShapeDrawable getRoundedOutlineBackground(Resources resources, ...
method getOpaqueRoundedOutlineBackground (line 138) | static Drawable getOpaqueRoundedOutlineBackground(
method setBackground (line 158) | static void setBackground(@NonNull View view, @Nullable Drawable backg...
method measureViewHeight (line 167) | static int measureViewHeight(@Nullable View view) {
method tintWidget (line 182) | static void tintWidget(@NonNull ProgressBar progressBar, @ColorInt int...
FILE: lib/src/main/java/com/auth0/android/lock/views/interfaces/IdentityListener.java
type IdentityListener (line 29) | public interface IdentityListener {
method onEmailChanged (line 31) | void onEmailChanged(@NonNull String currentValue);
FILE: lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidget.java
type LockWidget (line 32) | public interface LockWidget {
method getContext (line 34) | @NonNull
method getConfiguration (line 37) | @NonNull
method onFormSubmit (line 40) | void onFormSubmit();
FILE: lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidgetForm.java
type LockWidgetForm (line 32) | public interface LockWidgetForm extends LockWidgetOAuth, IdentityListener {
method showChangePasswordForm (line 34) | void showChangePasswordForm(boolean show);
method showCustomFieldsForm (line 36) | void showCustomFieldsForm(@NonNull DatabaseSignUpEvent event);
method showBottomBanner (line 38) | void showBottomBanner(boolean show);
method showTopBanner (line 40) | void showTopBanner(boolean show);
method updateButtonLabel (line 42) | void updateButtonLabel(@StringRes int stringRes);
FILE: lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidgetOAuth.java
type LockWidgetOAuth (line 31) | public interface LockWidgetOAuth extends LockWidget {
method onOAuthLoginRequest (line 33) | void onOAuthLoginRequest(@NonNull OAuthLoginEvent event);
FILE: lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidgetPasswordless.java
type LockWidgetPasswordless (line 30) | public interface LockWidgetPasswordless extends LockWidgetOAuth {
method onCountryCodeChangeRequest (line 32) | void onCountryCodeChangeRequest();
method onPasswordlessCodeSent (line 34) | void onPasswordlessCodeSent(@NonNull String emailOrNumber);
method updateHeaderTitle (line 41) | void updateHeaderTitle(@StringRes int titleRes);
method resetHeaderTitle (line 46) | void resetHeaderTitle();
FILE: lib/src/test/java/com/auth0/android/lock/Auth0ParcelableTest.java
class Auth0ParcelableTest (line 21) | @RunWith(RobolectricTestRunner.class)
method shouldSaveClientId (line 29) | @Test
method shouldSaveDomainUrl (line 42) | @Test
method shouldSaveConfigurationUrl (line 55) | @Test
method shouldSaveUserAgent (line 68) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/AuthenticationCallbackTest.java
class AuthenticationCallbackTest (line 50) | @RunWith(RobolectricTestRunner.class)
method setUp (line 56) | @Before
method shouldCallOnAuthentication (line 61) | @Test
method shouldReturnAuthentication (line 70) | @Test
method shouldReturnAuthenticationError (line 85) | @Test
method shouldCallOnCanceled (line 95) | @Test
method shouldNotAuthenticateOrCancelWhenSignUp (line 104) | @Test
method shouldNotAuthenticateOrCancelWhenResetPassword (line 114) | @Test
method getAuthenticationData (line 124) | public Intent getAuthenticationData() {
method credentialsFromData (line 135) | public Credentials credentialsFromData(Intent data) {
FILE: lib/src/test/java/com/auth0/android/lock/ClassicBuilderTest.java
class ClassicBuilderTest (line 27) | @RunWith(RobolectricTestRunner.class)
method setUp (line 38) | @Before
method shouldThrowIfCallbackIsMissing (line 43) | @Test
method shouldThrowIfAccountIsMissing (line 53) | @Test
method shouldThrowIfAccountIsMissingAlsoFromResources (line 63) | @Test
method shouldCreateAccountFromResources (line 77) | @Test
method shouldThrowIfAllScreensAreDisabled (line 94) | @Test
method shouldThrowIfInitialScreenIsLogInButIsDisabled (line 106) | @Test
method shouldThrowIfInitialScreenIsSignUpButIsDisabled (line 117) | @Test
method shouldThrowIfInitialScreenIsForgotPasswordButIsDisabled (line 128) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/LockActivityTest.java
class LockActivityTest (line 68) | @SuppressWarnings("ResultOfMethodCallIgnored")
method setUp (line 109) | @Before
method shouldFailDatabaseLoginOnNullConnection (line 144) | @Test
method shouldCallOIDCDatabaseLoginWithOTPCodeAndMFAToken (line 158) | @Test
method shouldCallOIDCDatabaseLoginWithOOBCodeAndMFAToken (line 189) | @Test
method shouldSuccessfullyRequestMFAChallengeWhenMFAIsRequired (line 222) | @Test
method shouldFailToRequestMFAChallengeWhenMFAIsRequired (line 265) | @Test
method shouldCallDatabaseLoginThatWillRequireVerification (line 307) | @Test
method shouldCallDatabaseSignUpThatWillRequireVerification (line 345) | @Test
method shouldCallDatabaseCreateUserThatWillRequireVerification (line 386) | @Test
method shouldCallOIDCDatabaseLoginWithCustomAudience (line 422) | @Test
method shouldFailDatabaseSignUpOnNullConnection (line 451) | @Test
method shouldCallDatabaseSignUpWithUsername (line 465) | @Test
method shouldCallDatabaseSignUp (line 479) | @Test
method shouldCallOIDCDatabaseSignInWithCustomAudience (line 493) | @Test
method shouldFailDatabasePasswordResetOnNullConnection (line 524) | @Test
method shouldCallDatabasePasswordReset (line 538) | @Test
method shouldCallEnterpriseOAuthAuthenticationWithActiveFlow (line 551) | @Test
method shouldCallOAuthAuthenticationWithCustomProvider (line 573) | @Test
method shouldCallOAuthAuthenticationWithCustomProviderAndAudience (line 599) | @Test
method shouldCallEnterpriseOAuthAuthenticationWithCustomProvider (line 636) | @Test
method shouldCallEnterpriseOAuthAuthenticationWithWebProvider (line 673) | @Test
method shouldResumeEnterpriseOAuthAuthenticationWithWebProviderOnActivityResult (line 690) | @Test
method shouldCallOAuthAuthenticationWithWebProvider (line 705) | @Test
method shouldResumeOAuthAuthenticationWithWebProviderOnActivityResult (line 719) | @Test
method shouldResumeOAuthAuthenticationWithCustomProviderOnActivityResult (line 733) | @Test
method shouldResumeOAuthAuthenticationWithWebProviderOnNewIntent (line 753) | @Test
method shouldResumeOAuthAuthenticationWithCustomProviderOnNewIntent (line 767) | @Test
method shouldResumeEnterpriseOAuthAuthenticationWithWebProviderOnNewIntent (line 787) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/PasswordlessBuilderTest.java
class PasswordlessBuilderTest (line 29) | @RunWith(RobolectricTestRunner.class)
method setUp (line 40) | @Before
method shouldThrowIfCallbackIsMissing (line 45) | @Test
method shouldThrowIfAccountIsMissing (line 55) | @Test
method shouldThrowIfAccountIsMissingAlsoFromResources (line 65) | @Test
method shouldCreateAccountFromResources (line 79) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/PasswordlessIdentityHelperTest.java
class PasswordlessIdentityHelperTest (line 24) | public class PasswordlessIdentityHelperTest {
method setUp (line 30) | @SuppressLint("CommitPrefEdits")
method shouldSaveIdentity (line 43) | @Test
method shouldSaveIdentityWithCountry (line 53) | @Test
method shouldGetSavedIdentity (line 63) | @Test
method shouldGetSavedCountry (line 72) | @Test
method shouldNotHaveLoggedInBeforeIfCurrentPasswordlessModeIsDisabled (line 83) | @Test
method shouldNotHaveLoggedInBeforeIfLastPasswordlessModeIsDisabled (line 89) | @Test
method shouldNotHaveLoggedInBeforeOnDifferentConnections (line 96) | @Test
method shouldHaveLoggedInBeforeOnSameConnections (line 123) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/PasswordlessLockActivityTest.java
class PasswordlessLockActivityTest (line 58) | @RunWith(RobolectricTestRunner.class)
method setUp (line 83) | @Before
method shouldFailPasswordlessCodeRequestWithEmailOnNullConnection (line 110) | @Test
method shouldCallPasswordlessCodeRequestWithEmail (line 125) | @Test
method shouldDoPasswordlessLoginWithEmail (line 140) | @Test
method shouldFailPasswordlessCodeRequestWithPhoneOnNullConnection (line 163) | @Test
method shouldCallPasswordlessCodeRequestWithPhone (line 177) | @Test
method shouldDoPasswordlessLoginWithPhone (line 192) | @Test
method shouldCallOAuthAuthenticationWithCustomProvider (line 215) | @Test
method shouldCallOAuthAuthenticationWithCustomProviderAndAudience (line 242) | @Test
method shouldCallOAuthAuthenticationWithWebProvider (line 281) | @Test
method shouldResumeOAuthAuthenticationWithWebProviderOnActivityResult (line 297) | @Test
method shouldResumeOAuthAuthenticationWithCustomProviderOnActivityResult (line 311) | @Test
method shouldResumeOAuthAuthenticationWithWebProviderOnNewIntent (line 331) | @Test
method shouldResumeOAuthAuthenticationWithCustomProviderOnNewIntent (line 345) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/WebProviderTest.java
class WebProviderTest (line 54) | @RunWith(RobolectricTestRunner.class)
method setUp (line 63) | @Before
method shouldStart (line 73) | @Test
method shouldFailWhenBrowserAppIsMissing (line 84) | @Test
method shouldStartWithCustomAuthenticationParameters (line 100) | @Test
method shouldStartWithCustomAudience (line 134) | @Test
method shouldStartBrowserWithOptions (line 162) | @Test
method shouldResumeWithIntent (line 206) | @Test
method setupBrowserContext (line 218) | static void setupBrowserContext(@NonNull Context context, @NonNull Lis...
method resolveInfoForPackageName (line 230) | private static ResolveInfo resolveInfoForPackageName(@Nullable String ...
FILE: lib/src/test/java/com/auth0/android/lock/errors/LoginErrorMessageBuilderTest.java
class LoginErrorMessageBuilderTest (line 19) | @RunWith(RobolectricTestRunner.class)
method setUp (line 28) | @Before
method shouldHaveDefaultMessageIfAccessDenied (line 34) | @Test
method shouldHaveCustomMessageIfInvalidCredentials (line 41) | @Test
method shouldHaveDescriptionIfRuleError (line 48) | @Test
method shouldHaveCustomMessageIfPasswordLeaked (line 57) | @Test
method shouldHaveCustomMessageIfMultifactorCodeInvalid (line 64) | @Test
method shouldHaveDefaultMessageIfMultifactorRequired (line 71) | @Test
method shouldHaveDefaultMessageIfMultifactorEnrollRequired (line 78) | @Test
method shouldHaveCustomMessageIfUsernameExists (line 85) | @Test
method shouldHaveCustomMessageIfUserIsBlocked (line 96) | @Test
method shouldHaveCustomMessageIfIsTooManyAttempts (line 104) | @Test
method shouldHaveDefaultMessageIfIsWrongClientType (line 111) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/errors/SignUpErrorMessageBuilderTest.java
class SignUpErrorMessageBuilderTest (line 19) | @RunWith(RobolectricTestRunner.class)
method setUp (line 28) | @Before
method shouldHaveDefaultMessageIfAccessDenied (line 34) | @Test
method shouldHaveDescriptionIfRuleError (line 41) | @Test
method shouldHaveCustomMessageIfUsernameExists (line 50) | @Test
method shouldHaveCustomMessageIfIsTooManyAttempts (line 61) | @Test
method shouldHaveCustomMessageIfPasswordNotStrongEnough (line 68) | @Test
method shouldHaveCustomMessageIfPasswordAlreadyUsed (line 75) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/events/DatabaseEventTest.java
class DatabaseEventTest (line 12) | @RunWith(RobolectricTestRunner.class)
method shouldSetEmailIdentity (line 16) | @Test
method shouldSetUsernameIdentity (line 23) | @Test
method shouldSetUsername (line 30) | @Test
method shouldSetBothEmailAndUsername (line 37) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/events/DatabaseLoginEventTest.java
class DatabaseLoginEventTest (line 13) | @RunWith(RobolectricTestRunner.class)
method setUp (line 19) | @Before
method shouldGetUsername (line 24) | @Test
method shouldGetPassword (line 29) | @Test
method shouldNotHaveOTP (line 34) | @Test
method shouldSetOTP (line 39) | @Test
method shouldNotHaveOOBCode (line 45) | @Test
method shouldSetOOBCode (line 50) | @Test
method shouldNotHaveMFAToken (line 56) | @Test
method shouldSetMFAToken (line 61) | @Test
method shouldNotHaveMFAChallengeType (line 67) | @Test
method shouldSetMFAChallengeType (line 72) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/events/DatabaseSignUpEventTest.java
class DatabaseSignUpEventTest (line 55) | @RunWith(RobolectricTestRunner.class)
method shouldSetAllValues (line 64) | @Test
method shouldSetNullUsername (line 73) | @Test
method shouldGetSignUpRequestWithUsername (line 82) | @Test
method shouldGetSignUpRequestWithoutUsername (line 91) | @Test
method shouldGetSignUpRequestWithUserMetadata (line 100) | @Test
method shouldGetSignUpRequestWithRootProfileAttributes (line 123) | @Test
method shouldGetCreateUserRequestWithoutRootProfileAttributes (line 146) | @Test
method shouldGetCreateUserRequestWithUsername (line 162) | @Test
method shouldGetCreateUserRequestWithoutUsername (line 171) | @Test
method shouldGetCreateUserRequestWithUserMetadata (line 180) | @Test
method shouldGetCreateUserRequestWithRootProfileAttributes (line 205) | @Test
method createRootProfileAttributes (line 228) | private Map<String, String> createRootProfileAttributes() {
method createMetadata (line 236) | private Map<String, String> createMetadata() {
method assertValidRootProfileAttributes (line 243) | private void assertValidRootProfileAttributes(Map<String, Object> map) {
method assertValidMetadata (line 250) | private void assertValidMetadata(Map<String, String> map) {
FILE: lib/src/test/java/com/auth0/android/lock/events/ErrorMessageEventTest.java
class ErrorMessageEventTest (line 11) | @RunWith(RobolectricTestRunner.class)
method shouldSetMessageResource (line 15) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/events/OAuthLoginEventTest.java
class OAuthLoginEventTest (line 19) | @RunWith(RobolectricTestRunner.class)
method setUp (line 25) | @Before
method shouldGetStrategyName (line 32) | @Test
method shouldGetConnectionName (line 41) | @Test
method shouldUseActiveFlow (line 50) | @Test
method shouldHaveUsernameOnActiveFlow (line 56) | @Test
method shouldHavePasswordOnActiveFlow (line 62) | @Test
method shouldUseWebAuth (line 68) | @Test
method shouldNotHaveUsernameOnWebAuth (line 74) | @Test
method shouldNotHavePasswordOnWebAuth (line 80) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/events/PasswordlessLoginEventTest.java
class PasswordlessLoginEventTest (line 52) | @RunWith(RobolectricTestRunner.class)
method setUp (line 65) | @Before
method shouldHaveNullCodeByDefault (line 71) | @Test
method shouldSetTheCode (line 80) | @Test
method shouldGetValidCodeRequestWhenUsingEmailAndCode (line 88) | @Test
method shouldGetValidCodeRequestWhenUsingEmailAndLink (line 102) | @Test
method shouldGetValidCodeRequestWhenUsingSMSAndCode (line 116) | @Test
method shouldGetValidCodeRequestWhenUsingSMSAndLink (line 130) | @Test
method shouldCallApiClientPasswordlessStartWhenUsingSMSAndLink (line 144) | @Test
method shouldCallApiClientPasswordlessStartWhenUsingSMSAndCode (line 156) | @Test
method shouldCallApiClientPasswordlessStartWhenUsingEmailAndLink (line 168) | @Test
method shouldCallApiClientPasswordlessStartWhenUsingEmailAndCode (line 180) | @Test
method shouldSetConnectionWhenUsingSMSAndLink (line 192) | @Test
method shouldSetConnectionWhenWhenUsingSMSAndCode (line 204) | @Test
method shouldSetConnectionWhenWhenUsingEmailAndLink (line 216) | @Test
method shouldSetConnectionWhenWhenUsingEmailAndCode (line 228) | @Test
method shouldGetValidLoginRequestWhenUsingEmailAndCode (line 240) | @Test
method shouldGetValidLoginRequestWhenUsingEmailAndLink (line 253) | @Test
method shouldGetValidLoginRequestWhenUsingSMSAndCode (line 266) | @Test
method shouldGetValidLoginRequestWhenUsingSMSAndLink (line 279) | @Test
method shouldCallApiClientPasswordlessLoginWhenUsingEmailAndCode (line 292) | @Test
method shouldCallApiClientPasswordlessLoginWhenUsingEmailAndLink (line 305) | @Test
method shouldCallApiClientPasswordlessLoginWhenUsingSMSAndCode (line 318) | @Test
method shouldCallApiClientPasswordlessLoginWhenUsingSMSAndLink (line 331) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ApplicationFetcherTest.java
class ApplicationFetcherTest (line 48) | @RunWith(RobolectricTestRunner.class)
method setUp (line 55) | @Before
method tearDown (line 67) | @After
method shouldReturnApplicationOnValidJSONPResponse (line 72) | @Test
method shouldReturnExceptionOnInvalidJSONPResponse (line 84) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ApplicationGsonTest.java
class ApplicationGsonTest (line 46) | public class ApplicationGsonTest extends GsonBaseTest {
method setUp (line 52) | @Before
method shouldFailWithEmptyJson (line 57) | @Test
method shouldFailWithInvalidJson (line 63) | @Test
method shouldRequireId (line 69) | @Test
method shouldRequireTenant (line 76) | @Test
method shouldRequireAuthorize (line 83) | @Test
method shouldAllowEmptyAuthorize (line 90) | @Test
method shouldRequireCallback (line 95) | @Test
method shouldAllowEmptyCallback (line 102) | @Test
method shouldRequireStrategies (line 107) | @Test
method shouldReturnApplication (line 114) | @Test
method buildApplicationFrom (line 123) | private List<Connection> buildApplicationFrom(Reader json) throws IOEx...
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ConfigurationTest.java
class ConfigurationTest (line 67) | @RunWith(RobolectricTestRunner.class)
method setUp (line 84) | @Before
method shouldKeepApplicationDefaultsIfOptionsAreNotModified (line 94) | @Test
method shouldGetValidStyleForNotOverriddenStrategy (line 115) | @Test
method shouldGetVisibleSignUpFieldsThreshold (line 121) | @Test
method shouldGetStyleForOverriddenStrategy (line 128) | @Test
method shouldMergeApplicationWithOptionsIfDefaultDatabaseExists (line 136) | @Test
method shouldNotMergeApplicationWithOptionsIfApplicationIsRestrictive (line 155) | @Test
method shouldNotUseClassicLockIfNoConnectionsAreAvailable (line 165) | @Test
method shouldUseClassicLockWithEnterpriseConnections (line 171) | @Test
method shouldUseClassicLockWithSocialConnections (line 177) | @Test
method shouldUseClassicLockWithDatabaseConnections (line 183) | @Test
method shouldNotUsePasswordlessIfNoConnectionsAreAvailable (line 189) | @Test
method shouldIgnoreAllowedScreenSettingsIfDatabaseConnectionsAreAvailable (line 195) | @Test
method shouldUsePasswordlessLockWithSocialConnections (line 204) | @Test
method shouldUsePasswordlessLockWithPasswordlessConnections (line 210) | @Test
method shouldPasswordlessLockNotBeAffectedByClassicLockScreenFlags (line 216) | @Test
method shouldSetExtraSignUpFields (line 225) | @Test
method shouldSetInitialScreenWhenDatabaseConnectionAvailable (line 240) | @Test
method shouldNotChangeInitialScreenWhenNoDatabaseConnectionAvailable (line 257) | @Test
method shouldPreferPasswordlessEmailOverSMSWhenBothAvailable (line 271) | @Test
method shouldSetCorrectPasswordlessTypeWhenUsingEmail (line 286) | @Test
method shouldSetCorrectPasswordlessTypeWhenUsingSMS (line 301) | @Test
method shouldNotHavePasswordlessModeWithoutConnections (line 316) | @Test
method shouldDefaultToCodePasswordlessWhenTypeMissingFromOptions (line 325) | @Test
method shouldNotFilterDefaultDBConnection (line 333) | @Test
method shouldHandleNoDBConnections (line 339) | @Test
method shouldFilterDBConnection (line 347) | @Test
method shouldReturnNullDBConnectionWhenNoneMatch (line 353) | @Test
method shouldReturnSpecifiedDBConnectionWhenMoreThanOneDBConnectionIsAvailable (line 359) | @Test
method shouldReturnSpecifiedDBConnectionIfAvailable (line 367) | @Test
method shouldIgnoreSpecifiedDBConnectionIfNotAvailable (line 376) | @Test
method shouldIgnoreSpecifiedDBConnectionIfFiltered (line 385) | @Test
method shouldReturnUnfilteredPasswordlessConnections (line 394) | @Test
method shouldReturnFilteredPasswordlessConnections (line 403) | @Test
method shouldPreferEmailPasswordlessConnection (line 411) | @Test
method shouldReturnEmptyPasswordlessConnectionIfNoneMatch (line 419) | @Test
method shouldIgnoreStrategyNameAndReturnFilteredConnections (line 426) | @Test
method shouldNotReturnFilteredSocialStrategiesWithoutConnections (line 434) | @Test
method shouldReturnUnfilteredSocialConnections (line 442) | @Test
method shouldReturnFilteredSocialConnections (line 451) | @Test
method shouldReturnEmptySocialConnectionsIfNoneMatch (line 458) | @Test
method shouldReturnUnfilteredEnterpriseConnections (line 464) | @Test
method shouldAllowEnterpriseActiveFlowByDefault (line 474) | @Test
method shouldDisableEnterpriseActiveFlowOnGivenConnections (line 487) | @Test
method shouldNotFilterEnterpriseConnectionsByWebAuthEnabled (line 504) | @Test
method shouldReturnFilteredEnterpriseConnections (line 516) | @Test
method shouldReturnEmptyEnterpriseConnectionsIfNoneMatch (line 522) | @Test
method shouldHaveDefaultPrivacyPolicyURL (line 528) | @Test
method shouldHaveCustomPrivacyPolicyURL (line 535) | @Test
method shouldHaveDefaultTermsOfServiceURL (line 543) | @Test
method shouldHaveCustomTermsOfServiceURL (line 550) | @Test
method shouldNotHaveDefaultSupportURL (line 558) | @Test
method shouldHaveCustomSupportURL (line 564) | @Test
method shouldHaveMustAcceptTermsEnabled (line 572) | @Test
method shouldHaveShowTermsDisabled (line 579) | @Test
method shouldNotUseLabeledSubmitButton (line 586) | @Test
method shouldGetPasswordPolicy (line 593) | @Test
method shouldHideMainScreenTitle (line 602) | @Test
method shouldUsePasswordlessAutoSubmit (line 609) | @Test
method unfilteredConfig (line 616) | private Configuration unfilteredConfig() {
method filteredConfigBy (line 620) | private Configuration filteredConfigBy(String... names) {
method createVisibleSignUpFields (line 625) | private List<SignUpField> createVisibleSignUpFields() {
method createHiddenSignUpFields (line 635) | private List<SignUpField> createHiddenSignUpFields() {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ConnectionGsonTest.java
class ConnectionGsonTest (line 49) | public class ConnectionGsonTest extends GsonBaseTest {
method setUp (line 59) | @Before
method shouldFailWithEmptyJson (line 64) | @Test
method shouldFailWithInvalidJson (line 70) | @Test
method shouldRequireName (line 76) | @Test
method shouldRequireConnections (line 82) | @Test
method shouldReturnStrategy (line 88) | @Test
method shouldReturnConnectionName (line 97) | @Test
method shouldReturnEnterpriseConnections (line 105) | @Test
method shouldReturnSocial (line 117) | @Test
method shouldReturnDatabase (line 128) | @Test
method shouldReturnDatabaseWithComplexity (line 145) | @Test
method buildConnectionsFrom (line 162) | private List<Connection> buildConnectionsFrom(Reader json) throws IOEx...
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ConnectionMatcher.java
class ConnectionMatcher (line 31) | public class ConnectionMatcher<T extends BaseConnection> extends BaseMat...
method ConnectionMatcher (line 38) | public ConnectionMatcher(String strategy, String name, @AuthType Integ...
method matches (line 44) | @Override
method describeTo (line 65) | @Override
method describeMismatch (line 75) | @Override
method hasConnection (line 87) | public static ConnectionMatcher hasConnection(String strategy, String ...
method hasName (line 91) | public static ConnectionMatcher hasName(String name) {
method hasStrategy (line 95) | public static ConnectionMatcher hasStrategy(String name) {
method hasType (line 99) | public static ConnectionMatcher hasType(@AuthType int type) {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ConnectionTest.java
class ConnectionTest (line 45) | @RunWith(RobolectricTestRunner.class)
method shouldBuildConnectionWithName (line 56) | @Test
method shouldBuildConnectionWithValues (line 66) | @Test
method shouldNotStoreNameInValues (line 75) | @Test
method shouldRaiseExceptionWhenNameIsNull (line 83) | @Test
method shouldReturnValueFromKey (line 90) | @Test
method shouldReturnNullValueFromMissingKey (line 100) | @Test
method shouldReturnNullValueOnWrongClassType (line 109) | @Test
method shouldReturnBooleanFromKey (line 119) | @Test
method shouldReturnBooleanFromMissingKey (line 129) | @Test
method shouldReturnBooleanFromNullValue (line 138) | @Test
method shouldReturnUnknownSocial (line 148) | @Test
method shouldReturnSocial (line 154) | @Test
method shouldReturnValidDatabaseStrategy (line 233) | @Test
method shouldReturnValidPasswordlessStrategy (line 239) | @Test
method shouldReturnEnterprise (line 248) | @Test
method shouldDisableActiveFlowOnDemand (line 292) | @Test
method connectionForStrategy (line 300) | private Connection connectionForStrategy(String connectionName) {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/DatabaseConnectionTest.java
class DatabaseConnectionTest (line 15) | public class DatabaseConnectionTest {
method shouldRequireUsername (line 17) | @Test
method shouldNotRequireUsername (line 27) | @Test
method shouldShowSignup (line 37) | @Test
method shouldNotShowSignup (line 47) | @Test
method shouldShowForgot (line 57) | @Test
method shouldNotShowForgot (line 67) | @Test
method shouldGetExcellentPasswordPolicy (line 77) | @Test
method shouldGetFairPasswordPolicy (line 88) | @Test
method shouldGetGoodPasswordPolicy (line 100) | @Test
method shouldGetLowPasswordPolicy (line 112) | @Test
method shouldGetNonePasswordPolicy (line 124) | @Test
method shouldGetMinPasswordLength (line 135) | @Test
method shouldGetMinMaxUsernameLength (line 149) | @Test
method shouldGetNonEmptyMinMaxUsernameLengthIfMissingMinMaxValues (line 165) | @Test
method shouldGetNonEmptyMinMaxUsernameLengthIfMissingUsernameValidation (line 179) | @Test
method shouldGetNonEmptyMinMaxUsernameLengthIfMissingValidation (line 191) | @Test
method shouldGetNonEmptyMinMaxUsernameLengthIfMaxIsLowerThanMin (line 201) | @Test
method shouldGetNonEmptyMinMaxUsernameLengthIfMaxIsMissing (line 217) | @Test
method shouldGetNonEmptyMinMaxUsernameLengthIfMinIsMissing (line 232) | @Test
method shouldBeCustomDatabaseIfMissingValidation (line 247) | @Test
method shouldBeCustomDatabaseIfMissingUsernameValidation (line 256) | @Test
method shouldNotBeCustomDatabaseIfContainsUsernameValidation (line 267) | @Test
method shouldHaveName (line 280) | @Test
method shouldHaveStrategy (line 288) | @Test
method shouldBeDatabaseType (line 296) | @Test
method connectionFor (line 304) | private DatabaseConnection connectionFor(Map<String, Object> values) {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/EnterpriseConnectionMatcherTest.java
class EnterpriseConnectionMatcherTest (line 48) | @RunWith(RobolectricTestRunner.class)
method setUp (line 65) | @Before
method shouldExtractTheUsername (line 73) | @Test
method shouldParseTheConnection (line 79) | @Test
method shouldNotFindAnUnknownDomain (line 89) | @Test
method shouldReturnTheMainDomain (line 95) | @Test
method shouldFailToGetConnectionIfNotValidDomain (line 101) | @Test
method shouldFailToGetConnectionIfInstantiatedWithEmptyStrategies (line 107) | @Test
method createConnection (line 114) | private Connection createConnection() {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/GsonBaseTest.java
class GsonBaseTest (line 35) | public abstract class GsonBaseTest {
method pojoFrom (line 42) | <T> T pojoFrom(Reader json, Class<T> clazz) throws IOException {
method pojoFrom (line 46) | <T> T pojoFrom(Reader json, TypeToken<T> type) throws IOException {
method json (line 50) | FileReader json(String name) throws FileNotFoundException {
method createGson (line 54) | public Gson createGson() {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/OAuthConnectionTest.java
class OAuthConnectionTest (line 15) | public class OAuthConnectionTest {
method shouldHaveName (line 17) | @Test
method shouldHaveStrategy (line 25) | @Test
method shouldBeSocialType (line 33) | @Test
method shouldBeEnterpriseType (line 39) | @Test
method shouldReturnDomainNameInSet (line 45) | @Test
method shouldReturnAllDomainNamesAsSet (line 54) | @Test
method shouldReturnEmptySetWithNoDomainName (line 64) | @Test
method shouldHaveResourceOwnerEnabledIfADFS (line 72) | @Test
method shouldHaveResourceOwnerEnabledIfWaad (line 78) | @Test
method shouldHaveResourceOwnerEnabledIfActiveDirectory (line 84) | @Test
method shouldNotHaveResourceOwnerEnabledByDefault (line 90) | @Test
method shouldNotHaveResourceOwnerEnabledIfNotADFSWaadOrActiveDirectory (line 96) | @Test
method connectionForStrategy (line 119) | private OAuthConnection connectionForStrategy(String name) {
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/OptionsTest.java
class OptionsTest (line 40) | @RunWith(RobolectricTestRunner.class)
method setUp (line 56) | @Before
method shouldSetAccount (line 62) | @Test
method shouldSetMustAcceptTerms (line 78) | @Test
method shouldSetShowTerms (line 91) | @Test
method shouldSetPrivacyPolicyURL (line 104) | @Test
method shouldThrowWhenSettingPrivacyPolicyURLWithInvalidURL (line 117) | @Test
method shouldSetTermsOfServiceURL (line 124) | @Test
method shouldThrowWhenSettingTermsOfServiceURLWithInvalidURL (line 137) | @Test
method shouldSetSupportURL (line 144) | @Test
method shouldThrowWhenSettingSupportURLWithInvalidURL (line 157) | @Test
method shouldUseLabeledSubmitButton (line 164) | @Test
method shouldHideMainScreenTitle (line 177) | @Test
method shouldSetPasswordlessAutoSubmit (line 191) | @Test
method shouldBeClosable (line 204) | @Test
method shouldNotLoginAfterSignUp (line 217) | @Test
method shouldSetVisibleSignUpFieldsThreshold (line 230) | @Test
method shouldChangeInitialScreenToLogIn (line 243) | @Test
method shouldUseDefaultVisibleSignUpFieldThreshold (line 256) | @Test
method shouldChangeInitialScreenToSignUp (line 267) | @Test
method shouldChangeInitialScreenToForgotPassword (line 280) | @Test
method shouldUseEmailUsernameStyle (line 293) | @Test
method shouldUseUsernameUsernameStyle (line 306) | @Test
method shouldUseDefaultUsernameStyle (line 319) | @Test
method shouldAllowLogIn (line 332) | @Test
method shouldAllowSignUp (line 345) | @Test
method shouldAllowForgotPassword (line 358) | @Test
method shouldAllowShowPassword (line 371) | @Test
method shouldUsePasswordlessCode (line 384) | @Test
method shouldHavePasswordlessCodeByDefault (line 397) | @Test
method shouldSetDefaultDatabaseConnection (line 409) | @Test
method shouldSetDefaultTheme (line 422) | @Test
method shouldSetCustomTheme (line 434) | @Test
method shouldSetConnections (line 459) | @Test
method shouldSetEnterpriseConnectionsUsingWebForm (line 473) | @Test
method shouldSetAuthenticationParameters (line 486) | @Test
method shouldSetConnectionScope (line 498) | @Test
method shouldSetScope (line 517) | @Test
method shouldSetAudience (line 530) | @Test
method shouldSetScheme (line 543) | @Test
method shouldSetCustomTabsOptions (line 556) | @Test
method shouldAddAuthStyles (line 570) | @SuppressWarnings("ResourceType")
method shouldSetCustomFields (line 592) | @Test
method shouldGetEmptyCustomFieldsIfNotSet (line 609) | @Test
method shouldSetDeviceParameterIfUsingOfflineAccessScope (line 622) | @Test
method shouldNotOverrideDeviceParameterIfAlreadySet (line 639) | @Test
method shouldSetDefaultValues (line 657) | @Test
method shouldSetAllTrueFields (line 688) | @Test
method shouldSetAllFalseFields (line 725) | @Test
method createAuthenticationParameters (line 763) | private HashMap<String, String> createAuthenticationParameters(int inn...
method shouldCreateAuthenticationAPIClientInstance (line 770) | @Test
method createCustomFields (line 777) | private List<SignUpField> createCustomFields() {
method createConnections (line 787) | private List<String> createConnections(String... connections) {
method createEnterpriseConnectionsUsingWebForm (line 791) | private List<String> createEnterpriseConnectionsUsingWebForm(String......
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/PasswordlessConnectionTest.java
class PasswordlessConnectionTest (line 12) | public class PasswordlessConnectionTest {
method shouldHaveName (line 14) | @Test
method shouldHaveStrategy (line 22) | @Test
method shouldBePasswordlessType (line 30) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/internal/configuration/ThemeTest.java
class ThemeTest (line 51) | @RunWith(RobolectricTestRunner.class)
method setUp (line 65) | @Before
method shouldResolveDefaultHeaderTitle (line 70) | @Test
method shouldResolveDefaultHeaderLogo (line 80) | @Test
method shouldResolveDefaultHeaderColor (line 92) | @Test
method shouldResolveDefaultHeaderTitleColor (line 102) | @Test
method shouldResolveDefaultPrimaryColor (line 112) | @Test
method shouldResolveDefaultDarkPrimaryColor (line 122) | @Test
method shouldResolveCustomHeaderTitle (line 133) | @Test
method shouldResolveCustomHeaderLogo (line 143) | @Test
method shouldResolveCustomHeaderColor (line 154) | @Test
method shouldResolveCustomHeaderTitleColor (line 164) | @Test
method shouldResolveCustomPrimaryColor (line 174) | @Test
method shouldResolveCustomDarkPrimaryColor (line 184) | @Test
method shouldSetHeaderTitle (line 194) | @Test
method shouldSetHeaderLogo (line 201) | @Test
method shouldSetHeaderColor (line 208) | @Test
method shouldSetHeaderTitleColor (line 215) | @Test
method shouldSetPrimaryColor (line 222) | @Test
method shouldSetDarkPrimaryColor (line 229) | @Test
method shouldNotHaveCustomValues (line 236) | @Test
method getLockThemeResourceId (line 247) | private int getLockThemeResourceId(Context context, @AttrRes int attrR...
FILE: lib/src/test/java/com/auth0/android/lock/provider/AuthResolverTest.java
class AuthResolverTest (line 45) | @RunWith(RobolectricTestRunner.class)
method shouldHaveReturnNullWhenNoAuthHandlers (line 49) | @Test
method shouldKeepACopyOfTheList (line 54) | @Test
method shouldSetAuthHandlers (line 73) | @Test
method shouldRespectAuthHandlersOrder (line 90) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/utils/ApplicationAPI.java
class ApplicationAPI (line 34) | public class ApplicationAPI {
method ApplicationAPI (line 38) | public ApplicationAPI(SSLTestUtils sslUtils) throws IOException {
method getDomain (line 43) | public String getDomain() {
method shutdown (line 47) | public void shutdown() throws IOException {
method takeRequest (line 51) | public RecordedRequest takeRequest() throws InterruptedException {
method willReturnValidJSONPResponse (line 55) | public void willReturnValidJSONPResponse() {
method willReturnInvalidJSONPLengthResponse (line 59) | public void willReturnInvalidJSONPLengthResponse() {
method willReturnApplicationResponseWithBody (line 63) | private void willReturnApplicationResponseWithBody(String body, int st...
method responseWithJSON (line 71) | private MockResponse responseWithJSON(String json, int statusCode) {
FILE: lib/src/test/java/com/auth0/android/lock/utils/Auth0AuthenticationCallbackMatcher.java
class Auth0AuthenticationCallbackMatcher (line 45) | public class Auth0AuthenticationCallbackMatcher<T> extends BaseMatcher<A...
method Auth0AuthenticationCallbackMatcher (line 49) | public Auth0AuthenticationCallbackMatcher(Matcher<T> payloadMatcher, M...
method matches (line 54) | @Override
method describeTo (line 67) | @Override
method hasPayloadOfType (line 73) | public static <T> Matcher<AuthenticationCallback<T>> hasPayloadOfType(...
method hasPayloadOfType (line 77) | public static <T> Matcher<AuthenticationCallback<T>> hasPayloadOfType(...
method hasPayload (line 81) | public static <T> Matcher<AuthenticationCallback<T>> hasPayload(T payl...
method hasNoPayloadOfType (line 85) | public static <T> Matcher<AuthenticationCallback<T>> hasNoPayloadOfTyp...
method hasNoPayloadOfType (line 89) | public static <T> Matcher<AuthenticationCallback<T>> hasNoPayloadOfTyp...
method hasNoError (line 93) | public static Matcher<AuthenticationCallback<Void>> hasNoError() {
method hasError (line 97) | public static Matcher<AuthenticationCallback<Void>> hasError() {
FILE: lib/src/test/java/com/auth0/android/lock/utils/AuthenticationCallbackMatcher.java
class AuthenticationCallbackMatcher (line 46) | public class AuthenticationCallbackMatcher extends BaseMatcher<MockLockC...
method AuthenticationCallbackMatcher (line 51) | public AuthenticationCallbackMatcher(Matcher<Credentials> authenticati...
method matches (line 57) | @Override
method describeTo (line 70) | @Override
method isCanceled (line 76) | public static AuthenticationCallbackMatcher isCanceled() {
method hasAuthentication (line 80) | public static AuthenticationCallbackMatcher hasAuthentication() {
method hasError (line 84) | public static AuthenticationCallbackMatcher hasError() {
method hasNoError (line 88) | public static AuthenticationCallbackMatcher hasNoError() {
method hasPayloadOfType (line 92) | public static <T> CallbackMatcher<T, AuthenticationException> hasPaylo...
method hasPayload (line 96) | public static <T> CallbackMatcher<T, AuthenticationException> hasPaylo...
method hasNoPayloadOfType (line 100) | public static <T> CallbackMatcher<T, AuthenticationException> hasNoPay...
FILE: lib/src/test/java/com/auth0/android/lock/utils/CallbackMatcher.java
class CallbackMatcher (line 41) | public class CallbackMatcher<T, U extends Auth0Exception> extends BaseMa...
method CallbackMatcher (line 45) | public CallbackMatcher(Matcher<T> payloadMatcher, Matcher<U> errorMatc...
method matches (line 50) | @Override
method describeTo (line 63) | @Override
method hasPayloadOfType (line 69) | public static <T, U extends Auth0Exception> Matcher<MockCallback<T, U>...
method hasPayloadOfType (line 73) | public static <T, U extends Auth0Exception> Matcher<MockCallback<T, U>...
method hasErrorOfType (line 77) | public static <T, U extends Auth0Exception> Matcher<MockCallback<T, U>...
method hasPayload (line 81) | public static <T, U extends Auth0Exception> Matcher<MockCallback<T, U>...
method hasNoPayloadOfType (line 85) | public static <T, U extends Auth0Exception> Matcher<MockCallback<T, U>...
method hasNoPayloadOfType (line 89) | public static <T, U extends Auth0Exception> Matcher<MockCallback<T, U>...
method hasNoError (line 93) | public static <U extends Auth0Exception> Matcher<MockCallback<Void, U>...
method hasError (line 97) | public static <U extends Auth0Exception> Matcher<MockCallback<Void, U>...
FILE: lib/src/test/java/com/auth0/android/lock/utils/CustomFieldTest.java
class CustomFieldTest (line 51) | @RunWith(RobolectricTestRunner.class)
method shouldThrowIfKeyIsEmpty (line 65) | @Test
method shouldThrowIfKeyIsUserMetadataAndStorageIsRoot (line 72) | @Test
method shouldCreateWithDefaultValues (line 79) | @Test
method shouldCreate (line 90) | @Test
method shouldBeParcelable (line 100) | @Test
method shouldConfigureTheEmailField (line 115) | @Test
method shouldConfigureTheNameField (line 128) | @Test
method shouldConfigureThePhoneNumberField (line 141) | @Test
method shouldConfigureTheNumberField (line 154) | @Test
method shouldObtainTheValue (line 167) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/utils/HiddenFieldTest.java
class HiddenFieldTest (line 9) | public class HiddenFieldTest {
method setUp (line 15) | @Before
method shouldGetKey (line 20) | @Test
method shouldGetStorage (line 25) | @Test
method shouldGetValue (line 30) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/utils/MockAuthenticationCallback.java
class MockAuthenticationCallback (line 32) | public class MockAuthenticationCallback<T> implements AuthenticationCall...
method onFailure (line 37) | @Override
method onSuccess (line 42) | @Override
method error (line 47) | public Callable<AuthenticationException> error() {
method payload (line 56) | public Callable<T> payload() {
method getError (line 65) | public AuthenticationException getError() {
method getPayload (line 69) | public T getPayload() {
FILE: lib/src/test/java/com/auth0/android/lock/utils/MockCallback.java
class MockCallback (line 35) | public class MockCallback<T, U extends Auth0Exception> implements Callba...
method onSuccess (line 40) | @Override
method onFailure (line 45) | @Override
method payload (line 50) | public Callable<T> payload() {
method error (line 59) | public Callable<U> error() {
method getPayload (line 68) | public T getPayload() {
method getError (line 72) | public U getError() {
FILE: lib/src/test/java/com/auth0/android/lock/utils/MockLockCallback.java
class MockLockCallback (line 35) | public class MockLockCallback extends AuthenticationCallback {
method authentication (line 40) | public Callable<Credentials> authentication() {
method canceled (line 44) | public Callable<Boolean> canceled() {
method error (line 48) | public Callable<AuthenticationException> error() {
method onAuthentication (line 52) | @Override
method onError (line 57) | @Override
method getCredentials (line 62) | public Credentials getCredentials() {
method getError (line 66) | public AuthenticationException getError() {
FILE: lib/src/test/java/com/auth0/android/lock/utils/SSLTestUtils.java
class SSLTestUtils (line 16) | public class SSLTestUtils {
method SSLTestUtils (line 22) | public SSLTestUtils() throws UnknownHostException {
method createMockWebServer (line 47) | MockWebServer createMockWebServer() {
FILE: lib/src/test/java/com/auth0/android/lock/utils/TypeTokenMatcher.java
class TypeTokenMatcher (line 8) | public class TypeTokenMatcher<T> extends BaseMatcher<T> {
method TypeTokenMatcher (line 12) | private TypeTokenMatcher(TypeToken<T> typeToken, boolean shouldBeNull) {
method isA (line 17) | public static <T> TypeTokenMatcher<T> isA(TypeToken<T> typeToken) {
method isNull (line 21) | public static <T> TypeTokenMatcher<T> isNull(TypeToken<T> typeToken) {
method describeTo (line 25) | @Override
method matches (line 30) | @Override
FILE: lib/src/test/java/com/auth0/android/lock/views/AuthConfigTest.java
class AuthConfigTest (line 24) | @RunWith(RobolectricTestRunner.class)
method setUp (line 31) | @Before
method shouldGetConnection (line 39) | @Test
method shouldGetName (line 44) | @Test
method shouldGetLogo (line 51) | @Test
method shouldGetBackgroundColor (line 61) | @Test
method shouldHaveValidDefaultName (line 68) | @Test
method shouldHaveValidDefaultLogo (line 75) | @Test
method shouldHaveValidDefaultColor (line 86) | @Test
method shouldGetStyleForStrategy (line 94) | @Test
method shouldGetDefaultStyleForUnknownStrategy (line 135) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/views/CustomFieldsFormViewTest.java
class CustomFieldsFormViewTest (line 23) | public class CustomFieldsFormViewTest {
method shouldConvertCustomFieldsToMap (line 25) | @Test
FILE: lib/src/test/java/com/auth0/android/lock/views/PasswordStrengthViewTest.java
class PasswordStrengthViewTest (line 18) | @RunWith(RobolectricTestRunner.class)
method setUp (line 47) | @Before
method shouldHandlePasswordStrengthNONE (line 53) | @Test
method shouldHandlePasswordStrengthLOW (line 81) | @Test
method shouldHandlePasswordStrengthFAIR (line 109) | @Test
method shouldHandlePasswordStrengthGOOD (line 137) | @Test
method shouldHandlePasswordStrengthEXCELLENT (line 165) | @Test
method shouldOverrideMinLength (line 193) | @Test
Condensed preview — 233 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,111K chars).
[
{
"path": ".editorconfig",
"chars": 33,
"preview": "root = true\n\n[*]\nend_of_line = lf"
},
{
"path": ".gitattributes",
"chars": 330,
"preview": "# We'll let Git's auto-detection algorithm infer if a file is text. If it is,\n# enforce LF line endings regardless of OS"
},
{
"path": ".github/CODEOWNERS",
"chars": 44,
"preview": "*\t@auth0/project-dx-sdks-engineer-codeowner\n"
},
{
"path": ".github/ISSUE_TEMPLATE/Bug Report.yml",
"chars": 2534,
"preview": "name: 🐞 Report a bug\ndescription: Have you found a bug or issue? Create a bug report for this library\nlabels: [\"bug\"]\n\nb"
},
{
"path": ".github/ISSUE_TEMPLATE/Feature Request.yml",
"chars": 2184,
"preview": "name: 🧩 Feature request\ndescription: Suggest an idea or a feature for this library\nlabels: [\"feature request\"]\n\nbody:\n "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 164,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Auth0 Community\n url: https://community.auth0.com\n about: Dis"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1392,
"preview": "### Changes\n\nPlease describe both what is changing and why this is important. Include:\n\n- Classes and methods added, del"
},
{
"path": ".github/actions/get-prerelease/action.yml",
"chars": 707,
"preview": "name: Return a boolean indicating if the version contains prerelease identifiers\n\n#\n# Returns a simple true/false boolea"
},
{
"path": ".github/actions/get-release-notes/action.yml",
"chars": 1236,
"preview": "name: Return the release notes extracted from the body of the PR associated with the release.\n\n#\n# Returns the release n"
},
{
"path": ".github/actions/get-version/action.yml",
"chars": 406,
"preview": "name: Return the version extracted from the branch name\n\n#\n# Returns the version from the .version file.\n#\n# TODO: Remov"
},
{
"path": ".github/actions/maven-publish/action.yml",
"chars": 1994,
"preview": "name: Publish release to Java\n\ninputs:\n ossr-username:\n required: true\n ossr-password:\n required: true\n signing"
},
{
"path": ".github/actions/release-create/action.yml",
"chars": 993,
"preview": "name: Create a GitHub release\n\n#\n# Creates a GitHub release with the given version.\n#\n# TODO: Remove once the common rep"
},
{
"path": ".github/actions/setup/action.yml",
"chars": 749,
"preview": "name: Configure CI\ndescription: Performs the initial configuration of the CI environment\n\ninputs:\n java:\n descriptio"
},
{
"path": ".github/actions/tag-exists/action.yml",
"chars": 966,
"preview": "name: Return a boolean indicating if a tag already exists for the repository\n\n#\n# Returns a simple true/false boolean in"
},
{
"path": ".github/dependabot.yml",
"chars": 118,
"preview": "version: 2\nupdates:\n - package-ecosystem: 'github-actions'\n directory: '/'\n schedule:\n interval: 'weekly'\n"
},
{
"path": ".github/stale.yml",
"chars": 971,
"preview": "# Configuration for probot-stale - https://github.com/probot/stale\n\n# Number of days of inactivity before an Issue or Pu"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 1280,
"preview": "name: CodeQL\n\non:\n merge_group:\n pull_request:\n types:\n - opened\n - synchronize\n push:\n branches:\n "
},
{
"path": ".github/workflows/java-release.yml",
"chars": 3043,
"preview": "name: Create Java and GitHub Release\n\non:\n workflow_call:\n inputs:\n java-version:\n required: true\n "
},
{
"path": ".github/workflows/release.yml",
"chars": 1003,
"preview": "name: Create GitHub Release\n\non:\n pull_request:\n types:\n - closed\n workflow_dispatch:\n\npermissions:\n contents"
},
{
"path": ".github/workflows/sca_scan.yml",
"chars": 165,
"preview": "name: SCA\n\non:\n push:\n branches: [\"master\", \"main\"]\n\njobs:\n snyk-cli:\n uses: auth0/devsecops-tooling/.github/wor"
},
{
"path": ".github/workflows/test.yml",
"chars": 622,
"preview": "name: Build and Test\n\non:\n merge_group:\n workflow_dispatch:\n pull_request:\n branches:\n - main\n push:\n bra"
},
{
"path": ".gitignore",
"chars": 1551,
"preview": "# Created by https://www.gitignore.io/api/intellij,android,osx,windows\n\n### Intellij ###\n# Covers JetBrains IDEs: Intell"
},
{
"path": ".shiprc",
"chars": 117,
"preview": "{\n \"files\": {\n \"auth0/build.gradle\": [],\n \".version\": [],\n \"README.md\": []\n },\n \"prefixVersion\": false\n}\n"
},
{
"path": ".version",
"chars": 5,
"preview": "3.2.2"
},
{
"path": "CHANGELOG.md",
"chars": 42685,
"preview": "# Change Log\n\n## [3.2.1](https://github.com/auth0/Lock.Android/tree/3.2.2) (2023-01-11)\n[Full Changelog](https://github."
},
{
"path": "EXAMPLES.md",
"chars": 3746,
"preview": "# Examples using Lock.Android\n\n- [Examples using Lock.Android](#examples-using-lockandroid)\n - [Passwordless & Social a"
},
{
"path": "LICENSE.md",
"chars": 1116,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Auth0, Inc. <support@auth0.com> (http://auth0.com)\n\nPermission is hereby grant"
},
{
"path": "MIGRATION_GUIDE.md",
"chars": 9269,
"preview": "# Migration Guide\nThis guide will help you migrate Lock.Android from version v2.x.x to version v3.x.x. \n\n## About this r"
},
{
"path": "README.md",
"chars": 9055,
"preview": "> **Note**\n> As part of our ongoing commitment to best security practices, we have rotated the signing keys used to sign"
},
{
"path": "app/.gitignore",
"chars": 1601,
"preview": "# Created by https://www.gitignore.io/api/intellij,android,osx,windows\n\n### Intellij ###\n# Covers JetBrains IDEs: Intell"
},
{
"path": "app/build.gradle",
"chars": 1354,
"preview": "plugins {\n id \"com.android.application\"\n}\napply plugin: 'kotlin-android'\n\nandroid {\n compileSdkVersion 33\n\n def"
},
{
"path": "app/proguard-rules.pro",
"chars": 755,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /L"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 821,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/tools\"\n"
},
{
"path": "app/src/main/java/com/auth0/android/lock/app/DemoActivity.kt",
"chars": 11714,
"preview": "/*\n * DemoActivity.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "app/src/main/res/layout/demo_activity.xml",
"chars": 15215,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:"
},
{
"path": "app/src/main/res/values/auth0.xml",
"chars": 1343,
"preview": "<!--\n ~ auth0.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0.com)\n ~\n ~ Permission is hereby granted, free of cha"
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 208,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#3F51B5</color>\n <color name=\"color"
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 1116,
"preview": "<resources>\n <string name=\"app_name\">Lock Demo</string>\n <string name=\"native_provider_message_invalid_authorize_u"
},
{
"path": "app/src/main/res/values/styles.xml",
"chars": 383,
"preview": "<resources>\n\n <!-- Base application theme. -->\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar"
},
{
"path": "build.gradle",
"chars": 569,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n e"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 202,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradle.properties",
"chars": 909,
"preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
},
{
"path": "gradlew",
"chars": 5296,
"preview": "#!/usr/bin/env sh\n\n##############################################################################\n##\n## Gradle start up"
},
{
"path": "gradlew.bat",
"chars": 2176,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "lib/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "lib/build.gradle",
"chars": 2687,
"preview": "plugins {\n id \"com.auth0.gradle.oss-library.android\" version \"0.18.0\"\n}\n\nlogger.lifecycle(\"Using version ${version} f"
},
{
"path": "lib/lint.xml",
"chars": 3516,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<lint>\n <issue id=\"IconDuplicates\">\n <ignore path=\"src/main/res/drawabl"
},
{
"path": "lib/proguard-rules.pro",
"chars": 666,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
},
{
"path": "lib/src/main/AndroidManifest.xml",
"chars": 2729,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/tools\"\n"
},
{
"path": "lib/src/main/assets/com_auth0_lock_passwordless_countries.json",
"chars": 2867,
"preview": "{\"BY\":\"+375\",\"SG\":\"+65\",\"TJ\":\"+992\",\"BB\":\"+1 246\",\"ER\":\"+291\",\"IM\":\"+44\",\"ID\":\"+62\",\"LS\":\"+266\",\"PW\":\"+680\",\"MF\":\"+590\","
},
{
"path": "lib/src/main/java/com/auth0/android/lock/Auth0Parcelable.java",
"chars": 3317,
"preview": "/*\n * Auth0Parcelable.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/AuthButtonSize.java",
"chars": 1662,
"preview": "/*\n * SocialButtonStyle.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/AuthenticationCallback.java",
"chars": 3241,
"preview": "/*\n * LockAuthenticationCallback.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby grant"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/Constants.java",
"chars": 2612,
"preview": "/*\n * Constants.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/CountryCodeActivity.java",
"chars": 5496,
"preview": "/*\n * CountryCodeActivity.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fre"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/InitialScreen.java",
"chars": 1681,
"preview": "/*\n * InitialScreen.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of c"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/Lock.java",
"chars": 25582,
"preview": "/*\n * Lock.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charge, to"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/LockActivity.java",
"chars": 26447,
"preview": "/*\n * LockActivity.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/LockCallback.java",
"chars": 2617,
"preview": "/*\n * AuthenticationCallback.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/PasswordlessIdentityHelper.java",
"chars": 3345,
"preview": "package com.auth0.android.lock;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport androi"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/PasswordlessLock.java",
"chars": 16865,
"preview": "/*\n * PasswordlessLock.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free o"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/PasswordlessLockActivity.java",
"chars": 23739,
"preview": "/*\n * LockPasswordlessActivity.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/UsernameStyle.java",
"chars": 1657,
"preview": "/*\n * UsernameStyle.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of c"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/WebCallbackWrapper.java",
"chars": 881,
"preview": "package com.auth0.android.lock;\n\nimport androidx.annotation.NonNull;\n\nimport com.auth0.android.authentication.Authentica"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/WebProvider.java",
"chars": 3247,
"preview": "package com.auth0.android.lock;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport androidx.annotation"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/adapters/Country.java",
"chars": 1979,
"preview": "/*\n * Country.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charge,"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/adapters/CountryAdapter.java",
"chars": 4141,
"preview": "/*\n * CountryAdapter.java\n *\n * Copyright (c) 2015 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/errors/AuthenticationError.java",
"chars": 2204,
"preview": "/*\n * AuthenticationError.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fre"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/errors/ErrorMessageBuilder.java",
"chars": 257,
"preview": "package com.auth0.android.lock.errors;\n\nimport androidx.annotation.NonNull;\n\nimport com.auth0.android.Auth0Exception;\n\np"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/errors/LoginErrorMessageBuilder.java",
"chars": 4736,
"preview": "/*\n * LoginAuthenticationError.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/errors/SignUpErrorMessageBuilder.java",
"chars": 3450,
"preview": "/*\n * SignUpAuthenticationErrorBuilder.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/CountryCodeChangeEvent.java",
"chars": 1245,
"preview": "/*\n * CountryCodeEventRequest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted,"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/DatabaseChangePasswordEvent.java",
"chars": 1562,
"preview": "/*\n * DbChangePasswordEvent.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, f"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/DatabaseEvent.java",
"chars": 2292,
"preview": "/*\n * EmailEvent.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of char"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/DatabaseLoginEvent.java",
"chars": 2659,
"preview": "/*\n * DbConnectionEvent.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/DatabaseSignUpEvent.java",
"chars": 3451,
"preview": "/*\n * DbSignUpEvent.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of c"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/FetchApplicationEvent.java",
"chars": 1242,
"preview": "/*\n * FetchApplicationEvent.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, f"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/LockMessageEvent.java",
"chars": 347,
"preview": "package com.auth0.android.lock.events;\n\nimport androidx.annotation.StringRes;\n\npublic class LockMessageEvent {\n\n @Str"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/OAuthLoginEvent.java",
"chars": 2294,
"preview": "package com.auth0.android.lock.events;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/events/PasswordlessLoginEvent.java",
"chars": 5515,
"preview": "/*\n * PasswordlessLoginEvent.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/ApplicationDeserializer.java",
"chars": 3712,
"preview": "/*\n * ApplicationDeserializer.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted,"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/ApplicationFetcher.java",
"chars": 6223,
"preview": "/*\n * ApplicationFetcher.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/AuthMode.java",
"chars": 467,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.IntDef;\n\nimport java.lang.annotation."
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/AuthType.java",
"chars": 710,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.IntDef;\n\nimport java.lang.annotation."
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/BaseConnection.java",
"chars": 874,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.N"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/Configuration.java",
"chars": 12577,
"preview": "/*\n * Configuration.java\n *\n * Copyright (c) 2015 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of c"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/Connection.java",
"chars": 7015,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.N"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/DatabaseConnection.java",
"chars": 1538,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.NonNull;\n\npublic interface DatabaseCo"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/GsonDeserializer.java",
"chars": 2124,
"preview": "/*\n * JsonUtils.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/OAuthConnection.java",
"chars": 577,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.Set;\n\npubl"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/Options.java",
"chars": 19258,
"preview": "/*\n * LockOptions.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of cha"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/PasswordComplexity.java",
"chars": 874,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.Nullable;\n\npublic class PasswordCompl"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/PasswordStrength.java",
"chars": 808,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport androidx.annotation.IntDef;\n\nimport java.lang.annotation."
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/PasswordlessConnection.java",
"chars": 123,
"preview": "package com.auth0.android.lock.internal.configuration;\n\npublic interface PasswordlessConnection extends BaseConnection {"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/PasswordlessMode.java",
"chars": 2026,
"preview": "/*\n * PasswordlessMode.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free o"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/internal/configuration/Theme.java",
"chars": 7637,
"preview": "/*\n * Theme.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/provider/AuthResolver.java",
"chars": 1618,
"preview": "package com.auth0.android.lock.provider;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimpo"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/utils/CustomField.java",
"chars": 6428,
"preview": "/*\n * CustomField.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of cha"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/utils/EnterpriseConnectionMatcher.java",
"chars": 4354,
"preview": "/*\n * DomainParser.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/utils/HiddenField.java",
"chars": 1324,
"preview": "package com.auth0.android.lock.utils;\n\nimport android.os.Parcel;\nimport android.os.Parcelable;\nimport androidx.annotatio"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/utils/LoadCountriesTask.java",
"chars": 2871,
"preview": "/*\n * LoadCountriesTask.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/utils/SignUpField.java",
"chars": 1356,
"preview": "package com.auth0.android.lock.utils;\n\nimport android.os.Parcel;\nimport android.os.Parcelable;\nimport androidx.annotatio"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ActionButton.java",
"chars": 5912,
"preview": "/*\n * LockProgress.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/AuthConfig.java",
"chars": 7140,
"preview": "package com.auth0.android.lock.views;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport an"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ChangePasswordFormView.java",
"chars": 3624,
"preview": "/*\n * ChangePasswordFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/CheckableOptionView.java",
"chars": 4176,
"preview": "/*\n * CheckableOptionView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fre"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ClassicLockView.java",
"chars": 15151,
"preview": "/*\n * ClassicLockView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/CountryCodeSelectorView.java",
"chars": 6086,
"preview": "/*\n * ValidatedPhoneNumber.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fr"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/CustomFieldsFormView.java",
"chars": 6649,
"preview": "/*\n * CustomFieldsFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fr"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/FormLayout.java",
"chars": 11659,
"preview": "/*\n * DbLayout.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charge"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/FormView.java",
"chars": 1909,
"preview": "/*\n * FormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charge"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/HeaderView.java",
"chars": 3262,
"preview": "/*\n * HeaderView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of char"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ImageCheckbox.java",
"chars": 3912,
"preview": "package com.auth0.android.lock.views;\n\nimport android.content.Context;\nimport android.graphics.Rect;\nimport android.grap"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/LinkTextView.java",
"chars": 1451,
"preview": "package com.auth0.android.lock.views;\n\nimport android.content.Context;\nimport android.graphics.Rect;\nimport android.grap"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/LogInFormView.java",
"chars": 12540,
"preview": "/*\n * LogInFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of c"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/MFACodeFormView.java",
"chars": 3730,
"preview": "/*\n * MFACodeFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ModeSelectionView.java",
"chars": 4131,
"preview": "/*\n * ModeSelectionView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/PasswordStrengthView.java",
"chars": 9972,
"preview": "/*\n * CheckableOptionView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fre"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/PasswordlessFormLayout.java",
"chars": 9118,
"preview": "/*\n * PasswordlessFormLayout.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/PasswordlessInputCodeFormView.java",
"chars": 6576,
"preview": "/*\n * PasswordlessFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fr"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/PasswordlessLockView.java",
"chars": 9615,
"preview": "/*\n * PasswordlessLockView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fr"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/PasswordlessRequestCodeFormView.java",
"chars": 7165,
"preview": "/*\n * PasswordlessSendCodeFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby gra"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/SignUpFormView.java",
"chars": 8115,
"preview": "/*\n * SignUpFormView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/SocialButton.java",
"chars": 3788,
"preview": "package com.auth0.android.lock.views;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport an"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/SocialView.java",
"chars": 4819,
"preview": "/*\n * SocialView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of char"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/SocialViewAdapter.java",
"chars": 3949,
"preview": "/*\n * SocialViewAdapter.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/SpacesItemDecoration.java",
"chars": 1124,
"preview": "package com.auth0.android.lock.views;\n\nimport android.graphics.Rect;\nimport androidx.annotation.NonNull;\nimport androidx"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ValidatedInputView.java",
"chars": 20533,
"preview": "/*\n * EmailAndPasswordView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fr"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ValidatedPasswordInputView.java",
"chars": 2441,
"preview": "package com.auth0.android.lock.views;\n\nimport android.content.Context;\nimport androidx.annotation.NonNull;\nimport androi"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ValidatedUsernameInputView.java",
"chars": 4942,
"preview": "/*\n * ValidatedUserInputView.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/ViewUtils.java",
"chars": 7575,
"preview": "/*\n * ViewUtils.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/interfaces/IdentityListener.java",
"chars": 1340,
"preview": "/*\n * IdentityListener.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free o"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidget.java",
"chars": 1491,
"preview": "/*\n * LockWidgets.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of cha"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidgetForm.java",
"chars": 1674,
"preview": "/*\n * LockWidgetDatabase.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidgetOAuth.java",
"chars": 1419,
"preview": "/*\n * LockWidgetSocial.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free o"
},
{
"path": "lib/src/main/java/com/auth0/android/lock/views/interfaces/LockWidgetPasswordless.java",
"chars": 1881,
"preview": "/*\n * LockWidgetPasswordless.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/main/res/color/com_auth0_lock_text.xml",
"chars": 1469,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_normal_text.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://a"
},
{
"path": "lib/src/main/res/drawable/com_auth0_lock_link_background.xml",
"chars": 1449,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_link_background.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http"
},
{
"path": "lib/src/main/res/drawable/com_auth0_lock_tab.xml",
"chars": 1464,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_normal_text.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://a"
},
{
"path": "lib/src/main/res/drawable/com_auth0_lock_terms.xml",
"chars": 1489,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_normal_text.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://a"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_action_button.xml",
"chars": 3134,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_action_button.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http:/"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_activity_lock.xml",
"chars": 899,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xm"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_activity_lock_passwordless.xml",
"chars": 3825,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_activity_lock_passwordless.xml\n ~\n ~ Copyright (c) 2016 "
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_btn_social_large.xml",
"chars": 2251,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_btn_social_large.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://a"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_changepwd_form_view.xml",
"chars": 2685,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_changepwd_form_view.xml\n ~\n ~ Copyright (c) 2016 Auth0 ("
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_checkable_option.xml",
"chars": 2371,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_checkable_optionon.xml\n ~\n ~ Copyright (c) 2016 Auth0 (h"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_custom_fields_form_view.xml",
"chars": 1824,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_custom_fields_form_view.xml\n ~\n ~ Copyright (c) 2016 Aut"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_error_layout.xml",
"chars": 1883,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xm"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_header.xml",
"chars": 2308,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_header.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0."
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_login_form_view.xml",
"chars": 3528,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_login_form_view.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_mfa_input_code_form_view.xml",
"chars": 2646,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_mfa_input_code_form_view.xml\n ~\n ~ Copyright (c) 2016 Au"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_password_strength.xml",
"chars": 3782,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_password_strength.xmlength.xml\n ~\n ~ Copyright (c) 2016 "
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_passwordless_activity_country_code.xml",
"chars": 2003,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_passwordless_activity_country_code.xml\n ~\n ~ Copyright (c) 20"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_passwordless_country_code_selector.xml",
"chars": 2927,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_passwordless_country_code_selector.xml\n ~\n ~ Copyright ("
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_passwordless_input_code_form_view.xml",
"chars": 2410,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_passwordless_input_code_form_view.xml\n ~\n ~ Copyright (c"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_passwordless_item_country_code.xml",
"chars": 2123,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_passwordless_item_country_code.xml\n ~\n ~ Copyright (c) 2015 A"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_passwordless_request_code_form_view.xml",
"chars": 2729,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_login_form_view.xmlew.xml\n ~ Copyright (c) 2016 Auth0 (ht"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_signup_form_view.xml",
"chars": 2635,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_signup_form_view.xml\n ~\n ~ Copyright (c) 2016 Auth0 (htt"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_sso_layout.xml",
"chars": 2177,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_sso_layout.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://au"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_tab.xml",
"chars": 623,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xm"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_tab_layout.xml",
"chars": 1006,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andro"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_terms_layout.xml",
"chars": 1907,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_terms_layout.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://"
},
{
"path": "lib/src/main/res/layout/com_auth0_lock_validated_input_view.xml",
"chars": 3001,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ com_auth0_lock_validated_field.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http"
},
{
"path": "lib/src/main/res/values/attrs.xml",
"chars": 2480,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ attrs.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0.com)\n ~\n ~ Per"
},
{
"path": "lib/src/main/res/values/auth_styles.xml",
"chars": 13154,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"Lock.Theme.AuthStyle.Apple\" parent=\"Lock.Theme.Auth"
},
{
"path": "lib/src/main/res/values/colors.xml",
"chars": 6188,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ colors.xml\n ~\n ~ Copyright (c) 2015 Auth0 (http://auth0.com)\n ~\n ~ Pe"
},
{
"path": "lib/src/main/res/values/dimens.xml",
"chars": 5097,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ dimens.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0.com)\n ~\n ~ Pe"
},
{
"path": "lib/src/main/res/values/ids.xml",
"chars": 1290,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ ids.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0.com)\n ~\n ~ Permi"
},
{
"path": "lib/src/main/res/values/strings.xml",
"chars": 13242,
"preview": "<!--\n ~ strings.xml\n ~\n ~ Copyright (c) 2015 Auth0 (http://auth0.com)\n ~\n ~ Permission is hereby granted, free of c"
},
{
"path": "lib/src/main/res/values/styles.xml",
"chars": 19918,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ styles.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0.com)\n ~\n ~ Pe"
},
{
"path": "lib/src/main/res/values-sw400dp/dimens.xml",
"chars": 5103,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n ~ dimens.xml\n ~\n ~ Copyright (c) 2016 Auth0 (http://auth0.com)\n ~\n ~ Pe"
},
{
"path": "lib/src/test/AndroidManifest.xml",
"chars": 1151,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/tools\"\n"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/Auth0ParcelableTest.java",
"chars": 3428,
"preview": "package com.auth0.android.lock;\n\nimport android.os.Parcel;\n\nimport com.auth0.android.Auth0;\nimport com.auth0.android.uti"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/AuthenticationCallbackTest.java",
"chars": 5848,
"preview": "/*\n * AuthenticationCallbackTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby grant"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/ClassicBuilderTest.java",
"chars": 5409,
"preview": "package com.auth0.android.lock;\n\nimport android.app.Activity;\nimport android.content.BroadcastReceiver;\nimport android.c"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/LockActivityTest.java",
"chars": 39313,
"preview": "package com.auth0.android.lock;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport com.auth0.android.A"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/PasswordlessBuilderTest.java",
"chars": 3648,
"preview": "package com.auth0.android.lock;\n\nimport android.app.Activity;\nimport android.content.BroadcastReceiver;\nimport android.c"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/PasswordlessIdentityHelperTest.java",
"chars": 7457,
"preview": "package com.auth0.android.lock;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android."
},
{
"path": "lib/src/test/java/com/auth0/android/lock/PasswordlessLockActivityTest.java",
"chars": 17394,
"preview": "package com.auth0.android.lock;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport com.auth0.android.A"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/WebProviderTest.java",
"chars": 10697,
"preview": "package com.auth0.android.lock;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Int"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/errors/LoginErrorMessageBuilderTest.java",
"chars": 5082,
"preview": "package com.auth0.android.lock.errors;\n\nimport com.auth0.android.authentication.AuthenticationException;\nimport com.auth"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/errors/SignUpErrorMessageBuilderTest.java",
"chars": 3321,
"preview": "package com.auth0.android.lock.errors;\n\nimport com.auth0.android.authentication.AuthenticationException;\nimport com.auth"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/events/DatabaseEventTest.java",
"chars": 1403,
"preview": "package com.auth0.android.lock.events;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.R"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/events/DatabaseLoginEventTest.java",
"chars": 2024,
"preview": "package com.auth0.android.lock.events;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/events/DatabaseSignUpEventTest.java",
"chars": 12422,
"preview": "/*\n * DatabaseSignUpEventTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted,"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/events/ErrorMessageEventTest.java",
"chars": 581,
"preview": "package com.auth0.android.lock.events;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.R"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/events/OAuthLoginEventTest.java",
"chars": 2833,
"preview": "package com.auth0.android.lock.events;\n\nimport com.auth0.android.lock.internal.configuration.OAuthConnection;\n\nimport or"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/events/PasswordlessLoginEventTest.java",
"chars": 17061,
"preview": "/*\n * PasswordlessLoginEventTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby grant"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/ApplicationFetcherTest.java",
"chars": 3972,
"preview": "/*\n * ApplicationFetcherTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, "
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/ApplicationGsonTest.java",
"chars": 5969,
"preview": "/*\n * ApplicationGsonTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, fre"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/ConfigurationTest.java",
"chars": 27761,
"preview": "/*\n * ConfigurationTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/ConnectionGsonTest.java",
"chars": 8248,
"preview": "/*\n * StrategyGsonTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free o"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/ConnectionMatcher.java",
"chars": 3648,
"preview": "/*\n * ConnectionMatcher.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free "
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/ConnectionTest.java",
"chars": 14243,
"preview": "/*\n * StrategyTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/DatabaseConnectionTest.java",
"chars": 12388,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport org.junit.Test;\n\nimport java.util.HashMap;\nimport java.ut"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/EnterpriseConnectionMatcherTest.java",
"chars": 4956,
"preview": "/*\n * EnterpriseConnectionMatcherTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby "
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/GsonBaseTest.java",
"chars": 2058,
"preview": "/*\n * GsonBaseTest.java\n *\n * Copyright (c) 2016 Auth0 (http://auth0.com)\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/OAuthConnectionTest.java",
"chars": 5074,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport org.junit.Test;\n\nimport java.util.Arrays;\nimport java.uti"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/OptionsTest.java",
"chars": 33535,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport android.os.Build;\nimport android.os.Parcel;\n\nimport com.a"
},
{
"path": "lib/src/test/java/com/auth0/android/lock/internal/configuration/PasswordlessConnectionTest.java",
"chars": 1221,
"preview": "package com.auth0.android.lock.internal.configuration;\n\nimport org.junit.Test;\n\nimport java.util.HashMap;\nimport java.ut"
}
]
// ... and 33 more files (download for full content)
About this extraction
This page contains the full source code of the auth0/Lock.Android GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 233 files (1.0 MB), approximately 234.6k tokens, and a symbol index with 1408 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.