pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpServiceActivation.cpp
changeset 2 a5fecba4b1e4
parent 0 3ce708148e4d
child 23 c4687ff85147
--- 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);
+        }
+    }