|  | /* | 
|  | * Copyright (C) 2017 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 android.provider; | 
|  |  | 
|  | import android.annotation.NonNull; | 
|  | import android.util.Base64; | 
|  |  | 
|  | import com.android.internal.util.Preconditions; | 
|  |  | 
|  | import java.util.ArrayList; | 
|  | import java.util.Collections; | 
|  | import java.util.List; | 
|  |  | 
|  | /** | 
|  | * Information about a font request that may be sent to a Font Provider. | 
|  | */ | 
|  | public final class FontRequest { | 
|  | private final String mProviderAuthority; | 
|  | private final String mProviderPackage; | 
|  | private final String mQuery; | 
|  | private final List<List<byte[]>> mCertificates; | 
|  |  | 
|  | // Used for key of the cache. | 
|  | private final String mIdentifier; | 
|  |  | 
|  | /** | 
|  | * @param providerAuthority The authority of the Font Provider to be used for the request. This | 
|  | *         should be a system installed app. | 
|  | * @param providerPackage The package for the Font Provider to be used for the request. This is | 
|  | *         used to verify the identity of the provider. | 
|  | * @param query The query to be sent over to the provider. Refer to your font provider's | 
|  | *         documentation on the format of this string. | 
|  | */ | 
|  | public FontRequest(@NonNull String providerAuthority, @NonNull String providerPackage, | 
|  | @NonNull String query) { | 
|  | mProviderAuthority = Preconditions.checkNotNull(providerAuthority); | 
|  | mQuery = Preconditions.checkNotNull(query); | 
|  | mProviderPackage = Preconditions.checkNotNull(providerPackage); | 
|  | mCertificates = Collections.emptyList(); | 
|  | mIdentifier = new StringBuilder(mProviderAuthority).append("-").append(mProviderPackage) | 
|  | .append("-").append(mQuery).toString(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param providerAuthority The authority of the Font Provider to be used for the request. | 
|  | * @param query The query to be sent over to the provider. Refer to your font provider's | 
|  | *         documentation on the format of this string. | 
|  | * @param providerPackage The package for the Font Provider to be used for the request. This is | 
|  | *         used to verify the identity of the provider. | 
|  | * @param certificates The list of sets of hashes for the certificates the provider should be | 
|  | *         signed with. This is used to verify the identity of the provider. Each set in the | 
|  | *         list represents one collection of signature hashes. Refer to your font provider's | 
|  | *         documentation for these values. | 
|  | */ | 
|  | public FontRequest(@NonNull String providerAuthority, @NonNull String providerPackage, | 
|  | @NonNull String query, @NonNull List<List<byte[]>> certificates) { | 
|  | mProviderAuthority = Preconditions.checkNotNull(providerAuthority); | 
|  | mProviderPackage = Preconditions.checkNotNull(providerPackage); | 
|  | mQuery = Preconditions.checkNotNull(query); | 
|  | mCertificates = Preconditions.checkNotNull(certificates); | 
|  | mIdentifier = new StringBuilder(mProviderAuthority).append("-").append(mProviderPackage) | 
|  | .append("-").append(mQuery).toString(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the selected font provider's authority. This tells the system what font provider | 
|  | * it should request the font from. | 
|  | */ | 
|  | public String getProviderAuthority() { | 
|  | return mProviderAuthority; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the selected font provider's package. This helps the system verify that the provider | 
|  | * identified by the given authority is the one requested. | 
|  | */ | 
|  | public String getProviderPackage() { | 
|  | return mProviderPackage; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the query string. Refer to your font provider's documentation on the format of this | 
|  | * string. | 
|  | */ | 
|  | public String getQuery() { | 
|  | return mQuery; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the list of certificate sets given for this provider. This helps the system verify | 
|  | * that the provider identified by the given authority is the one requested. | 
|  | */ | 
|  | public List<List<byte[]>> getCertificates() { | 
|  | return mCertificates; | 
|  | } | 
|  |  | 
|  | /** @hide */ | 
|  | public String getIdentifier() { | 
|  | return mIdentifier; | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public String toString() { | 
|  | StringBuilder builder = new StringBuilder(); | 
|  | builder.append("FontRequest {" | 
|  | + "mProviderAuthority: " + mProviderAuthority | 
|  | + ", mProviderPackage: " + mProviderPackage | 
|  | + ", mQuery: " + mQuery | 
|  | + ", mCertificates:"); | 
|  | for (int i = 0; i < mCertificates.size(); i++) { | 
|  | builder.append(" ["); | 
|  | List<byte[]> set = mCertificates.get(i); | 
|  | for (int j = 0; j < set.size(); j++) { | 
|  | builder.append(" \""); | 
|  | byte[] array = set.get(j); | 
|  | builder.append(Base64.encodeToString(array, Base64.DEFAULT)); | 
|  | builder.append("\""); | 
|  | } | 
|  | builder.append(" ]"); | 
|  | } | 
|  | builder.append("}"); | 
|  | return builder.toString(); | 
|  | } | 
|  | } |