14d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran/* 24d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * Copyright (C) 2017 The Android Open Source Project 34d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * 44d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * Licensed under the Apache License, Version 2.0 (the "License"); 54d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * you may not use this file except in compliance with the License. 64d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * You may obtain a copy of the License at 74d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * 84d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * http://www.apache.org/licenses/LICENSE-2.0 94d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * 104d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * Unless required by applicable law or agreed to in writing, software 114d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * distributed under the License is distributed on an "AS IS" BASIS, 124d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * See the License for the specific language governing permissions and 144d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran * limitations under the License. 154d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran */ 164d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 174d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran#include <binder/IUidObserver.h> 184d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 194d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran#include <binder/Parcel.h> 204d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 214d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendrannamespace android { 224d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 234d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran// ------------------------------------------------------------------------------------ 244d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 254d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendranclass BpUidObserver : public BpInterface<IUidObserver> 264d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran{ 274d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendranpublic: 284d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran explicit BpUidObserver(const sp<IBinder>& impl) 294d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran : BpInterface<IUidObserver>(impl) 304d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran { 314d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } 324d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 334d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran virtual void onUidGone(uid_t uid, bool disabled) 344d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran { 354d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran Parcel data, reply; 364d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor()); 374d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInt32((int32_t) uid); 384d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInt32(disabled ? 1 : 0); 394d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran remote()->transact(ON_UID_GONE_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY); 404d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } 414d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 424d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran virtual void onUidActive(uid_t uid) 434d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran { 444d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran Parcel data, reply; 454d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor()); 464d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInt32((int32_t) uid); 474d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran remote()->transact(ON_UID_ACTIVE_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY); 484d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } 494d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 504d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran virtual void onUidIdle(uid_t uid, bool disabled) 514d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran { 524d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran Parcel data, reply; 534d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInterfaceToken(IUidObserver::getInterfaceDescriptor()); 544d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInt32((int32_t) uid); 554d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran data.writeInt32(disabled ? 1 : 0); 564d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran remote()->transact(ON_UID_IDLE_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY); 574d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } 584d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran}; 594d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 604d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran// ---------------------------------------------------------------------- 614d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 624d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh MahendranIMPLEMENT_META_INTERFACE(UidObserver, "android.app.IUidObserver"); 634d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 644d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran// ---------------------------------------------------------------------- 654d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 664d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendranstatus_t BnUidObserver::onTransact( 674d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 684d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran{ 694d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran switch(code) { 704d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran case ON_UID_GONE_TRANSACTION: { 714d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran CHECK_INTERFACE(IUidObserver, data, reply); 724d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran uid_t uid = data.readInt32(); 734d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran bool disabled = data.readInt32() == 1; 744d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran onUidGone(uid, disabled); 754d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran return NO_ERROR; 764d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } break; 774d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 784d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran case ON_UID_ACTIVE_TRANSACTION: { 794d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran CHECK_INTERFACE(IUidObserver, data, reply); 804d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran uid_t uid = data.readInt32(); 814d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran onUidActive(uid); 824d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran return NO_ERROR; 834d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } break; 844d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 854d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran case ON_UID_IDLE_TRANSACTION: { 864d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran CHECK_INTERFACE(IUidObserver, data, reply); 874d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran uid_t uid = data.readInt32(); 884d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran bool disabled = data.readInt32() == 1; 894d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran onUidIdle(uid, disabled); 904d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran return NO_ERROR; 914d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } break; 924d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran default: 934d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran return BBinder::onTransact(code, data, reply, flags); 944d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran } 954d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran} 964d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran 974d85b8c0a38c14f854af8ff85391b7a8d1170d5bGanesh Mahendran}; // namespace android 98