locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsengineprivate.cpp
changeset 25 73f6c2762ffe
child 32 b12ea03c50a3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsengineprivate.cpp	Thu May 27 13:18:17 2010 +0300
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 2010 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:  Implementation of psy settings engine private class. 
+ *
+ */
+
+
+#include "pospsysettingsengineprivate.h"
+#include "pospsysettingsengine.h"
+
+#include <qglobal.h>
+#include <epos_cposmodules.h>
+#include <epos_cposmoduleidlist.h>
+#include <epos_cposmoduleupdate.h>
+
+// constants
+const TInt KNameLength = 50;
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::PosPsySettingsEnginePrivate()
+// Constructor
+//---------------------------------------------------------------------
+PosPsySettingsEnginePrivate::PosPsySettingsEnginePrivate(
+        PositionTechnologyChangeObserver& posTechChangeObserver) :
+    mPosTechChangeObserver(posTechChangeObserver)
+    {
+    
+    // initialize the CPosModules pointer
+    QT_TRAP_THROWING ( mPosModules = CPosModules::OpenL();
+            // Register for settings change.
+            mPosModules->SetObserverL( *this ));
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::~PosPsySettingsEnginePrivate()
+// Destructor
+//---------------------------------------------------------------------
+PosPsySettingsEnginePrivate::~PosPsySettingsEnginePrivate()
+    {
+    // delete mPosModules
+    if (mPosModules)
+        {
+        // remove the observer
+    		mPosModules->RemoveObserver();
+        delete mPosModules;
+        mPosModules = NULL;
+        }
+    // delete the psyname 
+    TInt cnt = mNameList.count();
+    for(TInt i=0;i<cnt;++i)
+        {
+        delete mNameList[i];
+        mNameList[i] = NULL;
+        }
+    mNameList.clear();
+    
+    // delete the list of psy info
+    mPsyInfoList.Reset();
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::listPsys( QList<PosPsyInfo>& psyList )
+// 
+//---------------------------------------------------------------------
+int PosPsySettingsEnginePrivate::listPsys(QList<PosPsyInfo>& psyList)
+    {
+    // Get the list of available psy
+    TRAPD( error, listPsysL() );
+
+    if (error == KErrNone)
+        {        
+        // copy the psy from RArray to the Qlist
+        TInt cnt = mPsyInfoList.Count();
+        for (TInt i = 0; i < cnt; ++i)
+            {
+            psyList.append(mPsyInfoList[i]);
+            }
+        return KErrNone;        
+        }
+    else
+        {
+        return error;
+        }
+
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::changePsyState( TUid psyModuleId, PosPsyState psyState )
+// 
+//---------------------------------------------------------------------
+int PosPsySettingsEnginePrivate::changePsyState(TUid psyModuleId,
+        PosPsyState psyState)
+    {
+    // update the psy state
+    TRAPD( error, changePsyStateL( psyModuleId, psyState ) );
+    return error;
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::listPsysL( )
+// 
+//---------------------------------------------------------------------
+void PosPsySettingsEnginePrivate::listPsysL()
+    {
+    // reset the list of psyinfo
+    mPsyInfoList.Reset();
+
+    // get the list of psy module ids
+    CPosModuleIdList* idList = mPosModules->ModuleIdListLC();
+    // for each psy in the list,do the following :
+    // - get module info
+    // - check visibility of psy,if true then do the following :
+    //     -> store the uid,name, state of psy in the PosPsyInfo structure
+    //     -> append to the list of psys.
+    TInt cnt = idList->Count();
+    for (TInt i = 0; i < cnt; ++i)
+        {
+        TPositionModuleInfo moduleInfo;
+        mPosModules->GetModuleInfoL((*idList)[i], moduleInfo);
+
+        // check visibility
+        if (mPosModules->IsModuleVisibleL((*idList)[i]))
+            {
+
+            PosPsyInfo psyInfo;
+            // Set the module Id.
+            psyInfo.mPsyModuelId = moduleInfo.ModuleId();
+
+            // Set module name
+            TBuf<KNameLength> moduleName;
+            moduleInfo.GetModuleName(moduleName);
+            // converting Tbuf to qstring
+            QString* name = new QString((QChar*) moduleName.Ptr(),
+                    moduleName.Length());
+            mNameList.append( name );
+            psyInfo.mPsyName = *name;
+
+            // Set the state of the psy
+            if (moduleInfo.IsAvailable())
+                {
+                psyInfo.mPsyState = PsyEnable;
+                }
+            else
+                {
+                psyInfo.mPsyState = PsyDisable;
+                }
+
+            // append the psyinfo to the list
+            mPsyInfoList.AppendL(psyInfo);
+            }
+        }
+
+    CleanupStack::PopAndDestroy(idList);
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::changePsyStateL( TUid psyModuleId, PosPsyState psyState )
+// 
+//---------------------------------------------------------------------
+void PosPsySettingsEnginePrivate::changePsyStateL(TUid psyModuleId,
+        PosPsyState psyState)
+    {
+    // create an instance of CPosModuleUpdate to help in updating the attributes
+    //  of Psy
+    CPosModuleUpdate* updateParams = CPosModuleUpdate::NewLC();
+    // Depending on the changed state update the availability of the psy
+    // i.e enable/disable
+    if (psyState == PsyEnable)
+        {
+        updateParams->SetUpdateAvailability(ETrue);
+        }
+    else
+        {
+        updateParams->SetUpdateAvailability(EFalse);
+        }
+    // update the state of the psy whose id is mentioned
+    mPosModules->UpdateModuleL(psyModuleId, *updateParams);
+
+    CleanupStack::PopAndDestroy(updateParams);
+
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::changePsyStateL( TUid psyModuleId, PosPsyState psyState )
+// 
+//---------------------------------------------------------------------
+void PosPsySettingsEnginePrivate::HandleSettingsChangeL(
+        TPosModulesEvent aEvent)
+    {
+    // Check the event type,only for installation,removal,
+    // change in  visibility,
+    // get the newly available list of psy
+    if (aEvent.iType == EPosModulesEventModuleInstalled || 
+        aEvent.iType == EPosModulesEventModuleRemoved || 
+        aEvent.iType == EPosModulesEventVisibilityChanged)
+        {
+        listPsysL();
+        // call the engine's handlePositionTechnologyChange
+        mPosTechChangeObserver.handlePositionTechnologyChange();
+        }
+    }
+