void CPhone::GetAcIndicatorSync(TChargerStatus& aStatus) { if (IsActive()) { Cancel(); } CTelephony::TIndicatorV1Pckg indicatorPckg(iIndicator); iTelephony->GetIndicator(iStatus,indicatorPckg); iFunc = EAcIndicator; SetActive(); StartWait(); iFunc = ENoneFunc; if(iIndicator.iCapabilities & CTelephony::KIndChargerConnected) { //We can detect when a charger is connected if(iIndicator.iIndicator & CTelephony::KIndChargerConnected) { //Charger is connected aStatus = EChargerStatusConnected; } else { //Charger is not connected aStatus = EChargerStatusNotConnected; } } else { //We do not know whether or not a charger is connected aStatus = EChargerStatusUnknown; } }
// ---------------------------------------------------------------------------- // CSysApCenRepCallForwardingObserver::HandleNotifyBinary() // ---------------------------------------------------------------------------- // void CSysApCenRepCallForwardingObserver::HandleNotifyBinary( TUint32 aId, const TDesC8& aNewValue ) { TRACES( RDebug::Print( _L("CSysApCenRepCallForwardingObserver::HandleNotifyBinary(): aId=0x%x" ), aId ) ); if ( aId == KCtsyUnconditionalCFStatus ) { TInt indicatorStatus( 0 ); TPckg<TInt> indicatorPckg(indicatorStatus); indicatorPckg.Copy( aNewValue ); iCallForwardingStatus = static_cast <TUnconditionalCFStatus>(indicatorStatus); if ( iCallForwardingStatus == 0 ) // resetted by CTSY { MapForwarding(); } else { // iSimCFCurrentStatus updated otherwise in MapForwarding RMobilePhone::TCFUIndicatorStatus callForwardingStatus; TInt err = GetSimCallForwardingStatus( callForwardingStatus ); if( err == KErrNone ) { iSimCFCurrentStatus = callForwardingStatus; } } if ( iUiReady ) // UpdateCallForwardingIndicatorsL must be called for the first time from CSysApAppUi { TRAP_IGNORE( UpdateCallForwardingIndicatorsL() ); } } }
// ---------------------------------------------------------------------------- // CSysApCenRepCallForwardingObserver::GetSimCallForwardingStatus() // ---------------------------------------------------------------------------- // TInt CSysApCenRepCallForwardingObserver::GetSimCallForwardingStatus( RMobilePhone::TCFUIndicatorStatus& callForwardingStatus ) { TInt indicatorStatus( RMobilePhone::KCFUIndicatorUnknown ); TPckg<TInt> indicatorPckg(indicatorStatus); TInt err = iSession->Get( KCtsyCallForwardingIndicator, indicatorPckg ); callForwardingStatus = static_cast <RMobilePhone::TCFUIndicatorStatus>(indicatorStatus); TRACES( RDebug::Print( _L("CSysApCenRepCallForwardingObserver::GetSimCallForwardingStatus(): err %d, callForwardingStatus=0x%x" ), err, callForwardingStatus ) ); return err; }
// ---------------------------------------------------------------------------- // CSysApCenRepCallForwardingObserver::ConstructL() // ---------------------------------------------------------------------------- // void CSysApCenRepCallForwardingObserver::ConstructL() { TRACES( RDebug::Print( _L("CSysApCenRepCallForwardingObserver::ConstructL") ) ); iSession = CRepository::NewL( KCRUidCtsyCallForwardingIndicator ); iCallForwardingHandler = CCenRepNotifyHandler::NewL( *this, *iSession, CCenRepNotifyHandler::EBinaryKey, KCtsyUnconditionalCFStatus ); iCallForwardingHandler->StartListeningL(); iSatCFHandler = CSysApSatObserver::NewL( *this, KCFFile ); // CF file in SIM contains up to date status of call diverts, so it is read every time when SIM has been changed. // Also, if voice mail box divert indication is not supported SIM values can be used in every boot, otherwise // we must rely on phone information because VMBX phone number is stored in application layer. if ( iSysApAppUi.StateOfProperty( KPSUidStartup, KPSSimChanged ) == ESimChanged || ( UseSimCallDivertInfo() && !iSysApAppUi.SysApFeatureManager().VmbxCallDivertIconSupported() ) ) { MapForwarding(); // initializes also iCallForwardingStatus } else { TInt indicatorStatus( 0 ); // initialized to 0 because CentRep may not update the value correctly after CRepository::Reset() TPckg<TInt> indicatorPckg(indicatorStatus); TInt err = iSession->Get( KCtsyUnconditionalCFStatus, indicatorPckg ); if ( err == KErrNone ) { iCallForwardingStatus = static_cast <TUnconditionalCFStatus>(indicatorStatus); TRACES( RDebug::Print( _L("CSysApCenRepCallForwardingObserver::ConstructL(): iCallForwardingStatus=0x%x" ), iCallForwardingStatus ) ); DoConditionalMapForwarding(); } else { TRACES( RDebug::Print( _L("CSysApCenRepCallForwardingObserver::ConstructL(): err=%d" ), err ) ); // failed to read KCtsyUnconditionalCFStatus, as a last resort check whether SIM has some divert activated MapForwarding(); } } }