xref: /aosp_15_r20/frameworks/native/libs/binder/IUidObserver.cpp (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker #include <binder/IUidObserver.h>
18*38e8c45fSAndroid Build Coastguard Worker 
19*38e8c45fSAndroid Build Coastguard Worker #include <binder/Parcel.h>
20*38e8c45fSAndroid Build Coastguard Worker 
21*38e8c45fSAndroid Build Coastguard Worker namespace android {
22*38e8c45fSAndroid Build Coastguard Worker 
23*38e8c45fSAndroid Build Coastguard Worker // ------------------------------------------------------------------------------------
24*38e8c45fSAndroid Build Coastguard Worker 
25*38e8c45fSAndroid Build Coastguard Worker class BpUidObserver : public BpInterface<IUidObserver>
26*38e8c45fSAndroid Build Coastguard Worker {
27*38e8c45fSAndroid Build Coastguard Worker public:
BpUidObserver(const sp<IBinder> & impl)28*38e8c45fSAndroid Build Coastguard Worker     explicit BpUidObserver(const sp<IBinder>& impl)
29*38e8c45fSAndroid Build Coastguard Worker         : BpInterface<IUidObserver>(impl)
30*38e8c45fSAndroid Build Coastguard Worker     {
31*38e8c45fSAndroid Build Coastguard Worker     }
32*38e8c45fSAndroid Build Coastguard Worker 
onUidGone(uid_t uid,bool disabled)33*38e8c45fSAndroid Build Coastguard Worker     virtual void onUidGone(uid_t uid, bool disabled)
34*38e8c45fSAndroid Build Coastguard Worker     {
35*38e8c45fSAndroid Build Coastguard Worker         Parcel data, reply;
36*38e8c45fSAndroid Build Coastguard Worker         data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor());
37*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32((int32_t) uid);
38*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32(disabled ? 1 : 0);
39*38e8c45fSAndroid Build Coastguard Worker         remote()->transact(ON_UID_GONE_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
40*38e8c45fSAndroid Build Coastguard Worker     }
41*38e8c45fSAndroid Build Coastguard Worker 
onUidActive(uid_t uid)42*38e8c45fSAndroid Build Coastguard Worker     virtual void onUidActive(uid_t uid)
43*38e8c45fSAndroid Build Coastguard Worker     {
44*38e8c45fSAndroid Build Coastguard Worker         Parcel data, reply;
45*38e8c45fSAndroid Build Coastguard Worker         data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor());
46*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32((int32_t) uid);
47*38e8c45fSAndroid Build Coastguard Worker         remote()->transact(ON_UID_ACTIVE_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
48*38e8c45fSAndroid Build Coastguard Worker     }
49*38e8c45fSAndroid Build Coastguard Worker 
onUidIdle(uid_t uid,bool disabled)50*38e8c45fSAndroid Build Coastguard Worker     virtual void onUidIdle(uid_t uid, bool disabled)
51*38e8c45fSAndroid Build Coastguard Worker     {
52*38e8c45fSAndroid Build Coastguard Worker         Parcel data, reply;
53*38e8c45fSAndroid Build Coastguard Worker         data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor());
54*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32((int32_t) uid);
55*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32(disabled ? 1 : 0);
56*38e8c45fSAndroid Build Coastguard Worker         remote()->transact(ON_UID_IDLE_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
57*38e8c45fSAndroid Build Coastguard Worker     }
58*38e8c45fSAndroid Build Coastguard Worker 
onUidStateChanged(uid_t uid,int32_t procState,int64_t procStateSeq,int32_t capability)59*38e8c45fSAndroid Build Coastguard Worker     virtual void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq,
60*38e8c45fSAndroid Build Coastguard Worker                                    int32_t capability) {
61*38e8c45fSAndroid Build Coastguard Worker         Parcel data, reply;
62*38e8c45fSAndroid Build Coastguard Worker         data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor());
63*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32((int32_t) uid);
64*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32(procState);
65*38e8c45fSAndroid Build Coastguard Worker         data.writeInt64(procStateSeq);
66*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32(capability);
67*38e8c45fSAndroid Build Coastguard Worker         remote()->transact(ON_UID_STATE_CHANGED_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
68*38e8c45fSAndroid Build Coastguard Worker     }
69*38e8c45fSAndroid Build Coastguard Worker 
onUidProcAdjChanged(uid_t uid,int32_t adj)70*38e8c45fSAndroid Build Coastguard Worker     virtual void onUidProcAdjChanged(uid_t uid, int32_t adj) {
71*38e8c45fSAndroid Build Coastguard Worker         Parcel data, reply;
72*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32((int32_t)uid);
73*38e8c45fSAndroid Build Coastguard Worker         data.writeInt32((int32_t)adj);
74*38e8c45fSAndroid Build Coastguard Worker         remote()->transact(ON_UID_PROC_ADJ_CHANGED_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
75*38e8c45fSAndroid Build Coastguard Worker     }
76*38e8c45fSAndroid Build Coastguard Worker };
77*38e8c45fSAndroid Build Coastguard Worker 
78*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------
79*38e8c45fSAndroid Build Coastguard Worker 
80*38e8c45fSAndroid Build Coastguard Worker IMPLEMENT_META_INTERFACE(UidObserver, "android.app.IUidObserver")
81*38e8c45fSAndroid Build Coastguard Worker 
82*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------
83*38e8c45fSAndroid Build Coastguard Worker 
84*38e8c45fSAndroid Build Coastguard Worker // NOLINTNEXTLINE(google-default-arguments)
onTransact(uint32_t code,const Parcel & data,Parcel * reply,uint32_t flags)85*38e8c45fSAndroid Build Coastguard Worker status_t BnUidObserver::onTransact(
86*38e8c45fSAndroid Build Coastguard Worker     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
87*38e8c45fSAndroid Build Coastguard Worker {
88*38e8c45fSAndroid Build Coastguard Worker     switch(code) {
89*38e8c45fSAndroid Build Coastguard Worker         case ON_UID_GONE_TRANSACTION: {
90*38e8c45fSAndroid Build Coastguard Worker             CHECK_INTERFACE(IUidObserver, data, reply);
91*38e8c45fSAndroid Build Coastguard Worker             uid_t uid = data.readInt32();
92*38e8c45fSAndroid Build Coastguard Worker             bool disabled = data.readInt32() == 1;
93*38e8c45fSAndroid Build Coastguard Worker             onUidGone(uid, disabled);
94*38e8c45fSAndroid Build Coastguard Worker             return NO_ERROR;
95*38e8c45fSAndroid Build Coastguard Worker         } break;
96*38e8c45fSAndroid Build Coastguard Worker 
97*38e8c45fSAndroid Build Coastguard Worker         case ON_UID_ACTIVE_TRANSACTION: {
98*38e8c45fSAndroid Build Coastguard Worker             CHECK_INTERFACE(IUidObserver, data, reply);
99*38e8c45fSAndroid Build Coastguard Worker             uid_t uid = data.readInt32();
100*38e8c45fSAndroid Build Coastguard Worker             onUidActive(uid);
101*38e8c45fSAndroid Build Coastguard Worker             return NO_ERROR;
102*38e8c45fSAndroid Build Coastguard Worker         } break;
103*38e8c45fSAndroid Build Coastguard Worker 
104*38e8c45fSAndroid Build Coastguard Worker         case ON_UID_IDLE_TRANSACTION: {
105*38e8c45fSAndroid Build Coastguard Worker             CHECK_INTERFACE(IUidObserver, data, reply);
106*38e8c45fSAndroid Build Coastguard Worker             uid_t uid = data.readInt32();
107*38e8c45fSAndroid Build Coastguard Worker             bool disabled = data.readInt32() == 1;
108*38e8c45fSAndroid Build Coastguard Worker             onUidIdle(uid, disabled);
109*38e8c45fSAndroid Build Coastguard Worker             return NO_ERROR;
110*38e8c45fSAndroid Build Coastguard Worker         } break;
111*38e8c45fSAndroid Build Coastguard Worker 
112*38e8c45fSAndroid Build Coastguard Worker         case ON_UID_STATE_CHANGED_TRANSACTION: {
113*38e8c45fSAndroid Build Coastguard Worker             CHECK_INTERFACE(IUidObserver, data, reply);
114*38e8c45fSAndroid Build Coastguard Worker             uid_t uid = data.readInt32();
115*38e8c45fSAndroid Build Coastguard Worker             int32_t procState = data.readInt32();
116*38e8c45fSAndroid Build Coastguard Worker             int64_t procStateSeq = data.readInt64();
117*38e8c45fSAndroid Build Coastguard Worker             int32_t capability = data.readInt32();
118*38e8c45fSAndroid Build Coastguard Worker             onUidStateChanged(uid, procState, procStateSeq, capability);
119*38e8c45fSAndroid Build Coastguard Worker             return NO_ERROR;
120*38e8c45fSAndroid Build Coastguard Worker         } break;
121*38e8c45fSAndroid Build Coastguard Worker 
122*38e8c45fSAndroid Build Coastguard Worker         case ON_UID_PROC_ADJ_CHANGED_TRANSACTION: {
123*38e8c45fSAndroid Build Coastguard Worker             CHECK_INTERFACE(IUidObserver, data, reply);
124*38e8c45fSAndroid Build Coastguard Worker             uid_t uid = data.readInt32();
125*38e8c45fSAndroid Build Coastguard Worker             int32_t adj = data.readInt32();
126*38e8c45fSAndroid Build Coastguard Worker             onUidProcAdjChanged(uid, adj);
127*38e8c45fSAndroid Build Coastguard Worker             return NO_ERROR;
128*38e8c45fSAndroid Build Coastguard Worker         } break;
129*38e8c45fSAndroid Build Coastguard Worker 
130*38e8c45fSAndroid Build Coastguard Worker         default:
131*38e8c45fSAndroid Build Coastguard Worker             return BBinder::onTransact(code, data, reply, flags);
132*38e8c45fSAndroid Build Coastguard Worker     }
133*38e8c45fSAndroid Build Coastguard Worker }
134*38e8c45fSAndroid Build Coastguard Worker 
135*38e8c45fSAndroid Build Coastguard Worker } // namespace android
136