uiacceltk/hitchcock/plugins/alftranseffect/alftfxserverplugin/src/alftransitionservercontroller.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftfxserverplugin/src/alftransitionservercontroller.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2006 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: This is the implementation of the API used by theme server
+* to control transition appearance.
+*
+*/
+
+
+
+#include "alftransitionservercontroller.h"
+#include "alftransitionserver.h"
+#include "alftfxserverdef.h"
+#include "alfpsobserver.h"
+
+#include <e32property.h>
+#include <avkondomainpskeys.h>
+#include <pslninternalcrkeys.h>
+#include <centralrepository.h>
+
+#include <alf/alfclientbase.h>
+#include <alflogger.h>
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CAlfTransitionServerController* CAlfTransitionServerController::NewL(RWsSession& /*aWsSession*/)
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::NewL >>");
+ CAlfTransitionServerController* self = new (ELeave) CAlfTransitionServerController();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ __ALFFXLOGSTRING("CAlfTransitionServerController::NewL <<");
+ return self;
+ }
+
+CAlfTransitionServerController::~CAlfTransitionServerController()
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::~CAlfTransitionServerController >>");
+ delete iTimer;
+ delete iPsObserver;
+
+ if(ServerRunning())
+ {
+ StopTransitionServer();
+ }
+
+ delete iRepository;
+ __ALFFXLOGSTRING("CAlfTransitionServerController::~CAlfTransitionServerController <<");
+ }
+
+CAlfTransitionServerController::CAlfTransitionServerController()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfTransitionServerController::ConstructL()
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::ConstructL >>");
+ iRepository = CRepository::NewL( KCRUidThemes );
+ TInt err = iRepository->Get( KThemesTransitionEffects, iEffectValue );
+ if ( err != 0 )
+ {
+ // Clean the value just to be sure it did not get messed up
+ iEffectValue = 0;
+ }
+ __ALFFXLOGSTRING("CAlfTransitionServerController::ConstructL <<");
+ }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTransitionServerController::StartTransitionServer()
+ {
+ return StartTransitionServer(KDefaultMaxBytesOngoing, KDefaultMaxBytesBetween);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTransitionServerController::StopTransitionServer()
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::StopTransitionServer >>");
+ //Shutting down.
+ //Set property to "server not running"
+ TInt val = 0;
+
+ RProperty::Get(KPSUidAvkonDomain, KAknTfxServerStatus, val);
+ iTransitionControlValue = val & ~ETfxSrvRunning;
+ RProperty::Set(KPSUidAvkonDomain, KAknTfxServerStatus, iTransitionControlValue);
+ __ALFFXLOGSTRING("CAlfTransitionServerController::StopTransitionServer <<");
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TBool CAlfTransitionServerController::ServerRunning()
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::ServerRunning >>");
+ TInt value = 0;
+ RProperty::Get(KPSUidAvkonDomain, KAknTfxServerStatus, value);
+ __ALFFXLOGSTRING1("CAlfTransitionServerController::ServerRunning - return: %d <<", value & ETfxSrvRunning);
+ return (value & ETfxSrvRunning);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTransitionServerController::StartTransitionServer(TInt32 /*aMaxBytesOngoing*/,
+ TInt32 /*aMaxBytesBetween*/)
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::StartTransitionServer >>");
+ if( ServerRunning() )
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::StartTransitionServer - return KErrAlreadyExists <<");
+ return KErrAlreadyExists;
+ }
+
+ TInt val = 0;
+ TInt err = KErrNone;
+
+
+ err = RProperty::Get(KPSUidAvkonDomain, KAknTfxServerStatus, val );
+ if ( err != KErrNone )
+ {
+ err = RProperty::Define(KPSUidAvkonDomain, KAknTfxServerStatus, RProperty::EInt, TSecurityPolicy(TSecurityPolicy::EAlwaysPass),TSecurityPolicy(TSecurityPolicy::EAlwaysPass));
+ // make sure the value is cleared if this is the first time the property is defined
+ val = 0;
+ }
+
+ if ( err == KErrAlreadyExists )
+ {
+ // if our publish/subscribe variable already exists, all is well
+ err = KErrNone;
+ }
+
+ if( err != KErrNone )
+ {
+ __ALFFXLOGSTRING1("CAlfTransitionServerController::StartTransitionServer - return: %d <<", err);
+ return err;
+ }
+
+ //Set property to "server running"
+ iTransitionControlValue = val | ETfxSrvRunning;
+ // if the plugin has already been loaded, don't mess up with the value
+ RProperty::Set( KPSUidAvkonDomain, KAknTfxServerStatus, val | ETfxSrvRunning );
+
+ if ( !iPsObserver )
+ {
+ iPsObserver = CAlfPsObserver::New( this, KPSUidAvkonDomain, KAknTfxServerStatus );
+ if( !iPsObserver )
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::StartTransitionServer - return KErrNoMemory<<");
+ return KErrNoMemory;
+ }
+ }
+
+ if ( !iIsConnected )
+ {
+ err = iTfxServer.Open();
+ }
+
+ if ( err == KErrNone )
+ {
+ iIsConnected = ETrue;
+ // We don't need the server, we only want to know if it is running.
+ iTfxServer.Close();
+ }
+ else
+ {
+ err = KErrNone;
+ // start timer
+ if ( !iTimer )
+ {
+ iTimer = CPeriodic::New( CActive::EPriorityStandard );
+ if ( iTimer )
+ {
+ iTimer->Start( 1000000, 1000000,
+ TCallBack(CAlfTransitionServerController::ConnectionCallback, this ) );
+ }
+ }
+ }
+ __ALFFXLOGSTRING1("CAlfTransitionServerController::StartTransitionServer - return: %d <<", err);
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTransitionServerController::ConnectionCallback( TAny* aParameter )
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::ConnectionCallback");
+ CAlfTransitionServerController* me = ((CAlfTransitionServerController*)(aParameter));
+ return me->ConnectionAttempt();
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTransitionServerController::ConnectionAttempt()
+ {
+ __ALFFXLOGSTRING("CAlfTransitionServerController::ConnectionAttempt >>");
+ TInt err = iTfxServer.Open();
+ if ( err == KErrNone )
+ {
+ iIsConnected = ETrue;
+ __ALFFXLOGSTRING("CAlfTransitionServerController::ConnectionAttempt - Connected");
+ // We don't need the server, we only want to know if it is running.
+ iTfxServer.Close();
+ delete iTimer;
+ iTimer = NULL;
+ err = iRepository->Get( KThemesTransitionEffects, iEffectValue );
+ if ( err != 0 )
+ {
+ // Clean the value just to be sure it did not get messed up
+ iEffectValue = 0;
+ }
+ iRepository->Set( KThemesTransitionEffects, KMaxTInt );
+ iRepository->Set( KThemesTransitionEffects, iEffectValue );
+ }
+ __ALFFXLOGSTRING1("CAlfTransitionServerController::ConnectionAttempt - state: %d, but returning KErrNone <<", err);
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfTransitionServerController::PsValueUpdated( const TUid /*aCategory*/, const TUint /*aKey*/, const TInt /*aVal*/ )
+ {
+ // This may not be needed as we poll the starting of alf.
+ }
+
+
+
+
+