ConnectionServiceRepository.java revision b78b27693afbe9736f0a54ec473328955251f885
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 17905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalpackage com.android.telecomm; 18905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 19905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport android.content.ComponentName; 20905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport android.content.Intent; 21905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport android.content.pm.PackageManager; 22905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport android.content.pm.ResolveInfo; 23905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport android.content.pm.ServiceInfo; 24f2f14efaf1ac2cd1e78d29b9d7213696746f1f17Santos Cordonimport android.telecomm.ConnectionService; 25905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 26905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport java.util.ArrayList; 27905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport java.util.Collection; 28905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalimport java.util.HashMap; 29905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 30905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal/** 31905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Searches for and returns connection services. 32905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal */ 33905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepalfinal class ConnectionServiceRepository 34905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal implements ServiceBinder.Listener<ConnectionServiceWrapper> { 35905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal private final HashMap<ComponentName, ConnectionServiceWrapper> mServiceCache = 36905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal new HashMap<ComponentName, ConnectionServiceWrapper>(); 37905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 38664837f9a8a98f98876417a0bfff64834e8032faSailesh Nepal ConnectionServiceRepository() { 39905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 40905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 41905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal Collection<ConnectionServiceWrapper> lookupServices() { 42905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal PackageManager packageManager = TelecommApp.getInstance().getPackageManager(); 43f2f14efaf1ac2cd1e78d29b9d7213696746f1f17Santos Cordon Intent intent = new Intent(ConnectionService.SERVICE_INTERFACE); 44905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal ArrayList<ConnectionServiceWrapper> services = new ArrayList<>(); 45905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 46905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal for (ResolveInfo entry : packageManager.queryIntentServices(intent, 0)) { 47905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal ServiceInfo serviceInfo = entry.serviceInfo; 48905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal if (serviceInfo != null) { 49905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal services.add(getService(new ComponentName( 50905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal serviceInfo.packageName, serviceInfo.name))); 51905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 52905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 53905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal return services; 54905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 55905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 56905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal ConnectionServiceWrapper getService(ComponentName componentName) { 57905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal ConnectionServiceWrapper service = mServiceCache.get(componentName); 58905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal if (service == null) { 59b78b27693afbe9736f0a54ec473328955251f885Ihab Awad service = new ConnectionServiceWrapper( 60b78b27693afbe9736f0a54ec473328955251f885Ihab Awad componentName, 61b78b27693afbe9736f0a54ec473328955251f885Ihab Awad this, 62b78b27693afbe9736f0a54ec473328955251f885Ihab Awad TelecommApp.getInstance().getPhoneAccountRegistrar()); 63905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal service.addListener(this); 64905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal mServiceCache.put(componentName, service); 65905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 66905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal return service; 67905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 68905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal 69905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal /** 70905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * Removes the specified service from the cache when the service unbinds. 71905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * 72905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal * {@inheritDoc} 73905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal */ 74905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal @Override 75905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal public void onUnbind(ConnectionServiceWrapper service) { 76905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal mServiceCache.remove(service.getComponentName()); 77905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal } 78905dfba7883666f45a0c6958d8bc6c19d68972d9Sailesh Nepal} 79