--- a/pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpServiceActivation.cpp Thu Jan 07 12:39:15 2010 +0200
+++ b/pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpServiceActivation.cpp Mon Jan 18 20:09:30 2010 +0200
@@ -27,21 +27,22 @@
#include <StringLoader.h>
#include <PnpProvisioning.rsg>
#include <AknGlobalNote.h>
+#include <centralrepository.h>
+
+#include <e32svr.h>
+#include <centralrepository.h>
+#include "PnpLogger.h"
-const TUint32 KEmailApplicationUID[] = {0x100058C5};
-
+const TUid KCRUidPnPProvisioning = {0x10204338};
// Browser UID
const TUid KWAPBrowserUID = { 0x10008d39 };
-
+const TInt KMaxLength = 255;
// POP3 and IMAP4 provisioning settings application ID
-_LIT(KEmailProvAppPOP3ID, "110");
-_LIT(KEmailProvAppIMAP4ID, "143");
// Literal constants
-_LIT( KMessagingAppName, "z:\\sys\\bin\\mce.exe" );
-_LIT( KEmptyDoc, "");
-
+
+const TUint32 KServiceAct1 = 0x00000100;
// INCLUDE FILES
@@ -111,18 +112,19 @@
{
- CApaCommandLine* cmd = CApaCommandLine::NewLC();
- cmd->SetExecutableNameL( KMessagingAppName );
- cmd->SetDocumentNameL( KEmptyDoc );
- cmd->SetCommandL( EApaCommandOpen );
RApaLsSession appArcSession;
User::LeaveIfError( appArcSession.Connect() );
- appArcSession.StartApp( *cmd );
- appArcSession.Close();
- CleanupStack::PopAndDestroy( cmd );
+ CleanupClosePushL( appArcSession );
+ TApaAppInfo appInfo;
+ User::LeaveIfError(appArcSession.GetAppInfo( appInfo, TUid::Uid( iLaunchUid) ) );
+ CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+ cmdLine->SetCommandL( EApaCommandRun );
+ cmdLine->SetExecutableNameL( appInfo.iFullName );
+ User::LeaveIfError( appArcSession.StartApp( *cmdLine ) );
+ CleanupStack::PopAndDestroy( 2 ); // cmdLine, appArcSession
}
}
@@ -137,23 +139,35 @@
// Get application ID and Provisioning settings application
// ID and validate the application launcher
- TBool flag (EFalse);
+
RPointerArray<HBufC> appID;
+ TBuf<16> pLaunchUid;
+ TBool returnFlag (EFalse);
+ TBool FoundUid(EFalse);
+ TBool FoundAppid(EFalse);
CPnpProvUtil *provutil = CPnpProvUtil::NewLC();
- TUint32 val = provutil->GetApplicationUidL();
- if(val == KEmailApplicationUID[0])
- {
+ iLaunchUid = provutil->GetApplicationUidL();
+
provutil->GetProvAdapterAppIdsL(appID);
+ pLaunchUid.Num(iLaunchUid);
+ FoundUid = isPresent(pLaunchUid);
+ TUint32 secondPosition = iPosition+200;
+ if(FoundUid)
+ {
for(TInt i=0; i<appID.Count(); i++)
{
TPtrC ptr(*appID[i]);
- if(ptr.Compare(KEmailProvAppPOP3ID) ==0||
- ptr.Compare(KEmailProvAppIMAP4ID) ==0 )
- flag = ETrue;
-
+ FoundAppid = isFound(ptr,secondPosition);
+ if(FoundAppid)
+ {
+ if(iPosition == KServiceAct1){
+ DisplayAppSpecNoteL();
+ }
+ returnFlag = ETrue;
+ }
}
}
@@ -162,7 +176,7 @@
appID.ResetAndDestroy();
appID.Close();
- return flag;
+ return returnFlag;
}
@@ -205,5 +219,95 @@
CleanupStack::PopAndDestroy( 2 );
}
+TBool CPnpServiceActivation::isPresent(TDesC& p)
+{
+ TBool flag(EFalse);
+ TUint32 position = KServiceAct1;
+ for(TInt i=0;i<=299;i++)
+ {
+ TBool val = isFound(p,position);
+ if(val)
+ {
+ iPosition = position;
+ flag = ETrue;
+ break;
+ }
+ position++;
+ }
+ return flag;
+ }
+TBool CPnpServiceActivation::isFound(TDesC& p,TUint32 position)
+{
+ TBool val(EFalse);
+ TBuf16<KMaxLength> keys;
+ HBufC* heapBuf = HBufC::NewLC(20);
+ TPtr ptr(heapBuf->Des());
+ ptr = keys;
+ RPointerArray<HBufC> array;
+ TRAPD( errVal,GetCenrepValueL(KCRUidPnPProvisioning,position,keys));
// End of File
+ if(errVal != KErrNone)
+ {
+ CleanupStack::PopAndDestroy();
+ return val;
+ }
+ ParseValues(array, keys);
+ val = Search(array,p);
+ CleanupStack::PopAndDestroy(heapBuf);
+ array.ResetAndDestroy();
+ array.Close();
+ return val;
+}
+TBool CPnpServiceActivation::Search(RPointerArray<HBufC>& array,TDesC& p)
+{
+ TBool flag(EFalse);
+ for(TInt j=0; j<array.Count(); j++)
+ {
+ TPtrC ptr(*array[j]);
+ if(!ptr.Compare(p))
+ {
+ flag = ETrue;
+ }
+ }
+ return flag;
+}
+void CPnpServiceActivation::ParseValues(RPointerArray<HBufC>& array, TDesC& aValue)
+{
+ TLex aLex(aValue);
+ while(aLex.Peek() != '\x00')
+ {
+ aLex.Mark();
+ while(aLex.Peek()!=',' && aLex.Peek()!='\x00')
+ aLex.Inc();
+ TPtrC aPtr = aLex.MarkedToken();
+ HBufC *buf18 = aPtr.AllocL();
+ array.Append(buf18);
+ if(aLex.Peek()=='\x00') // end of string
+ break;
+ aLex.Inc();
+ }
+}
+void CPnpServiceActivation::GetCenrepValueL(const TUid aRepositoryUid,TUint32 aKey, TDes16& aValue)
+ {
+ CRepository * rep = NULL;
+ TInt errorStatus = KErrNone;
+ TRAPD( errVal, rep = CRepository::NewL(aRepositoryUid));
+ if(errVal == KErrNone)
+ {
+ errorStatus = rep->Get( aKey , aValue );
+ }
+ else
+ {
+ errorStatus = errVal;
+ }
+
+ if(rep)
+ {
+ delete rep;
+ }
+ if(errorStatus != KErrNone )
+ {
+ User::Leave(errorStatus);
+ }
+ }