123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn/* 223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * Copyright (C) 2015 The Android Open Source Project 323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * 423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * you may not use this file except in compliance with the License. 623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * You may obtain a copy of the License at 723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * 823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * 1023eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 1123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 1223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * See the License for the specific language governing permissions and 1423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn * limitations under the License. 1523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn */ 1623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 1723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn#define LOG_TAG "ResultReceiver" 1823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 1923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn#include <binder/IResultReceiver.h> 2023eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 2123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn#include <utils/Log.h> 2223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn#include <binder/Parcel.h> 2323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn#include <utils/String8.h> 2423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 2523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn#include <private/binder/Static.h> 2623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 2723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackbornnamespace android { 2823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 2923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn// ---------------------------------------------------------------------- 3023eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 3123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackbornclass BpResultReceiver : public BpInterface<IResultReceiver> 3223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn{ 3323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackbornpublic: 3423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn BpResultReceiver(const sp<IBinder>& impl) 3523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn : BpInterface<IResultReceiver>(impl) 3623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn { 3723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn } 3823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 3923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn virtual void send(int32_t resultCode) { 4023eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn Parcel data; 4123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn data.writeInterfaceToken(IResultReceiver::getInterfaceDescriptor()); 4223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn data.writeInt32(resultCode); 4323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn remote()->transact(OP_SEND, data, NULL, IBinder::FLAG_ONEWAY); 4423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn } 4523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn}; 4623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 4723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne HackbornIMPLEMENT_META_INTERFACE(ResultReceiver, "com.android.internal.os.IResultReceiver"); 4823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 4923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn// ---------------------------------------------------------------------- 5023eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 5123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackbornstatus_t BnResultReceiver::onTransact( 5223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 5323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn{ 5423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn switch(code) { 5523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn case OP_SEND: { 5623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn CHECK_INTERFACE(IResultReceiver, data, reply); 5723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn int32_t resultCode = data.readInt32(); 5823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn send(resultCode); 5923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn if (reply != NULL) { 6023eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn reply->writeNoException(); 6123eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn } 6223eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn return NO_ERROR; 6323eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn } break; 6423eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn default: 6523eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn return BBinder::onTransact(code, data, reply, flags); 6623eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn } 6723eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn} 6823eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn 6923eb1e20cf59e1238b65cc108f31dfbfd85b2337Dianne Hackborn}; // namespace android 70