Skip to content

Commit 968f1fb

Browse files
Yu-Ting TsengAndroid (Google) Code Review
authored andcommitted
Merge "Make a few AM APIs available to native callers." into main
2 parents f72cdf8 + 23b0f96 commit 968f1fb

File tree

5 files changed

+91
-2
lines changed

5 files changed

+91
-2
lines changed

libs/binder/ActivityManager.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <mutex>
1818
#include <unistd.h>
1919

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

165+
status_t ActivityManager::registerProcessObserver(const sp<app::IProcessObserver> observer) {
166+
sp<IActivityManager> service = getService();
167+
if (service != nullptr) {
168+
return service->registerProcessObserver(observer);
169+
}
170+
return INVALID_OPERATION;
171+
}
172+
173+
status_t ActivityManager::unregisterProcessObserver(const sp<app::IProcessObserver> observer) {
174+
sp<IActivityManager> service = getService();
175+
if (service != nullptr) {
176+
return service->unregisterProcessObserver(observer);
177+
}
178+
return INVALID_OPERATION;
179+
}
180+
181+
status_t ActivityManager::getRunningAppProcesses(
182+
::std::vector<app::RunningAppProcessInfo>* output) {
183+
sp<IActivityManager> service = getService();
184+
if (service != nullptr) {
185+
return service->getRunningAppProcesses(output);
186+
}
187+
return INVALID_OPERATION;
188+
}
189+
163190
status_t ActivityManager::linkToDeath(const sp<IBinder::DeathRecipient>& recipient) {
164191
sp<IActivityManager> service = getService();
165192
if (service != nullptr) {

libs/binder/Android.bp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,8 @@ cc_library {
971971
"IActivityManager.cpp",
972972
"IUidObserver.cpp",
973973
":activity_manager_procstate_aidl",
974+
":activity_manager_iprocessobserver_aidl",
975+
":activity_manager_runningappprocessinfo_aidl",
974976
],
975977
export_include_dirs: ["include_activitymanager"],
976978
shared_libs: [

libs/binder/IActivityManager.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <unistd.h>
1818
#include <fcntl.h>
1919

20+
#include <android/app/IProcessObserver.h>
21+
#include <android/app/RunningAppProcessInfo.h>
2022
#include <android/permission_manager.h>
2123
#include <binder/ActivityManager.h>
2224
#include <binder/IActivityManager.h>
@@ -232,6 +234,41 @@ class BpActivityManager : public BpInterface<IActivityManager>
232234
}
233235
return NO_ERROR;
234236
}
237+
238+
virtual status_t registerProcessObserver(const sp<app::IProcessObserver>& observer) {
239+
Parcel data;
240+
Parcel reply;
241+
data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
242+
data.writeStrongBinder(observer);
243+
status_t err = remote()->transact(REGISTER_PROCESS_OBSERVER, data, &reply, 0);
244+
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
245+
return err;
246+
}
247+
return OK;
248+
}
249+
250+
virtual status_t unregisterProcessObserver(const sp<app::IProcessObserver>& observer) {
251+
Parcel data;
252+
Parcel reply;
253+
data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
254+
data.writeStrongBinder(observer);
255+
status_t err = remote()->transact(UNREGISTER_PROCESS_OBSERVER, data, &reply, 0);
256+
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
257+
return err;
258+
}
259+
return OK;
260+
}
261+
262+
virtual status_t getRunningAppProcesses(::std::vector<app::RunningAppProcessInfo>* output) {
263+
Parcel data;
264+
Parcel reply;
265+
data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
266+
status_t err = remote()->transact(GET_RUNNING_APP_PROCESSES, data, &reply, 0);
267+
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
268+
return err;
269+
}
270+
return reply.readParcelableVector(output);
271+
}
235272
};
236273

237274
// ------------------------------------------------------------------------------------

libs/binder/include_activitymanager/binder/ActivityManager.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525
// ---------------------------------------------------------------------------
2626
namespace android {
2727

28+
namespace app {
29+
class IProcessObserver;
30+
class RunningAppProcessInfo;
31+
} // namespace app
32+
2833
#define DECLARE_PROCESS_STATE(name) \
2934
PROCESS_STATE_##name = (int32_t) app::ProcessStateEnum::name
3035

@@ -95,6 +100,10 @@ class ActivityManager
95100
int getUidProcessState(const uid_t uid, const String16& callingPackage);
96101
status_t checkPermission(const String16& permission, const pid_t pid, const uid_t uid, int32_t* outResult);
97102

103+
status_t registerProcessObserver(const sp<app::IProcessObserver> observer);
104+
status_t unregisterProcessObserver(const sp<app::IProcessObserver> observer);
105+
status_t getRunningAppProcesses(::std::vector<app::RunningAppProcessInfo>* output);
106+
98107
status_t linkToDeath(const sp<IBinder::DeathRecipient>& recipient);
99108
status_t unlinkToDeath(const sp<IBinder::DeathRecipient>& recipient);
100109

libs/binder/include_activitymanager/binder/IActivityManager.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,19 @@
1818

1919
#ifndef __ANDROID_VNDK__
2020

21-
#include <binder/IUidObserver.h>
2221
#include <binder/IInterface.h>
22+
#include <binder/IUidObserver.h>
23+
#include <binder/Parcelable.h>
24+
25+
#include <vector>
2326

2427
namespace android {
2528

29+
namespace app {
30+
class IProcessObserver;
31+
class RunningAppProcessInfo;
32+
} // namespace app
33+
2634
// ------------------------------------------------------------------------------------
2735

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

5970
enum {
6071
OPEN_CONTENT_URI_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
@@ -68,7 +79,10 @@ class IActivityManager : public IInterface
6879
CHECK_PERMISSION_TRANSACTION,
6980
LOG_FGS_API_BEGIN_TRANSACTION,
7081
LOG_FGS_API_END_TRANSACTION,
71-
LOG_FGS_API_STATE_CHANGED_TRANSACTION
82+
LOG_FGS_API_STATE_CHANGED_TRANSACTION,
83+
REGISTER_PROCESS_OBSERVER,
84+
UNREGISTER_PROCESS_OBSERVER,
85+
GET_RUNNING_APP_PROCESSES,
7286
};
7387
};
7488

0 commit comments

Comments
 (0)