Closed Bug 805708 Opened 8 years ago Closed 8 years ago

[b2g-bluetooth] Cannot answer a waiting call during a phone call when press the headset

Categories

(Core :: DOM: Device Interfaces, defect)

ARM
Gonk (Firefox OS)
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla19
blocking-basecamp +
Tracking Status
firefox18 --- fixed
firefox19 --- fixed

People

(Reporter: gyeh, Assigned: gyeh)

References

Details

(Whiteboard: [LOE: S])

Attachments

(1 file, 3 obsolete files)

Repro:
- Connect with a bluetooth headset
- During a phone call, make an incoming call or outgoing call

Expected Behaviour:
- Answer the incoming call and make current call on hold
- Or Hang up current call and answer the incoming call
(depends on the command send from bluetooth headset)

Actual Behaviour:
- No response
Keep call status for each call object in BluetoothHfpManager.

Some bluetooth headsets support three-way calling feature, and it will send command like "AT+CHLD=1" to our phone. 

The meanings of each value explained as following: 
- 1: hang up the active phone call if any and answer the waiting/held call
- 2: make the current call on hold and answer the waiting call

When we get this kind of command from bluetooth headset, we'll send system message to Dialer (as we did in Bug 794005), and the command would be "CHUP+ATA"
and "CHLD+ATA" for value 1 and 2 respectively.
Attachment #675450 - Flags: review?(kyle)
fix typo
Attachment #675450 - Attachment is obsolete: true
Attachment #675450 - Flags: review?(kyle)
Attachment #675452 - Flags: review?(kyle)
Comment on attachment 675452 [details] [diff] [review]
Patch 1(v1): Handle three-way calling

Review of attachment 675452 [details] [diff] [review]:
-----------------------------------------------------------------

r=me with fixes

::: dom/bluetooth/BluetoothHfpManager.cpp
@@ +750,2 @@
>  
> +        if (NS_FAILED(sHfpCommandThread->Dispatch(sendRingTask, NS_DISPATCH_NORMAL))) {

There's no command thread anymore, so you'll need to update this.

@@ +824,5 @@
>              break;
>          }
> +
> +        if (aCallIndex == mCurrentCallIndex) {
> +          mCurrentCallStateArray[aCallIndex] = aCallState;

We should probably make sure we're in the array bounds here, since we're having to manage the state ourselves.
Attachment #675452 - Flags: review?(kyle) → review+
Fix typo.

sCINDItems[CINDType::CALLHELD].value = CallSetupState::NO_CALLHELD;
=> sCINDItems[CINDType::CALLHELD].value = CallHeldState::NO_CALLHELD;

try server:
https://tbpl.mozilla.org/?tree=Try&rev=bde0a64a5d94
https://tbpl.mozilla.org/?tree=Try&rev=45e1ade16c35
Attachment #676449 - Attachment is obsolete: true
try server somehow failed and closed a few hours ago.

Re-submit: https://tbpl.mozilla.org/?tree=Try&rev=b9a1b36cc217
https://hg.mozilla.org/mozilla-central/rev/f6ced9fd4fc5
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla19
You need to log in before you can comment on or make changes to this bug.