ConnectionServiceRepository.java revision 8de76915ea2772faeb41705aaaeb65f5b3478ac4
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; 368de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad private final CallsManager mCallsManager; 37905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 3878a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad private final ServiceBinder.Listener<ConnectionServiceWrapper> mUnbindListener = 3978a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad new ServiceBinder.Listener<ConnectionServiceWrapper>() { 4078a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad @Override 4178a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad public void onUnbind(ConnectionServiceWrapper service) { 4278a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad mServiceCache.remove(service.getComponentName()); 4378a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad } 4478a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad }; 4578a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad 468de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad ConnectionServiceRepository( 478de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad PhoneAccountRegistrar phoneAccountRegistrar, 488de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad Context context, 498de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad CallsManager callsManager) { 5091d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mPhoneAccountRegistrar = phoneAccountRegistrar; 5191d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mContext = context; 528de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad mCallsManager = callsManager; 53905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 54905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 55105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton ConnectionServiceWrapper getService(ComponentName componentName, UserHandle userHandle) { 56105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton Pair<ComponentName, UserHandle> cacheKey = Pair.create(componentName, userHandle); 57105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton ConnectionServiceWrapper service = mServiceCache.get(cacheKey); 58905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal if (service == null) { 59b78b27693afbe9736f0a54ec473328955251f885Ihab Awad service = new ConnectionServiceWrapper( 60b78b27693afbe9736f0a54ec473328955251f885Ihab Awad componentName, 61b78b27693afbe9736f0a54ec473328955251f885Ihab Awad this, 6291d43cf9c985cc5a83795f256ef5c46ebb8fbdc1Tyler Gunn mPhoneAccountRegistrar, 638de76915ea2772faeb41705aaaeb65f5b3478ac4Ihab Awad mCallsManager, 64105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton mContext, 65105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton userHandle); 6678a5e6b9c1595c81f72d7a822617cb78db224e48Ihab Awad service.addListener(mUnbindListener); 67105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton mServiceCache.put(cacheKey, service); 68905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 69905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal return service; 70905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 71905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 72905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal /** 739787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn * Dumps the state of the {@link ConnectionServiceRepository}. 749787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn * 759787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn * @param pw The {@code IndentingPrintWriter} to write the state to. 769787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn */ 779787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn public void dump(IndentingPrintWriter pw) { 789787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn pw.println("mServiceCache:"); 799787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn pw.increaseIndent(); 80105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton for (Pair<ComponentName, UserHandle> cacheKey : mServiceCache.keySet()) { 81105d977687d1d0de7cd9420fc140b01404261df1Evan Charlton ComponentName componentName = cacheKey.first; 829787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn pw.println(componentName); 839787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn } 849787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn pw.decreaseIndent(); 859787e0e80d8960cf8b0ca74c7cdc4c4aac97187aTyler Gunn } 86905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal} 87