messagingappbase/smartmessaging/ringbc/src/RingingToneBioControl.cpp
author hgs
Wed, 03 Nov 2010 09:52:46 +0530
changeset 79 2981cb3aa489
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:   BIO control for Ringing Tones.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "RingingToneBioControl.h"      // for CRingingToneBioControl
hgs
parents:
diff changeset
    23
#include "RingBCToneConverter.h"             // for CComNSMConverter
hgs
parents:
diff changeset
    24
#include "RingBC.hrh"
hgs
parents:
diff changeset
    25
#include "RingBCLog.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <biocmtm.h>                    // for CBIOClientMtm
hgs
parents:
diff changeset
    28
#include <coeutils.h>                   // for ConeUtils
hgs
parents:
diff changeset
    29
#include <msgbiocontrolObserver.h>      // for MMsgBioControlObserver
hgs
parents:
diff changeset
    30
#include <StringLoader.h>               // for StringLoader
hgs
parents:
diff changeset
    31
#include <AknsUtils.h>
hgs
parents:
diff changeset
    32
#include <RingBC.rsg>                   // for resouce identifiers
hgs
parents:
diff changeset
    33
#include <ringbc.mbg>                   // for icons indexes
hgs
parents:
diff changeset
    34
#include <ProfileEngineSDKCRKeys.h>
hgs
parents:
diff changeset
    35
#include <MsgBioUtils.h>                // for MsgBioUtils
hgs
parents:
diff changeset
    36
#include <eikrted.h>                    // for CEikRichTextEditor
hgs
parents:
diff changeset
    37
#include <txtrich.h>                    // for CRichText
hgs
parents:
diff changeset
    38
#include <aknnotewrappers.h>            // for CAknInformationNote
hgs
parents:
diff changeset
    39
#include <Profile.hrh>                  // for EProfileRingingTypeSilent
hgs
parents:
diff changeset
    40
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    41
#include <pathinfo.h>
hgs
parents:
diff changeset
    42
#include <featmgr.h>					// Feature manager
hgs
parents:
diff changeset
    43
#include <csxhelp/smart.hlp.hrh>
hgs
parents:
diff changeset
    44
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    45
#include <applayout.cdl.h>				// LAF
hgs
parents:
diff changeset
    46
#include <aknlayoutscalable_apps.cdl.h>
hgs
parents:
diff changeset
    47
#include <mmsvattachmentmanager.h>
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
#include <msgaudiocontrol.h>	//AudioControl
hgs
parents:
diff changeset
    50
#include <MsgEditorCommon.h>	//MsgEditorCommons utilities
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
// CONSTANTS
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
_LIT(KRingingToneFileExtension,".rng");
hgs
parents:
diff changeset
    55
_LIT(KResourceName, "ringbc.rsc" );
hgs
parents:
diff changeset
    56
_LIT(KRingBCMbmFileName, "ringbc.mif");
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// LOCAL CONSTANTS AND MACROS
hgs
parents:
diff changeset
    59
const TInt KComponentCountZero = 0;
hgs
parents:
diff changeset
    60
const TInt KNoOverWriteOrRecurse = 0;
hgs
parents:
diff changeset
    61
const TInt KLengthOfTitleRow = 100;
hgs
parents:
diff changeset
    62
const TInt KTextNameQueryMaxLength = 50;
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
const TInt KRichEditor              = 1;
hgs
parents:
diff changeset
    66
const TInt KAudioControl            = 0;
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
const TInt KRingVolumeZero = 0;
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
const TInt KShowNoNotes = 0;
hgs
parents:
diff changeset
    71
const TInt KShowNotes = 1;
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
const TInt KFrameExpansion = 10;
hgs
parents:
diff changeset
    74
const TInt KMaxVolumeLevel = 10;
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// MODULE DATA STRUCTURES
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
enum TOptionListLocation
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
    EFirstMenuItem  = 0,
hgs
parents:
diff changeset
    81
    ESecondMenuItem
hgs
parents:
diff changeset
    82
    };
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
// Two-phased constructor.
hgs
parents:
diff changeset
    87
EXPORT_C CMsgBioControl* CRingingToneBioControl::NewL(
hgs
parents:
diff changeset
    88
            MMsgBioControlObserver& aObserver,
hgs
parents:
diff changeset
    89
            CMsvSession* aSession,
hgs
parents:
diff changeset
    90
            TMsvId aId,
hgs
parents:
diff changeset
    91
            TMsgBioMode aEditorOrViewerMode,
hgs
parents:
diff changeset
    92
            const RFile* aFile)
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    CRingingToneBioControl* self =
hgs
parents:
diff changeset
    95
    	new( ELeave ) CRingingToneBioControl(
hgs
parents:
diff changeset
    96
    		aObserver,
hgs
parents:
diff changeset
    97
            aSession, aId, aEditorOrViewerMode,
hgs
parents:
diff changeset
    98
            aFile);
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   101
    self->ConstructL();
hgs
parents:
diff changeset
   102
    CleanupStack::Pop(self); // self
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
    return self;
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
    }
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
// Destructor
hgs
parents:
diff changeset
   109
CRingingToneBioControl::~CRingingToneBioControl()
hgs
parents:
diff changeset
   110
    {
hgs
parents:
diff changeset
   111
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   112
    
hgs
parents:
diff changeset
   113
    // During Opening state CActiveScheduler was started and incase if it is not stopped, so to handle that case.
hgs
parents:
diff changeset
   114
    if( iPlayerState == EMsgAsyncControlStateOpening ) 
hgs
parents:
diff changeset
   115
       {
hgs
parents:
diff changeset
   116
       //Check for player state, if it is opening then this state may come if user press RED key at the same time
hgs
parents:
diff changeset
   117
       //Player state was opening so to go ahead with playing by stopping 
hgs
parents:
diff changeset
   118
       //the active scheduler that was started in OpenFileL -function
hgs
parents:
diff changeset
   119
       CActiveScheduler::Stop();
hgs
parents:
diff changeset
   120
       }
hgs
parents:
diff changeset
   121
    // Need to delete the same here if user move to next message / press Red key 
hgs
parents:
diff changeset
   122
	// or opening new message from universal indicator pane to avoid leak
hgs
parents:
diff changeset
   123
    if ( iStopCba ) 
hgs
parents:
diff changeset
   124
        {
hgs
parents:
diff changeset
   125
        delete iStopCba;
hgs
parents:
diff changeset
   126
        }
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    delete iRichEditor;
hgs
parents:
diff changeset
   129
    delete iAudioControl;    
hgs
parents:
diff changeset
   130
    delete iToneTitle;        
hgs
parents:
diff changeset
   131
    }
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
// C++ default constructor.
hgs
parents:
diff changeset
   134
CRingingToneBioControl::CRingingToneBioControl(
hgs
parents:
diff changeset
   135
        MMsgBioControlObserver& aObserver,
hgs
parents:
diff changeset
   136
        CMsvSession* aSession,
hgs
parents:
diff changeset
   137
        TMsvId aId,
hgs
parents:
diff changeset
   138
        TMsgBioMode aEditorOrViewerMode,
hgs
parents:
diff changeset
   139
        const RFile* aFile):
hgs
parents:
diff changeset
   140
        CMsgBioControl(aObserver,
hgs
parents:
diff changeset
   141
            aSession,
hgs
parents:
diff changeset
   142
            aId,
hgs
parents:
diff changeset
   143
            aEditorOrViewerMode,
hgs
parents:
diff changeset
   144
            aFile)
hgs
parents:
diff changeset
   145
    {
hgs
parents:
diff changeset
   146
    }
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
// Symbian OS default constructor can leave.
hgs
parents:
diff changeset
   149
void CRingingToneBioControl::ConstructL()
hgs
parents:
diff changeset
   150
    {
hgs
parents:
diff changeset
   151
    if( IsEditor() )   //Editor mode is not supported
hgs
parents:
diff changeset
   152
        {
hgs
parents:
diff changeset
   153
        User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   154
        }
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
	FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    LoadStandardBioResourceL();
hgs
parents:
diff changeset
   159
    LoadResourceL( KResourceName );
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
    // checks if the message is valid
hgs
parents:
diff changeset
   162
    CheckMsgValidityL();
hgs
parents:
diff changeset
   163
    TakeTitleL();
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   168
// CRingingToneBioControl::CheckMsgValidityL
hgs
parents:
diff changeset
   169
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   170
//
hgs
parents:
diff changeset
   171
void CRingingToneBioControl::CheckMsgValidityL()
hgs
parents:
diff changeset
   172
    {
hgs
parents:
diff changeset
   173
    RFile file;
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    CMsvEntry* entry = this->MsvSession(). GetEntryL(iId);
hgs
parents:
diff changeset
   176
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    CMsvStore* store = entry->ReadStoreL();
hgs
parents:
diff changeset
   179
	CleanupStack::PushL(store);
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
	MMsvAttachmentManager& manager = store->AttachmentManagerL();
hgs
parents:
diff changeset
   182
	file = manager.GetAttachmentFileL(0);
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
    CleanupClosePushL(file);
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    TInt size;
hgs
parents:
diff changeset
   187
    User::LeaveIfError(file.Size(size));
hgs
parents:
diff changeset
   188
    if (!size)
hgs
parents:
diff changeset
   189
        {
hgs
parents:
diff changeset
   190
        //the empty ringing tone is considered a corrupted message
hgs
parents:
diff changeset
   191
        User::Leave(KErrMsgBioMessageNotValid);
hgs
parents:
diff changeset
   192
        }
hgs
parents:
diff changeset
   193
	
hgs
parents:
diff changeset
   194
	HBufC8* dataBuf = HBufC8::NewLC(size);
hgs
parents:
diff changeset
   195
    TPtr8 data(dataBuf->Des());
hgs
parents:
diff changeset
   196
    User::LeaveIfError(file.Read(data, size));
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
    CRingBCNSMConverter* conv = CRingBCNSMConverter::NewL();
hgs
parents:
diff changeset
   199
    CleanupStack::PushL( conv );
hgs
parents:
diff changeset
   200
    TBool res = conv->IsRingToneMimeTypeL(data);
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
    if (!res)
hgs
parents:
diff changeset
   203
        {
hgs
parents:
diff changeset
   204
        User::Leave(KErrMsgBioMessageNotValid);
hgs
parents:
diff changeset
   205
        }
hgs
parents:
diff changeset
   206
        
hgs
parents:
diff changeset
   207
    CleanupStack::PopAndDestroy(5,entry); // entry,conv,store,file,dataBuf
hgs
parents:
diff changeset
   208
    }
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   212
// CRingingToneBioControl::ProcessCommandL
hgs
parents:
diff changeset
   213
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   214
//
hgs
parents:
diff changeset
   215
void CRingingToneBioControl::ProcessCommandL( TInt aCommandId )
hgs
parents:
diff changeset
   216
    {
hgs
parents:
diff changeset
   217
    if ( aCommandId == ESoftkeyStop )
hgs
parents:
diff changeset
   218
		{
hgs
parents:
diff changeset
   219
		StopPlayback();
hgs
parents:
diff changeset
   220
        }
hgs
parents:
diff changeset
   221
    }
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   224
// CRingingToneBioControl::SetAndGetSizeL
hgs
parents:
diff changeset
   225
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   226
//
hgs
parents:
diff changeset
   227
void CRingingToneBioControl::SetAndGetSizeL( TSize& aSize )
hgs
parents:
diff changeset
   228
    {
hgs
parents:
diff changeset
   229
	//the heightadjustment calculates the height for the header elements and 
hgs
parents:
diff changeset
   230
	//the space between components
hgs
parents:
diff changeset
   231
   	TInt heightAdjustment = (MsgEditorCommons::MsgBaseLineDelta()*2)+
hgs
parents:
diff changeset
   232
   							MsgEditorCommons::MsgBaseLineOffset();
hgs
parents:
diff changeset
   233
   	
hgs
parents:
diff changeset
   234
   	aSize.iHeight -= heightAdjustment;
hgs
parents:
diff changeset
   235
   	SetSizeWithoutNotification( aSize  );
hgs
parents:
diff changeset
   236
    }
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
// CRingingToneBioControl::SetMenuCommandSetL
hgs
parents:
diff changeset
   240
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   241
//
hgs
parents:
diff changeset
   242
void CRingingToneBioControl::SetMenuCommandSetL( CEikMenuPane& aMenuPane )
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    // if playing, do not show context sensitive menu.
hgs
parents:
diff changeset
   245
    if ( iPlayerState != EMsgAsyncControlStatePlaying )
hgs
parents:
diff changeset
   246
        {
hgs
parents:
diff changeset
   247
		//removing the playback option from options menu, single click will do the playing
hgs
parents:
diff changeset
   248
        //AddMenuItemL(aMenuPane, R_SM_PLAYBACK, ERingtPlayback, EFirstMenuItem);
hgs
parents:
diff changeset
   249
        AddMenuItemL(aMenuPane,
hgs
parents:
diff changeset
   250
        	R_SM_ADD_COMPOSER, ERingtAddComposer, ESecondMenuItem);
hgs
parents:
diff changeset
   251
        }
hgs
parents:
diff changeset
   252
	}
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   255
// CRingingToneBioControl::CurrentLineRect
hgs
parents:
diff changeset
   256
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   257
//
hgs
parents:
diff changeset
   258
TRect CRingingToneBioControl::CurrentLineRect() const
hgs
parents:
diff changeset
   259
    {
hgs
parents:
diff changeset
   260
    return iAudioControl->CurrentLineRect();
hgs
parents:
diff changeset
   261
    }
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   264
// CRingingToneBioControl::IsFocusChangePossible
hgs
parents:
diff changeset
   265
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   266
//
hgs
parents:
diff changeset
   267
TBool CRingingToneBioControl::IsFocusChangePossible(
hgs
parents:
diff changeset
   268
        TMsgFocusDirection aDirection ) const
hgs
parents:
diff changeset
   269
    {
hgs
parents:
diff changeset
   270
    return iAudioControl->IsFocusChangePossible( aDirection );
hgs
parents:
diff changeset
   271
	}
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   274
// CRingingToneBioControl::HeaderTextL
hgs
parents:
diff changeset
   275
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   276
//
hgs
parents:
diff changeset
   277
HBufC* CRingingToneBioControl::HeaderTextL() const
hgs
parents:
diff changeset
   278
    {
hgs
parents:
diff changeset
   279
    return iCoeEnv->AllocReadResourceL( R_SM_TITLE_RINGING_TONE );
hgs
parents:
diff changeset
   280
    }
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   283
// CRingingToneBioControl::HandleBioCommandL
hgs
parents:
diff changeset
   284
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   285
//
hgs
parents:
diff changeset
   286
TBool CRingingToneBioControl::HandleBioCommandL(TInt aCommand)
hgs
parents:
diff changeset
   287
    {
hgs
parents:
diff changeset
   288
    aCommand -= iBioControlObserver.FirstFreeCommand();
hgs
parents:
diff changeset
   289
    TBool retValue(EFalse);
hgs
parents:
diff changeset
   290
    switch ( aCommand )
hgs
parents:
diff changeset
   291
        {
hgs
parents:
diff changeset
   292
        case ERingtPlayback:
hgs
parents:
diff changeset
   293
            PlaybackL();
hgs
parents:
diff changeset
   294
            retValue = ETrue;
hgs
parents:
diff changeset
   295
            break;
hgs
parents:
diff changeset
   296
        case ERingtAddComposer:
hgs
parents:
diff changeset
   297
            TrySaveToneL();
hgs
parents:
diff changeset
   298
            retValue = ETrue;
hgs
parents:
diff changeset
   299
            break;
hgs
parents:
diff changeset
   300
        default:
hgs
parents:
diff changeset
   301
            retValue = EFalse;
hgs
parents:
diff changeset
   302
            break;
hgs
parents:
diff changeset
   303
        }
hgs
parents:
diff changeset
   304
	return retValue;
hgs
parents:
diff changeset
   305
    }
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   308
// CRingingToneLogoBioControl::OptionMenuPermissionsL
hgs
parents:
diff changeset
   309
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   310
//
hgs
parents:
diff changeset
   311
TUint32 CRingingToneBioControl::OptionMenuPermissionsL() const
hgs
parents:
diff changeset
   312
    {
hgs
parents:
diff changeset
   313
    if ( iPlayerState != EMsgAsyncControlStatePlaying )
hgs
parents:
diff changeset
   314
        {
hgs
parents:
diff changeset
   315
        return EMsgBioDelete
hgs
parents:
diff changeset
   316
        | EMsgBioMessInfo
hgs
parents:
diff changeset
   317
        | EMsgBioMove
hgs
parents:
diff changeset
   318
        | EMsgBioHelp
hgs
parents:
diff changeset
   319
        | EMsgBioExit;
hgs
parents:
diff changeset
   320
        }
hgs
parents:
diff changeset
   321
    else 
hgs
parents:
diff changeset
   322
        {
hgs
parents:
diff changeset
   323
        // do not show context sensitive menu.
hgs
parents:
diff changeset
   324
        return 0;
hgs
parents:
diff changeset
   325
        }
hgs
parents:
diff changeset
   326
    }
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   331
// CRingingToneBioControl::OfferKeyEventL
hgs
parents:
diff changeset
   332
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   333
//
hgs
parents:
diff changeset
   334
TKeyResponse CRingingToneBioControl::OfferKeyEventL(
hgs
parents:
diff changeset
   335
        const TKeyEvent& /*aKeyEvent*/,
hgs
parents:
diff changeset
   336
        TEventCode /*aType*/ )
hgs
parents:
diff changeset
   337
    {
hgs
parents:
diff changeset
   338
    return EKeyWasConsumed;
hgs
parents:
diff changeset
   339
    }
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   342
// CRingingToneBioControl::GetHelpContext
hgs
parents:
diff changeset
   343
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   344
//
hgs
parents:
diff changeset
   345
void CRingingToneBioControl::GetHelpContext(
hgs
parents:
diff changeset
   346
	TCoeHelpContext& aHelpContext) const
hgs
parents:
diff changeset
   347
	{
hgs
parents:
diff changeset
   348
	if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
hgs
parents:
diff changeset
   349
		{
hgs
parents:
diff changeset
   350
		const TUid KUidSmart = {0x101F4CDA};
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
		aHelpContext.iContext = KSMART_HLP_RINGVIEWER();
hgs
parents:
diff changeset
   353
		aHelpContext.iMajor = KUidSmart;
hgs
parents:
diff changeset
   354
		}
hgs
parents:
diff changeset
   355
	}
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   358
// CRingingToneBioControl::CountComponentControls
hgs
parents:
diff changeset
   359
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   360
//
hgs
parents:
diff changeset
   361
TInt CRingingToneBioControl::CountComponentControls() const
hgs
parents:
diff changeset
   362
    {
hgs
parents:
diff changeset
   363
    TInt componentCount( KComponentCountZero );
hgs
parents:
diff changeset
   364
    if ( iAudioControl )
hgs
parents:
diff changeset
   365
        {
hgs
parents:
diff changeset
   366
        componentCount++;
hgs
parents:
diff changeset
   367
        }
hgs
parents:
diff changeset
   368
	if ( iRichEditor )        
hgs
parents:
diff changeset
   369
		{
hgs
parents:
diff changeset
   370
		componentCount++;
hgs
parents:
diff changeset
   371
		}
hgs
parents:
diff changeset
   372
    return componentCount;
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   376
// CRingingToneBioControl::ComponentControl
hgs
parents:
diff changeset
   377
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   378
//
hgs
parents:
diff changeset
   379
CCoeControl* CRingingToneBioControl::ComponentControl( TInt aIndex ) const
hgs
parents:
diff changeset
   380
    {
hgs
parents:
diff changeset
   381
    if ( aIndex == KRichEditor )
hgs
parents:
diff changeset
   382
    	{
hgs
parents:
diff changeset
   383
    	return iRichEditor;
hgs
parents:
diff changeset
   384
    	}
hgs
parents:
diff changeset
   385
    if ( aIndex == KAudioControl )
hgs
parents:
diff changeset
   386
        {
hgs
parents:
diff changeset
   387
        return iAudioControl;
hgs
parents:
diff changeset
   388
        }
hgs
parents:
diff changeset
   389
    else
hgs
parents:
diff changeset
   390
    	{
hgs
parents:
diff changeset
   391
    	return NULL;
hgs
parents:
diff changeset
   392
    	}
hgs
parents:
diff changeset
   393
	}
hgs
parents:
diff changeset
   394
hgs
parents:
diff changeset
   395
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   396
// CRingingToneBioControl::HandleResourceChange
hgs
parents:
diff changeset
   397
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   398
//
hgs
parents:
diff changeset
   399
void CRingingToneBioControl::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   400
    {
hgs
parents:
diff changeset
   401
    if(aType == KEikDynamicLayoutVariantSwitch)
hgs
parents:
diff changeset
   402
    	{
hgs
parents:
diff changeset
   403
        TRAP_IGNORE(
hgs
parents:
diff changeset
   404
       		CorrectFormatToRichEditorL();
hgs
parents:
diff changeset
   405
        	iRichEditor->SetTextL( iToneTitle );
hgs
parents:
diff changeset
   406
        	FillBitmapMaskL();
hgs
parents:
diff changeset
   407
        	);
hgs
parents:
diff changeset
   408
        }
hgs
parents:
diff changeset
   409
    iAudioControl->HandleResourceChange( aType );
hgs
parents:
diff changeset
   410
    }
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   413
// CRingingToneBioControl::SizeChanged
hgs
parents:
diff changeset
   414
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   415
//
hgs
parents:
diff changeset
   416
void CRingingToneBioControl::SizeChanged()
hgs
parents:
diff changeset
   417
    {
hgs
parents:
diff changeset
   418
    TRect rect = Rect();
hgs
parents:
diff changeset
   419
    TRect bitmapRect;
hgs
parents:
diff changeset
   420
    TAknWindowComponentLayout layout =
hgs
parents:
diff changeset
   421
	   	AknLayoutScalable_Apps::mce_image_pane_g5();
hgs
parents:
diff changeset
   422
    TAknLayoutRect LayoutRect;
hgs
parents:
diff changeset
   423
	LayoutRect.LayoutRect( rect, layout.LayoutLine() );
hgs
parents:
diff changeset
   424
	bitmapRect = LayoutRect.Rect();
hgs
parents:
diff changeset
   425
	TInt formattedHeight = iRichEditor->TextLayout()->FormattedHeightInPixels();
hgs
parents:
diff changeset
   426
	bitmapRect.Move(0,formattedHeight);
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
	//the rectangle is grown to so that focused frame is visible
hgs
parents:
diff changeset
   429
	bitmapRect.Grow( KFrameExpansion, KFrameExpansion );
hgs
parents:
diff changeset
   430
	
hgs
parents:
diff changeset
   431
	// rect for richtext is positioned on the top of audio control
hgs
parents:
diff changeset
   432
	rect.iBr.iY = bitmapRect.iTl.iY;
hgs
parents:
diff changeset
   433
	iRichEditor->SetRect( rect );
hgs
parents:
diff changeset
   434
    iAudioControl->SetRect( bitmapRect );
hgs
parents:
diff changeset
   435
    }
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   438
// CRingingToneBioControl::FocusChanged
hgs
parents:
diff changeset
   439
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   440
//
hgs
parents:
diff changeset
   441
void CRingingToneBioControl::FocusChanged( TDrawNow aDrawNow )
hgs
parents:
diff changeset
   442
    {
hgs
parents:
diff changeset
   443
	iAudioControl->SetFocus(IsFocused());
hgs
parents:
diff changeset
   444
	iRichEditor->FocusChanged(aDrawNow);
hgs
parents:
diff changeset
   445
    }
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   448
// CRingingToneBioControl::SetContainerWindowL
hgs
parents:
diff changeset
   449
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   450
//
hgs
parents:
diff changeset
   451
void CRingingToneBioControl::SetContainerWindowL(
hgs
parents:
diff changeset
   452
	const CCoeControl& aContainer )
hgs
parents:
diff changeset
   453
    {
hgs
parents:
diff changeset
   454
    CCoeControl::SetContainerWindowL( aContainer );
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
    //The reason for creating the audio control here is that the construction
hgs
parents:
diff changeset
   457
    //requires a parent with a window. So it cannot be done in ConstructL()
hgs
parents:
diff changeset
   458
    iAudioControl = CMsgAudioControl::NewL( *reinterpret_cast<CMsgEditorView*>(this), this, EMdaPriorityNormal, EMdaPriorityPreferenceQuality );
hgs
parents:
diff changeset
   459
	FillBitmapMaskL();
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
    CreateRichEditorL();
hgs
parents:
diff changeset
   462
    }
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   465
// CRingingToneBioControl ::Draw()
hgs
parents:
diff changeset
   466
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   467
//
hgs
parents:
diff changeset
   468
void CRingingToneBioControl::Draw(const TRect& /*aRect*/) const
hgs
parents:
diff changeset
   469
    {
hgs
parents:
diff changeset
   470
    }
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   473
// CRingingToneBioControl ::CorrectFormatToRichEditorL()
hgs
parents:
diff changeset
   474
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   475
//
hgs
parents:
diff changeset
   476
void CRingingToneBioControl::CorrectFormatToRichEditorL()
hgs
parents:
diff changeset
   477
    {
hgs
parents:
diff changeset
   478
    CRichText* rich = iRichEditor->RichText();
hgs
parents:
diff changeset
   479
    TInt pos(rich->DocumentLength());
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
    // font correction.
hgs
parents:
diff changeset
   482
    TCharFormat format;
hgs
parents:
diff changeset
   483
    TCharFormatMask mask;
hgs
parents:
diff changeset
   484
hgs
parents:
diff changeset
   485
	TAknTextLineLayout editorLayout = AppLayout::Smart_Messages_Line_2( 0 );
hgs
parents:
diff changeset
   486
	const CFont* editorFont = AknLayoutUtils::FontFromId( editorLayout.FontId() );
hgs
parents:
diff changeset
   487
	format.iFontSpec = editorFont->FontSpecInTwips();
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
    TRgb textColor;
hgs
parents:
diff changeset
   490
    if ( AknsUtils::GetCachedColor(
hgs
parents:
diff changeset
   491
	    AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   492
        textColor,
hgs
parents:
diff changeset
   493
        KAknsIIDQsnTextColors,
hgs
parents:
diff changeset
   494
        EAknsCIQsnTextColorsCG6 ) != KErrNone )
hgs
parents:
diff changeset
   495
	    {
hgs
parents:
diff changeset
   496
	    textColor = AKN_LAF_COLOR_STATIC( 215 );
hgs
parents:
diff changeset
   497
	    }
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
    format.iFontPresentation.iTextColor = textColor;
hgs
parents:
diff changeset
   500
hgs
parents:
diff changeset
   501
    mask.ClearAll();
hgs
parents:
diff changeset
   502
    mask.SetAttrib( EAttColor );
hgs
parents:
diff changeset
   503
    mask.SetAttrib(EAttFontStrokeWeight);
hgs
parents:
diff changeset
   504
    mask.SetAttrib(EAttFontHeight);
hgs
parents:
diff changeset
   505
    mask.SetAttrib(EAttFontTypeface);
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
    rich->SetInsertCharFormatL(format, mask, pos);
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
    // this is needed to set ringing tone title centered.
hgs
parents:
diff changeset
   510
    CParaFormat* paraFormat = CParaFormat::NewLC();
hgs
parents:
diff changeset
   511
    TParaFormatMask paraMask;
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
    paraFormat->Reset();
hgs
parents:
diff changeset
   514
    paraFormat->iHorizontalAlignment = CParaFormat::ECenterAlign;
hgs
parents:
diff changeset
   515
    paraFormat->iVerticalAlignment = CParaFormat::ECenterAlign;
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
    paraMask.SetAttrib(EAttAlignment);
hgs
parents:
diff changeset
   518
    paraMask.SetAttrib(EAttFontHeight);
hgs
parents:
diff changeset
   519
    paraMask.SetAttrib(EAttColor);
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    rich->ApplyParaFormatL(paraFormat, paraMask, 0, pos);
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
    CleanupStack::PopAndDestroy(paraFormat);
hgs
parents:
diff changeset
   524
    }
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
void CRingingToneBioControl::OpenFileL()
hgs
parents:
diff changeset
   527
	{
hgs
parents:
diff changeset
   528
	RFile file;
hgs
parents:
diff changeset
   529
hgs
parents:
diff changeset
   530
	CMsvEntry* entry = this->MsvSession(). GetEntryL(iId);
hgs
parents:
diff changeset
   531
	CleanupStack::PushL( entry );
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
	CMsvStore* store = entry->ReadStoreL();
hgs
parents:
diff changeset
   534
	CleanupStack::PushL(store);
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
	MMsvAttachmentManager& manager = store->AttachmentManagerL();
hgs
parents:
diff changeset
   537
	file = manager.GetAttachmentFileL(0);
hgs
parents:
diff changeset
   538
	CleanupClosePushL(file);
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
	//asynchronous loading of file
hgs
parents:
diff changeset
   541
	//the audio control takes a copy of the file
hgs
parents:
diff changeset
   542
	iAudioControl->LoadL(file);
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
	//wait for the opening of file to complete
hgs
parents:
diff changeset
   545
	//in MsgMediaControlStateChanged
hgs
parents:
diff changeset
   546
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
	CleanupStack::PopAndDestroy(3, entry);
hgs
parents:
diff changeset
   549
	}
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   552
// CRingingToneBioControl::PlaybackL
hgs
parents:
diff changeset
   553
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   554
//
hgs
parents:
diff changeset
   555
void CRingingToneBioControl::PlaybackL()
hgs
parents:
diff changeset
   556
    {
hgs
parents:
diff changeset
   557
    if( iPlayerState != EMsgAsyncControlStateOpening ||
hgs
parents:
diff changeset
   558
		iPlayerState != EMsgAsyncControlStateAboutToPlay ||
hgs
parents:
diff changeset
   559
		iPlayerState != EMsgAsyncControlStatePlaying ||
hgs
parents:
diff changeset
   560
		iPlayerState != EMsgAsyncControlStateBuffering )
hgs
parents:
diff changeset
   561
    	{
hgs
parents:
diff changeset
   562
    	
hgs
parents:
diff changeset
   563
    	OpenFileL();
hgs
parents:
diff changeset
   564
    	
hgs
parents:
diff changeset
   565
    	//any other state than EMsgAsyncControlStateReady
hgs
parents:
diff changeset
   566
    	//constitutes a failed opening of media file
hgs
parents:
diff changeset
   567
    	if(iPlayerState == EMsgAsyncControlStateReady)
hgs
parents:
diff changeset
   568
    		{
hgs
parents:
diff changeset
   569
    		GetAndSetRingingToneVolumeL();
hgs
parents:
diff changeset
   570
		    iAudioControl->PlayL();
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
		    iStopCba = CEikButtonGroupContainer::NewL (
hgs
parents:
diff changeset
   573
		    CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal,
hgs
parents:
diff changeset
   574
		        this, R_RINGCONTROL_SOFTKEYS_STOP );
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
		    const TSize screenSize = CCoeEnv::Static()->ScreenDevice()->SizeInPixels();
hgs
parents:
diff changeset
   577
		    iStopCba->SetBoundingRect( TRect( screenSize ) );
hgs
parents:
diff changeset
   578
    		}
hgs
parents:
diff changeset
   579
    	}
hgs
parents:
diff changeset
   580
    }
hgs
parents:
diff changeset
   581
hgs
parents:
diff changeset
   582
void CRingingToneBioControl::StopPlayback()
hgs
parents:
diff changeset
   583
	{
hgs
parents:
diff changeset
   584
	iAudioControl->Stop();
hgs
parents:
diff changeset
   585
	
hgs
parents:
diff changeset
   586
	//after playback the file must be closed so that moving the ring tone
hgs
parents:
diff changeset
   587
	//message to another folder is possible 
hgs
parents:
diff changeset
   588
	iAudioControl->Close();
hgs
parents:
diff changeset
   589
	}
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   592
// CRingingToneBioControl::GetAndSetRingingToneVolumeL
hgs
parents:
diff changeset
   593
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   594
//
hgs
parents:
diff changeset
   595
void CRingingToneBioControl::GetAndSetRingingToneVolumeL()
hgs
parents:
diff changeset
   596
    {
hgs
parents:
diff changeset
   597
    TInt ringingVol;
hgs
parents:
diff changeset
   598
    TInt ringingType;
hgs
parents:
diff changeset
   599
    TInt aMaxVolume;
hgs
parents:
diff changeset
   600
	aMaxVolume = iAudioControl->MaxVolume();
hgs
parents:
diff changeset
   601
	CRepository* repository = CRepository::NewLC( KCRUidProfileEngine );
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
	User::LeaveIfError( repository->Get( KProEngActiveRingingVolume, ringingVol ));
hgs
parents:
diff changeset
   604
	User::LeaveIfError(	repository->Get( KProEngActiveRingingType, ringingType ));
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
	CleanupStack::PopAndDestroy(repository); //repository
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
	//Some emulator versions crash in volume setting
hgs
parents:
diff changeset
   609
#ifndef __WINS__
hgs
parents:
diff changeset
   610
    if (ringingType == EProfileRingingTypeSilent)
hgs
parents:
diff changeset
   611
        {
hgs
parents:
diff changeset
   612
        RDebug::Print(_L("Profile: Ring type silent"));
hgs
parents:
diff changeset
   613
        iAudioControl->SetVolume(KRingVolumeZero);
hgs
parents:
diff changeset
   614
        }
hgs
parents:
diff changeset
   615
    else
hgs
parents:
diff changeset
   616
        {
hgs
parents:
diff changeset
   617
        TInt result( aMaxVolume * ringingVol / KMaxVolumeLevel ); 
hgs
parents:
diff changeset
   618
        RDebug::Print(_L("Ringing volume : %d"), ringingVol);
hgs
parents:
diff changeset
   619
        iAudioControl->SetVolume(result);
hgs
parents:
diff changeset
   620
        }
hgs
parents:
diff changeset
   621
#endif
hgs
parents:
diff changeset
   622
    }
hgs
parents:
diff changeset
   623
hgs
parents:
diff changeset
   624
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   627
// CRingingToneBioControl::CreateRichEditorL
hgs
parents:
diff changeset
   628
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   629
//
hgs
parents:
diff changeset
   630
void CRingingToneBioControl::CreateRichEditorL()
hgs
parents:
diff changeset
   631
    {
hgs
parents:
diff changeset
   632
    iRichEditor = new( ELeave ) CEikRichTextEditor(TGulBorder::ENone);
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
    TInt edwinFlags =
hgs
parents:
diff changeset
   635
    	CEikEdwin::ENoHorizScrolling |
hgs
parents:
diff changeset
   636
    	CEikEdwin::ENoAutoSelection |
hgs
parents:
diff changeset
   637
        CEikEdwin::EWidthInPixels |
hgs
parents:
diff changeset
   638
        CEikEdwin::EReadOnly |
hgs
parents:
diff changeset
   639
        CEikEdwin::EEdwinAlternativeWrapping;
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
    iRichEditor->ConstructL(this,2 , 0, edwinFlags);
hgs
parents:
diff changeset
   642
hgs
parents:
diff changeset
   643
    iRichEditor->SetMaximumHeightInLines(2);
hgs
parents:
diff changeset
   644
hgs
parents:
diff changeset
   645
    // corrects font and alignment to centered.
hgs
parents:
diff changeset
   646
    CorrectFormatToRichEditorL();
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
    iRichEditor->SetTextL( iToneTitle );    
hgs
parents:
diff changeset
   649
    }
hgs
parents:
diff changeset
   650
hgs
parents:
diff changeset
   651
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   652
// CRingingToneBioControl::FillBitmapMaskL
hgs
parents:
diff changeset
   653
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   654
//
hgs
parents:
diff changeset
   655
void CRingingToneBioControl::FillBitmapMaskL()
hgs
parents:
diff changeset
   656
    {
hgs
parents:
diff changeset
   657
    
hgs
parents:
diff changeset
   658
    TParse *fp = new(ELeave) TParse();
hgs
parents:
diff changeset
   659
	fp->Set( KRingBCMbmFileName, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
   660
	CleanupStack::PushL( fp );
hgs
parents:
diff changeset
   661
    
hgs
parents:
diff changeset
   662
    iAudioControl->LoadIconL(  fp->FullName(),
hgs
parents:
diff changeset
   663
                                KAknsIIDQgnPropOtaTone,
hgs
parents:
diff changeset
   664
                                EMbmRingbcQgn_prop_ota_tone,
hgs
parents:
diff changeset
   665
                                EMbmRingbcQgn_prop_ota_tone_mask);
hgs
parents:
diff changeset
   666
    
hgs
parents:
diff changeset
   667
    CleanupStack::PopAndDestroy(fp);
hgs
parents:
diff changeset
   668
                                    
hgs
parents:
diff changeset
   669
    TAknWindowComponentLayout layout =
hgs
parents:
diff changeset
   670
        		AknLayoutScalable_Apps::mce_image_pane_g5();
hgs
parents:
diff changeset
   671
    TAknLayoutRect LayoutRect;
hgs
parents:
diff changeset
   672
	LayoutRect.LayoutRect( Rect(), layout.LayoutLine() );
hgs
parents:
diff changeset
   673
	TRect bitmapRect;
hgs
parents:
diff changeset
   674
	bitmapRect = LayoutRect.Rect();                                
hgs
parents:
diff changeset
   675
	iAudioControl->SetIconSizeL(bitmapRect.Size());
hgs
parents:
diff changeset
   676
	iAudioControl->SetIconVisible(ETrue);
hgs
parents:
diff changeset
   677
    }
hgs
parents:
diff changeset
   678
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   681
// CRingingToneBioControl::AddSongTitleToArrayL
hgs
parents:
diff changeset
   682
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   683
//
hgs
parents:
diff changeset
   684
void CRingingToneBioControl::AddSongTitleToArrayL(CDesCArray& aItemArray) const
hgs
parents:
diff changeset
   685
    {
hgs
parents:
diff changeset
   686
    //Add titlerow to array
hgs
parents:
diff changeset
   687
    HBufC* dataRow = HBufC::NewLC(KLengthOfTitleRow);
hgs
parents:
diff changeset
   688
    TPtr rowPtr = dataRow->Des();
hgs
parents:
diff changeset
   689
    HBufC* baseString = StringLoader::LoadLC( R_BASE_STRING );
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
    TInt maxLength(KLengthOfTitleRow - baseString->Length());
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
    HBufC* tempName = HBufC::NewLC(KMaxFileName);
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
    TPtr tempTPtr = tempName->Des();
hgs
parents:
diff changeset
   696
    tempTPtr.Copy(iToneTitle->Des());
hgs
parents:
diff changeset
   697
hgs
parents:
diff changeset
   698
    if (iToneTitle->Length() > maxLength)
hgs
parents:
diff changeset
   699
        {
hgs
parents:
diff changeset
   700
        tempTPtr = iToneTitle->Des().Left(maxLength);
hgs
parents:
diff changeset
   701
        }
hgs
parents:
diff changeset
   702
hgs
parents:
diff changeset
   703
    rowPtr.Format(*baseString, tempName);
hgs
parents:
diff changeset
   704
    CleanupStack::PopAndDestroy( 2, baseString );  //tempName, baseString
hgs
parents:
diff changeset
   705
    aItemArray.AppendL( rowPtr );
hgs
parents:
diff changeset
   706
    CleanupStack::PopAndDestroy(dataRow);  //dataRow
hgs
parents:
diff changeset
   707
    }
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   710
// CRingingToneBioControl ::IsOnlyDots
hgs
parents:
diff changeset
   711
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   712
//
hgs
parents:
diff changeset
   713
TBool CRingingToneBioControl::IsOnlyDots(TDes& aTitle)
hgs
parents:
diff changeset
   714
    {
hgs
parents:
diff changeset
   715
    const TChar KSingleDot = '.';
hgs
parents:
diff changeset
   716
	_LIT(KDoubleDots,"..");
hgs
parents:
diff changeset
   717
hgs
parents:
diff changeset
   718
    if(aTitle.Length()==1)
hgs
parents:
diff changeset
   719
        {
hgs
parents:
diff changeset
   720
hgs
parents:
diff changeset
   721
        if( aTitle.Locate(KSingleDot) != KErrNotFound )
hgs
parents:
diff changeset
   722
            {
hgs
parents:
diff changeset
   723
            return ETrue;
hgs
parents:
diff changeset
   724
            }
hgs
parents:
diff changeset
   725
        }
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
    else if(aTitle.Length()==2)
hgs
parents:
diff changeset
   728
        {
hgs
parents:
diff changeset
   729
hgs
parents:
diff changeset
   730
        if( aTitle.Find(KDoubleDots) != KErrNotFound )
hgs
parents:
diff changeset
   731
            {
hgs
parents:
diff changeset
   732
            return ETrue;
hgs
parents:
diff changeset
   733
            }
hgs
parents:
diff changeset
   734
        }
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
    return EFalse;
hgs
parents:
diff changeset
   737
    }
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   740
// CRingingToneBioControl::IsValidL
hgs
parents:
diff changeset
   741
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   742
//
hgs
parents:
diff changeset
   743
TBool CRingingToneBioControl::IsValidL(TDes& aTitle, TBool aNotes)
hgs
parents:
diff changeset
   744
    {
hgs
parents:
diff changeset
   745
    RFs fileServer;
hgs
parents:
diff changeset
   746
    User::LeaveIfError( fileServer.Connect() );
hgs
parents:
diff changeset
   747
hgs
parents:
diff changeset
   748
    //If name includes solely single dot or double dot, this note should be
hgs
parents:
diff changeset
   749
    //showed (Folders spec)
hgs
parents:
diff changeset
   750
    if( IsOnlyDots(aTitle) )
hgs
parents:
diff changeset
   751
        {
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
        fileServer.Close();
hgs
parents:
diff changeset
   754
        if(aNotes)
hgs
parents:
diff changeset
   755
            {
hgs
parents:
diff changeset
   756
            InformationNoteL(R_FLDR_BAD_FILE_NAME);
hgs
parents:
diff changeset
   757
            }
hgs
parents:
diff changeset
   758
        return EFalse;
hgs
parents:
diff changeset
   759
hgs
parents:
diff changeset
   760
        }
hgs
parents:
diff changeset
   761
hgs
parents:
diff changeset
   762
    //only because of IsValidName does not check backslash, but file
hgs
parents:
diff changeset
   763
    //is not valid with it.
hgs
parents:
diff changeset
   764
    if( aTitle.Locate('\\') != KErrNotFound )
hgs
parents:
diff changeset
   765
        {
hgs
parents:
diff changeset
   766
hgs
parents:
diff changeset
   767
        fileServer.Close();
hgs
parents:
diff changeset
   768
        if(aNotes)
hgs
parents:
diff changeset
   769
            {
hgs
parents:
diff changeset
   770
            InformationNoteL(R_FLDR_ILLEGAL_CHARACTERS);
hgs
parents:
diff changeset
   771
            }
hgs
parents:
diff changeset
   772
        return EFalse;
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
        }
hgs
parents:
diff changeset
   775
    if( aTitle.Locate('\n') != KErrNotFound )
hgs
parents:
diff changeset
   776
        {
hgs
parents:
diff changeset
   777
        fileServer.Close();
hgs
parents:
diff changeset
   778
        if(aNotes)
hgs
parents:
diff changeset
   779
            {
hgs
parents:
diff changeset
   780
            InformationNoteL(R_FLDR_ILLEGAL_CHARACTERS);
hgs
parents:
diff changeset
   781
            }
hgs
parents:
diff changeset
   782
        return EFalse;
hgs
parents:
diff changeset
   783
        }
hgs
parents:
diff changeset
   784
hgs
parents:
diff changeset
   785
    // check is there any special chars between 00h to 1Fh
hgs
parents:
diff changeset
   786
    for (TInt i=0; i<32; i++)
hgs
parents:
diff changeset
   787
        {
hgs
parents:
diff changeset
   788
        if (aTitle.Locate(i) !=KErrNotFound )
hgs
parents:
diff changeset
   789
            {
hgs
parents:
diff changeset
   790
            fileServer.Close();
hgs
parents:
diff changeset
   791
            if(aNotes)
hgs
parents:
diff changeset
   792
                {
hgs
parents:
diff changeset
   793
                InformationNoteL(R_FLDR_ILLEGAL_CHARACTERS);
hgs
parents:
diff changeset
   794
                }
hgs
parents:
diff changeset
   795
            return EFalse;
hgs
parents:
diff changeset
   796
hgs
parents:
diff changeset
   797
            }
hgs
parents:
diff changeset
   798
hgs
parents:
diff changeset
   799
        }
hgs
parents:
diff changeset
   800
hgs
parents:
diff changeset
   801
    //Checking if filename is valid for saving purpose
hgs
parents:
diff changeset
   802
    if( !fileServer.IsValidName(aTitle) )
hgs
parents:
diff changeset
   803
        {
hgs
parents:
diff changeset
   804
hgs
parents:
diff changeset
   805
        fileServer.Close();
hgs
parents:
diff changeset
   806
        if(aNotes)
hgs
parents:
diff changeset
   807
            {
hgs
parents:
diff changeset
   808
            InformationNoteL(R_FLDR_ILLEGAL_CHARACTERS);
hgs
parents:
diff changeset
   809
            }
hgs
parents:
diff changeset
   810
        return EFalse;
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
        }
hgs
parents:
diff changeset
   813
hgs
parents:
diff changeset
   814
    fileServer.Close();
hgs
parents:
diff changeset
   815
    return ETrue; //File name is valid
hgs
parents:
diff changeset
   816
hgs
parents:
diff changeset
   817
    }
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   820
// CRingingToneBioControl::InformationNoteL
hgs
parents:
diff changeset
   821
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   822
//
hgs
parents:
diff changeset
   823
void CRingingToneBioControl::InformationNoteL(TInt aStringResource)
hgs
parents:
diff changeset
   824
    {
hgs
parents:
diff changeset
   825
    HBufC* buf = StringLoader::LoadLC(aStringResource);
hgs
parents:
diff changeset
   826
hgs
parents:
diff changeset
   827
    CAknInformationNote* note = new (ELeave) CAknInformationNote(ETrue);
hgs
parents:
diff changeset
   828
    note->ExecuteLD(*buf);
hgs
parents:
diff changeset
   829
hgs
parents:
diff changeset
   830
    CleanupStack::PopAndDestroy(buf); //buf
hgs
parents:
diff changeset
   831
    }
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
hgs
parents:
diff changeset
   834
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   835
// CRingingToneBioControl::ExistsL
hgs
parents:
diff changeset
   836
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   837
//
hgs
parents:
diff changeset
   838
TBool CRingingToneBioControl::ExistsL(TDes& aTitle)
hgs
parents:
diff changeset
   839
    {
hgs
parents:
diff changeset
   840
    HBufC* path = CreatePathForSavingLC(aTitle);
hgs
parents:
diff changeset
   841
hgs
parents:
diff changeset
   842
    if ( ConeUtils::FileExists(*path) )
hgs
parents:
diff changeset
   843
        {
hgs
parents:
diff changeset
   844
        CleanupStack::PopAndDestroy(path); //path;
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
        return ETrue;
hgs
parents:
diff changeset
   847
        }
hgs
parents:
diff changeset
   848
hgs
parents:
diff changeset
   849
    CleanupStack::PopAndDestroy(path); //path;
hgs
parents:
diff changeset
   850
    return EFalse;
hgs
parents:
diff changeset
   851
    }
hgs
parents:
diff changeset
   852
hgs
parents:
diff changeset
   853
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   854
// CRingingToneBioControl::AskNameL
hgs
parents:
diff changeset
   855
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   856
//
hgs
parents:
diff changeset
   857
TBool CRingingToneBioControl::AskNameL(TDes& aTitle)
hgs
parents:
diff changeset
   858
    {
hgs
parents:
diff changeset
   859
    IncrementFileNameL( aTitle );
hgs
parents:
diff changeset
   860
hgs
parents:
diff changeset
   861
    if (!NameQueryL(aTitle))
hgs
parents:
diff changeset
   862
        {
hgs
parents:
diff changeset
   863
        return EFalse;
hgs
parents:
diff changeset
   864
        }
hgs
parents:
diff changeset
   865
hgs
parents:
diff changeset
   866
    return ETrue;
hgs
parents:
diff changeset
   867
    }
hgs
parents:
diff changeset
   868
hgs
parents:
diff changeset
   869
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   870
// CRingingToneBioControl::AskNameAndValidNameL
hgs
parents:
diff changeset
   871
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   872
//
hgs
parents:
diff changeset
   873
TBool CRingingToneBioControl::AskAndValidNameL(TDes& aTitle)
hgs
parents:
diff changeset
   874
    {
hgs
parents:
diff changeset
   875
    do
hgs
parents:
diff changeset
   876
        {
hgs
parents:
diff changeset
   877
        if(!AskNameL(aTitle))
hgs
parents:
diff changeset
   878
            {
hgs
parents:
diff changeset
   879
            return EFalse;
hgs
parents:
diff changeset
   880
            }
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
        } while (!IsValidL(aTitle,KShowNotes)) ;
hgs
parents:
diff changeset
   883
hgs
parents:
diff changeset
   884
    return ETrue;
hgs
parents:
diff changeset
   885
    }
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
hgs
parents:
diff changeset
   888
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   889
// CRingingToneBioControl::TrySaveToneL
hgs
parents:
diff changeset
   890
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   891
//
hgs
parents:
diff changeset
   892
void CRingingToneBioControl::TrySaveToneL()
hgs
parents:
diff changeset
   893
    {
hgs
parents:
diff changeset
   894
    HBufC* saveTitle = HBufC::NewLC(KMaxFileName);
hgs
parents:
diff changeset
   895
    TPtr saveTitlePtr(saveTitle->Des());
hgs
parents:
diff changeset
   896
hgs
parents:
diff changeset
   897
    saveTitlePtr.Copy(*iToneTitle); //initialize saveTitle
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
    TBool okSave = ETrue; //No cancel pressed
hgs
parents:
diff changeset
   900
hgs
parents:
diff changeset
   901
    //First case is special, cause if message have wrong kind of title,
hgs
parents:
diff changeset
   902
    //there will be default name in data query and no rename query.
hgs
parents:
diff changeset
   903
    if( !IsValidL(saveTitlePtr,KShowNoNotes) )
hgs
parents:
diff changeset
   904
        {
hgs
parents:
diff changeset
   905
        SetDefaultNameL(saveTitlePtr);
hgs
parents:
diff changeset
   906
hgs
parents:
diff changeset
   907
        okSave = AskAndValidNameL(saveTitlePtr);
hgs
parents:
diff changeset
   908
        }
hgs
parents:
diff changeset
   909
hgs
parents:
diff changeset
   910
    //Have to check if title already exists. If not, then save. But if
hgs
parents:
diff changeset
   911
    //it exists already, should ask if rename (rename query) and then ask
hgs
parents:
diff changeset
   912
    //for new name until user press cancel or give valid name. After that
hgs
parents:
diff changeset
   913
    //we should check if that already exists...
hgs
parents:
diff changeset
   914
    if(okSave)
hgs
parents:
diff changeset
   915
        {
hgs
parents:
diff changeset
   916
        while (ExistsL(saveTitlePtr))
hgs
parents:
diff changeset
   917
            {
hgs
parents:
diff changeset
   918
            if (!RenameQueryL(saveTitlePtr))
hgs
parents:
diff changeset
   919
                {
hgs
parents:
diff changeset
   920
                okSave = EFalse;
hgs
parents:
diff changeset
   921
                break;
hgs
parents:
diff changeset
   922
                }
hgs
parents:
diff changeset
   923
hgs
parents:
diff changeset
   924
            if(!AskAndValidNameL(saveTitlePtr))
hgs
parents:
diff changeset
   925
                {
hgs
parents:
diff changeset
   926
                okSave = EFalse;
hgs
parents:
diff changeset
   927
                break;
hgs
parents:
diff changeset
   928
                }
hgs
parents:
diff changeset
   929
            };
hgs
parents:
diff changeset
   930
        }
hgs
parents:
diff changeset
   931
hgs
parents:
diff changeset
   932
    //User did not press cancel in any place and it is saving time.
hgs
parents:
diff changeset
   933
    if(okSave)
hgs
parents:
diff changeset
   934
        {
hgs
parents:
diff changeset
   935
        SaveToneL(saveTitlePtr);
hgs
parents:
diff changeset
   936
        MsgBioUtils::ConfirmationNoteL(R_SM_NOTE_TONE_COPIED);
hgs
parents:
diff changeset
   937
        }
hgs
parents:
diff changeset
   938
hgs
parents:
diff changeset
   939
    CleanupStack::PopAndDestroy(saveTitle); //saveTitle
hgs
parents:
diff changeset
   940
    }
hgs
parents:
diff changeset
   941
hgs
parents:
diff changeset
   942
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   943
// CRingingToneBioControl::CreatePathForSavingLC
hgs
parents:
diff changeset
   944
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   945
//
hgs
parents:
diff changeset
   946
HBufC* CRingingToneBioControl::CreatePathForSavingLC(const TDesC& aName)
hgs
parents:
diff changeset
   947
    {
hgs
parents:
diff changeset
   948
    HBufC* targetPathAndName = TargetPathLC();
hgs
parents:
diff changeset
   949
hgs
parents:
diff changeset
   950
    TPtr targetPathAndNamePtr = targetPathAndName->Des();
hgs
parents:
diff changeset
   951
hgs
parents:
diff changeset
   952
    targetPathAndNamePtr.Append(aName);
hgs
parents:
diff changeset
   953
    targetPathAndNamePtr.Append(KRingingToneFileExtension);
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
    return targetPathAndName;
hgs
parents:
diff changeset
   956
    }
hgs
parents:
diff changeset
   957
hgs
parents:
diff changeset
   958
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   959
// CRingingToneBioControl::RenameQueryL
hgs
parents:
diff changeset
   960
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   961
//
hgs
parents:
diff changeset
   962
TBool CRingingToneBioControl::RenameQueryL(TDes& aTitle)
hgs
parents:
diff changeset
   963
    {
hgs
parents:
diff changeset
   964
    if ( !MsgBioUtils::ConfirmationQueryOkCancelL(
hgs
parents:
diff changeset
   965
    	*StringLoader::LoadLC( R_FLDR_RENAME_QUERY, aTitle ) ) )
hgs
parents:
diff changeset
   966
        {
hgs
parents:
diff changeset
   967
hgs
parents:
diff changeset
   968
        CleanupStack::PopAndDestroy(); //StringLoader;
hgs
parents:
diff changeset
   969
        return EFalse;
hgs
parents:
diff changeset
   970
hgs
parents:
diff changeset
   971
        }
hgs
parents:
diff changeset
   972
    CleanupStack::PopAndDestroy(); //StringLoader;
hgs
parents:
diff changeset
   973
hgs
parents:
diff changeset
   974
    return ETrue;
hgs
parents:
diff changeset
   975
    }
hgs
parents:
diff changeset
   976
hgs
parents:
diff changeset
   977
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   978
// CRingingToneBioControl::SaveToneL
hgs
parents:
diff changeset
   979
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   980
//
hgs
parents:
diff changeset
   981
TBool CRingingToneBioControl::SaveToneL(TDes& aTitle)
hgs
parents:
diff changeset
   982
    {
hgs
parents:
diff changeset
   983
    CFileMan* files = CFileMan::NewL(CCoeEnv::Static()->FsSession());
hgs
parents:
diff changeset
   984
    CleanupStack::PushL( files );
hgs
parents:
diff changeset
   985
hgs
parents:
diff changeset
   986
    HBufC* targetPathAndName = CreatePathForSavingLC(aTitle);
hgs
parents:
diff changeset
   987
hgs
parents:
diff changeset
   988
    CMsvEntry* entry = this->MsvSession(). GetEntryL(iId);
hgs
parents:
diff changeset
   989
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
    CMsvStore* store = entry->ReadStoreL();
hgs
parents:
diff changeset
   992
	CleanupStack::PushL(store);
hgs
parents:
diff changeset
   993
hgs
parents:
diff changeset
   994
	MMsvAttachmentManager& manager = store->AttachmentManagerL();
hgs
parents:
diff changeset
   995
hgs
parents:
diff changeset
   996
	RFile ringFile;
hgs
parents:
diff changeset
   997
	ringFile = manager.GetAttachmentFileL(0);
hgs
parents:
diff changeset
   998
hgs
parents:
diff changeset
   999
    CleanupStack::PopAndDestroy(2, entry);
hgs
parents:
diff changeset
  1000
    CleanupClosePushL(ringFile);
hgs
parents:
diff changeset
  1001
hgs
parents:
diff changeset
  1002
    TInt err = files->Copy(
hgs
parents:
diff changeset
  1003
    	ringFile, *targetPathAndName, KNoOverWriteOrRecurse );
hgs
parents:
diff changeset
  1004
    User::LeaveIfError(err);
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
    CleanupStack::PopAndDestroy(3, files); //targetPathAndName, ringFile, files
hgs
parents:
diff changeset
  1007
    return ETrue;
hgs
parents:
diff changeset
  1008
    }
hgs
parents:
diff changeset
  1009
hgs
parents:
diff changeset
  1010
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1011
// CRingingToneBioControl::SetDefaultNameL
hgs
parents:
diff changeset
  1012
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1013
//
hgs
parents:
diff changeset
  1014
void CRingingToneBioControl::SetDefaultNameL(TDes& aName)
hgs
parents:
diff changeset
  1015
    {
hgs
parents:
diff changeset
  1016
    aName.Copy(*StringLoader::LoadLC( R_SM_TONE_NAME ));
hgs
parents:
diff changeset
  1017
    CleanupStack::PopAndDestroy(); //stringloader
hgs
parents:
diff changeset
  1018
    }
hgs
parents:
diff changeset
  1019
hgs
parents:
diff changeset
  1020
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1021
// CRingingToneBioControl::NameQueryL
hgs
parents:
diff changeset
  1022
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1023
//
hgs
parents:
diff changeset
  1024
TBool CRingingToneBioControl::NameQueryL(TDes& aName)
hgs
parents:
diff changeset
  1025
    {
hgs
parents:
diff changeset
  1026
    if (aName.Length() > KTextNameQueryMaxLength)
hgs
parents:
diff changeset
  1027
        {
hgs
parents:
diff changeset
  1028
        User::Leave(KErrOverflow);
hgs
parents:
diff changeset
  1029
        }
hgs
parents:
diff changeset
  1030
hgs
parents:
diff changeset
  1031
    CAknTextQueryDialog* queryDlg = new ( ELeave )
hgs
parents:
diff changeset
  1032
                                     CAknTextQueryDialog( aName );
hgs
parents:
diff changeset
  1033
    return queryDlg->ExecuteLD( R_SM_QUERY_RINGING_TONE );
hgs
parents:
diff changeset
  1034
    }
hgs
parents:
diff changeset
  1035
hgs
parents:
diff changeset
  1036
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1037
// CRingingToneBioControl::TakeTitleL
hgs
parents:
diff changeset
  1038
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1039
//
hgs
parents:
diff changeset
  1040
void CRingingToneBioControl::TakeTitleL()
hgs
parents:
diff changeset
  1041
    {
hgs
parents:
diff changeset
  1042
    //Read stream from file
hgs
parents:
diff changeset
  1043
hgs
parents:
diff changeset
  1044
    RFile ringFile;
hgs
parents:
diff changeset
  1045
hgs
parents:
diff changeset
  1046
    CMsvEntry* entry = this->MsvSession(). GetEntryL(iId);
hgs
parents:
diff changeset
  1047
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  1048
hgs
parents:
diff changeset
  1049
    CMsvStore* store = entry->ReadStoreL();
hgs
parents:
diff changeset
  1050
	CleanupStack::PushL(store);
hgs
parents:
diff changeset
  1051
hgs
parents:
diff changeset
  1052
	MMsvAttachmentManager& manager = store->AttachmentManagerL();
hgs
parents:
diff changeset
  1053
	ringFile = manager.GetAttachmentFileL(0);
hgs
parents:
diff changeset
  1054
hgs
parents:
diff changeset
  1055
    CleanupStack::PopAndDestroy(2,entry);    //entry, store
hgs
parents:
diff changeset
  1056
    CleanupClosePushL(ringFile);
hgs
parents:
diff changeset
  1057
hgs
parents:
diff changeset
  1058
hgs
parents:
diff changeset
  1059
    TInt filelen;
hgs
parents:
diff changeset
  1060
    User::LeaveIfError(ringFile.Size(filelen));
hgs
parents:
diff changeset
  1061
hgs
parents:
diff changeset
  1062
    HBufC8* filedata8 = HBufC8::NewMaxLC(filelen);
hgs
parents:
diff changeset
  1063
    TPtr8 dataPtr8 = filedata8->Des();
hgs
parents:
diff changeset
  1064
    User::LeaveIfError(ringFile.Read(dataPtr8,filelen));
hgs
parents:
diff changeset
  1065
hgs
parents:
diff changeset
  1066
    CleanupStack::Pop( filedata8 ); // pop the filedata temporarily
hgs
parents:
diff changeset
  1067
    CleanupStack::PopAndDestroy(); // close and destory ringFile
hgs
parents:
diff changeset
  1068
    CleanupStack::PushL( filedata8 ); // put the filedata back
hgs
parents:
diff changeset
  1069
hgs
parents:
diff changeset
  1070
    CRingBCNSMConverter* conv = CRingBCNSMConverter::NewL();
hgs
parents:
diff changeset
  1071
    CleanupStack::PushL( conv );
hgs
parents:
diff changeset
  1072
hgs
parents:
diff changeset
  1073
	if ( iToneTitle )
hgs
parents:
diff changeset
  1074
		{
hgs
parents:
diff changeset
  1075
		delete iToneTitle;
hgs
parents:
diff changeset
  1076
		iToneTitle = NULL;
hgs
parents:
diff changeset
  1077
		}
hgs
parents:
diff changeset
  1078
	iToneTitle = conv->TitleLC(dataPtr8); //The ownership changes here
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
    CleanupStack::Pop(iToneTitle);
hgs
parents:
diff changeset
  1081
    CleanupStack::PopAndDestroy(2, filedata8);  //conv, filedata8
hgs
parents:
diff changeset
  1082
hgs
parents:
diff changeset
  1083
    // checks if there is no name for ringing tone
hgs
parents:
diff changeset
  1084
    if (iToneTitle->Length() == 0)
hgs
parents:
diff changeset
  1085
        {
hgs
parents:
diff changeset
  1086
        delete iToneTitle;
hgs
parents:
diff changeset
  1087
        iToneTitle = NULL;
hgs
parents:
diff changeset
  1088
hgs
parents:
diff changeset
  1089
        // sets default name
hgs
parents:
diff changeset
  1090
        iToneTitle = StringLoader::LoadL( R_SM_TONE_NAME );
hgs
parents:
diff changeset
  1091
hgs
parents:
diff changeset
  1092
        // check that default name is not too long.
hgs
parents:
diff changeset
  1093
        if (iToneTitle->Length() > KMaxFileName )
hgs
parents:
diff changeset
  1094
            {
hgs
parents:
diff changeset
  1095
hgs
parents:
diff changeset
  1096
            HBufC* tempName = HBufC::NewLC(KMaxFileName);
hgs
parents:
diff changeset
  1097
            TPtr tempTPtr = tempName->Des();
hgs
parents:
diff changeset
  1098
hgs
parents:
diff changeset
  1099
            tempTPtr.Copy(iToneTitle->Des().Left(KMaxFileName));
hgs
parents:
diff changeset
  1100
hgs
parents:
diff changeset
  1101
            CleanupStack::Pop(tempName);
hgs
parents:
diff changeset
  1102
hgs
parents:
diff changeset
  1103
	        delete iToneTitle;
hgs
parents:
diff changeset
  1104
            iToneTitle = tempName;
hgs
parents:
diff changeset
  1105
            }
hgs
parents:
diff changeset
  1106
        }
hgs
parents:
diff changeset
  1107
    }
hgs
parents:
diff changeset
  1108
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1109
// CRingingToneBioControl::IncrementFileName
hgs
parents:
diff changeset
  1110
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1111
//
hgs
parents:
diff changeset
  1112
void CRingingToneBioControl::IncrementFileNameL(TDes& aFileName)
hgs
parents:
diff changeset
  1113
    {
hgs
parents:
diff changeset
  1114
    HBufC* path = CreatePathForSavingLC(aFileName);
hgs
parents:
diff changeset
  1115
hgs
parents:
diff changeset
  1116
    while (ConeUtils::FileExists(*path))
hgs
parents:
diff changeset
  1117
        {
hgs
parents:
diff changeset
  1118
hgs
parents:
diff changeset
  1119
        MsgBioUtils::IncrementNameL(aFileName,KMaxFileName);
hgs
parents:
diff changeset
  1120
hgs
parents:
diff changeset
  1121
        CleanupStack::PopAndDestroy(path);  //path
hgs
parents:
diff changeset
  1122
        path = CreatePathForSavingLC(aFileName);
hgs
parents:
diff changeset
  1123
hgs
parents:
diff changeset
  1124
        }
hgs
parents:
diff changeset
  1125
hgs
parents:
diff changeset
  1126
    CleanupStack::PopAndDestroy(path); //path;
hgs
parents:
diff changeset
  1127
    }
hgs
parents:
diff changeset
  1128
hgs
parents:
diff changeset
  1129
hgs
parents:
diff changeset
  1130
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1131
// CRingingToneBioControl ::TargetPathLC
hgs
parents:
diff changeset
  1132
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1133
//
hgs
parents:
diff changeset
  1134
HBufC* CRingingToneBioControl::TargetPathLC()
hgs
parents:
diff changeset
  1135
    {
hgs
parents:
diff changeset
  1136
	TFileName path = PathInfo::PhoneMemoryRootPath();
hgs
parents:
diff changeset
  1137
	path.Append( PathInfo::SimpleSoundsPath() );
hgs
parents:
diff changeset
  1138
    ConeUtils::EnsurePathExistsL(path);
hgs
parents:
diff changeset
  1139
    HBufC* savePath = HBufC::NewLC(KMaxPath + KMaxFileName);
hgs
parents:
diff changeset
  1140
	TPtr ptr = savePath->Des();
hgs
parents:
diff changeset
  1141
	ptr = path;
hgs
parents:
diff changeset
  1142
	return savePath;
hgs
parents:
diff changeset
  1143
    }
hgs
parents:
diff changeset
  1144
hgs
parents:
diff changeset
  1145
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1146
// CRingingToneBioControl ::VirtualHeight
hgs
parents:
diff changeset
  1147
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1148
//
hgs
parents:
diff changeset
  1149
TInt CRingingToneBioControl::VirtualHeight()
hgs
parents:
diff changeset
  1150
	{
hgs
parents:
diff changeset
  1151
    return 0;
hgs
parents:
diff changeset
  1152
	}
hgs
parents:
diff changeset
  1153
hgs
parents:
diff changeset
  1154
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1155
// CRingingToneBioControl ::VirtualVisibleTop
hgs
parents:
diff changeset
  1156
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1157
//
hgs
parents:
diff changeset
  1158
TInt CRingingToneBioControl::VirtualVisibleTop()
hgs
parents:
diff changeset
  1159
	{
hgs
parents:
diff changeset
  1160
    return 0;
hgs
parents:
diff changeset
  1161
	}
hgs
parents:
diff changeset
  1162
hgs
parents:
diff changeset
  1163
void CRingingToneBioControl::MsgAsyncControlStateChanged( CMsgBaseControl& /*aControl*/,
hgs
parents:
diff changeset
  1164
                                              TMsgAsyncControlState aNewState,
hgs
parents:
diff changeset
  1165
                                              TMsgAsyncControlState aOldState )
hgs
parents:
diff changeset
  1166
    {
hgs
parents:
diff changeset
  1167
    iPlayerState = aNewState;
hgs
parents:
diff changeset
  1168
    
hgs
parents:
diff changeset
  1169
    if(aOldState == EMsgAsyncControlStateOpening)
hgs
parents:
diff changeset
  1170
		{
hgs
parents:
diff changeset
  1171
		//last state was opening so we go ahead with playing by stopping 
hgs
parents:
diff changeset
  1172
		//the active scheduler that was started in OpenFileL -function
hgs
parents:
diff changeset
  1173
		CActiveScheduler::Stop();
hgs
parents:
diff changeset
  1174
		}
hgs
parents:
diff changeset
  1175
    
hgs
parents:
diff changeset
  1176
    switch( aNewState )
hgs
parents:
diff changeset
  1177
    	{
hgs
parents:
diff changeset
  1178
			//intentional fallthrough    			
hgs
parents:
diff changeset
  1179
			case EMsgAsyncControlStateIdle:
hgs
parents:
diff changeset
  1180
    		case EMsgAsyncControlStateStopped:
hgs
parents:
diff changeset
  1181
    		case EMsgAsyncControlStateCorrupt:
hgs
parents:
diff changeset
  1182
    		case EMsgAsyncControlStateNoRights:
hgs
parents:
diff changeset
  1183
    			{
hgs
parents:
diff changeset
  1184
    			//the Stop CBA has to be removed here because
hgs
parents:
diff changeset
  1185
    			//playing could be stopped when the tune has finished or
hgs
parents:
diff changeset
  1186
    			//the tune is corrupt
hgs
parents:
diff changeset
  1187
    			delete iStopCba;
hgs
parents:
diff changeset
  1188
    			iStopCba = NULL;
hgs
parents:
diff changeset
  1189
    			break;
hgs
parents:
diff changeset
  1190
    			}
hgs
parents:
diff changeset
  1191
    	}
hgs
parents:
diff changeset
  1192
    }
hgs
parents:
diff changeset
  1193
hgs
parents:
diff changeset
  1194
hgs
parents:
diff changeset
  1195
#ifdef RD_SCALABLE_UI_V2    
hgs
parents:
diff changeset
  1196
void CRingingToneBioControl::HandlePointerEventL( const TPointerEvent& aPointerEvent )
hgs
parents:
diff changeset
  1197
    {
hgs
parents:
diff changeset
  1198
hgs
parents:
diff changeset
  1199
hgs
parents:
diff changeset
  1200
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  1201
        {
hgs
parents:
diff changeset
  1202
        switch ( aPointerEvent.iType )
hgs
parents:
diff changeset
  1203
            {
hgs
parents:
diff changeset
  1204
            case TPointerEvent::EButton1Down:
hgs
parents:
diff changeset
  1205
            	{
hgs
parents:
diff changeset
  1206
            	//nothing to do here
hgs
parents:
diff changeset
  1207
            	}
hgs
parents:
diff changeset
  1208
            break;
hgs
parents:
diff changeset
  1209
            case TPointerEvent::EButton1Up:
hgs
parents:
diff changeset
  1210
                {
hgs
parents:
diff changeset
  1211
				TBool hitted = iAudioControl->HitRegionContains( aPointerEvent.iPosition, *this );
hgs
parents:
diff changeset
  1212
                if( hitted )
hgs
parents:
diff changeset
  1213
                    {
hgs
parents:
diff changeset
  1214
                        if ( iPlayerState != EMsgAsyncControlStatePlaying )
hgs
parents:
diff changeset
  1215
                            {
hgs
parents:
diff changeset
  1216
                            //playback is triggered when focused control is touched with stylus
hgs
parents:
diff changeset
  1217
                            iAudioControl->SetFocus(EFalse);
hgs
parents:
diff changeset
  1218
                            PlaybackL();
hgs
parents:
diff changeset
  1219
                            }
hgs
parents:
diff changeset
  1220
                        else if ( iPlayerState == EMsgAsyncControlStatePlaying )
hgs
parents:
diff changeset
  1221
                            {
hgs
parents:
diff changeset
  1222
                            //stylus hit to audio control when playback is in 
hgs
parents:
diff changeset
  1223
                            //progress stops the playing 
hgs
parents:
diff changeset
  1224
                            StopPlayback();
hgs
parents:
diff changeset
  1225
                            }
hgs
parents:
diff changeset
  1226
                    }
hgs
parents:
diff changeset
  1227
            	}
hgs
parents:
diff changeset
  1228
              break;
hgs
parents:
diff changeset
  1229
            default:
hgs
parents:
diff changeset
  1230
                break;
hgs
parents:
diff changeset
  1231
            }
hgs
parents:
diff changeset
  1232
        }
hgs
parents:
diff changeset
  1233
    }
hgs
parents:
diff changeset
  1234
#else   
hgs
parents:
diff changeset
  1235
void CRingingToneBioControl::HandlePointerEventL( const TPointerEvent& /*aPointerEvent*/ )
hgs
parents:
diff changeset
  1236
    {
hgs
parents:
diff changeset
  1237
    //no op
hgs
parents:
diff changeset
  1238
    }
hgs
parents:
diff changeset
  1239
#endif // RD_SCALABLE_UI_V2    
hgs
parents:
diff changeset
  1240
hgs
parents:
diff changeset
  1241
void CRingingToneBioControl::MsgAsyncControlResourceChanged( CMsgBaseControl& /*aControl*/,
hgs
parents:
diff changeset
  1242
											 				 TInt /*aType*/ )
hgs
parents:
diff changeset
  1243
	{
hgs
parents:
diff changeset
  1244
	//no op
hgs
parents:
diff changeset
  1245
	}
hgs
parents:
diff changeset
  1246
//  End of File