--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp Wed Sep 01 12:30:28 2010 +0100
@@ -0,0 +1,1250 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: UI level handler for category data.*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+
+#include <mpxmediageneraldefs.h>
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+
+#include <ganes/HgScroller.h>
+#include <ganes/HgItem.h>
+#include <ganes/HgDoubleGraphicList.h>
+
+#include <thumbnailmanager.h>
+#include <thumbnailmanagerobserver.h>
+#include <thumbnailobjectsource.h>
+#include <thumbnaildata.h>
+#include <gulicon.h>
+#include <AknsUtils.h>
+#include <AknUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <coemain.h>
+#include <aknappui.h>
+#include <bautils.h>
+
+#include <vcxhgmyvideosicons.mbg>
+#include <myvideosindicator.h>
+#include <vcxhgmyvideos.rsg>
+#include <vcxmyvideosdefs.h>
+#include <vcxmyvideosuids.h>
+#include "IptvDebug.h"
+
+#include "vcxhgmyvideoscategorymodelhandler.h"
+#include "vcxhgmyvideosmodel.h"
+#include "vcxhgmyvideoscollectionclient.h"
+#include "vcxhgmyvideosthumbnailmanager.h"
+#include "vcxhgmyvideoscenrepkeys.h"
+
+_LIT( KVcxHgMyVideosMifFile, "\\resource\\apps\\vcxhgmyvideosicons.mif" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::NewL()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCategoryModelHandler* CVcxHgMyVideosCategoryModelHandler::NewL(
+ CVcxHgMyVideosModel& aModel,
+ CHgScroller& aScroller )
+ {
+ CVcxHgMyVideosCategoryModelHandler* self =
+ new (ELeave) CVcxHgMyVideosCategoryModelHandler( aModel, aScroller );
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::CVcxHgMyVideosCategoryModelHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCategoryModelHandler::CVcxHgMyVideosCategoryModelHandler(
+ CVcxHgMyVideosModel& aModel, CHgScroller& aScroller )
+ : iModel( aModel ),
+ iScroller( aScroller ),
+ iTnManager( aModel.ThumbnailManager() ),
+ iTnRequestId( KErrNotFound )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::~CVcxHgMyVideosCategoryModelHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCategoryModelHandler::~CVcxHgMyVideosCategoryModelHandler()
+ {
+ delete iCategoryList;
+ delete iVideoIndicator;
+
+ iCategoryIdArray.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::DoModelActivateL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::DoModelActivateL()
+ {
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelActivateL() - Enter" );
+
+ UpdateCategoryListL();
+
+ iModel.CollectionClient().SetCategoryModelObserver( this );
+
+ iTnManager.AddObserverL( *this );
+
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelActivateL() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate()
+ {
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate() - Enter" );
+
+ iModel.CollectionClient().SetCategoryModelObserver( NULL );
+
+ iTnManager.RemoveObserver( *this );
+
+ TRAP_IGNORE( ClearLastWatchedIconL() )
+
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::GetCategoryListL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::GetCategoryListL()
+ {
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::GetCategoryListL() - Enter" );
+
+ iModel.CollectionClient().GetCategoryListL();
+
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::GetCategoryListL() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::Highlight()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosCategoryModelHandler::Highlight()
+ {
+ return iScroller.SelectedIndex();
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::GetCategoryNameLC()
+// -----------------------------------------------------------------------------
+//
+HBufC* CVcxHgMyVideosCategoryModelHandler::GetCategoryNameLC( TInt aCategoryId )
+ {
+ HBufC* name = NULL;
+
+ switch ( aCategoryId )
+ {
+ case KVcxMvcCategoryIdAll:
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_ALL_LIST );
+ break;
+ case KVcxMvcCategoryIdDownloads:
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_DOWNLOADS_LIST );
+ break;
+ case KVcxMvcCategoryIdCaptured:
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_CAPTURED_LIST );
+ break;
+ case KVcxMvcCategoryIdOther:
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_OTHER_LIST );
+ break;
+ case KCategoryIdLastWatched:
+ if ( LastWatchedSetL() )
+ {
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_LAST_WATCHED );
+ }
+ else
+ {
+ if ( PreloadedExistsL() )
+ {
+ TBuf<KMyVideosTitleStringMaxLength> string;
+ TInt error = iModel.GetMyVideosCustomizationString(
+ KCRVideoPlayerPreloadedVideoName, string );
+ name = error ? KNullDesC().AllocLC() : string.AllocLC();
+ }
+ else
+ {
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_LAST_WATCHED );
+ }
+ }
+ break;
+ case KCategoryIdExtraItem1:
+ // ExtraItem1 is always interpreted as Ovi Store
+ name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_OVI_STORE );
+ break;
+ case KCategoryIdExtraItem2:
+ case KCategoryIdExtraItem3:
+ {
+ TInt key = 0;
+ if ( aCategoryId == KCategoryIdExtraItem2 )
+ {
+ key = KCRVideoPlayerExtraItem2Title;
+ }
+ else if ( aCategoryId == KCategoryIdExtraItem3 )
+ {
+ key = KCRVideoPlayerExtraItem3Title;
+ }
+
+ TBuf<KMyVideosTitleStringMaxLength> titleString;
+ TInt error = iModel.GetMyVideosCustomizationString( key, titleString );
+ if ( error == KErrNone )
+ {
+ name = titleString.AllocLC();
+ }
+ else
+ {
+ name = KNullDesC().AllocLC();
+ }
+ }
+ break;
+
+ default:
+ {
+ name = KNullDesC().AllocLC();
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # GetCategoryNameLC() Unexpected category!" );
+ }
+ break;
+ }
+ return name;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::GetCategoryIconL()
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CVcxHgMyVideosCategoryModelHandler::GetCategoryIconL( TInt aCategoryId )
+ {
+ IPTVLOGSTRING2_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::GetCategoryIconL() Enter! Category id = %d", aCategoryId );
+
+ CGulIcon* icon( NULL );
+ TAknsItemID skinId = KAknsIIDNone;
+ TInt bitmapId( 0 );
+ TInt maskId( 0 );
+ TInt key( KErrNotFound );
+ TFileName iconFile( KNullDesC() );
+
+ // Find icon file & bitmap IDs or cenrep keys
+ switch ( aCategoryId )
+ {
+ case KVcxMvcCategoryIdDownloads: // fall through
+ case KVcxMvcCategoryIdAll: // fall through
+ case KVcxMvcCategoryIdOther:
+ skinId.Set( KAknsIIDQgnPropDownloadThumbnailVideo );
+ iconFile = KVcxHgMyVideosMifFile;
+ bitmapId = EMbmVcxhgmyvideosiconsQgn_prop_download_thumbnail_video;
+ maskId = EMbmVcxhgmyvideosiconsQgn_prop_download_thumbnail_video_mask;
+ break;
+ case KVcxMvcCategoryIdCaptured:
+ skinId.Set( KAknsIIDQgnPropCapturedThumbnailVideo );
+ iconFile = KVcxHgMyVideosMifFile;
+ bitmapId = EMbmVcxhgmyvideosiconsQgn_prop_captured_thumbnail_video;
+ maskId = EMbmVcxhgmyvideosiconsQgn_prop_captured_thumbnail_video_mask;
+ break;
+ case KCategoryIdLastWatched:
+ LoadLastWatchedIconL();
+ if ( iTnRequestId == KErrNotFound )
+ {
+ // Last watched or preloaded not found => show default icon
+ skinId.Set( KAknsIIDQgnPropRecentThumbnailVideo );
+ iconFile = KVcxHgMyVideosMifFile;
+ bitmapId = EMbmVcxhgmyvideosiconsQgn_prop_recent_thumbnail_video;
+ maskId = EMbmVcxhgmyvideosiconsQgn_prop_recent_thumbnail_video_mask;
+ }
+ break;
+ case KCategoryIdExtraItem1:
+ // ExtraItem1 is always interpreted as Ovi Store
+ skinId.Set( KAknsIIDQgnPropOviThumbnailVideo );
+ iconFile = KVcxHgMyVideosMifFile;
+ bitmapId = EMbmVcxhgmyvideosiconsQgn_prop_ovi_thumbnail_video;
+ maskId = EMbmVcxhgmyvideosiconsQgn_prop_ovi_thumbnail_video_mask;
+ break;
+ case KCategoryIdExtraItem2:
+ key = KCRVideoPlayerExtraItem2IconPath;
+ break;
+ case KCategoryIdExtraItem3:
+ key = KCRVideoPlayerExtraItem3IconPath;
+ break;
+ default:
+ {
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # GetCategoryIconLC() Unexpected category!" );
+ }
+ break;
+ }
+
+ if ( key != KErrNotFound )
+ {
+ // Extra item 2 or 3, get icon file from cenrep
+ TInt error = iModel.GetMyVideosCustomizationString( key, iconFile );
+ if ( error == KErrNone && iconFile.Length() > 0 )
+ {
+ IPTVLOGSTRING3_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::GetCategoryIconL() cenrep key %d iconFile %S", key, &iconFile );
+ bitmapId = 0x4000;
+ maskId = 0x4001;
+ }
+ else
+ { // Use default service icon
+ skinId.Set( KAknsIIDQgnPropServiceThumbnailVideo );
+ iconFile = KVcxHgMyVideosMifFile;
+ bitmapId = EMbmVcxhgmyvideosiconsQgn_prop_service_thumbnail_video;
+ maskId = EMbmVcxhgmyvideosiconsQgn_prop_service_thumbnail_video_mask;
+ }
+ }
+
+ if ( bitmapId && iconFile.Length() > 0 )
+ {
+ // find mif file
+ TFindFile findFile( iModel.FileServerSessionL() );
+ TInt error = findFile.FindByDir( iconFile, KNullDesC );
+
+ // Create icon if icon file was found
+ if ( KErrNone == error )
+ {
+ TParse parse;
+ parse.Set( findFile.File(), NULL, NULL );
+ iconFile = parse.FullName();
+ IPTVLOGSTRING3_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::GetCategoryIconLC() get %d from file %S", bitmapId, &iconFile );
+
+ icon = CreateHgListIconL( skinId, iconFile, bitmapId, maskId );
+ }
+ else
+ {
+ IPTVLOGSTRING2_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::GetCategoryIconL() FindByDir() returned %d", error );
+ }
+ }
+ else
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::GetCategoryIconLC() no icon file or id" );
+ }
+
+ return icon;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::FormatCategorySecondRowLC()
+// -----------------------------------------------------------------------------
+//
+HBufC* CVcxHgMyVideosCategoryModelHandler::FormatCategorySecondRowLC( CMPXMedia& aMedia )
+ {
+ HBufC* details = NULL;
+ TInt newVideos = 0;
+ TInt videos = 0;
+
+ if ( aMedia.IsSupported( KVcxMediaMyVideosCategoryNewItemCount ) )
+ {
+ newVideos = *( aMedia.Value<TInt>( KVcxMediaMyVideosCategoryNewItemCount ) );
+ }
+ if ( aMedia.IsSupported( KVcxMediaMyVideosCategoryItemCount ) )
+ {
+ videos = *( aMedia.Value<TInt>( KVcxMediaMyVideosCategoryItemCount ) );
+ }
+
+ if ( newVideos > 0 )
+ {
+ if ( newVideos == 1 )
+ {
+ details = StringLoader::LoadL( R_VCXHGMYVIDEOS_ONE_NEW_VIDEO );
+ }
+ else
+ {
+ details = StringLoader::LoadL( R_VCXHGMYVIDEOS_N_NEW_VIDEOS, newVideos );
+ }
+ CleanupStack::PushL( details );
+ }
+ else
+ {
+ if ( videos == 0 )
+ {
+ details = StringLoader::LoadLC( R_VCXHGMYVIDEOS_NO_VIDEOS_IN_CATEGORY );
+ }
+ else if ( videos == 1 )
+ {
+ details = StringLoader::LoadLC( R_VCXHGMYVIDEOS_ONE_VIDEO_IN_CATEGORY );
+ }
+ else
+ {
+ details = StringLoader::LoadLC( R_VCXHGMYVIDEOS_VIDEOS_IN_CATEGORY, videos );
+ }
+ }
+
+ return details;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::FormatCategorySecondRowLC()
+// -----------------------------------------------------------------------------
+//
+HBufC* CVcxHgMyVideosCategoryModelHandler::FormatCategorySecondRowLC( TInt aCategoryId )
+ {
+ HBufC* secondRow = NULL;
+
+ switch ( aCategoryId )
+ {
+ case KVcxMvcCategoryIdAll:
+ case KVcxMvcCategoryIdDownloads:
+ case KVcxMvcCategoryIdTvRecordings:
+ case KVcxMvcCategoryIdCaptured:
+ case KVcxMvcCategoryIdOther:
+ {
+ CMPXMedia* media = GetCategoryDataL( aCategoryId );
+ if ( media )
+ {
+ secondRow = FormatCategorySecondRowLC( *media );
+ }
+ else
+ {
+ secondRow = KNullDesC().AllocLC();
+ }
+ }
+ break;
+ case KCategoryIdLastWatched:
+ {
+ if ( LastWatchedSetL() )
+ {
+ TBuf<KMaxPath> path;
+ TInt error = iModel.GetLastWatchedPathL( path );
+ if ( BaflUtils::FileExists( iModel.FileServerSessionL(), path ) )
+ {
+ TBuf<KMyVideosTitleStringMaxLength> string;
+ TInt error = iModel.GetLastWatchedNameL( string );
+ secondRow = error ? KNullDesC().AllocLC() : string.AllocLC();
+ }
+ else
+ {
+ secondRow = StringLoader::LoadLC( R_VCXHGMYVIDEOS_NO_VIDEOS_IN_CATEGORY );
+ }
+ }
+ else
+ {
+ if ( PreloadedExistsL() )
+ {
+ TBuf<KMyVideosTitleStringMaxLength> string;
+ TInt error = iModel.GetMyVideosCustomizationString(
+ KCRVideoPlayerPreloadedVideoDescription, string );
+ secondRow = error ? KNullDesC().AllocLC() : string.AllocLC();
+ }
+ else
+ {
+ secondRow = StringLoader::LoadLC( R_VCXHGMYVIDEOS_NO_VIDEOS_IN_CATEGORY );
+ }
+ }
+ }
+ break;
+
+ case KCategoryIdExtraItem1:
+ // ExtraItem1 is always interpreted as Ovi Store
+ secondRow = StringLoader::LoadLC( R_VCXHGMYVIDEOS_OVI_STORE_VIDEOS );
+ break;
+
+ case KCategoryIdExtraItem2:
+ case KCategoryIdExtraItem3:
+ {
+ TInt key = 0;
+ if ( aCategoryId == KCategoryIdExtraItem2 )
+ {
+ key = KCRVideoPlayerExtraItem2Text;
+ }
+ else if ( aCategoryId == KCategoryIdExtraItem3 )
+ {
+ key = KCRVideoPlayerExtraItem3Text;
+ }
+
+ TBuf<KMyVideosTitleStringMaxLength> detailsString;
+ TInt error = iModel.GetMyVideosCustomizationString( key, detailsString );
+ if ( error == KErrNone )
+ {
+ secondRow = detailsString.AllocLC();
+ }
+ else
+ {
+ secondRow = KNullDesC().AllocLC();
+ }
+ break;
+ }
+ default:
+ {
+ secondRow = KNullDesC().AllocLC();
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # FormatCategorySecondRowLC() Unexpected category!" );
+ break;
+ }
+ }
+ return secondRow;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::UiIndexFromMpxItemId()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosCategoryModelHandler::UiIndexFromMpxItemId( TMPXItemId& aMpxItemId )
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UiIndexFromMpxItemId() - Enter" );
+
+ TInt index ( KErrNotFound );
+
+ if ( iCategoryList )
+ {
+ CMPXMedia* media = NULL;
+ TMPXItemId mpxItemId;
+
+ for ( TInt i = 0; i < iCategoryList->Count(); i++ )
+ {
+ media = (*iCategoryList)[i];
+
+ if ( media && media->IsSupported( KMPXMediaGeneralId ) )
+ {
+ mpxItemId = *media->Value<TMPXItemId>( KMPXMediaGeneralId );
+
+ if ( mpxItemId == aMpxItemId )
+ {
+ index = ResolveCategoryArrayIndexById( i );
+ break;
+ }
+ }
+ }
+ }
+
+ IPTVLOGSTRING2_LOW_LEVEL( "MPX My Videos UI # UiIndexFromMpxItemId(), index = %d - Exit", index );
+ return index;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::ResolveCategoryArrayIndexById()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosCategoryModelHandler::ResolveCategoryArrayIndexById( TInt aCategoryId )
+ {
+ TInt ret( KErrNotFound );
+
+ for(TInt i = 0; i < iCategoryIdArray.Count(); i++ )
+ {
+ if( iCategoryIdArray[ i ] == aCategoryId )
+ {
+ ret = i;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::NewCategoryListL()
+// MPX Collection calls this callback when new category list is available.
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::NewCategoryListL(
+ CMPXMediaArray* aCategoryList, TBool aIsPartial )
+ {
+ IPTVLOGSTRING2_LOW_LEVEL( "MPX My Videos UI # NewCategoryListL() - Enter. IsPartial=%d", aIsPartial );
+
+ delete iCategoryList;
+ iCategoryList = aCategoryList;
+
+ UpdateCategoryListL();
+
+ if ( !aIsPartial )
+ {
+ // KVcxMessageMyVideosListComplete does not come, finish list fetching now
+ CategoryListFetchingCompletedL();
+ }
+
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # NewCategoryListL() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::CategoryListModifiedL()
+// MPX Collection calls this callback when the category list is modified.
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::CategoryListModifiedL()
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CategoryListModifiedL() - Enter" );
+
+ UpdateCategoryListL();
+
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CategoryListModifiedL() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::CategoryModifiedL()
+// MPX Collection calls this callback when single category is modified.
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::CategoryModifiedL( TMPXChangeEventType aEventType,
+ TMPXItemId& aMpxItemId )
+ {
+ IPTVLOGSTRING2_LOW_LEVEL(
+ "MPX My Videos UI # CategoryModifiedL(event=%d)", aEventType );
+
+ switch ( aEventType )
+ {
+ case EMPXItemModified:
+ {
+ TInt uiIndex = UiIndexFromMpxItemId( aMpxItemId );
+ UpdateCategoryListItemL( uiIndex );
+ iScroller.RefreshScreen( uiIndex );
+ }
+ break;
+
+ case EMPXItemInserted:
+ {
+ TInt id1( 0 );
+ TInt ret = iModel.GetLastWatchedIdL( id1 );
+
+ if ( ret == KErrNone &&
+ id1 == aMpxItemId.iId1 )
+ {
+ ClearLastWatchedIconL();
+ UpdateCategoryListItemL( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
+ iScroller.RefreshScreen( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
+ }
+ }
+ break;
+ case EMPXItemDeleted:
+ {
+ TInt id1( 0 );
+ TInt ret = iModel.GetLastWatchedIdL( id1 );
+
+ if ( ret == KErrNone &&
+ id1 == aMpxItemId.iId1 )
+ {
+ ClearLastWatchedIconL();
+ UpdateCategoryListItemL( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
+ iScroller.RefreshScreen( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
+ }
+ }
+ break;
+ default:
+ {
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # CategoryModifiedL() Unexpected event!" );
+ }
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListL()
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UpdateCategoryListL() - Enter" );
+
+ MakeCategoryIdArray();
+
+ if ( iCategoryIdArray.Count() != iScroller.ItemCount() )
+ {
+ iScroller.ResizeL( iCategoryIdArray.Count() );
+ }
+
+ if ( iCategoryIdArray.Count() > 0 )
+ {
+ for ( TInt i = 0; i < iCategoryIdArray.Count(); i++ )
+ {
+ UpdateCategoryListItemL( i );
+ }
+ if ( iScroller.SelectedIndex() < 0 ||
+ iScroller.SelectedIndex() >= iScroller.ItemCount() )
+ {
+ iScroller.SetSelectedIndex( 0 );
+ }
+ }
+
+ // Refresh the whole list.
+ iScroller.DrawDeferred();
+
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UpdateCategoryListL() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListItemL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListItemL( TInt aListIndex )
+ {
+ IPTVLOGSTRING2_LOW_LEVEL(
+ "MPX My Videos UI # UpdateCategoryListItemL (index=%d)", aListIndex );
+
+ if( aListIndex >= 0 &&
+ aListIndex < iScroller.ItemCount() &&
+ aListIndex < iCategoryIdArray.Count() )
+ {
+ CHgItem& listItem = iScroller.ItemL( aListIndex );
+
+ HBufC* categoryName( NULL );
+ categoryName = GetCategoryNameLC( iCategoryIdArray[ aListIndex ] );
+ listItem.SetTitleL( *categoryName );
+ CleanupStack::PopAndDestroy( categoryName );
+
+ HBufC* secondRow( NULL );
+ secondRow = FormatCategorySecondRowLC( iCategoryIdArray[ aListIndex ] );
+ listItem.SetTextL( *secondRow );
+ CleanupStack::PopAndDestroy( secondRow );
+
+ // Set icon for category
+ if ( !listItem.Icon() )
+ {
+ listItem.SetIcon( GetCategoryIconL( iCategoryIdArray[ aListIndex ] ) );
+ }
+ }
+
+ IPTVLOGSTRING_LOW_LEVEL(
+ "MPX My Videos UI # UpdateCategoryListItemL() - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::RemoveCategoryListItem()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::RemoveCategoryListItem( TInt aListIndex )
+ {
+ if ( aListIndex >= 0 && aListIndex < iScroller.ItemCount() )
+ {
+ iScroller.RemoveItem( aListIndex );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::ResolveCategoryId()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosCategoryModelHandler::ResolveCategoryId( TInt aScrollerIndex )
+ {
+ TInt ret( -1 );
+ if ( aScrollerIndex >= 0 &&
+ aScrollerIndex <= iCategoryIdArray.Count() )
+ {
+ ret = iCategoryIdArray[ aScrollerIndex ];
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray()
+ {
+ IPTVLOGSTRING_LOW_LEVEL("CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray");
+
+ iCategoryIdArray.Reset();
+
+ TInt error = KErrNone;
+ TInt value = KErrNotFound;
+ TInt categoryId = KErrNotFound;
+
+ // Check that cenrep exists and has some valid data
+ error = iModel.GetMyVideosCustomizationInt( KCRVideoPlayerItemLocation1, value );
+
+ if ( error == KErrNone && value > EMyVideosListItemTypeEmpty )
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # MakeCategoryIdArray() Getting category items from cenrep" );
+
+ for ( TInt i=KCRVideoPlayerItemLocation1; i<=KCRVideoPlayerItemLocation7; i++ )
+ {
+ error = iModel.GetMyVideosCustomizationInt( i , value );
+ if ( error == KErrNone && value != EMyVideosListItemTypeEmpty )
+ {
+ switch ( value )
+ {
+ case EMyVideosListItemTypeLastWatched:
+ categoryId = KCategoryIdLastWatched;
+ break;
+ case EMyVideosListItemTypeCapturedVideos:
+ categoryId = KVcxMvcCategoryIdCaptured;
+ break;
+ case EMyVideosListItemTypeOtherVideos:
+ categoryId = KVcxMvcCategoryIdOther;
+ break;
+ case EMyVideosListItemTypeExtra1:
+ categoryId = KCategoryIdExtraItem1;
+ break;
+ case EMyVideosListItemTypeExtra2:
+ categoryId = KCategoryIdExtraItem2;
+ break;
+ case EMyVideosListItemTypeExtra3:
+ categoryId = KCategoryIdExtraItem3;
+ break;
+ case EMyVideosListItemTypeEmpty:
+ categoryId = KErrNotFound;
+ break;
+ default:
+ categoryId = KErrNotFound;
+ break;
+ }
+
+ if ( AcceptCategory( categoryId ) )
+ {
+ iCategoryIdArray.Append( categoryId );
+ }
+ }
+ }
+ }
+ else
+ {
+ iCategoryIdArray.Append( KCategoryIdLastWatched );
+ iCategoryIdArray.Append( KVcxMvcCategoryIdCaptured );
+ iCategoryIdArray.Append( KVcxMvcCategoryIdOther );
+ iCategoryIdArray.Append( KCategoryIdExtraItem1 );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::AcceptCategory()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgMyVideosCategoryModelHandler::AcceptCategory( TInt aCategoryId )
+ {
+ TBool ret(EFalse);
+ switch ( aCategoryId )
+ {
+ case KVcxMvcCategoryIdAll:
+ case KVcxMvcCategoryIdCaptured:
+ case KVcxMvcCategoryIdOther:
+ case KCategoryIdLastWatched:
+ case KCategoryIdExtraItem1:
+ case KCategoryIdExtraItem2:
+ case KCategoryIdExtraItem3:
+ IPTVLOGSTRING2_LOW_LEVEL(
+ "MPX My Videos UI # AcceptCategory() Accepted category: %d", aCategoryId );
+ ret = ETrue;
+ break;
+ default:
+ IPTVLOGSTRING2_LOW_LEVEL(
+ "MPX My Videos UI # AcceptCategory() Unknown category: %d", aCategoryId );
+ break;
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// MPX Collection calls this callback when category list items have been fetched.
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::CategoryListFetchingCompletedL()
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CategoryListFetchingCompletedL()" );
+
+ // Send custom command to appui that signals that the
+ // my videos main view is constructed.
+ CAknAppUi* appui = static_cast<CAknAppUi*>( CCoeEnv::Static()->AppUi() );
+
+ if ( appui )
+ {
+ appui->HandleCommandL( KVcxMyVideosCmdDoLateConstruct );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::GetCategoryDataL()
+//
+// -----------------------------------------------------------------------------
+//
+CMPXMedia* CVcxHgMyVideosCategoryModelHandler::GetCategoryDataL( TInt aCategoryId )
+ {
+ if ( iCategoryList && aCategoryId >= 0 && iCategoryList->Count() > aCategoryId )
+ {
+ return (*iCategoryList)[ aCategoryId ];
+ }
+
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::PlayLastWatchedVidedoL()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::PlayLastWatchedVidedoL()
+ {
+ TBuf<KMaxPath> path;
+ TInt error( KErrNotFound );
+ if ( LastWatchedSetL() )
+ {
+ error = iModel.GetLastWatchedPathL( path );
+ }
+ else if ( PreloadedExistsL() )
+ {
+ error = iModel.GetMyVideosCustomizationString(
+ KCRVideoPlayerPreloadedVideoPath, path );
+ }
+
+ if ( !error && path.Length() && BaflUtils::FileExists( iModel.FileServerSessionL(), path ) )
+ {
+ CAknAppUi* appui = static_cast<CAknAppUi*>( CCoeEnv::Static()->AppUi() );
+
+ if ( appui )
+ {
+ appui->OpenFileL( path );
+ iModel.SetAppState( CVcxHgMyVideosModel::EVcxMyVideosAppStatePlayer );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::LoadLastWatchedIconL()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::LoadLastWatchedIconL()
+ {
+ if ( LastWatchedSetL() )
+ {
+ TBuf<KMaxPath> path;
+ TInt error = iModel.GetLastWatchedPathL( path );
+
+ if ( BaflUtils::FileExists( iModel.FileServerSessionL(), path ) )
+ {
+ CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
+ path,
+ KNullDesC );
+ iTnRequestId = iTnManager.GetL( *source );
+ CleanupStack::PopAndDestroy( source );
+ }
+ }
+ else
+ {
+ if ( PreloadedExistsL() )
+ {
+ TBuf<KMaxPath> path;
+ TInt error = iModel.GetMyVideosCustomizationString(
+ KCRVideoPlayerPreloadedVideoPath, path );
+ CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
+ path,
+ KNullDesC );
+
+ iTnRequestId = iTnManager.GetL( *source );
+ CleanupStack::PopAndDestroy( source );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::ClearLastWatchedIconL()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::ClearLastWatchedIconL()
+ {
+ CHgItem& item = iScroller.ItemL( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
+ item.ClearFlags( CHgItem::EHgItemFlagsIconOverlayIndicator );
+ item.SetIcon( NULL );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::SetLastWatchedIndicatorL()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::SetLastWatchedIndicatorL()
+ {
+ if ( KErrNotFound != ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) )
+ {
+ CHgItem& lastWatchedItem = iScroller.ItemL(
+ ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
+ TInt isIndicator( 0 );
+ iModel.GetLastWatchedIndicatorL( isIndicator );
+
+ TBuf<KMaxPath> path;
+ TInt error = iModel.GetLastWatchedPathL( path );
+ TBool exist = BaflUtils::FileExists( iModel.FileServerSessionL(), path );
+ if ( isIndicator && path.Length() && exist )
+ {
+ lastWatchedItem.SetFlags( CHgItem::EHgItemFlagsIconOverlayIndicator );
+ }
+ else
+ {
+ lastWatchedItem.ClearFlags( CHgItem::EHgItemFlagsIconOverlayIndicator );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::VideoIndicatorL()
+//
+// -----------------------------------------------------------------------------
+//
+CMyVideosIndicator& CVcxHgMyVideosCategoryModelHandler::VideoIndicatorL()
+ {
+ if ( !iVideoIndicator )
+ {
+ iVideoIndicator = CMyVideosIndicator::NewL();
+ }
+ return *iVideoIndicator;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::ThumbnailPreviewReady()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::ThumbnailPreviewReady(
+ MThumbnailData& /*aThumbnail*/,
+ TThumbnailRequestId /*aId*/ )
+ {
+ // No implementation
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::ThumbnailReady()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::ThumbnailReady(
+ TInt aError,
+ MThumbnailData& aThumbnail,
+ TThumbnailRequestId aId )
+ {
+ if ( aId == iTnRequestId )
+ {
+ iTnRequestId = KErrNotFound;
+
+ TRAP_IGNORE( ThumbnailReadyL( aError, aThumbnail, aId ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::ThumbnailReady()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::ThumbnailReadyL(
+ TInt aError,
+ MThumbnailData& aThumbnail,
+ TThumbnailRequestId /*aId*/ )
+ {
+ TInt lastWatchedIndex = ResolveCategoryArrayIndexById( KCategoryIdLastWatched );
+ if ( lastWatchedIndex != KErrNotFound )
+ {
+ CHgItem& listItem = iScroller.ItemL( lastWatchedIndex );
+ CGulIcon* thumbnail( NULL );
+
+ if ( !aError )
+ {
+ thumbnail = CGulIcon::NewL( aThumbnail.DetachBitmap() );
+ CleanupStack::PushL( thumbnail );
+ SetLastWatchedIndicatorL();
+ }
+ else
+ {
+ TFileName iconFile( KVcxHgMyVideosMifFile );
+ thumbnail = CreateHgListIconL(
+ KAknsIIDQgnPropRecentThumbnailVideo,
+ iconFile,
+ EMbmVcxhgmyvideosiconsQgn_prop_recent_thumbnail_video,
+ EMbmVcxhgmyvideosiconsQgn_prop_recent_thumbnail_video_mask );
+
+ CleanupStack::PushL( thumbnail );
+ }
+
+ listItem.SetIcon( thumbnail ); // Takes ownership
+ CleanupStack::Pop( thumbnail );
+ iScroller.RefreshScreen( lastWatchedIndex );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::HandleExtraItemSelectionL()
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::HandleExtraItemSelectionL(
+ TInt categoryId,
+ TVcxHgMyVideosCategoryItemType& aItemType,
+ TUid& aUid,
+ TDes& aUrl )
+ {
+ TInt uidKey = 0;
+ TInt urlKey = 0;
+
+ aItemType = TVcxHgMyVideosCategoryItemTypeUndefined;
+
+ switch ( categoryId )
+ {
+ case KCategoryIdExtraItem1:
+ {
+ uidKey = KCRVideoPlayerExtraItem1Uid;
+ urlKey = KCRVideoPlayerExtraItem1Url;
+ break;
+ }
+ case KCategoryIdExtraItem2:
+ {
+ uidKey = KCRVideoPlayerExtraItem2Uid;
+ urlKey = KCRVideoPlayerExtraItem2Url;
+ break;
+ }
+ case KCategoryIdExtraItem3:
+ {
+ uidKey = KCRVideoPlayerExtraItem3Uid;
+ urlKey = KCRVideoPlayerExtraItem3Url;
+ break;
+ }
+ default:
+ return;
+ }
+
+ TBuf<KMyVideosTitleUrlMaxLength> urlString;
+ TInt uidInt( 0 ) ;
+
+ // Try to get URL.
+ TInt error = iModel.GetMyVideosCustomizationString( urlKey, urlString );
+ if ( error == KErrNone && urlString.Size() > 0 )
+ {
+ aUrl = urlString;
+ aItemType = TVcxHgMyVideosCategoryItemTypeUrl;
+ }
+
+ // Try to fetch application UID.
+ error = iModel.GetMyVideosCustomizationInt( uidKey, uidInt );
+ if ( error == KErrNone && uidInt != 0 )
+ {
+ aUid = TUid::Uid( uidInt );
+ aItemType = TVcxHgMyVideosCategoryItemTypeUid;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::CreateHgListIconL()
+//
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CVcxHgMyVideosCategoryModelHandler::CreateHgListIconL(
+ const TAknsItemID& aSkinId,
+ const TFileName& aFileName,
+ TInt aBitmapId,
+ TInt aMaskId )
+ {
+ IPTVLOGSTRING3_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::CreateHgListIconL() skin major=%d, skin minor=%d", aSkinId.iMajor, aSkinId.iMinor );
+ IPTVLOGSTRING4_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::CreateHgListIconL() bitmap=%d mask=%d file %S", aBitmapId, aMaskId, &aFileName );
+
+ CFbsBitmap* bitmap( NULL );
+ CFbsBitmap* mask( NULL );
+ CGulIcon* icon( NULL );
+
+ // Create default icon for Hg list.
+ AknsUtils::CreateIconLC(
+ AknsUtils::SkinInstance(),
+ aSkinId,
+ bitmap,
+ mask,
+ aFileName,
+ aBitmapId,
+ aMaskId );
+
+ TInt error( KErrNone );
+ error = AknIconUtils::SetSize(
+ bitmap,
+ CHgDoubleGraphicList::PreferredImageSize(),
+ EAspectRatioPreservedAndUnusedSpaceRemoved );
+ User::LeaveIfError( error );
+
+ error = AknIconUtils::SetSize(
+ mask,
+ CHgDoubleGraphicList::PreferredImageSize(),
+ EAspectRatioPreservedAndUnusedSpaceRemoved );
+ User::LeaveIfError( error );
+
+ // Ownership of bitmap and mask is transferred to icon.
+ icon = CGulIcon::NewL( bitmap, mask );
+ CleanupStack::Pop( 2 ); // mask and bitmap
+
+ IPTVLOGSTRING2_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::CreateHgListIconL() icon=0x%08x", icon );
+
+ return icon;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::CreateEmptyHgListIconL()
+//
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CVcxHgMyVideosCategoryModelHandler::CreateEmptyHgListIconL()
+ {
+ IPTVLOGSTRING_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::CreateEmptyHgListIconL()" );
+ CGulIcon* icon( NULL );
+ CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
+
+ bitmap->Create( CHgDoubleGraphicList::PreferredImageSize(), ENone );
+ CleanupStack::PushL( bitmap );
+ icon = CGulIcon::NewL( bitmap );
+ CleanupStack::Pop( bitmap );
+
+ return icon;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::LastWatchedSetL()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgMyVideosCategoryModelHandler::LastWatchedSetL()
+ {
+ TBuf<KMaxPath> path;
+ TInt error = iModel.GetLastWatchedPathL( path );
+ TInt length = path.Length();
+
+ if ( error == KErrNone && length > 0 )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosVideoModelHandler::PreloadedExistsL()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgMyVideosCategoryModelHandler::PreloadedExistsL()
+ {
+ TBuf<KMaxPath> path;
+ TInt error = iModel.GetMyVideosCustomizationString( KCRVideoPlayerPreloadedVideoPath, path );
+ if ( !error && path.Length() && BaflUtils::FileExists( iModel.FileServerSessionL(), path ) )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }