mmshplugins/mmshsettingsuiplugin/src/mussettingscontainer.cpp
changeset 22 496ad160a278
equal deleted inserted replaced
15:ccd8e69b5392 22:496ad160a278
       
     1 /*
       
     2 * Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Container for MUSSettingsPlugin.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include    "mussettingscontainer.h"
       
    21 #include    "mussettingsplugin.h"
       
    22 #include    "mussettingsmodel.h"
       
    23 #include    "gslistbox.h"
       
    24 #include    "mussettingsplugin.hrh"
       
    25 #include    <mussettingsuirsc.rsg>
       
    26 #include    <aknlists.h>
       
    27 #include    <akntitle.h>
       
    28 #include 	<aknnotewrappers.h>
       
    29 #include    <csxhelp/msh.hlp.hrh>
       
    30 #include    <gsfwviewuids.h>
       
    31 #include    <StringLoader.h>
       
    32 #include 	<sipmanagedprofile.h>
       
    33 #include 	<ctsydomainpskeys.h>
       
    34 #include	<e32property.h>
       
    35 #include    <pathinfo.h>
       
    36 
       
    37 
       
    38 #include    <CAknMemorySelectionDialogMultiDrive.h>
       
    39 
       
    40 
       
    41 /** default SIP profile is selected */
       
    42 const TInt KDefaultSipProfile = 0;
       
    43 
       
    44 /** No SIP profile is selected */
       
    45 const TInt KNoSipProfileSelected = -1;
       
    46 
       
    47 // UID of Multimedia Sharing.
       
    48 // This UID is used for accessing the help IDs controlled by MUSH help files
       
    49 const TUid KUidMUSH = { 0x10282391 };
       
    50 
       
    51 // ======== MEMBER FUNCTIONS ========
       
    52 
       
    53 
       
    54 CMusSettingsContainer::CMusSettingsContainer( CMusSettingsModel& aModel ) :
       
    55 	iModel( aModel )
       
    56     {
       
    57     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::CMusSettingsContainer()" )
       
    58     }
       
    59 
       
    60 
       
    61 void CMusSettingsContainer::ConstructL( const TRect& aRect )
       
    62     {
       
    63     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::ConstructL()" )
       
    64 
       
    65     iOperatorVariant = iModel.VSSettingsOperatorVariantL();
       
    66 
       
    67     iListBox = new( ELeave ) CAknSettingStyleListBox;
       
    68 
       
    69     if ( iOperatorVariant == MusSettingsKeys::EStandard )
       
    70     	{
       
    71     	BaseConstructL( aRect, R_GS_VSSETTINGS_VIEW_TITLE, R_VS_LBX );
       
    72     	}
       
    73     else
       
    74     	{
       
    75     	BaseConstructL( aRect, R_GS_VSSETTINGS_VIEW_TITLE, R_VS_LBX_OPERATOR );
       
    76     	}
       
    77 
       
    78     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::ConstructL()" )
       
    79     }
       
    80 
       
    81 
       
    82 CMusSettingsContainer::~CMusSettingsContainer()
       
    83     {
       
    84     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::~CMusSettingsContainer()" )
       
    85     delete iActivationItems;
       
    86   	delete iProfileItems;
       
    87   	delete iAutoRecordItems;
       
    88    	delete iListboxItemArray;
       
    89    	delete iNoteItems;
       
    90     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::~CMusSettingsContainer()" )
       
    91     }
       
    92 
       
    93 
       
    94 // ---------------------------------------------------------------------------
       
    95 // Constructs a listbox from a specified resource id.
       
    96 // ---------------------------------------------------------------------------
       
    97 //
       
    98 void CMusSettingsContainer::ConstructListBoxL( TInt aResLbxId )
       
    99     {
       
   100     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::ConstructListBoxL()" )
       
   101     iListBox->ConstructL( this, EAknListBoxSelectionList );
       
   102     iListboxItemArray = CGSListBoxItemTextArray::NewL(
       
   103         aResLbxId, *iListBox, *iCoeEnv );
       
   104     iListBox->Model()->SetItemTextArray( iListboxItemArray );
       
   105     iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
       
   106 
       
   107     if ( iOperatorVariant == MusSettingsKeys::EStandard )
       
   108     	{
       
   109     	iActivationItems = iCoeEnv->ReadDesC16ArrayResourceL( 
       
   110     	                                R_ACTIVATION_SETTING_PAGE_LBX );
       
   111     	}
       
   112     else
       
   113     	{
       
   114     	iActivationItems =
       
   115     		iCoeEnv->ReadDesC16ArrayResourceL(
       
   116     		R_OPERATOR_ACTIVATION_SETTING_PAGE_LBX );
       
   117     	}
       
   118 
       
   119     iAutoRecordItems = iCoeEnv->ReadDesC16ArrayResourceL(
       
   120                                     R_VS_VIDEO_SAVING_SETTING_PAGE_LBX );
       
   121 
       
   122     iProfileItems = iCoeEnv->ReadDesC16ArrayResourceL(
       
   123     	R_SIP_PROFILE_SETTING_PAGE_LBX );
       
   124 
       
   125     if ( iOperatorVariant == MusSettingsKeys::EStandard )
       
   126     	{
       
   127         iNoteItems = iCoeEnv->ReadDesC16ArrayResourceL(
       
   128         	R_VS_AUDIO_SETTING_PAGE_LBX );
       
   129         }
       
   130     else
       
   131         {
       
   132         iNoteItems = iCoeEnv->ReadDesC16ArrayResourceL(
       
   133             R_VS_NOTE_SETTING_PAGE_LBX );
       
   134         }
       
   135 
       
   136     CreateListBoxItemsL();
       
   137 
       
   138     // Operator variant mode needs some item should not be visible to user.
       
   139     // Hide those items.
       
   140     if ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific )
       
   141     	{        
       
   142         // Hide VS Activation Settings. If needed in future it can be made
       
   143         // visible.
       
   144         HideItemsL( KGSSettIdVSActivation );
       
   145         // Hide SIP Profile choosing option.If needed in future it can be made
       
   146         // visible.
       
   147         HideItemsL( KGSSettIdSIPProfile );
       
   148         }    
       
   149     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::ConstructListBoxL()" )
       
   150     }
       
   151 
       
   152 
       
   153 // ---------------------------------------------------------------------------
       
   154 // Populates listbox items.
       
   155 // ---------------------------------------------------------------------------
       
   156 //
       
   157 void CMusSettingsContainer::CreateListBoxItemsL()
       
   158     {
       
   159     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::CreateListBoxItemsL()" )
       
   160     if ( iOperatorVariant == MusSettingsKeys::EStandard )
       
   161     	{
       
   162     	MakeActivationItemL();
       
   163     	}
       
   164     else
       
   165     	{
       
   166     	MakeOperatorActivationItemL();
       
   167     	}
       
   168     MakeSIPProfileItemL();
       
   169     MakeAutoRecordItemL();
       
   170     MakeRecordedVideoSavingItemL();
       
   171     MakeNoteItemL();
       
   172     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::CreateListBoxItemsL()" )
       
   173     }
       
   174 
       
   175 
       
   176 // ---------------------------------------------------------------------------
       
   177 // Updates a specified feature (item in listbox).
       
   178 // ---------------------------------------------------------------------------
       
   179 //
       
   180 void CMusSettingsContainer::UpdateListBoxL( TInt aFeatureId )
       
   181     {
       
   182     MUS_LOG1( "[MUSSET] <- CMusSettingsContainer::UpdateListBoxL()( %d )",
       
   183               aFeatureId )
       
   184     switch ( aFeatureId )
       
   185         {
       
   186         case KGSSettIdVSActivation:
       
   187             if ( iOperatorVariant == MusSettingsKeys::EStandard )
       
   188             	{
       
   189             	MakeActivationItemL();
       
   190             	}
       
   191             else
       
   192             	{
       
   193             	MakeOperatorActivationItemL();
       
   194             	}
       
   195 	        break;
       
   196         case KGSSettIdSIPProfile:
       
   197             MakeSIPProfileItemL();
       
   198             break;
       
   199         case KGSSettIdAutoRecord:
       
   200             MakeAutoRecordItemL();
       
   201         	break;
       
   202         case KGSSettIdRecordedVideoSaving:
       
   203         	MakeRecordedVideoSavingItemL();
       
   204         	break;
       
   205         case KGSSettIdNote:
       
   206         	MakeNoteItemL();
       
   207         	break;
       
   208         default:
       
   209             break;
       
   210         }
       
   211 
       
   212     iListBox->HandleItemAdditionL();
       
   213     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::UpdateListBoxL()" )
       
   214     }
       
   215 
       
   216 
       
   217 // ---------------------------------------------------------------------------
       
   218 // Generic method to add an item to listbox and make it visible.
       
   219 // ---------------------------------------------------------------------------
       
   220 //
       
   221 void CMusSettingsContainer::AddItemL( TInt aId, const TPtrC aText )
       
   222 	{
       
   223 	MUS_LOG( "[MUSSET] -> CMusSettingsContainer::AddItemL()" )
       
   224     iListboxItemArray->SetDynamicTextL( aId, aText );
       
   225     iListboxItemArray->SetItemVisibilityL( aId,
       
   226     	CGSListBoxItemTextArray::EVisible );
       
   227 	MUS_LOG( "[MUSSET] <- CMusSettingsContainer::AddItemL()" )
       
   228 	}
       
   229 
       
   230 
       
   231 // ---------------------------------------------------------------------------
       
   232 // Adds activation setting item to listbox.
       
   233 // ---------------------------------------------------------------------------
       
   234 //
       
   235 void CMusSettingsContainer::MakeActivationItemL()
       
   236     {
       
   237     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeActivationItemL()" )
       
   238 
       
   239    	iVSActication = iModel.VSSettingsActivationL();
       
   240    	AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iVSActication ] );
       
   241 
       
   242     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeActivationItemL()" )
       
   243     }
       
   244 
       
   245 
       
   246 // ---------------------------------------------------------------------------
       
   247 // Adds operator specific activation setting item to listbox.
       
   248 // ---------------------------------------------------------------------------
       
   249 //
       
   250 void CMusSettingsContainer::MakeOperatorActivationItemL()
       
   251     {
       
   252     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeOperatorActivationItemL()" )
       
   253 
       
   254    	iVSActication = iModel.VSSettingsActivationL();
       
   255    	if ( iVSActication == MusSettingsKeys::ENever ) // ==2
       
   256     	{ // operator specific one is different from usual one
       
   257     	iVSActication = MusSettingsKeys::EActiveInHomeNetworks; //==1
       
   258     	}
       
   259 
       
   260 	AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iVSActication ] );
       
   261 
       
   262     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeOperatorActivationItemL()" )
       
   263     }
       
   264 
       
   265 
       
   266 // ---------------------------------------------------------------------------
       
   267 // Adds SIP profile setting item to settings listbox. Item will contain
       
   268 // indication of [no SIP profile selected], [using default SIP profile] or
       
   269 // [name of SIP profile specified to be used]
       
   270 // ---------------------------------------------------------------------------
       
   271 //
       
   272 void CMusSettingsContainer::MakeSIPProfileItemL()
       
   273     {
       
   274     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeSIPProfileItemL()" )
       
   275 
       
   276     TInt profile = iModel.VSSettingsProfileL();
       
   277 
       
   278     if ( profile != KDefaultSipProfile && profile != KNoSipProfileSelected )
       
   279     	{
       
   280     	// profile id defined, get profile name
       
   281 		HBufC* name = iModel.ProfileNameL( profile );
       
   282 
       
   283 		if ( name )
       
   284 			{
       
   285 			CleanupStack::PushL( name );
       
   286 			AddItemL( KGSSettIdSIPProfile, *name );
       
   287 			CleanupStack::PopAndDestroy( name );
       
   288     		}
       
   289     	else
       
   290     		{
       
   291     		// show profile value not selected
       
   292     		AddItemL( KGSSettIdSIPProfile,
       
   293     			( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] );
       
   294 			}
       
   295 		}
       
   296     else if ( profile == KNoSipProfileSelected )
       
   297     	{
       
   298     	AddItemL( KGSSettIdSIPProfile,
       
   299     		( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] );
       
   300 		}
       
   301     else
       
   302     	{
       
   303 	    AddItemL(
       
   304 	    	KGSSettIdSIPProfile,
       
   305 	    	( *iProfileItems )[ CMusSettingsModel::KVsSipProfileDefault ] );
       
   306 		}
       
   307 
       
   308     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeSIPProfileItemL()" )
       
   309     }
       
   310 
       
   311 
       
   312 // ---------------------------------------------------------------------------
       
   313 // Adds autorecord item to listbox.
       
   314 // ---------------------------------------------------------------------------
       
   315 //
       
   316 void CMusSettingsContainer::MakeAutoRecordItemL()
       
   317     {
       
   318     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeAutoRecordItemL()" )
       
   319     TInt autoRecordMode = iModel.VSSettingsAutoRecordL();
       
   320     
       
   321     MUS_LOG1( "[MUSSET]    autoRecordMode: %d", autoRecordMode  )
       
   322     MUS_LOG1( "[MUSSET]    iAutoRecordItems.Count: %d", iAutoRecordItems->Count() )
       
   323 
       
   324     if ( autoRecordMode > iAutoRecordItems->Count() - 1 )
       
   325         {
       
   326         MUS_LOG2( "[MUSSET] autoRecordMode too big: %d, should be max %d => leave", 
       
   327                 autoRecordMode,  iAutoRecordItems->Count() -1 );
       
   328         User::Leave( KErrOverflow );
       
   329         }
       
   330 
       
   331     AddItemL( KGSSettIdAutoRecord, ( *iAutoRecordItems )[ autoRecordMode ] );
       
   332     
       
   333     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeAutoRecordItemL()" )
       
   334     }
       
   335 
       
   336 
       
   337 // ---------------------------------------------------------------------------
       
   338 // Adds recorded video saving item to listbox.
       
   339 // ---------------------------------------------------------------------------
       
   340 //
       
   341 void CMusSettingsContainer::MakeRecordedVideoSavingItemL()
       
   342     {
       
   343     MUS_LOG(
       
   344     	"[MUSSET] -> CMusSettingsContainer::MakeRecordedVideoSavingItemL()" )
       
   345 
       
   346     TInt savingMode = iModel.VSSettingsRecordedVideoSavingL();
       
   347 
       
   348     CAknMemorySelectionDialogMultiDrive* dlg = 
       
   349                                         iModel.MemorySelectionDialogLC();
       
   350     TDriveNumber driveNumber = ( TDriveNumber )savingMode;
       
   351     TInt index = dlg->FindIndexByDrive( driveNumber );
       
   352     
       
   353     if ( index == KErrNotFound )
       
   354         {
       
   355         MUS_LOG( "[MUSSET] -> preferred drive doesn't exist anymore \
       
   356 (e.g. remote drive deleted), taking system drive..." )
       
   357 
       
   358         driveNumber = RFs::GetSystemDrive();
       
   359         index = dlg->FindIndexByDrive( driveNumber );
       
   360         iModel.SetVSSettingsRecordedVideoSavingL( driveNumber );
       
   361         }
       
   362 
       
   363     TFileName item( KNullDesC );  
       
   364     dlg->GetItem( index, item );
       
   365     MUS_LOG1( "[MUSSET]     Current drive:%d", driveNumber )
       
   366     MUS_LOG_TDESC( "[MUSSET]     pref. mem: " , item ) 
       
   367     
       
   368     AddItemL( KGSSettIdRecordedVideoSaving, item );
       
   369     CleanupStack::PopAndDestroy( dlg );
       
   370 
       
   371     MUS_LOG(
       
   372     	"[MUSSET] <- CMusSettingsContainer::MakeRecordedVideoSavingItemL()" )
       
   373     }
       
   374 
       
   375 
       
   376 // ---------------------------------------------------------------------------
       
   377 // Adds note item to listbox. (Alerts setting). Present only with operator
       
   378 // variant set.
       
   379 // ---------------------------------------------------------------------------
       
   380 //
       
   381 void CMusSettingsContainer::MakeNoteItemL()
       
   382     {
       
   383     MUS_LOG(
       
   384     	"[MUSSET] -> CMusSettingsContainer::MakeNoteItemL()" )
       
   385 
       
   386     TInt savingMode = iModel.VSSettingsNoteL();
       
   387 
       
   388     MUS_LOG1( "[MUSSET] -> CMusSettingsContainer::Mode:%d()", savingMode );
       
   389 
       
   390     // If unset, use and set default value
       
   391     if ( savingMode < 0 || savingMode > 1 )
       
   392 	    {
       
   393 	    savingMode = 0;
       
   394 	    iModel.SetVSSettingsNoteL(
       
   395 	        MusSettingsKeys::EAuditoryNotificationOff );
       
   396 	    }
       
   397 
       
   398 	AddItemL( KGSSettIdNote, ( *iNoteItems )[ savingMode ] );
       
   399 
       
   400     MUS_LOG(
       
   401     	"[MUSSET] <- CMusSettingsContainer::MakeNoteItemL()" )
       
   402     }
       
   403 
       
   404 
       
   405 // ---------------------------------------------------------------------------
       
   406 // Gets help context.
       
   407 // ---------------------------------------------------------------------------
       
   408 //
       
   409 void CMusSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
       
   410     {
       
   411     MUS_LOG( "[MUSSET] -> CMusSettingsContainer::GetHelpContext()" )
       
   412     aContext.iMajor = KUidMUSH;
       
   413     aContext.iContext = KMSH_HLP_SETTINGS;
       
   414     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::GetHelpContext()" )
       
   415     }
       
   416 
       
   417 
       
   418 // ---------------------------------------------------------------------------
       
   419 // Returns currently selected feature (listbox item).
       
   420 // ---------------------------------------------------------------------------
       
   421 //
       
   422 TInt CMusSettingsContainer::CurrentFeatureId() const
       
   423     {
       
   424     MUS_LOG( "[MUSSET] <- CMusSettingsContainer::CurrentFeatureId()" )
       
   425     return iListboxItemArray->CurrentFeature( );
       
   426     }
       
   427 
       
   428 
       
   429 // ----------------------------------------------------------------------------
       
   430 // If call is on, informs user with note that new profile is going to be active
       
   431 // after current call.
       
   432 // ----------------------------------------------------------------------------
       
   433 //
       
   434 void CMusSettingsContainer::ShowNewProfileActiveAfterCallL()
       
   435     {
       
   436     MUS_LOG(
       
   437     	"[MUSSET] -> CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" )
       
   438 	TPSCTsyCallState callState;
       
   439 	User::LeaveIfError( RProperty::Get( KPSUidCtsyCallInformation,
       
   440 			KCTsyCallState,
       
   441 			(TInt&)callState) );
       
   442 	if ( callState == EPSCTsyCallStateAlerting ||
       
   443 		callState ==  EPSCTsyCallStateRinging ||
       
   444 		callState ==  EPSCTsyCallStateDialling ||
       
   445 		callState ==  EPSCTsyCallStateAnswering ||
       
   446 		callState ==  EPSCTsyCallStateDisconnecting ||
       
   447 		callState ==  EPSCTsyCallStateConnected ||
       
   448 		callState ==  EPSCTsyCallStateHold)
       
   449 		{
       
   450 		HBufC* infoTxt = StringLoader::LoadLC( R_QTN_MSH_SET_PROFILE_NOTE );
       
   451 	    CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );
       
   452 	    note->ExecuteLD( infoTxt->Des() );
       
   453 	    CleanupStack::PopAndDestroy( infoTxt );
       
   454 	    MUS_LOG(
       
   455 	    	"[MUSSET] <- CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" )
       
   456 		}
       
   457     }
       
   458 
       
   459 // ----------------------------------------------------------------------------
       
   460 // void CMusSettingsContainer::HideItemsL(TInt aItemIndex)
       
   461 // Some items are unwanted by operators.Hide those items from listbox item
       
   462 // ----------------------------------------------------------------------------
       
   463 //
       
   464 void CMusSettingsContainer::HideItemsL(TInt aItemIndex)
       
   465     {
       
   466     MUS_LOG1("[MUSSET] -> CMusSettingsContainer::HideItemsL() %d",aItemIndex )    
       
   467     iListboxItemArray->SetItemVisibilityL( aItemIndex,
       
   468             	CGSListBoxItemTextArray::EInvisible );
       
   469 	MUS_LOG("[MUSSET] <- CMusSettingsContainer::HideItemsL()" )	
       
   470     }