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

Commit 4cfb3545 authored by Anna Trostanetski's avatar Anna Trostanetski Committed by android-build-merger
Browse files

Merge "Add a native aidl API."

am: 577e3114

Change-Id: I22c7963991747fe1e27dce432da3fc02c644bbef
parents 06792d7c 577e3114
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -194,6 +194,9 @@ filegroup {
        ":PacProcessor-aidl-sources",
        ":PacProcessor-aidl-sources",
        ":ProxyHandler-aidl-sources",
        ":ProxyHandler-aidl-sources",


        // AIDL from frameworks/base/native/
        ":platform-compat-native-aidl",

        // AIDL sources from external directories
        // AIDL sources from external directories
        ":dumpstate_aidl",
        ":dumpstate_aidl",
        ":framework_native_aidl",
        ":framework_native_aidl",
+10 −0
Original line number Original line Diff line number Diff line
@@ -74,6 +74,7 @@ import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient;
import android.view.textclassifier.TextClassificationManager;
import android.view.textclassifier.TextClassificationManager;


import com.android.internal.compat.IPlatformCompat;
import com.android.internal.compat.IPlatformCompat;
import com.android.internal.compat.IPlatformCompatNative;


import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
@@ -3231,6 +3232,7 @@ public abstract class Context {
            //@hide ROLE_CONTROLLER_SERVICE,
            //@hide ROLE_CONTROLLER_SERVICE,
            CAMERA_SERVICE,
            CAMERA_SERVICE,
            //@hide: PLATFORM_COMPAT_SERVICE,
            //@hide: PLATFORM_COMPAT_SERVICE,
            //@hide: PLATFORM_COMPAT_NATIVE_SERVICE,
            PRINT_SERVICE,
            PRINT_SERVICE,
            CONSUMER_IR_SERVICE,
            CONSUMER_IR_SERVICE,
            //@hide: TRUST_SERVICE,
            //@hide: TRUST_SERVICE,
@@ -4595,6 +4597,14 @@ public abstract class Context {
     */
     */
    public static final String PLATFORM_COMPAT_SERVICE = "platform_compat";
    public static final String PLATFORM_COMPAT_SERVICE = "platform_compat";


    /**
     * Use with {@link android.os.ServiceManager.getService()} to retrieve a
     * {@link IPlatformCompatNative} IBinder for native code communicating with the platform compat
     * service.
     * @hide
     */
    public static final String PLATFORM_COMPAT_NATIVE_SERVICE = "platform_compat_native";

    /**
    /**
     * Service to capture a bugreport.
     * Service to capture a bugreport.
     * @see #getSystemService(String)
     * @see #getSystemService(String)
+28 −0
Original line number Original line Diff line number Diff line
@@ -110,3 +110,31 @@ llndk_library {
    symbol_file: "libandroid_net.map.txt",
    symbol_file: "libandroid_net.map.txt",
    unversioned: true,
    unversioned: true,
}
}


// Aidl library for platform compat.
cc_library_shared {
    name: "lib-platform-compat-native-api",
    defaults: ["libandroid_defaults"],

    shared_libs: [
        "libbinder",
        "libutils",
    ],
    aidl: {
        local_include_dirs: ["aidl"],
        export_aidl_headers: true,
    },
    srcs: [
         ":platform-compat-native-aidl",
    ],
    export_include_dirs: ["aidl"],
}

filegroup {
    name: "platform-compat-native-aidl",
    srcs: [
        "aidl/com/android/internal/compat/IPlatformCompatNative.aidl",
    ],
    path: "aidl",
}
 No newline at end of file
+91 −0
Original line number Original line Diff line number Diff line
/*
 * 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.internal.compat;

/**
 * Platform native private API for talking with the PlatformCompat service.
 *
 * <p> Should be used for gating and logging from non-app processes running cpp code.
 * For app processes please use android.compat.Compatibility API.
 *
 * {@hide}
 */
interface IPlatformCompatNative
{
    /**
     * Reports that a compatibility change is affecting an app process now.
     *
     * <p>Note: for changes that are gated using {@link #isChangeEnabled(long, String)},
     * you do not need to call this API directly. The change will be reported for you.
     *
     * @param changeId    The ID of the compatibility change taking effect.
     * @param packageName The package name of the app in question.
     */
     void reportChangeByPackageName(long changeId, @utf8InCpp String packageName);

    /**
     * Reports that a compatibility change is affecting an app process now.
     *
     * <p>Note: for changes that are gated using {@link #isChangeEnabled(long, int)},
     * you do not need to call this API directly. The change will be reported for you.
     *
     * @param changeId The ID of the compatibility change taking effect.
     * @param uid      The UID of the app in question.
     */
    void reportChangeByUid(long changeId, int uid);

    /**
     * Query if a given compatibility change is enabled for an app process. This method should
     * be called when implementing functionality on behalf of the affected app.
     *
     * <p>Returns {@code true} if there is no installed package by the provided package name.
     *
     * <p>If this method returns {@code true}, the calling code should implement the compatibility
     * change, resulting in differing behaviour compared to earlier releases. If this method
     * returns
     * {@code false}, the calling code should behave as it did in earlier releases.
     *
     * <p>It will also report the change as {@link #reportChange(long, String)} would, so there is
     * no need to call that method directly.
     *
     * @param changeId    The ID of the compatibility change in question.
     * @param packageName The package name of the app in question.
     * @return {@code true} if the change is enabled for the current app.
     */
    boolean isChangeEnabledByPackageName(long changeId, @utf8InCpp String packageName);

    /**
     * Query if a given compatibility change is enabled for an app process. This method should
     * be called when implementing functionality on behalf of the affected app.
     *
     * <p> Returns {@code true} if there are no installed packages for the required UID, or if the
     * change is enabled for ALL of the installed packages associated with the provided UID. Please
     * use a more specific API if you want a different behaviour for multi-package UIDs.
     *
     * <p>If this method returns {@code true}, the calling code should implement the compatibility
     * change, resulting in differing behaviour compared to earlier releases. If this method
     * returns {@code false}, the calling code should behave as it did in earlier releases.
     *
     * <p>It will also report the change as {@link #reportChange(long, int)} would, so there is
     * no need to call that method directly.
     *
     * @param changeId The ID of the compatibility change in question.
     * @param uid      The UID of the app in question.
     * @return {@code true} if the change is enabled for the current app.
     */
    boolean isChangeEnabledByUid(long changeId, int uid);
}
 No newline at end of file
+50 −0
Original line number Original line Diff line number Diff line
/*
 * 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.server.compat;

import com.android.internal.compat.IPlatformCompatNative;

/**
 * @hide
 */
public class PlatformCompatNative extends IPlatformCompatNative.Stub {
    private final PlatformCompat mPlatformCompat;

    public PlatformCompatNative(PlatformCompat platformCompat) {
        mPlatformCompat = platformCompat;
    }

    @Override
    public void reportChangeByPackageName(long changeId, String packageName) {
        mPlatformCompat.reportChangeByPackageName(changeId, packageName);
    }

    @Override
    public void reportChangeByUid(long changeId, int uid) {
        mPlatformCompat.reportChangeByUid(changeId, uid);
    }

    @Override
    public boolean isChangeEnabledByPackageName(long changeId, String packageName) {
        return mPlatformCompat.isChangeEnabledByPackageName(changeId, packageName);
    }

    @Override
    public boolean isChangeEnabledByUid(long changeId, int uid) {
        return mPlatformCompat.isChangeEnabledByUid(changeId, uid);
    }
}
Loading