1231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu/*
2231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu**
3231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** Copyright 2015, The Android Open Source Project
4231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu**
5231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** Licensed under the Apache License, Version 2.0 (the "License");
6231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** you may not use this file except in compliance with the License.
7231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** You may obtain a copy of the License at
8231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu**
9231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu**     http://www.apache.org/licenses/LICENSE-2.0
10231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu**
11231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** Unless required by applicable law or agreed to in writing, software
12231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** distributed under the License is distributed on an "AS IS" BASIS,
13231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** See the License for the specific language governing permissions and
15231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu** limitations under the License.
16231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu*/
17231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
18231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu#include <utils/RefBase.h>
19231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu#include <binder/IInterface.h>
20231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu#include <binder/Parcel.h>
21231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
22231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu#include <media/IResourceManagerClient.h>
23231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
24231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wunamespace android {
25231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
26231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wuenum {
27231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    RECLAIM_RESOURCE = IBinder::FIRST_CALL_TRANSACTION,
288f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu    GET_NAME,
29231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu};
30231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
31231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wuclass BpResourceManagerClient: public BpInterface<IResourceManagerClient>
32231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu{
33231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wupublic:
34090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh    explicit BpResourceManagerClient(const sp<IBinder> &impl)
35231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        : BpInterface<IResourceManagerClient>(impl)
36231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    {
37231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    }
38231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
39231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    virtual bool reclaimResource() {
40231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        Parcel data, reply;
41231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        data.writeInterfaceToken(IResourceManagerClient::getInterfaceDescriptor());
42231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
43231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        bool ret = false;
44231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        status_t status = remote()->transact(RECLAIM_RESOURCE, data, &reply);
45231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        if (status == NO_ERROR) {
46231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu            ret = (bool)reply.readInt32();
47231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        }
48231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        return ret;
49231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    }
508f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu
518f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu    virtual String8 getName() {
528f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        Parcel data, reply;
538f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        data.writeInterfaceToken(IResourceManagerClient::getInterfaceDescriptor());
548f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu
558f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        String8 ret;
568f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        status_t status = remote()->transact(GET_NAME, data, &reply);
578f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        if (status == NO_ERROR) {
588f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu            ret = reply.readString8();
598f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        }
608f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        return ret;
618f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu    }
628f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu
63231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu};
64231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
65231c3d169ad029689f9d688b68179af7e96b8d78Ronghua WuIMPLEMENT_META_INTERFACE(ResourceManagerClient, "android.media.IResourceManagerClient");
66231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
67231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu// ----------------------------------------------------------------------
68231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
69231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wustatus_t BnResourceManagerClient::onTransact(
70231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
71231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu{
72231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    switch (code) {
73231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        case RECLAIM_RESOURCE: {
74231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu            CHECK_INTERFACE(IResourceManagerClient, data, reply);
75231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu            bool ret = reclaimResource();
76231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu            reply->writeInt32(ret);
77231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu            return NO_ERROR;
78231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        } break;
798f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        case GET_NAME: {
808f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu            CHECK_INTERFACE(IResourceManagerClient, data, reply);
818f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu            String8 ret = getName();
828f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu            reply->writeString8(ret);
838f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu            return NO_ERROR;
848f9dd872366f54b6260506c75c3d0cc3f9f73f81Ronghua Wu        } break;
85231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu        default:
86231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu            return BBinder::onTransact(code, data, reply, flags);
87231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu    }
88231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu}
89231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu
90231c3d169ad029689f9d688b68179af7e96b8d78Ronghua Wu}; // namespace android
91