10b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon/* 20b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * Copyright (C) 2014 The Android Open Source Project 30b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * 40b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 50b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * you may not use this file except in compliance with the License. 60b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * You may obtain a copy of the License at 70b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * 80b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * http://www.apache.org/licenses/LICENSE-2.0 90b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * 100b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * Unless required by applicable law or agreed to in writing, software 110b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 120b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * See the License for the specific language governing permissions and 140b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * limitations under the License. 150b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 160b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 170b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonpackage com.android.server.telecom; 180b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 190b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonimport android.app.Application; 200b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonimport android.content.BroadcastReceiver; 210b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonimport android.content.Context; 220b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonimport android.content.Intent; 230b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonimport android.content.IntentFilter; 240b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonimport android.os.UserHandle; 250b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 260b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon/** 270b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * Top-level Application class for Telecom. 280b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 290b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordonpublic final class TelecomGlobals { 300b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private static final String TAG = TelecomGlobals.class.getSimpleName(); 310b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 320b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private static final IntentFilter USER_SWITCHED_FILTER = 330b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon new IntentFilter(Intent.ACTION_USER_SWITCHED); 340b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 350b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private static final TelecomGlobals INSTANCE = new TelecomGlobals(); 360b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 370b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon /** 380b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * The Telecom service implementation. 390b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 40f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon private TelecomService mTelecomService; 410b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 420b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon /** 430b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * Missed call notifier. Exists here so that the instance can be shared with 440b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * {@link TelecomBroadcastReceiver}. 450b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 460b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private MissedCallNotifier mMissedCallNotifier; 470b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 480b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon /** 490b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * Maintains the list of registered {@link android.telecom.PhoneAccountHandle}s. 500b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 510b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private PhoneAccountRegistrar mPhoneAccountRegistrar; 520b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 530b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon /** 540b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * The calls manager for the Telecom service. 550b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 560b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private CallsManager mCallsManager; 570b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 580b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon /** 590b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon * The application context. 600b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon */ 610b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private Context mContext; 620b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 630b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon private final BroadcastReceiver mUserSwitchedReceiver = new BroadcastReceiver() { 640b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon @Override 650b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon public void onReceive(Context context, Intent intent) { 660b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon int userHandleId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0); 670b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon UserHandle currentUserHandle = new UserHandle(userHandleId); 680b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon mPhoneAccountRegistrar.setCurrentUserHandle(currentUserHandle); 690b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } 700b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon }; 710b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 720b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon static TelecomGlobals getInstance() { 730b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon return INSTANCE; 740b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } 750b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 760b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon void initialize(Context context) { 770b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon if (mContext != null) { 78f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon Log.e(TAG, new Exception(), "Attempting to intialize TelecomGlobals a second time."); 790b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon return; 800b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } else { 810b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon Log.i(TAG, "TelecomGlobals initializing"); 820b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } 83f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon mContext = context.getApplicationContext(); 840b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 850b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon mMissedCallNotifier = new MissedCallNotifier(mContext); 860b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon mPhoneAccountRegistrar = new PhoneAccountRegistrar(mContext); 870b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 880b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon mCallsManager = new CallsManager(mContext, mMissedCallNotifier, mPhoneAccountRegistrar); 890b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon CallsManager.initialize(mCallsManager); 90e6a33f2e9ec77f900260a50242d657668706c0aeSantos Cordon Log.i(this, "CallsManager initialized"); 910b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 920b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon // Start the BluetoothPhoneService 930b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon BluetoothPhoneService.start(mContext); 940b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 950b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon mContext.registerReceiver(mUserSwitchedReceiver, USER_SWITCHED_FILTER); 960b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } 970b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 980b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon MissedCallNotifier getMissedCallNotifier() { 990b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon return mMissedCallNotifier; 1000b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } 1010b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon 1020b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon PhoneAccountRegistrar getPhoneAccountRegistrar() { 1030b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon return mPhoneAccountRegistrar; 1040b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon } 105f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon 106f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon CallsManager getCallsManager() { 107f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon return mCallsManager; 108f987d1a6f1d02164210a70b417db2bc14576236cSantos Cordon } 1090b5cb4d0036a45725d4a3250fe8475599a31a202Santos Cordon} 110