--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppMonitor.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,311 @@
+/*
+* Copyright (c) 2005-2007 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: Phonebook 2 server application start-up monitor.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbk2ServerAppMonitor.h"
+
+// Phonebook2
+#include "mpbk2serverappstartupobserver.h"
+#include "CPbk2ServerAppAppUi.h"
+#include <CPbk2StoreProperty.h>
+#include <CPbk2StorePropertyArray.h>
+#include <MPbk2StoreObservationRegister.h>
+#include <CPbk2AppUiBase.h>
+#include <MPbk2StartupObserver.h>
+#include <MPbk2ApplicationServices.h>
+#include <Pbk2CommonUi.rsg>
+#include <Pbk2UIControls.rsg>
+
+// Virtual Phonebook
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
+#include <MVPbkContactStoreList.h>
+
+// System includes
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+const TInt KGranularity( 4 );
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::CPbk2ServerAppMonitor
+// --------------------------------------------------------------------------
+//
+CPbk2ServerAppMonitor::CPbk2ServerAppMonitor
+ ( const MVPbkContactStoreList& aStoreList,
+ MPbk2ServerAppStartupObserver& aObserver ) :
+ iContactStoreList( &aStoreList ),
+ iServerAppObserver( aObserver )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::~CPbk2ServerAppMonitor
+// --------------------------------------------------------------------------
+//
+CPbk2ServerAppMonitor::~CPbk2ServerAppMonitor()
+ {
+ delete iUnavailableStoreNames;
+ iObservers.Close();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2ServerAppMonitor* CPbk2ServerAppMonitor::NewL(
+ const MVPbkContactStoreList& aStoreList,
+ MPbk2ServerAppStartupObserver& aObserver )
+ {
+ CPbk2ServerAppMonitor* self =
+ new ( ELeave ) CPbk2ServerAppMonitor( aStoreList, aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::ConstructL()
+ {
+ iEikEnv = CEikonEnv::Static();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::StartupBeginsL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::StartupBeginsL()
+ {
+ Phonebook2::Pbk2AppUi()->ApplicationServices().
+ StoreObservationRegister().RegisterStoreEventsL( *this );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::HandleStartupComplete
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::HandleStartupComplete()
+ {
+ // Do nothing
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::HandleStartupFailed
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::HandleStartupFailed( TInt aError )
+ {
+ HandleError( aError );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::RegisterEventsL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::RegisterEventsL
+ ( MPbk2StartupObserver& aObserver )
+ {
+ if ( iObservers.Find( &aObserver ) == KErrNotFound )
+ {
+ iObservers.AppendL( &aObserver );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::DeregisterEvents
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::DeregisterEvents
+ ( MPbk2StartupObserver& aObserver )
+ {
+ TInt pos = iObservers.Find( &aObserver );
+ if ( pos != KErrNotFound )
+ {
+ iObservers.Remove( pos );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::NotifyViewActivationL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::NotifyViewActivationL( TUid /*aViewId*/ )
+ {
+ // UI services are based on dialogs not application views
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::NotifyViewActivationL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::NotifyViewActivationL(
+ TUid /*aViewId*/, MVPbkContactViewBase& /*aContactView*/ )
+ {
+ // UI services are based on dialogs not application views
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::StoreReady
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::StoreReady( MVPbkContactStore& aContactStore )
+ {
+ HandleStoreNotification( aContactStore );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::StoreUnavailable
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::StoreUnavailable
+ ( MVPbkContactStore& aContactStore, TInt /*aReason*/ )
+ {
+ CPbk2ServerAppAppUi& appUi = static_cast<CPbk2ServerAppAppUi&>
+ ( *iEikEnv->EikAppUi() );
+
+ // Get the property of the failed store
+ const CPbk2StoreProperty* prop = appUi.ApplicationServices().
+ StoreProperties().FindProperty
+ ( aContactStore.StoreProperties().Uri() );
+
+ if ( prop && prop->StoreName().Length() > 0 )
+ {
+ TRAPD(res, AddUnavailableStoreNameL( prop->StoreName() ) );
+ HandleError( res );
+ }
+ else
+ {
+ TRAPD(res, AddUnavailableStoreNameL(
+ aContactStore.StoreProperties().Uri().UriDes() ) );
+ HandleError( res );
+ }
+
+ HandleStoreNotification( aContactStore );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::HandleStoreEventL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::HandleStoreEventL
+ ( MVPbkContactStore& /*aContactStore*/,
+ TVPbkContactStoreEvent /*aStoreEvent*/ )
+ {
+ // Do nothing
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::AddUnavailableStoreNameL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::AddUnavailableStoreNameL( const TDesC& aName )
+ {
+ if (!iUnavailableStoreNames)
+ {
+ iUnavailableStoreNames = new(ELeave) CDesCArrayFlat( KGranularity );
+ }
+
+ TInt dummy = 0;
+ if ( iUnavailableStoreNames->Find( aName, dummy ) != 0 )
+ {
+ iUnavailableStoreNames->AppendL( aName );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::ShowUnavailableStoresL
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::ShowUnavailableStoresL()
+ {
+ if ( iUnavailableStoreNames )
+ {
+ const TInt count = iUnavailableStoreNames->MdcaCount();
+ for ( TInt i = 0; i < count ;++i )
+ {
+ // Get the store name
+ HBufC* text = StringLoader::LoadLC(
+ R_QTN_PHOB_STORE_NOT_AVAILABLE,
+ iUnavailableStoreNames->MdcaPoint( i ) );
+ CAknInformationNote* note =
+ new ( ELeave ) CAknInformationNote( ETrue );
+ // Show "not available" note
+ note->ExecuteLD( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::HandleStoreNotification
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::HandleStoreNotification
+ ( MVPbkContactStore& /*aContactStore*/ )
+ {
+ ++iHandledStores;
+ if ( iContactStoreList->Count() == iHandledStores )
+ {
+ Phonebook2::Pbk2AppUi()->ApplicationServices().
+ StoreObservationRegister().DeregisterStoreEvents( *this );
+ // Show unavailable stores if exists
+ TRAP_IGNORE( ShowUnavailableStoresL() );
+ SendMessageToObservers();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::SendMessageToObservers
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::SendMessageToObservers()
+ {
+ TInt err( KErrNone );
+ const TInt count = iObservers.Count();
+ {
+ for ( TInt i = 0; i < count && err == KErrNone; ++i )
+ {
+ TRAP( err, iObservers[i]->ContactUiReadyL( *this ) );
+ HandleError( err );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ServerAppMonitor::HandleError
+// --------------------------------------------------------------------------
+//
+void CPbk2ServerAppMonitor::HandleError( TInt aResult )
+ {
+ if ( aResult != KErrNone )
+ {
+ iServerAppObserver.StartupCanceled( aResult );
+ }
+ }
+
+// End of File