155182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz/*
255182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * Copyright (C) 2017 The Android Open Source Project
355182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz *
455182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * Licensed under the Apache License, Version 2.0 (the "License");
555182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * you may not use this file except in compliance with the License.
655182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * You may obtain a copy of the License at
755182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz *
855182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz *      http://www.apache.org/licenses/LICENSE-2.0
955182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz *
1055182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * Unless required by applicable law or agreed to in writing, software
1155182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * distributed under the License is distributed on an "AS IS" BASIS,
1255182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * See the License for the specific language governing permissions and
1455182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz * limitations under the License.
1555182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz */
1655182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
1755182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzpackage com.android.frameworks.coretests.binderproxycountingtestservice;
1855182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
1955182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzimport android.app.Service;
2055182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzimport android.content.Intent;
2155182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzimport android.os.IBinder;
2255182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzimport android.os.RemoteCallbackList;
2355182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
2455182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzimport com.android.frameworks.coretests.aidl.IBinderProxyCountingService;
2555182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzimport com.android.frameworks.coretests.aidl.ITestRemoteCallback;
2655182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
2755182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanzpublic class BinderProxyCountingService extends Service {
2855182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz    private static final String TAG = BinderProxyCountingService.class.getSimpleName();
2955182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
3055182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz    private IBinderProxyCountingService.Stub mBinder = new IBinderProxyCountingService.Stub() {
3155182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
3255182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        final RemoteCallbackList<ITestRemoteCallback> mTestCallbacks = new RemoteCallbackList<>();
3355182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
3455182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        @Override
3555182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        public void registerCallback(ITestRemoteCallback callback) {
3655182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz            synchronized (this) {
3755182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz                mTestCallbacks.register(callback);
3855182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz            }
3955182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        }
4055182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
4155182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        @Override
4255182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        public void unregisterCallback(ITestRemoteCallback callback) {
4355182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz            synchronized (this) {
4455182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz                mTestCallbacks.unregister(callback);
4555182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz            }
4655182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        }
4755182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz    };
4855182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz
4955182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz    @Override
5055182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz    public IBinder onBind(Intent intent) {
5155182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz        return mBinder;
5255182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz    }
5355182464fb9f6536ee500eac02a031e7b7226fc4Michael Wachenschwanz}