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

Commit 968f1fbd authored by Yu-Ting Tseng's avatar Yu-Ting Tseng Committed by Android (Google) Code Review
Browse files

Merge "Make a few AM APIs available to native callers." into main

parents f72cdf87 23b0f964
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#include <mutex>
#include <unistd.h>

#include <android/app/IProcessObserver.h>
#include <android/app/RunningAppProcessInfo.h>
#include <android/permission_manager.h>
#include <binder/ActivityManager.h>
#include <binder/Binder.h>
@@ -160,6 +162,31 @@ status_t ActivityManager::checkPermission(const String16& permission,
    return DEAD_OBJECT;
}

status_t ActivityManager::registerProcessObserver(const sp<app::IProcessObserver> observer) {
    sp<IActivityManager> service = getService();
    if (service != nullptr) {
        return service->registerProcessObserver(observer);
    }
    return INVALID_OPERATION;
}

status_t ActivityManager::unregisterProcessObserver(const sp<app::IProcessObserver> observer) {
    sp<IActivityManager> service = getService();
    if (service != nullptr) {
        return service->unregisterProcessObserver(observer);
    }
    return INVALID_OPERATION;
}

status_t ActivityManager::getRunningAppProcesses(
        ::std::vector<app::RunningAppProcessInfo>* output) {
    sp<IActivityManager> service = getService();
    if (service != nullptr) {
        return service->getRunningAppProcesses(output);
    }
    return INVALID_OPERATION;
}

status_t ActivityManager::linkToDeath(const sp<IBinder::DeathRecipient>& recipient) {
    sp<IActivityManager> service = getService();
    if (service != nullptr) {
+2 −0
Original line number Diff line number Diff line
@@ -971,6 +971,8 @@ cc_library {
        "IActivityManager.cpp",
        "IUidObserver.cpp",
        ":activity_manager_procstate_aidl",
        ":activity_manager_iprocessobserver_aidl",
        ":activity_manager_runningappprocessinfo_aidl",
    ],
    export_include_dirs: ["include_activitymanager"],
    shared_libs: [
+37 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#include <unistd.h>
#include <fcntl.h>

#include <android/app/IProcessObserver.h>
#include <android/app/RunningAppProcessInfo.h>
#include <android/permission_manager.h>
#include <binder/ActivityManager.h>
#include <binder/IActivityManager.h>
@@ -232,6 +234,41 @@ public:
        }
        return NO_ERROR;
    }

    virtual status_t registerProcessObserver(const sp<app::IProcessObserver>& observer) {
        Parcel data;
        Parcel reply;
        data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
        data.writeStrongBinder(observer);
        status_t err = remote()->transact(REGISTER_PROCESS_OBSERVER, data, &reply, 0);
        if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
            return err;
        }
        return OK;
    }

    virtual status_t unregisterProcessObserver(const sp<app::IProcessObserver>& observer) {
        Parcel data;
        Parcel reply;
        data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
        data.writeStrongBinder(observer);
        status_t err = remote()->transact(UNREGISTER_PROCESS_OBSERVER, data, &reply, 0);
        if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
            return err;
        }
        return OK;
    }

    virtual status_t getRunningAppProcesses(::std::vector<app::RunningAppProcessInfo>* output) {
        Parcel data;
        Parcel reply;
        data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
        status_t err = remote()->transact(GET_RUNNING_APP_PROCESSES, data, &reply, 0);
        if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
            return err;
        }
        return reply.readParcelableVector(output);
    }
};

// ------------------------------------------------------------------------------------
+9 −0
Original line number Diff line number Diff line
@@ -25,6 +25,11 @@
// ---------------------------------------------------------------------------
namespace android {

namespace app {
class IProcessObserver;
class RunningAppProcessInfo;
} // namespace app

#define DECLARE_PROCESS_STATE(name) \
    PROCESS_STATE_##name = (int32_t) app::ProcessStateEnum::name

@@ -95,6 +100,10 @@ public:
    int getUidProcessState(const uid_t uid, const String16& callingPackage);
    status_t checkPermission(const String16& permission, const pid_t pid, const uid_t uid, int32_t* outResult);

    status_t registerProcessObserver(const sp<app::IProcessObserver> observer);
    status_t unregisterProcessObserver(const sp<app::IProcessObserver> observer);
    status_t getRunningAppProcesses(::std::vector<app::RunningAppProcessInfo>* output);

    status_t linkToDeath(const sp<IBinder::DeathRecipient>& recipient);
    status_t unlinkToDeath(const sp<IBinder::DeathRecipient>& recipient);

+16 −2
Original line number Diff line number Diff line
@@ -18,11 +18,19 @@

#ifndef __ANDROID_VNDK__

#include <binder/IUidObserver.h>
#include <binder/IInterface.h>
#include <binder/IUidObserver.h>
#include <binder/Parcelable.h>

#include <vector>

namespace android {

namespace app {
class IProcessObserver;
class RunningAppProcessInfo;
} // namespace app

// ------------------------------------------------------------------------------------

class IActivityManager : public IInterface
@@ -55,6 +63,9 @@ public:
    virtual status_t logFgsApiEnd(int32_t apiType, int32_t appUid, int32_t appPid) = 0;
    virtual status_t logFgsApiStateChanged(int32_t apiType, int32_t state, int32_t appUid,
                                           int32_t appPid) = 0;
    virtual status_t registerProcessObserver(const sp<app::IProcessObserver>& observer) = 0;
    virtual status_t unregisterProcessObserver(const sp<app::IProcessObserver>& observer) = 0;
    virtual status_t getRunningAppProcesses(::std::vector<app::RunningAppProcessInfo>* output) = 0;

    enum {
        OPEN_CONTENT_URI_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
@@ -68,7 +79,10 @@ public:
        CHECK_PERMISSION_TRANSACTION,
        LOG_FGS_API_BEGIN_TRANSACTION,
        LOG_FGS_API_END_TRANSACTION,
        LOG_FGS_API_STATE_CHANGED_TRANSACTION
        LOG_FGS_API_STATE_CHANGED_TRANSACTION,
        REGISTER_PROCESS_OBSERVER,
        UNREGISTER_PROCESS_OBSERVER,
        GET_RUNNING_APP_PROCESSES,
    };
};