1979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme/* 2979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * Copyright (C) 2017 The Android Open Source Project 3979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * 4979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * Licensed under the Apache License, Version 2.0 (the "License"); 5979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * you may not use this file except in compliance with the License. 6979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * You may obtain a copy of the License at 7979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * 8979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * http://www.apache.org/licenses/LICENSE-2.0 9979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * 10979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * Unless required by applicable law or agreed to in writing, software 11979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * distributed under the License is distributed on an "AS IS" BASIS, 12979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * See the License for the specific language governing permissions and 14979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * limitations under the License. 15979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme */ 16979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 17979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemepackage android.service.autofill; 18979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 19979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemeimport static android.view.autofill.Helper.sDebug; 20979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 21979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemeimport android.annotation.NonNull; 22979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemeimport android.os.Parcel; 23979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemeimport android.os.Parcelable; 243a585a8ef14ffe57fe8addc690d06614f10e2033Felipe Lemeimport android.util.Log; 25979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 26979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemeimport com.android.internal.util.Preconditions; 27979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 28979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme/** 29979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * Compound validator that only returns {@code true} on {@link #isValid(ValueFinder)} if all 30979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * of its subvalidators return {@code true} as well. 31979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * 32979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * <p>Used to implement an {@code AND} logical operation. 33979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * 34979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme * @hide 35979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme */ 36979013d027d828f404e71f48b88403e562ccbc7bFelipe Lemefinal class RequiredValidators extends InternalValidator { 37979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 383a585a8ef14ffe57fe8addc690d06614f10e2033Felipe Leme private static final String TAG = "RequiredValidators"; 393a585a8ef14ffe57fe8addc690d06614f10e2033Felipe Leme 400e3e6f8274b9d4c1c9646a1d39aed6a9f8a6a28dPhilip P. Moltmann @NonNull private final InternalValidator[] mValidators; 41979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 42979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme RequiredValidators(@NonNull InternalValidator[] validators) { 43979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme mValidators = Preconditions.checkArrayElementsNotNull(validators, "validators"); 44979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 45979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 46979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme @Override 47979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public boolean isValid(@NonNull ValueFinder finder) { 48979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme for (InternalValidator validator : mValidators) { 49979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme final boolean valid = validator.isValid(finder); 503a585a8ef14ffe57fe8addc690d06614f10e2033Felipe Leme if (sDebug) Log.d(TAG, "isValid(" + validator + "): " + valid); 51979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme if (!valid) return false; 52979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 53979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme return true; 54979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 55979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 56979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme ///////////////////////////////////// 57979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme // Object "contract" methods. // 58979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme ///////////////////////////////////// 59979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme @Override 60979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public String toString() { 61979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme if (!sDebug) return super.toString(); 62979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 63979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme return new StringBuilder("RequiredValidators: [validators=").append(mValidators) 64979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme .append("]") 65979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme .toString(); 66979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 67979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 68979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme ///////////////////////////////////// 69979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme // Parcelable "contract" methods. // 70979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme ///////////////////////////////////// 71979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme @Override 72979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public int describeContents() { 73979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme return 0; 74979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 75979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 76979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme @Override 77979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public void writeToParcel(Parcel dest, int flags) { 78979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme dest.writeParcelableArray(mValidators, flags); 79979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 80979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 81979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public static final Parcelable.Creator<RequiredValidators> CREATOR = 82979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme new Parcelable.Creator<RequiredValidators>() { 83979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme @Override 84979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public RequiredValidators createFromParcel(Parcel parcel) { 85979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme return new RequiredValidators(parcel 86979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme .readParcelableArray(null, InternalValidator.class)); 87979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 88979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme 89979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme @Override 90979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme public RequiredValidators[] newArray(int size) { 91979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme return new RequiredValidators[size]; 92979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme } 93979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme }; 94979013d027d828f404e71f48b88403e562ccbc7bFelipe Leme} 95