diff options
| author | John Wang <johnwang@google.com> | 2010-09-20 15:35:02 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-09-20 15:35:02 -0700 |
| commit | ee2ef3220fd27a6332acb2f65951a7fe91e9dfa6 (patch) | |
| tree | 0ddfc0a62c7ab8938277e1f9344cda0663be769f /telephony/java | |
| parent | 181e5ea8087360742b3ed0a7f2e6f8f8baa0a760 (diff) | |
| parent | 0a30e454eb2d2969dcff612de5c3ae5872577f00 (diff) | |
| download | frameworks_base-ee2ef3220fd27a6332acb2f65951a7fe91e9dfa6.zip frameworks_base-ee2ef3220fd27a6332acb2f65951a7fe91e9dfa6.tar.gz frameworks_base-ee2ef3220fd27a6332acb2f65951a7fe91e9dfa6.tar.bz2 | |
Merge "Use PhoneBase in the phone list." into gingerbread
Diffstat (limited to 'telephony/java')
| -rw-r--r-- | telephony/java/com/android/internal/telephony/CallManager.java | 115 |
1 files changed, 81 insertions, 34 deletions
diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java index 4d8cbf0..9f86378 100644 --- a/telephony/java/com/android/internal/telephony/CallManager.java +++ b/telephony/java/com/android/internal/telephony/CallManager.java @@ -82,7 +82,7 @@ public final class CallManager { // Singleton instance private static final CallManager INSTANCE = new CallManager(); - // list of registered phones + // list of registered phones, which are PhoneBase objs private final ArrayList<Phone> mPhones; // list of supported ringing calls @@ -97,7 +97,7 @@ public final class CallManager { // empty connection list private final ArrayList<Connection> emptyConnections = new ArrayList<Connection>(); - // default phone as the first phone registered + // default phone as the first phone registered, which is PhoneBase obj private Phone mDefaultPhone; // state registrants @@ -181,6 +181,46 @@ public final class CallManager { } /** + * Get the corresponding PhoneBase obj + * + * @param phone a Phone object + * @return the corresponding PhoneBase obj in Phone if Phone + * is a PhoneProxy obj + * or the Phone itself if Phone is not a PhoneProxy obj + */ + private static Phone getPhoneBase(Phone phone) { + if (phone instanceof PhoneProxy) { + return phone.getForegroundCall().getPhone(); + } + return phone; + } + + /** + * Check if two phones refer to the same PhoneBase obj + * + * Note: PhoneBase, not PhoneProxy, is to be used inside of CallManager + * + * Both PhoneBase and PhoneProxy implement Phone interface, so + * they have same phone APIs, such as dial(). The real implementation, for + * example in GSM, is in GSMPhone as extend from PhoneBase, so that + * foregroundCall.getPhone() returns GSMPhone obj. On the other hand, + * PhoneFactory.getDefaultPhone() returns PhoneProxy obj, which has a class + * member of GSMPhone. + * + * So for phone returned by PhoneFacotry, which is used by PhoneApp, + * phone.getForegroundCall().getPhone() != phone + * but + * isSamePhone(phone, phone.getForegroundCall().getPhone()) == true + * + * @param p1 is the first Phone obj + * @param p2 is the second Phone obj + * @return true if p1 and p2 refer to the same phone + */ + public static boolean isSamePhone(Phone p1, Phone p2) { + return (getPhoneBase(p1) == getPhoneBase(p2)); + } + + /** * Returns all the registered phone objects. * @return all the registered phone objects. */ @@ -246,25 +286,50 @@ public final class CallManager { /** * Register phone to CallManager - * @param phone + * @param phone to be registered * @return true if register successfully */ public boolean registerPhone(Phone phone) { - if (phone != null && !mPhones.contains(phone)) { + Phone basePhone = getPhoneBase(phone); + + if (basePhone != null && !mPhones.contains(basePhone)) { if (mPhones.isEmpty()) { - mDefaultPhone = phone; + mDefaultPhone = basePhone; } - mPhones.add(phone); - mRingingCalls.add(phone.getRingingCall()); - mBackgroundCalls.add(phone.getBackgroundCall()); - mForegroundCalls.add(phone.getForegroundCall()); - registerForPhoneStates(phone); + mPhones.add(basePhone); + mRingingCalls.add(basePhone.getRingingCall()); + mBackgroundCalls.add(basePhone.getBackgroundCall()); + mForegroundCalls.add(basePhone.getForegroundCall()); + registerForPhoneStates(basePhone); return true; } return false; } /** + * unregister phone from CallManager + * @param phone to be unregistered + */ + public void unregisterPhone(Phone phone) { + Phone basePhone = getPhoneBase(phone); + + if (basePhone != null && mPhones.contains(basePhone)) { + mPhones.remove(basePhone); + mRingingCalls.remove(basePhone.getRingingCall()); + mBackgroundCalls.remove(basePhone.getBackgroundCall()); + mForegroundCalls.remove(basePhone.getForegroundCall()); + unregisterForPhoneStates(basePhone); + if (basePhone == mDefaultPhone) { + if (mPhones.isEmpty()) { + mDefaultPhone = null; + } else { + mDefaultPhone = mPhones.get(0); + } + } + } + } + + /** * return the default phone or null if no phone available */ public Phone getDefaultPhone() { @@ -304,26 +369,7 @@ public final class CallManager { return null; } - /** - * unregister phone from CallManager - * @param phone - */ - public void unregisterPhone(Phone phone) { - if (phone != null && mPhones.contains(phone)) { - mPhones.remove(phone); - mRingingCalls.remove(phone.getRingingCall()); - mBackgroundCalls.remove(phone.getBackgroundCall()); - mForegroundCalls.remove(phone.getForegroundCall()); - unregisterForPhoneStates(phone); - if (phone == mDefaultPhone) { - if (mPhones.isEmpty()) { - mDefaultPhone = null; - } else { - mDefaultPhone = mPhones.get(0); - } - } - } - } + public void setAudioMode() { Context context = getContext(); @@ -592,8 +638,9 @@ public final class CallManager { * handled asynchronously. */ public Connection dial(Phone phone, String dialString) throws CallStateException { + Phone basePhone = getPhoneBase(phone); if (VDBG) { - Log.d(LOG_TAG, "CallManager.dial( phone=" + phone + ", dialString="+ dialString + ")"); + Log.d(LOG_TAG, "CallManager.dial( phone=" + basePhone + ", dialString="+ dialString + ")"); Log.d(LOG_TAG, this.toString()); } if ( hasActiveFgCall() ) { @@ -601,10 +648,10 @@ public final class CallManager { boolean hasBgCall = !(activePhone.getBackgroundCall().isIdle()); if (DBG) { - Log.d(LOG_TAG, "hasBgCall: "+ hasBgCall + " sameChannel:" + (activePhone == phone)); + Log.d(LOG_TAG, "hasBgCall: "+ hasBgCall + " sameChannel:" + (activePhone == basePhone)); } - if (activePhone != phone) { + if (activePhone != basePhone) { if (hasBgCall) { Log.d(LOG_TAG, "Hangup"); getActiveFgCall().hangup(); @@ -614,7 +661,7 @@ public final class CallManager { } } } - return phone.dial(dialString); + return basePhone.dial(dialString); } /** |
