15da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn/* 25da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * Copyright (C) 2013 The Android Open Source Project 35da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * 45da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 55da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * you may not use this file except in compliance with the License. 65da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * You may obtain a copy of the License at 75da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * 85da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 95da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * 105da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 115da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 125da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * See the License for the specific language governing permissions and 145da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn * limitations under the License. 155da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn */ 165da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 175da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn#define LOG_TAG "AppOpsCallback" 185da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 195da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn#include <binder/IAppOpsCallback.h> 205da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 215da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn#include <utils/Log.h> 225da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn#include <binder/Parcel.h> 235da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn#include <utils/String8.h> 245da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 255da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn#include <private/binder/Static.h> 265da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 275da5ca520cca085528588f6067acb1c437001ef2Dianne Hackbornnamespace android { 285da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 295da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn// ---------------------------------------------------------------------- 305da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 315da5ca520cca085528588f6067acb1c437001ef2Dianne Hackbornclass BpAppOpsCallback : public BpInterface<IAppOpsCallback> 325da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn{ 335da5ca520cca085528588f6067acb1c437001ef2Dianne Hackbornpublic: 345da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn BpAppOpsCallback(const sp<IBinder>& impl) 355da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn : BpInterface<IAppOpsCallback>(impl) 365da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn { 375da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn } 385da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 395da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn virtual void opChanged(int32_t op, const String16& packageName) { 405da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn Parcel data, reply; 415da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn data.writeInterfaceToken(IAppOpsCallback::getInterfaceDescriptor()); 425da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn data.writeInt32(op); 435da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn data.writeString16(packageName); 445da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn remote()->transact(OP_CHANGED_TRANSACTION, data, &reply); 455da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn } 465da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn}; 475da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 485da5ca520cca085528588f6067acb1c437001ef2Dianne HackbornIMPLEMENT_META_INTERFACE(AppOpsCallback, "com.android.internal.app.IAppOpsCallback"); 495da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 505da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn// ---------------------------------------------------------------------- 515da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 525da5ca520cca085528588f6067acb1c437001ef2Dianne Hackbornstatus_t BnAppOpsCallback::onTransact( 535da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 545da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn{ 555da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn switch(code) { 565da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn case OP_CHANGED_TRANSACTION: { 575da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn CHECK_INTERFACE(IAppOpsCallback, data, reply); 585da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn int32_t op = data.readInt32(); 595da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn String16 packageName = data.readString16(); 605da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn opChanged(op, packageName); 615da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn reply->writeNoException(); 625da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn return NO_ERROR; 635da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn } break; 645da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn default: 655da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn return BBinder::onTransact(code, data, reply, flags); 665da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn } 675da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn} 685da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn 695da5ca520cca085528588f6067acb1c437001ef2Dianne Hackborn}; // namespace android 70