Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cfa26cb2 authored by Billy Lau's avatar Billy Lau Committed by Android (Google) Code Review
Browse files

Merge "Add BinaryTransparencyService as new SystemService."

parents 6f5a211d d1fb08be
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -28,6 +28,11 @@ filegroup {
    srcs: ["com/android/internal/os/IDropBoxManagerService.aidl"],
}

filegroup {
    name: "IBinaryTransparencyService.aidl",
    srcs: ["com/android/internal/os/IBinaryTransparencyService.aidl"],
}

filegroup {
    name: "ITracingServiceProxy.aidl",
    srcs: ["android/tracing/ITracingServiceProxy.aidl"],
+13 −0
Original line number Diff line number Diff line
@@ -215,6 +215,7 @@ import android.telecom.TelecomManager;
import android.telephony.MmsManager;
import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyRegistryManager;
import android.transparency.BinaryTransparencyManager;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Slog;
@@ -245,6 +246,7 @@ import com.android.internal.app.ISoundTriggerService;
import com.android.internal.appwidget.IAppWidgetService;
import com.android.internal.graphics.fonts.IFontManager;
import com.android.internal.net.INetworkWatchlistManager;
import com.android.internal.os.IBinaryTransparencyService;
import com.android.internal.os.IDropBoxManagerService;
import com.android.internal.policy.PhoneLayoutInflater;
import com.android.internal.util.Preconditions;
@@ -496,6 +498,17 @@ public final class SystemServiceRegistry {
                return new DropBoxManager(ctx, service);
            }});

        registerService(Context.BINARY_TRANSPARENCY_SERVICE, BinaryTransparencyManager.class,
                new CachedServiceFetcher<BinaryTransparencyManager>() {
            @Override
            public BinaryTransparencyManager createService(ContextImpl ctx)
                    throws ServiceNotFoundException {
                IBinder b = ServiceManager.getServiceOrThrow(
                        Context.BINARY_TRANSPARENCY_SERVICE);
                IBinaryTransparencyService service = IBinaryTransparencyService.Stub.asInterface(b);
                return new BinaryTransparencyManager(ctx, service);
            }});

        registerService(Context.INPUT_SERVICE, InputManager.class,
                new StaticServiceFetcher<InputManager>() {
            @Override
+10 −0
Original line number Diff line number Diff line
@@ -5106,6 +5106,16 @@ public abstract class Context {
     */
    public static final String DROPBOX_SERVICE = "dropbox";

    /**
     * System service name for BinaryTransparencyService. This is used to retrieve measurements
     * pertaining to various pre-installed and system binaries on device for the purposes of
     * providing transparency to the user.
     *
     * @hide
     */
    @SuppressLint("ServiceName")
    public static final String BINARY_TRANSPARENCY_SERVICE = "transparency";

    /**
     * System service name for the DeviceIdleManager.
     * @see #getSystemService(String)
+83 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.transparency;

import android.annotation.NonNull;
import android.annotation.SystemService;
import android.content.Context;
import android.os.RemoteException;
import android.util.Slog;

import com.android.internal.os.IBinaryTransparencyService;

import java.util.Map;

/**
 * BinaryTransparencyManager defines a number of system interfaces that other system apps or
 * services can make use of, when trying to get more information about the various binaries
 * that are installed on this device.
 * @hide
 */
@SystemService(Context.BINARY_TRANSPARENCY_SERVICE)
public class BinaryTransparencyManager {
    private static final String TAG = "TransparencyManager";

    private final Context mContext;
    private final IBinaryTransparencyService mService;

    /**
     * Constructor
     * @param context The calling context.
     * @param service A valid instance of IBinaryTransparencyService.
     * @hide
     */
    public BinaryTransparencyManager(Context context, IBinaryTransparencyService service) {
        mContext = context;
        mService = service;
    }


    /**
     * Obtains a string containing information that describes the signed images that are installed
     * on this device. Currently, this piece of information is identified as the VBMeta digest.
     * @return A String containing the VBMeta Digest of the signed partitions loaded on this device.
     */
    @NonNull
    public String getSignedImageInfo() {
        try {
            return mService.getSignedImageInfo();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Returns a map of all installed APEXs consisting of package name to SHA256 hash of the
     * package.
     * @return A Map with the following entries: {apex package name : sha256 digest of package}
     */
    @NonNull
    public Map getApexInfo() {
        try {
            Slog.d(TAG, "Calling backend's getApexInfo()");
            return mService.getApexInfo();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

}
+4 −0
Original line number Diff line number Diff line
# Bug component: 36824
billylau@google.com
vishwath@google.com
mpgroover@google.com
Loading