securitydialogs/Autolock/src/main.cpp
changeset 63 989397f9511c
parent 26 aad866c37519
--- a/securitydialogs/Autolock/src/main.cpp	Thu Oct 07 14:07:34 2010 +0300
+++ b/securitydialogs/Autolock/src/main.cpp	Thu Oct 14 13:56:11 2010 +0300
@@ -24,25 +24,62 @@
 
 #include <QApplication>
 #include "Autolock.h"
+#include "../PubSub/securityuisprivatepskeys.h"
 
 #include <hbapplication.h>
 #include <hbmainwindow.h>
+#include <apgwgnam.h>
+#include <eikenv.h>
 
 int main(int argc, char **argv)
 {
     // qInstallMsgHandler(XQSERVICEMESSAGEHANDLER);
     // XQSERVICE_DEBUG_PRINT(" ================== xxxx Autolock::main");
     qDebug() << "================== xxxx QApplication Autolock::main";
+    
+    
+    // Need to check whether process is already running. This happens if it's started from Stater, and 
+    // before fully initialized, it's started by API through QtHighway
+    TSecurityPolicy readPolicy(ECapabilityReadDeviceData);
+    TSecurityPolicy writePolicy(ECapabilityWriteDeviceData);
+    int ret = RProperty::Define(KPSUidSecurityUIs,
+            KSecurityUIsLockInitiatorUID, RProperty::EInt, TSecurityPolicy(TSecurityPolicy::EAlwaysPass),
+            writePolicy);
+		qDebug() << "KSecurityUIsLockInitiatorUID ret=" << ret;
+    int myInitiatorUID = 0;
+    int err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsLockInitiatorUID, myInitiatorUID);
+		qDebug() << "KSecurityUIsLockInitiatorUID err=" << err;
+		qDebug() << "KSecurityUIsLockInitiatorUID myInitiatorUID=" << myInitiatorUID;
+		err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsLockInitiatorUID, 0);
+
+    // it takes about 3 seconds to start it, on device
     QApplication a( argc, argv );
+    // hide server from TaskSwitcher
+    CEikonEnv * env = CEikonEnv::Static();
+    if(env) {
+        env->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNeverAtFront);
+
+        CApaWindowGroupName *wgName = CApaWindowGroupName::NewLC(env->WsSession());    
+        wgName->SetHidden(ETrue); // hides us from FSW and protects us from OOM FW etc.
+        wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down    
+        // wgName->SetCaptionL(KRunningAppServerName);
+        wgName->SetWindowGroupName(env->RootWin());
+        CleanupStack::PopAndDestroy(wgName);
+    }
+
     Autolock *cl = new Autolock();
-    // qDebug() << " ================== xxxx cl->show";
+    // qDebug() << " Autolock::main cl->show";
     // cl->show();
-    // qDebug() << " ================== xxxx cl->hide";
+    // qDebug() << " Autolock::main cl->hide";
     cl->hide();
-    // qDebug() << " ================== xxxx cl->lower";
+    // qDebug() << " Autolock::main cl->lower";
     cl->lower();
+    qDebug() << " Autolock::main cl->lower";
+    err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsLockInitiatorUID, 1);
     int rv = a.exec();
+    qDebug() << " Autolock::main cl->exec";
     delete cl;
+    qDebug() << " Autolock::main cl->delete";
     return rv;
 }