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