ConnectionServiceRepository.java revision 8d5d9ddc66b55b6906364ab3c0e244dab4d58f13
1905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal/*
2905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Copyright (C) 2013 The Android Open Source Project
3905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal *
4905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Licensed under the Apache License, Version 2.0 (the "License");
5905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * you may not use this file except in compliance with the License.
6905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * You may obtain a copy of the License at
7905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal *
8905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal *      http://www.apache.org/licenses/LICENSE-2.0
9905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal *
10905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Unless required by applicable law or agreed to in writing, software
11905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * distributed under the License is distributed on an "AS IS" BASIS,
12905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * See the License for the specific language governing permissions and
14905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * limitations under the License.
15905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal */
16905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
177cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnpackage com.android.server.telecom;
18905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
19905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport android.content.ComponentName;
2091d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunnimport android.content.Context;
21105d977687d1d0de7cd9420fc140b01404261df1Evan Charltonimport android.os.UserHandle;
22105d977687d1d0de7cd9420fc140b01404261df1Evan Charltonimport android.util.Pair;
23905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
249787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunnimport com.android.internal.util.IndentingPrintWriter;
259787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn
26905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport java.util.HashMap;
27905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
28905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal/**
29905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Searches for and returns connection services.
30905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal */
3178a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awadfinal class ConnectionServiceRepository {
32105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton    private final HashMap<Pair<ComponentName, UserHandle>, ConnectionServiceWrapper> mServiceCache =
33105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton            new HashMap<>();
3491d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn    private final PhoneAccountRegistrar mPhoneAccountRegistrar;
3591d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn    private final Context mContext;
368d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad    private final TelecomSystem.SyncRoot mLock;
378de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad    private final CallsManager mCallsManager;
38905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
3978a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad    private final ServiceBinder.Listener<ConnectionServiceWrapper> mUnbindListener =
4078a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad            new ServiceBinder.Listener<ConnectionServiceWrapper>() {
4178a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad                @Override
4278a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad                public void onUnbind(ConnectionServiceWrapper service) {
438d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                    synchronized (mLock) {
448d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                        mServiceCache.remove(service.getComponentName());
458d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                    }
4678a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad                }
4778a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad            };
4878a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad
498de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad    ConnectionServiceRepository(
508de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad            PhoneAccountRegistrar phoneAccountRegistrar,
518de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad            Context context,
528d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            TelecomSystem.SyncRoot lock,
538de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad            CallsManager callsManager) {
5491d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn        mPhoneAccountRegistrar = phoneAccountRegistrar;
5591d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn        mContext = context;
568d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad        mLock = lock;
578de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad        mCallsManager = callsManager;
58905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal    }
59905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
60105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton    ConnectionServiceWrapper getService(ComponentName componentName, UserHandle userHandle) {
61105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton        Pair<ComponentName, UserHandle> cacheKey = Pair.create(componentName, userHandle);
62105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton        ConnectionServiceWrapper service = mServiceCache.get(cacheKey);
63905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal        if (service == null) {
64b78b27693afbe9736f0a54ec473328955251f885Ihab Awad            service = new ConnectionServiceWrapper(
65b78b27693afbe9736f0a54ec473328955251f885Ihab Awad                    componentName,
66b78b27693afbe9736f0a54ec473328955251f885Ihab Awad                    this,
6791d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn                    mPhoneAccountRegistrar,
688de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad                    mCallsManager,
69105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton                    mContext,
708d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                    mLock,
71105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton                    userHandle);
7278a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad            service.addListener(mUnbindListener);
73105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton            mServiceCache.put(cacheKey, service);
74905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal        }
75905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal        return service;
76905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal    }
77905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal
78905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal    /**
799787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn     * Dumps the state of the {@link ConnectionServiceRepository}.
809787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn     *
819787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn     * @param pw The {@code IndentingPrintWriter} to write the state to.
829787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn     */
839787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn    public void dump(IndentingPrintWriter pw) {
849787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn        pw.println("mServiceCache:");
859787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn        pw.increaseIndent();
86105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton        for (Pair<ComponentName, UserHandle> cacheKey : mServiceCache.keySet()) {
87105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton            ComponentName componentName = cacheKey.first;
889787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn            pw.println(componentName);
899787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn        }
909787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn        pw.decreaseIndent();
919787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn    }
92905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal}
93