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; 21905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 22905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport java.util.HashMap; 23905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 24905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal/** 25905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Searches for and returns connection services. 26905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal */ 27905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalfinal class ConnectionServiceRepository 28905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal implements ServiceBinder.Listener<ConnectionServiceWrapper> { 29905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal private final HashMap<ComponentName, ConnectionServiceWrapper> mServiceCache = 30905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal new HashMap<ComponentName, ConnectionServiceWrapper>(); 3191d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn private final PhoneAccountRegistrar mPhoneAccountRegistrar; 3291d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn private final Context mContext; 33905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 3491d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn ConnectionServiceRepository(PhoneAccountRegistrar phoneAccountRegistrar, Context context) { 3591d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mPhoneAccountRegistrar = phoneAccountRegistrar; 3691d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mContext = context; 37905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 38905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 39905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal ConnectionServiceWrapper getService(ComponentName componentName) { 40905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal ConnectionServiceWrapper service = mServiceCache.get(componentName); 41905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal if (service == null) { 42b78b27693afbe9736f0a54ec473328955251f885Ihab Awad service = new ConnectionServiceWrapper( 43b78b27693afbe9736f0a54ec473328955251f885Ihab Awad componentName, 44b78b27693afbe9736f0a54ec473328955251f885Ihab Awad this, 4591d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mPhoneAccountRegistrar, 4691d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mContext); 47905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal service.addListener(this); 48905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal mServiceCache.put(componentName, service); 49905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 50905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal return service; 51905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 52905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 53905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal /** 54905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Removes the specified service from the cache when the service unbinds. 55905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * 56905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * {@inheritDoc} 57905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal */ 58905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal @Override 59905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal public void onUnbind(ConnectionServiceWrapper service) { 60905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal mServiceCache.remove(service.getComponentName()); 61905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 62905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal} 63