telephonyserverplugins/common_tsy/commontsy/src/mmgsmwcdma/cmmcallgsmwcdmaextwithdispatcher.cpp
branchRCL_3
changeset 14 7ef16719d8cb
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
equal deleted inserted replaced
9:962e6306d9d2 14:7ef16719d8cb
    32 // ---------------------------------------------------------------------------
    32 // ---------------------------------------------------------------------------
    33 //
    33 //
    34 TInt CMmCallGsmWcdmaExt::SwapL(TInt aCallId)
    34 TInt CMmCallGsmWcdmaExt::SwapL(TInt aCallId)
    35 	{
    35 	{
    36     TInt ret = KErrNone;
    36     TInt ret = KErrNone;
    37 
    37 	const TInt KInvalidCallId = -1;
    38     // CTSY supports RMobileCall::Swap where there are two calls (one held, one active)
    38 	
    39     // and their states are swapped. Where Swap() is called on a single call, this is
    39     // CTSY supports RMobileCall::Swap when there are one or two calls. When Swap() is called
    40     // not supported.
    40 	// on a single call, it's state is switched (active to held or held to active), when on two 
       
    41 	// calls(one held, one active) their states are swapped. 
    41     CMmPhoneTsy& mmPhone = *iMmCallTsy->Phone();
    42     CMmPhoneTsy& mmPhone = *iMmCallTsy->Phone();
    42     CMmCallList& callList = *mmPhone.CallList();
    43     CMmCallList& callList = *mmPhone.CallList();
       
    44     
       
    45 	CCallDataPackage package;
       
    46 	
       
    47 	if ( callList.GetNumberOfObjects() > 2 )
       
    48 		{
       
    49 		// Swapping between calls only makes sense with one or two opened calls.
       
    50 		return KErrNotSupported;
       
    51 		}
    43     CMmCallTsy* call = callList.GetMmCallById(aCallId);
    52     CMmCallTsy* call = callList.GetMmCallById(aCallId);
       
    53 	package.SetCallIdAndMode(aCallId, iSymbianCallMode);
    44     
    54     
    45     if (!call)
    55     if (!call)
    46     	{
    56     	{
    47     	ret = KErrGeneral;
    57     	ret = KErrGeneral;
    48     	}
    58     	}
    58     			// Call status of held call in iCallId in CCallDataPackage
    68     			// Call status of held call in iCallId in CCallDataPackage
    59     		    CCallDataPackage package;
    69     		    CCallDataPackage package;
    60         		package.SetCallIdAndMode(aCallId, iSymbianCallMode);
    70         		package.SetCallIdAndMode(aCallId, iSymbianCallMode);
    61         		// Get connected call and pack its call ID
    71         		// Get connected call and pack its call ID
    62         		CMmCallTsy* connectedCall = callList.GetMmCallByStatus(RMobileCall::EStatusConnected);
    72         		CMmCallTsy* connectedCall = callList.GetMmCallByStatus(RMobileCall::EStatusConnected);
       
    73 				TInt connectedCallId = KInvalidCallId;
    63         		if (connectedCall)
    74         		if (connectedCall)
    64         			{
    75         			{
    65         			TInt connectedCallId = connectedCall->CallId();
    76         			connectedCallId = connectedCall->CallId();
    66         			package.PackData(&connectedCallId);
       
    67         			ret = iMessageManager->HandleRequestL(EMobileCallSwap, &package);
       
    68         			}
    77         			}
    69         		else
    78         		package.PackData(&connectedCallId);
    70         			{
    79         		ret = iMessageManager->HandleRequestL(EMobileCallSwap, &package);
    71         			ret = KErrNotSupported;
       
    72         			}
       
    73         		
    80         		
    74     			break;
    81     			break;
    75     			}
    82     			}
    76     			
    83     			
    77     		case RMobileCall::EStatusConnected:
    84     		case RMobileCall::EStatusConnected:
    78     			{
    85     			{
    79     		    // Pack the following to the dispatcher:
    86     		    // Pack the following to the dispatcher:
    80     		    // Call status of connected call in additional parameter slot in CCallDataPackage
    87     		    // Call status of connected call in additional parameter slot in CCallDataPackage
    81     		    CCallDataPackage package;
    88     		    CCallDataPackage package;
       
    89 				
    82     			package.PackData(&aCallId);
    90     			package.PackData(&aCallId);
    83         		// Get held call and pack its call ID
    91         		// Get held call and pack its call ID
    84         		CMmCallTsy* heldCall = callList.GetMmCallByStatus(RMobileCall::EStatusHold);
    92         		CMmCallTsy* heldCall = callList.GetMmCallByStatus(RMobileCall::EStatusHold);
    85         		if (heldCall)
    93          		if (heldCall)
    86         			{
    94         			{
    87         			package.SetCallIdAndMode(heldCall->CallId(), heldCall->CallMode());
    95         			package.SetCallIdAndMode(heldCall->CallId(), heldCall->CallMode());
    88         			ret = iMessageManager->HandleRequestL(EMobileCallSwap, &package);
       
    89         			}
    96         			}
    90         		else
    97          		ret = iMessageManager->HandleRequestL(EMobileCallSwap, &package);
    91         			{
       
    92         			ret = KErrNotSupported;
       
    93         			}
       
    94     			break;
    98     			break;
    95     			}
    99     			}
    96     		
   100     		
    97     		default:
   101     		default:
    98     			{
   102     			{