| /* |
| * Copyright (C) 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 com.android.server.om; |
| |
| |
| import android.annotation.NonNull; |
| import android.annotation.Nullable; |
| import android.content.om.OverlayableInfo; |
| import android.content.pm.PackageInfo; |
| import android.content.pm.PackageManager; |
| |
| import com.android.server.pm.PackageManagerServiceUtils; |
| |
| import java.io.IOException; |
| import java.util.Map; |
| |
| /** |
| * Delegate to the system for querying information about overlayables and packages. |
| */ |
| public interface OverlayableInfoCallback { |
| |
| /** |
| * Read from the APK and AndroidManifest of a package to return the overlayable defined for |
| * a given name. |
| * |
| * @throws IOException if the target can't be read |
| */ |
| @Nullable |
| OverlayableInfo getOverlayableForTarget(@NonNull String packageName, |
| @NonNull String targetOverlayableName, int userId) |
| throws IOException; |
| |
| /** |
| * @see PackageManager#getPackagesForUid(int) |
| */ |
| @Nullable |
| String[] getPackagesForUid(int uid); |
| |
| /** |
| * @param userId user to filter package visibility by |
| * @see PackageManager#getPackageInfo(String, int) |
| */ |
| @Nullable |
| PackageInfo getPackageInfo(@NonNull String packageName, int userId); |
| |
| /** |
| * @return map of system pre-defined, uniquely named actors; keys are namespace, |
| * value maps actor name to package name |
| */ |
| @NonNull |
| Map<String, Map<String, String>> getNamedActors(); |
| |
| /** |
| * @return true if the target package has declared an overlayable |
| */ |
| boolean doesTargetDefineOverlayable(String targetPackageName, int userId) throws IOException; |
| |
| /** |
| * @throws SecurityException containing message if the caller doesn't have the given |
| * permission |
| */ |
| void enforcePermission(String permission, String message) throws SecurityException; |
| |
| /** |
| * @return true if {@link PackageManagerServiceUtils#compareSignatures} run on both packages |
| * in the system returns {@link PackageManager#SIGNATURE_MATCH} |
| */ |
| boolean signaturesMatching(@NonNull String pkgName1, @NonNull String pkgName2, int userId); |
| |
| /** |
| * Retrieves the package name that is recognized as an actor for the packages specified by |
| * {@link #getOverlayableConfiguratorTargets()}. |
| */ |
| @NonNull |
| default String getOverlayableConfigurator() { |
| return ""; |
| } |
| |
| /** |
| * Retrieves the target packages that recognize the {@link #getOverlayableConfigurator} as an |
| * actor for its overlayable declarations. Overlays targeting one of the specified targets that |
| * are signed with the same signature as the overlayable configurator will be granted the |
| * "actor" policy. |
| */ |
| @NonNull |
| default String[] getOverlayableConfiguratorTargets() { |
| return new String[0]; |
| } |
| } |