tsrc/CenrepEditor/Src/cenrepeditormodel.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:01 +0100
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201032 Kit: 201035

/*
* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  
*
*/


// INCLUDE FILES
#include "cenrepeditormodel.h"
#include "musresourceproperties.h"
#include "mussettingskeys.h"
#include <cenrepeditor.rsg>
#include <e32property.h>
#include <aknnotewrappers.h>
#ifdef _KODIAK_PHONE_CALL
#include <CTSYDomainPSKeys.h>
#else
const TUid KPSUidCtsyCallInformation = {0x102029AC};
const TUint32 KCTsyKodiakPtt = 0x00000003;    
enum TPSCTsyKodiakPtt
    {
    EPSCTsyKodiakPttNotActive,
    EPSCTsyKodiakPttActive
    };
#endif


// ================= MEMBER FUNCTIONS =======================

CPhoneResources* CPhoneResources::NewLC()
    {
    // create a new expense object
    CPhoneResources* self = new (ELeave) CPhoneResources();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }

CPhoneResources* CPhoneResources::NewL()
    {
    CPhoneResources* self = CPhoneResources::NewLC();
    CleanupStack::Pop();
    return self;
    }

void CPhoneResources::ConstructL()
	{
    iCameraAvailability = -1;
    iKeypadAvailability = -1 ;
    iVideoPlayerAvailability = -1;
    iCameraInformation = -1;
    iKodiakPhoneCall = -1;
    iDummy = 1; // just a postive value , dirty idea but just works at this time 
	}

void CPhoneResources::ReadL()
	{
    TInt err = KErrNone;
            // 1. camera property
    err = RProperty::Get( NMusResourceApi::KCategoryUid, 
                             NMusResourceApi::KCameraAvailability, 
                              iCameraAvailability);
    if(err)HandleError(ETrue,err,_L("CameraAvailability"));
            // 2. keypad property
    err = RProperty::Get( NMusResourceApi::KCategoryUid, 
                               NMusResourceApi::KKeypadAvailability, 
                               iKeypadAvailability );
    if(err)HandleError(ETrue , err,_L("KeypadAvailability"));
            // 3. video player property
    err = RProperty::Get( NMusResourceApi::KCategoryUid, 
                               NMusResourceApi::KVideoPlayerAvailability, 
                               iVideoPlayerAvailability );
    if(err)HandleError( ETrue, err ,_L("VideoPlayerAvailability"));
            // 3. video player property
    err = RProperty::Get( NMusResourceApi::KCategoryUid, 
                               NMusResourceApi::KCameraInformation, 
                               iCameraInformation );
    if(err)HandleError( ETrue, err ,_L("CameraInformation"));    
    err = RProperty::Get( KPSUidCtsyCallInformation, 
                               KCTsyKodiakPtt, 
                               iKodiakPhoneCall );
    if(err)
        {  
        iKodiakPhoneCall = EPSCTsyKodiakPttNotActive;        
        RProperty::Define(KPSUidCtsyCallInformation,KCTsyKodiakPtt,EPSCTsyKodiakPttNotActive);
        }   
	}


CPhoneResources::~CPhoneResources()
	{
	}

void CPhoneResources::SaveL()
    {
    //TInt err = KErrNone;

    User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, 
                             NMusResourceApi::KCameraAvailability, 
                              iCameraAvailability));
    //if(err)HandleError( EFalse, err ,_L("CameraAvailability"));
            // 2. keypad property
    User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, 
                               NMusResourceApi::KKeypadAvailability, 
                               iKeypadAvailability ));
    //if(err)HandleError(EFalse, err,_L("KeypadAvailability"));
          // 3. video player property
    User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, 
                               NMusResourceApi::KVideoPlayerAvailability, 
                               iVideoPlayerAvailability ));
    //if(err)HandleError(EFalse, err,_L("VideoPlayerAvailability"));
          // 3. video player property
    User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, 
                               NMusResourceApi::KCameraInformation, 
                                iCameraInformation ));
    //if(err)HandleError(EFalse, err,_L("CameraInformation"));
             // 4. Kodiak PS Key    
    User::LeaveIfError(SetValueL( KPSUidCtsyCallInformation, 
                               KCTsyKodiakPtt, 
                                iKodiakPhoneCall ));
    //if(err)HandleError( EFalse, err ,_L("KodiakPSKeyInformation"));                 
    }

TInt CPhoneResources::SetValueL(TUid aCategory, TUint aKey, TInt aValue)
    {
    if(aValue<0)return KErrNone; // dont care if the key is not read intially
    return RProperty::Set( aCategory, aKey, aValue );
    }


void CPhoneResources::HandleError(TBool aType ,TInt aError , TPtrC aKeyName )
    {
    CAknErrorNote *dlg = new CAknErrorNote(ETrue);
    TBuf<100> buf;
    if(aType)
        {
        buf.Append(_L("Unable to Read Key "));
        }
    else
        {
        buf.Append(_L("Unable to Save "));
        }
    buf.Append(aKeyName);
    buf.Append(_L(" Error "));
    buf.AppendNum(aError);
    dlg->ExecuteLD(buf); 
    }

COtherResources* COtherResources::NewLC()
    {
    // create a new expense object
    COtherResources* self = new (ELeave) COtherResources();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }

COtherResources* COtherResources::NewL()
    {
    COtherResources* self = COtherResources::NewLC();
    CleanupStack::Pop();
    return self;
    }

void COtherResources::ConstructL()
    {
    iActivation = -1 ;
    iOperatorVariant = -1 ;
    iAuditoryNotification = -1;
    iPopupNotification = -1 ;
    iPopupNotificationType = -1 ;
    iEdgeDtmSupport = -1 ;
    iSessionSetupMethod = -1 ;
    iAutoRecord = -1 ;
    iVideoLocation = -1 ;
    iSipProfileId = -1 ;
    iUiOrientation = -1 ;
    iCapabilityQuery = -1;  
    iProductModeVariation=-1;
    iEncodingDevice = -1;
    iPrivacyVariation = -1;
    iDummy = 1; // just a postive value      
    }

void COtherResources::ReadL()
	{     
    
    TRAPD(err,ReadCRKeyValuesL());
    if(err) HandleError (ETrue,err,_L("Read Error"));
    
	}
	
void COtherResources::ReadCRKeyValuesL()
{

	TInt err=KErrNone;
    CRepository* cr = NULL ;
    TRAP(err,cr = CRepository::NewL( MusSettingsKeys::KRepositoryUid ));
    cr->CleanupCancelTransactionPushL();
    if(err)
        {
        CAknErrorNote *dlg = new CAknErrorNote(ETrue);
        dlg->ExecuteLD(_L(\
                   "Unable to Construct CRepository for UID 0x1028238B"));        
        return ; // dont leave 
        }    
   
    ReadKeyValueL( cr, MusSettingsKeys::KActivation,iActivation ); 
	ReadKeyValueL( cr, MusSettingsKeys::KOperatorVariant,iOperatorVariant);
  	ReadKeyValueL( cr, MusSettingsKeys::KAuditoryNotification, iAuditoryNotification);
   	ReadKeyValueL( cr, MusSettingsKeys::KPopupNotification, iPopupNotification);
    ReadKeyValueL( cr, MusSettingsKeys::KPopupNotificationType, iPopupNotificationType);
    ReadKeyValueL( cr, MusSettingsKeys::KEdgeDtmSupport, iEdgeDtmSupport);
    ReadKeyValueL( cr, MusSettingsKeys::KForceInternetSignaling, iSessionSetupMethod);
   	ReadKeyValueL( cr, MusSettingsKeys::KAutoRecord, iAutoRecord);
	ReadKeyValueL( cr, MusSettingsKeys::KVideoLocation, iVideoLocation);
 	ReadKeyValueL( cr, MusSettingsKeys::KSipProfileId, iSipProfileId);
  	ReadKeyValueL( cr, MusSettingsKeys::KUiOrientation, iUiOrientation);    
 	ReadKeyValueL( cr, MusSettingsKeys::KCapabilityQuery, iCapabilityQuery);     	
 	ReadKeyValueL( cr, MusSettingsKeys::KProductModeVariation, iProductModeVariation);    
 	ReadKeyValueL( cr, MusSettingsKeys::KEncoderConfigurationInfo, iEncoderInfo );
 	ReadKeyValueL( cr, MusSettingsKeys::KEncodingDevice, iEncodingDevice );
 	ReadKeyValueL( cr, MusSettingsKeys::KPrivacyExchange, iPrivacyVariation ); 

 	iEncodingDeviceStr.Zero();
 	iEncodingDeviceStr.AppendNum(iEncodingDevice, EHex); 	    
 	
 	CleanupStack::PopAndDestroy(cr);
   	delete cr;

}


COtherResources::~COtherResources()
	{
	}

void COtherResources::SaveL()
    {
   
   	TRAPD(err,SaveCRKeyValuesL());
   	if(err) HandleError (ETrue,err,_L("Save Error"));
    
    }

void COtherResources::SaveCRKeyValuesL()
    {
	CRepository* cr = NULL ;
    TRAPD(err,cr = CRepository::NewL( MusSettingsKeys::KRepositoryUid ));        
    cr->CleanupCancelTransactionPushL();
    if(err)
        {
        CAknErrorNote *dlg = new CAknErrorNote(ETrue);
        dlg->ExecuteLD(_L(\
                   "Unable to Construct CRepository for UID 0x1028238B"));  
        User::Leave(err);        
        }      
    SetKeyValueL( cr,MusSettingsKeys::KActivation, iActivation);
 	SetKeyValueL( cr,MusSettingsKeys::KOperatorVariant, iOperatorVariant);
 	SetKeyValueL( cr,MusSettingsKeys::KAuditoryNotification,  iAuditoryNotification);
	SetKeyValueL( cr,MusSettingsKeys::KPopupNotification, iPopupNotification);
	SetKeyValueL( cr,MusSettingsKeys::KPopupNotificationType, iPopupNotificationType);
	SetKeyValueL( cr,MusSettingsKeys::KEdgeDtmSupport, iEdgeDtmSupport);
	SetKeyValueL( cr,MusSettingsKeys::KForceInternetSignaling, iSessionSetupMethod);
	SetKeyValueL( cr,MusSettingsKeys::KAutoRecord, iAutoRecord);
	SetKeyValueL( cr,MusSettingsKeys::KVideoLocation, iVideoLocation);
	SetKeyValueL( cr,MusSettingsKeys::KSipProfileId,  iSipProfileId);
	SetKeyValueL( cr,MusSettingsKeys::KUiOrientation, iUiOrientation);    
	SetKeyValueL( cr,MusSettingsKeys::KCapabilityQuery, iCapabilityQuery);    
    SetKeyValueL( cr,MusSettingsKeys::KProductModeVariation, iProductModeVariation);    
    SetKeyValueL( cr,MusSettingsKeys::KEncoderConfigurationInfo, iEncoderInfo );
    SetKeyValueL( cr,MusSettingsKeys::KPrivacyExchange, iPrivacyVariation );
    
    TLex lex( iEncodingDeviceStr );
    TUint uid;
    err = lex.Val(uid, EHex);    
    if ( (err == KErrNone) && lex.Eos() )
        {
        iEncodingDevice = uid;
        SetKeyValueL( cr, MusSettingsKeys::KEncodingDevice, iEncodingDevice );        
        }
           
    CleanupStack::PopAndDestroy(cr);
	delete cr;
    }

void COtherResources::SetKeyValueL(CRepository* repository, const TInt & aKey , TInt & aVal)
    {  
    if(aVal<0)  return; // dont care if key is not intially read
    TUint32 key(aKey);
    User::LeaveIfError(repository->StartTransaction(
                        CRepository::EConcurrentReadWriteTransaction));    
    User::LeaveIfError(repository->Set(key,aVal));
    User::LeaveIfError(repository->CommitTransaction(key));    
    }

void COtherResources::ReadKeyValueL(CRepository* repository, const TInt & aKey , TInt & aVal)
    {
    TUint32 key(aKey);
    User::LeaveIfError(repository->StartTransaction(
                        CRepository::EConcurrentReadWriteTransaction));
    User::LeaveIfError(repository->Get(key,aVal));
    User::LeaveIfError(repository->CommitTransaction(key));
    }

void COtherResources::SetKeyValueL(CRepository* repository, TInt aKey, const TDesC& aVal)
    {
    TUint32 key(aKey);
    User::LeaveIfError(repository->StartTransaction(
                        CRepository::EConcurrentReadWriteTransaction));    
    User::LeaveIfError(repository->Set(key,aVal));
    User::LeaveIfError(repository->CommitTransaction(key));
    }

void COtherResources::ReadKeyValueL(CRepository* repository, TInt aKey, TDes& aVal)
    {
    TUint32 key(aKey);
    User::LeaveIfError(repository->StartTransaction(
                        CRepository::EConcurrentReadWriteTransaction));
    User::LeaveIfError(repository->Get(key,aVal));
    User::LeaveIfError(repository->CommitTransaction(key));
    }

void COtherResources::HandleError(TBool aType ,
                                    TInt aError , TPtrC aKeyName )
    {
    CAknErrorNote *dlg = new CAknErrorNote(ETrue);
    TBuf<100> buf;
    if(aType)
        {
        buf.Append(_L("Unable to Read Key "));
        }
    else
        {
        buf.Append(_L("Unable to Save Key "));
        }
    buf.Append(aKeyName);
    buf.Append(_L(" Error "));
    buf.AppendNum(aError);
    dlg->ExecuteLD(buf); 
    }

CMusApplication* CMusApplication::NewLC()
    {
    // create a new expense object
    CMusApplication* self = new (ELeave) CMusApplication();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }

CMusApplication* CMusApplication::NewL()
    {
    CMusApplication* self = CMusApplication::NewLC();
    CleanupStack::Pop();
    return self;
    }

void CMusApplication::ConstructL()
    {
    iUseCase = MultimediaSharing::EMusLiveVideo;     
    //iMultimediasharing=CMusManager::NewL();    
    //iMultimediasharing->ExamineAvailabilityL();
    }

CMusApplication::~CMusApplication()
	{
    delete iMultimediasharing;
    iMultimediasharing=NULL;
	}

void CMusApplication::HandleError(TInt aError , TPtrC aVal )
    {
    CAknErrorNote *dlg = new CAknErrorNote(ETrue);
    TBuf<100> buf;        
    buf.Append(aVal);
    buf.Append(_L(" Error "));
    buf.AppendNum(aError);
    dlg->ExecuteLD(buf); 
    }

TBool CMusApplication::Start(TInt aUseCase)
    {
    /*TRAPD(err,iMultimediasharing->StartApplicationL(
                            MultimediaSharing::TMusUseCase(aUseCase)));
    if(err)HandleError(err,_L("MusStart "));    
    return (err)?EFalse :ETrue; */       
    }
     
TBool CMusApplication::Stop()
    {
    TRAPD(err,iMultimediasharing->StopApplicationL());
    if(err)HandleError(err,_L("MusStop "));
    return (err)?EFalse :ETrue;    
    }

TInt CMusApplication::Availability()
    {
    TInt status=-1;
    TRAPD(err,status=iMultimediasharing->AvailabilityL());
    if(err)HandleError(err,_L("MusAvailability "));
    return status;    
    }
TInt CMusApplication::MonitorAvailability()
    {
    TInt status = KErrGeneral;
    /*TRequestStatus requestStatus;
    TRAPD(err,iMultimediasharing->
            MonitorAvailabilityL(
                requestStatus,
                MultimediaSharing::TMusAvailabilityStatus(status))
                                );
    if(err)HandleError(err,_L("MusAvailability "));
    User::WaitForRequest(requestStatus);    
    */
    return status;        
    }



TBool CMusApplication::AvailabilityInfo()
    {                                   
    TBuf<100> buf(_L("Availability Info: ")); 
    TBool available = EFalse ;
    switch(Availability())
        {
            case MultimediaSharing::ESipRegistrationPending:
                 buf.Append(_L("SipRegistrationPending "));
                 break;

            case MultimediaSharing::ESipOptionsSent:
                 buf.Append(_L("SipOptionsSent "));
                 available = ETrue ;
                 break;

            case MultimediaSharing::ESipOptionsNotCapable:
                 buf.Append(_L("SipOptionsNotCapable "));
                 available = ETrue ;
                 break;

            case MultimediaSharing::ESipOptionsNotSent:
                 buf.Append(_L("SipOptionsNotSent "));
                 available = ETrue ;
                 break;

            case MultimediaSharing::EErrSipRegistration:
                 buf.Append(_L("ErrSipRegistration "));
                 break;

            case MultimediaSharing::EErrNoActiveCall:
                 buf.Append(_L("ErrNoActiveCall "));
                 break;

            case MultimediaSharing::EErrCallOnHold:
                 buf.Append(_L("ErrCallOnHold "));
                 break;

            case MultimediaSharing::EErrConferenceCall:
                 buf.Append(_L("ErrConferenceCall "));
                 break;

            case MultimediaSharing::EErrRoaming:
                 buf.Append(_L("ErrRoaming "));
                 break;

            case MultimediaSharing::EErrNetwork:
                 buf.Append(_L("ErrNetwork "));
                 break;

            default:
                 buf.Append(_L("Error Occured "));
                 break;

        }     
    CAknErrorNote *dlg = new CAknErrorNote(ETrue);    
    dlg->ExecuteLD(buf);     
    return available;
    }

void CMusApplication::MusUseCaseInfo(TBool aStart)
    {
    CAknErrorNote *dlg = new CAknErrorNote(ETrue);                                   
    TBuf<50> buf;  
    switch (iUseCase)
        {
            case MultimediaSharing::EMusLiveVideo:                    
            buf.Append(_L("MusLiveVideo "));
            break;
            case MultimediaSharing::EMusClipVideo:
            buf.Append(_L("MusClipVideo "));
            break;                     
            case MultimediaSharing::EMusStillImage:
            buf.Append(_L("MusStillImage "));
            break;
            case MultimediaSharing::EMusReceive:
            buf.Append(_L("MusReceive "));
            break;
            case MultimediaSharing::EMusContinue:
            buf.Append(_L("MusContinue "));
            break;
            default :
            buf.Append(_L("Unknown Usecase "));
            break;
        }          
    (aStart) ? buf.Append(_L("Started")) : buf.Append(_L("Stoped"));
    dlg->ExecuteLD(buf);      
    }
       

  
// End of File