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