--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphoneringingtone.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,287 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class representing ringing tone
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "cphoneringingtone.h"
+#include <apgcli.h>
+#include <DRMHelper.h>
+#include <bldvariant.hrh>
+#include <pathinfo.h>
+#include "phoneconstants.h"
+#include "phonelogger.h"
+
+// CONSTANTS
+// Rich audio file MIME types
+_LIT(KAac, "audio/aac");
+_LIT(KMp3, "audio/mp3");
+_LIT(KMpeg, "audio/mpeg");
+_LIT(K3gpp, "audio/3gpp");
+_LIT(KMp4, "audio/mp4");
+_LIT(KAmrWb, "audio/amr-wb");
+_LIT(KWavX, "audio/x-wav");
+_LIT(KWav, "audio/wav");
+
+// Rich video file MIME types
+_LIT(KV3gpp, "video/3gpp");
+_LIT(KVMp4, "video/mp4");
+_LIT(KV3gpp2, "video/3gpp2");
+
+// MACROS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::CPhoneRingingTone
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingTone::CPhoneRingingTone( TBool aDrmInPlayback ) :
+ iDrmInPlayback( aDrmInPlayback )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTone::ConstructL( const TDesC& aFileName )
+ {
+ iFileName = aFileName.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingTone* CPhoneRingingTone::NewL(
+ const TDesC& aFileName,
+ TBool aDrmInPlayback )
+ {
+ CPhoneRingingTone* self = new( ELeave ) CPhoneRingingTone(
+ aDrmInPlayback );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aFileName );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// Destructor
+CPhoneRingingTone::~CPhoneRingingTone()
+ {
+ delete iFileName;
+ delete iMimeType;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::SetFileName
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTone::SetFileName( const TDesC& aFileName )
+ {
+ delete iFileName;
+ iFileName = aFileName.Alloc();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::FileName
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TDesC& CPhoneRingingTone::FileName() const
+ {
+ // iFileName is never NULL
+ return *iFileName;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::MimeType
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TDesC& CPhoneRingingTone::MimeType() const
+ {
+ if ( iMimeType )
+ {
+ return *iMimeType;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::IsVideoRingingTone
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingTone::IsVideoRingingTone()
+ {
+#ifdef RD_VIDEO_AS_RINGING_TONE
+ if ( RefreshMime() != KErrNone )
+ {
+ // try to handle as audio
+ return EFalse;
+ }
+
+ TBool isVideo( EFalse );
+
+ if ( iMimeType && iMimeType->MatchF( KPhoneRingingToneVideoMime ) !=
+ KErrNotFound )
+ {
+ isVideo = ETrue;
+ }
+ else if ( iMimeType && iMimeType->MatchF( KPhoneRingingToneRealVideoMime ) !=
+ KErrNotFound )
+ {
+ isVideo = ETrue;
+ }
+
+ if ( isVideo )
+ {
+ if ( IsFileInRom() && !IsFileInVideoDirectory() )
+ {
+ // For ROM files check also location, because
+ // MIME check is not fully reliable.
+ isVideo = EFalse;
+ }
+ }
+
+ return isVideo;
+#else
+ // if extended security -> refresh MIME
+ if ( iDrmInPlayback )
+ {
+ RefreshMime();
+ }
+
+ return EFalse;
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::IsFileDrmProtected
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingTone::IsFileDrmProtected() const
+ {
+ const TDesC& type = MimeType();
+
+ if ( type == KAac || type == KMp3 || type == KMpeg ||
+ type == K3gpp || type == KMp4 || type == KAmrWb ||
+ type == KWavX || type == KWav || type == KV3gpp ||
+ type == KVMp4 || type == KV3gpp2 )
+ {
+ ContentAccess::CContent* content = NULL;
+ TRAPD( err, content = ContentAccess::CContent::NewL( *iFileName ) );
+ if ( err == KErrNone && content )
+ {
+ TInt drmProtected( 0 );
+ content->GetAttribute( ContentAccess::EIsProtected, drmProtected );
+ delete content;
+ return drmProtected;
+ }
+ }
+
+ return ETrue; // Other MIMEs can be played without DRM check.
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::IsFileInRom
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingTone::IsFileInRom() const
+ {
+ TParsePtrC parsedName( *iFileName );
+
+ // Files on rom are not DRM checked
+ if ( parsedName.Drive().CompareF( KPhoneRingingToneDriveZ ) == 0 )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::IsFileInVideoDirectory
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingTone::IsFileInVideoDirectory() const
+ {
+ TParsePtrC parsedName( *iFileName );
+
+ if ( PathInfo::PathType( parsedName.DriveAndPath() ) ==
+ PathInfo::EVideosPath )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::RefreshMime
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingTone::RefreshMime()
+ {
+ TRAPD( err, RefreshMimeL() );
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTone::RefreshMimeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTone::RefreshMimeL()
+ {
+ RApaLsSession apaLsSession;
+ User::LeaveIfError( apaLsSession.Connect() );
+ CleanupClosePushL( apaLsSession );
+
+ TUid dummyUid = { 0 };
+ TDataType dataType( dummyUid );
+
+ User::LeaveIfError(
+ apaLsSession.AppForDocument( *iFileName, dummyUid, dataType ) );
+
+ CleanupStack::PopAndDestroy(); // CleanupClosePushL
+
+ delete iMimeType;
+ iMimeType = NULL;
+ iMimeType = dataType.Des().AllocL();
+ }
+
+// End of File