blob: 5a96f8d3571df77b40b6848e1f00cf2abdf6259a [file] [log] [blame]
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.biometric;
import androidx.annotation.Nullable;
import java.util.Arrays;
/**
* A container for data associated with a biometric authentication error, which may be handled by
* the client application's callback.
*/
class BiometricErrorData {
/**
* An integer ID associated with this error.
*/
@BiometricPrompt.AuthenticationError private final int mErrorCode;
/**
* A human-readable message that describes the error.
*/
@Nullable private final CharSequence mErrorMessage;
BiometricErrorData(int errorCode, @Nullable CharSequence errorMessage) {
mErrorCode = errorCode;
mErrorMessage = errorMessage;
}
@BiometricPrompt.AuthenticationError
int getErrorCode() {
return mErrorCode;
}
@Nullable
CharSequence getErrorMessage() {
return mErrorMessage;
}
@Override
public int hashCode() {
return Arrays.hashCode(new Object[] {mErrorCode, convertToString(mErrorMessage)});
}
@Override
public boolean equals(@Nullable Object obj) {
if (obj instanceof BiometricErrorData) {
final BiometricErrorData other = (BiometricErrorData) obj;
return mErrorCode == other.mErrorCode && isErrorMessageEqualTo(other.mErrorMessage);
}
return false;
}
/**
* Checks if a given error message is equivalent to the one for this object.
*
* @param otherMessage A message to compare to the error message for this object.
* @return Whether the error message for this object and {@code otherMessage} are equivalent.
*/
private boolean isErrorMessageEqualTo(@Nullable CharSequence otherMessage) {
final String errorString = convertToString(mErrorMessage);
final String otherString = convertToString(otherMessage);
return (errorString == null && otherString == null)
|| (errorString != null && errorString.equals(otherString));
}
/**
* Converts a nullable {@link CharSequence} message to an equivalent {@link String}.
*
* @param message The message to be converted.
* @return A string matching the given message, or {@code null} if message is {@code null}.
*/
@Nullable
private static String convertToString(@Nullable CharSequence message) {
return message != null ? message.toString() : null;
}
}