TelecomAdapter.java revision 4b293f0f08030c97e1bb54d2f79ac2fb1a6e29ae
16c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie/*
2ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * Copyright (C) 2014 The Android Open Source Project
3ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu *
4ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * Licensed under the Apache License, Version 2.0 (the "License");
5ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * you may not use this file except in compliance with the License.
6ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * You may obtain a copy of the License at
7ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu *
8ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu *      http://www.apache.org/licenses/LICENSE-2.0
9ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu *
10ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * Unless required by applicable law or agreed to in writing, software
11ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * distributed under the License is distributed on an "AS IS" BASIS,
12ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * See the License for the specific language governing permissions and
14ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * limitations under the License
156c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie */
166c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
176c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xiepackage com.android.incallui;
186c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
196c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.content.ActivityNotFoundException;
206c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.content.Context;
216c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.content.Intent;
226c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.os.Looper;
23c55a9837c004044051b71bb47182ace156691283Matthew Xieimport android.telecom.InCallAdapter;
246c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.telecom.Phone;
256c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.telecom.PhoneAccountHandle;
266c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
276c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport android.telecom.PhoneCapabilities;
286c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
296c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport com.google.common.base.Preconditions;
306c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
316c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xieimport java.util.List;
326c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
336c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie/** Wrapper around {@link InCallAdapter} that only forwards calls to the adapter when it's valid. */
346c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xiefinal class TelecomAdapter implements InCallPhoneListener {
356c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    private static final String ADD_CALL_MODE_KEY = "add_call_mode";
366c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
376c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    private static TelecomAdapter sInstance;
386c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    private Context mContext;
396c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    private Phone mPhone;
406c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
416c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    static TelecomAdapter getInstance() {
426c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        Preconditions.checkState(Looper.getMainLooper().getThread() == Thread.currentThread());
436c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (sInstance == null) {
446c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            sInstance = new TelecomAdapter();
45b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie        }
466c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        return sInstance;
476c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
486c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
496c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    private TelecomAdapter() {
506c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
516c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
526c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void setContext(Context context) {
532ab50a41dac634a78cef60a419c3bcc848c1aa78Mudumba Ananth        mContext = context;
542ab50a41dac634a78cef60a419c3bcc848c1aa78Mudumba Ananth    }
556c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
566c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    @Override
576c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    public void setPhone(Phone phone) {
586c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        mPhone = phone;
596c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
606c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
6193f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy    @Override
6293f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy    public void clearPhone() {
6393f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy        mPhone = null;
6493f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy    }
6593f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy
6693f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy    private android.telecom.Call getTelecommCallById(String callId) {
6793f548ff8560bdecdc4bdd2f91f7dacda1e6bbc3Kausik Sinnaswamy        return CallList.getInstance().getCallById(callId).getTelecommCall();
686c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
696c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
706c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void answerCall(String callId, int videoState) {
716c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
726c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            getTelecommCallById(callId).answer(videoState);
73b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie        } else {
74b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie            Log.e(this, "error answerCall, mPhone is null");
75b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie        }
76b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie    }
77b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie
78b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie    void rejectCall(String callId, boolean rejectWithMessage, String message) {
79b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie        if (mPhone != null) {
80b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie            getTelecommCallById(callId).reject(rejectWithMessage, message);
81b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie        } else {
82b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie            Log.e(this, "error rejectCall, mPhone is null");
83b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie        }
84b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie    }
85b6132733b6e386cc8c93b5598c72ed8efe04bf3eMatthew Xie
866c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void disconnectCall(String callId) {
876c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
886c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            getTelecommCallById(callId).disconnect();
89c55a9837c004044051b71bb47182ace156691283Matthew Xie        } else {
906c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error disconnectCall, mPhone is null");
916c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
926c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
936c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
94c55a9837c004044051b71bb47182ace156691283Matthew Xie    void holdCall(String callId) {
956c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
966c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            getTelecommCallById(callId).hold();
976c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        } else {
986c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error holdCall, mPhone is null");
996c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
1006c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
1016c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
1026c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void unholdCall(String callId) {
1036c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
1046c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            getTelecommCallById(callId).unhold();
1056c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        } else {
1066c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error unholdCall, mPhone is null");
1076c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
1086c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
1096c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
1106c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void mute(boolean shouldMute) {
1116c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
112c55a9837c004044051b71bb47182ace156691283Matthew Xie            mPhone.setMuted(shouldMute);
1136c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        } else {
1146c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error mute, mPhone is null");
1156c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
1166c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
1176c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
1186c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void setAudioRoute(int route) {
1196c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
1206c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            mPhone.setAudioRoute(route);
1216c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        } else {
1226c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error setAudioRoute, mPhone is null");
12369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
12469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
12569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
1266c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void turnOnProximitySensor() {
12769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
12869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            mPhone.setProximitySensorOn();
12969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
13069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "error setProximitySensorOn, mPhone is null");
13169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
13269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
13369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
13469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void turnOffProximitySensor(boolean screenOnImmediately) {
13569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
1366c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            mPhone.setProximitySensorOff(screenOnImmediately);
13769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
1386c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error setProximitySensorOff, mPhone is null");
1396c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
14069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
14169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
14269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void separateCall(String callId) {
1436c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        if (mPhone != null) {
14469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            getTelecommCallById(callId).splitFromConference();
14569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
14669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "error separateCall, mPhone is null.");
14769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
14869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
14969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
15069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void merge(String callId) {
15169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
15269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            android.telecom.Call call = getTelecommCallById(callId);
1536c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            List<android.telecom.Call> conferenceable = call.getConferenceableCalls();
15469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            if (!conferenceable.isEmpty()) {
1556c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie                call.conference(conferenceable.get(0));
1566c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            } else {
15769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                int capabilities = call.getDetails().getCallCapabilities();
15869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                if (0 != (capabilities & PhoneCapabilities.MERGE_CONFERENCE)) {
15969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                    call.mergeConference();
1606c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie                }
16169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            }
16269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
16369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "error merge, mPhone is null.");
16469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
16569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
16669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
16769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void swap(String callId) {
16869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
16969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            android.telecom.Call call = getTelecommCallById(callId);
1706c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            int capabilities = call.getDetails().getCallCapabilities();
17169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            if (0 != (capabilities & PhoneCapabilities.SWAP_CONFERENCE)) {
1726c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie                call.swapConference();
1736c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            }
17469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
17569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "Error swap, mPhone is null.");
17669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
1776c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    }
17869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
17969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void addCall() {
18069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mContext != null) {
18169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Intent intent = new Intent(Intent.ACTION_DIAL);
18269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
18369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
18469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            // when we request the dialer come up, we also want to inform
18569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            // it that we're going through the "add call" option from the
18669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            // InCallScreen / PhoneUtils.
18769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            intent.putExtra(ADD_CALL_MODE_KEY, true);
1886c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            try {
18969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                Log.d(this, "Sending the add Call intent");
1906c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie                mContext.startActivity(intent);
1916c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            } catch (ActivityNotFoundException e) {
19269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                // This is rather rare but possible.
19369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                // Note: this method is used even when the phone is encrypted. At that moment
19469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava                // the system may not find any Activity which can accept this Intent.
1956c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie                Log.e(this, "Activity for adding calls isn't found.", e);
19669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            }
19769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
19869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
19969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
20069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void playDtmfTone(String callId, char digit) {
20169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
20269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            getTelecommCallById(callId).playDtmfTone(digit);
20369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
204976912e5f597f015754aa67f2a74040e27f58eabSyed Ibrahim M            Log.e(this, "error playDtmfTone, mPhone is null");
2056c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
20669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
2076c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
208976912e5f597f015754aa67f2a74040e27f58eabSyed Ibrahim M    void stopDtmfTone(String callId) {
20969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
2106c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            getTelecommCallById(callId).stopDtmfTone();
2116c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        } else {
21269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "error stopDtmfTone, mPhone is null");
21369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
21469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
2156c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie
21669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    void postDialContinue(String callId, boolean proceed) {
21769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
21869d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            getTelecommCallById(callId).postDialContinue(proceed);
21969d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        } else {
22069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "error postDialContinue, mPhone is null");
22169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }
22269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
22369d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
2246c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie    void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle) {
22569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (mPhone != null) {
2266c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            getTelecommCallById(callId).phoneAccountSelected(accountHandle);
22769d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        }  else {
2286c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie            Log.e(this, "error phoneAccountSelected, mAdapter is null");
2296c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
23069d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava
23169d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava        if (accountHandle == null) {
23269d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava            Log.e(this, "error phoneAccountSelected, accountHandle is null");
2336c91bc0a163cc7600c40d7fb979777fd911d1ef1Matthew Xie        }
23469d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava    }
23569d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava}
23669d4ca45a25e86823fbdb754ca6a3995f8131d59Nitin Srivastava