blob: 9769196b0ae40f6f17e2110afa773e5de65a3631 [file] [log] [blame]
/*
* Copyright (C) 2019 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 com.android.car.settings.applications.managedomainurls;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.PackageManager;
import android.util.ArraySet;
import com.android.car.settings.R;
import java.util.List;
/** Utility functions related to handling application domain urls. */
public final class DomainUrlsUtils {
private DomainUrlsUtils() {
}
/** Get a summary text based on the number of handled domains. */
public static CharSequence getDomainsSummary(Context context, String packageName, int userId,
ArraySet<String> domains) {
PackageManager pm = context.getPackageManager();
// If the user has explicitly said "no" for this package, that's the string we should show.
int domainStatus = pm.getIntentVerificationStatusAsUser(packageName, userId);
if (domainStatus == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) {
return context.getText(R.string.domain_urls_summary_none);
}
// Otherwise, ask package manager for the domains for this package, and show the first
// one (or none if there aren't any).
if (domains.isEmpty()) {
return context.getText(R.string.domain_urls_summary_none);
} else if (domains.size() == 1) {
return context.getString(R.string.domain_urls_summary_one, domains.valueAt(0));
} else {
return context.getString(R.string.domain_urls_summary_some, domains.valueAt(0));
}
}
/** Get the list of domains handled by the given package. */
public static ArraySet<String> getHandledDomains(PackageManager pm, String packageName) {
List<IntentFilterVerificationInfo> iviList = pm.getIntentFilterVerifications(packageName);
List<IntentFilter> filters = pm.getAllIntentFilters(packageName);
ArraySet<String> result = new ArraySet<>();
if (iviList != null && iviList.size() > 0) {
for (IntentFilterVerificationInfo ivi : iviList) {
for (String host : ivi.getDomains()) {
result.add(host);
}
}
}
if (filters != null && filters.size() > 0) {
for (IntentFilter filter : filters) {
if (filter.hasCategory(Intent.CATEGORY_BROWSABLE)
&& (filter.hasDataScheme(IntentFilter.SCHEME_HTTP)
|| filter.hasDataScheme(IntentFilter.SCHEME_HTTPS))) {
result.addAll(filter.getHostsList());
}
}
}
return result;
}
}