javatools/javaappbackconverter/src.s60/main.cpp
branchRCL_3
changeset 18 9ac0a0a7da70
parent 17 0fd27995241b
child 19 71c436fe3ce0
--- a/javatools/javaappbackconverter/src.s60/main.cpp	Tue May 11 16:07:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,406 +0,0 @@
-/*
-* Copyright (c) 2009 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: Java platform 2.0 javaappbackconverter process
-*
-*/
-
-
-#include <e32std.h>
-#include <e32base.h>
-#include <e32property.h>
-#include <f32file.h>
-#include <centralrepository.h>
-#include <swinstallerinternalpskeys.h>
-#include <AknGlobalMsgQuery.h>
-
-#include "javacommonutils.h"
-#include "javauids.h"
-#include "backconverter.h"
-#include "noarmlogs.h"
-
-_LIT_SECURE_ID(KAppInstUiSecureID, 0x101F875A);
-_LIT_SECURE_ID(KAppSisLauncherSecureID, 0x1020473F);
-
-
-/**
- * Create file server connection.
- * If no data storage file exists, exit.
- * Create active scheduler and start it to execute actual back converter.
- */
-static void ExecuteBackConverterL(RFs &aFs)
-{
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: ExecuteBackConverterL called");
-
-    CActiveScheduler* as = new(ELeave) CActiveScheduler();
-
-    // Install active scheduler
-    CActiveScheduler::Install(as);
-    CleanupStack::PushL(as);
-
-    // The file server session must be shared so that that AppArc can
-    // use the icon file handle opened in back converter
-    TInt err = aFs.ShareProtected();
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaConverters,
-              "javaappbackconverter: ExecuteBackConverterL: "
-              "Cannot share file server session, err code is %d ", err);
-        User::Leave(err);
-    }
-
-    // Setup and start the back conversion
-    CBackConverter* back = CBackConverter::NewLC(aFs);
-
-    LOG(EJavaConverters,
-        EInfo, "javaappbackconverter: ExecuteBackConverterL: Call CBackConverter::Start()");
-
-    back->Start();
-
-    // Start active scheduler
-    LOG(EJavaConverters, EInfo, "ExecuteBackConverterL: Starting CActiveScheduler");
-    CActiveScheduler::Start();
-
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: ExecuteBackConverterL: Cleaning up");
-
-    CleanupStack::PopAndDestroy(back);
-    CleanupStack::PopAndDestroy(as);
-}
-
-/**
- * Menu application has a central repository key that can be used in
- * devices belonging to Nokia 5800 XpressMusic device family to request
- * that the Menu application would rescan all applications it contains.
- */
-static void UseCRKeyToUpdateAppShellDataL()
-{
-    const TUid KCRUidMenu = { 0x101F8847 };
-    const TUint32 KMenuUpdateData = 0x00000001;
-
-    // Update Central Rep
-    CRepository *pCenRep = CRepository::NewL(KCRUidMenu);
-
-    TInt value = 1;
-    TInt err = pCenRep->Set(KMenuUpdateData, value);
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaConverters,
-              "javaappbackconverter: UseCRKeyToUpdateAppShellDataL: "
-              "setting cenrep value failed, error %d ",
-              err);
-    }
-
-    delete pCenRep;
-}
-
-/**
- * After OMJ has been uninstalled the menu application of the device
- * does not display the icons of the old, restored java applications.
- * The icons are shown after the device is booted.
- * Tell menu application to scan again all applications so that the icons
- * will be shown.
- */
-static void AddOldJavaAppIconsToMenuApp()
-{
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: AddOldJavaAppIconsToMenuApp called.");
-
-    TRAPD(err, UseCRKeyToUpdateAppShellDataL());
-    if (KErrNotFound == err)
-    {
-        // Only Nokia XPressMusic 5800 device family supports this feature,
-        // N97 and later devices no longer support it but they have new Menu
-        // application that shows all Java application icons anyway.
-        LOG(EJavaConverters, EInfo,
-            "javaappbackconverter: AddOldJavaAppIconsToMenuApp: This device does not "
-            "support refreshing Menu using CR keys.");
-    }
-    else if (KErrNone != err)
-    {
-        ELOG1(EJavaConverters,
-              "javaappbackconverter: AddOldJavaAppIconsToMenuApp: Error: %d", err);
-    }
-}
-
-/**
- * Kill the running OMJ javaregistry.exe. After killing next call to
- * Registry API restarts the old S60 server process.
- */
-static void KillRegistry()
-{
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: KillRegistry called.");
-
-    TFullName processName;
-    _LIT(KJavaRegistryProcess, "javaregistry*");
-    TFindProcess finder(KJavaRegistryProcess);
-
-    if (finder.Next(processName) != KErrNotFound)
-    {
-        RProcess processToKill;
-        TInt err = processToKill.Open(finder);
-
-        if (KErrNone != err)
-        {
-            WLOG1(EJavaConverters, "javaappbackconverter: Process open: %d", err);
-        }
-        else
-        {
-            processToKill.Kill(KErrNone);
-            processToKill.Close();
-        }
-    }
-    else
-    {
-        WLOG(EJavaConverters, "javaappbackconverter: Registry process not found");
-    }
-}
-
-/**
- * Unregister OMJ MIDlet starter, reregister old S60 MIDlet starter
- */
-static void ReregisterOldMidletStarter()
-{
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: ReregisterOldMidletStarter called");
-
-    _LIT(KStubMIDP2RecogExe, "StubMIDP2RecogExe.exe");
-
-    RApaLsSession appLstSession;
-
-    TInt error = appLstSession.Connect();
-    if (error != KErrNone)
-    {
-        ELOG1(EJavaConverters, "javaappbackconverter: ReregisterOldMidletStarter: "
-              "RApaLsSession.Connect failed with error %d", error);
-        return;
-    }
-    TRAP(error, appLstSession.RegisterNonNativeApplicationTypeL(
-             TUid::Uid(KMidletApplicationTypeUid), KStubMIDP2RecogExe()));
-    if (error == KErrNone)
-    {
-        LOG(EJavaConverters, EInfo, "javaappbackconverter: ReregisterOldMidletStarter: "
-            "Registered MIDlet application type for S60 Java.");
-    }
-    else if (error != KErrAlreadyExists)
-    {
-        ELOG1(EJavaConverters, "javaappbackconverter: ReregisterOldMidletStarter: "
-              "RegisterNonNativeApplicationTypeL failed with error %d", error);
-    }
-    else
-    {
-        // OMJ Java has registered MIDlet application type so that it is handled by
-        // OMJ binary 'javalauncher.exe', must change that registration
-        WLOG(EJavaConverters, "javaappbackconverter: ReregisterOldMidletStarter: "
-             "MIDlet application type was registered (by OMJ Java).");
-        // Ignore possible error in deregistration
-        TRAP(error, appLstSession.DeregisterNonNativeApplicationTypeL(
-                 TUid::Uid(KMidletApplicationTypeUid)));
-        TRAP(error, appLstSession.RegisterNonNativeApplicationTypeL(
-                 TUid::Uid(KMidletApplicationTypeUid), KStubMIDP2RecogExe()));
-        if (KErrNone != error)
-        {
-            ELOG1(EJavaConverters, "javaappbackconverter: ReregisterOldMidletStarter: "
-                  "RegisterNonNativeApplicationTypeL failed with error %d", error);
-        }
-        else
-        {
-            LOG(EJavaConverters, EInfo, "javaappbackconverter: ReregisterOldMidletStarter: "
-                "Registered MIDlet application type again (for S60 Java).");
-        }
-    }
-
-    appLstSession.Close();
-}
-
-
-/**
- * Show dialog telling that the device must be rebooted
- */
-static void showMustRebootDialog()
-{
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: showMustRebootDialog() Called");
-
-    // Wait for 2 seconds before showing dialog
-    User::After(2000000);
-
-    TRAPD(err,
-          TRequestStatus status;
-          CAknGlobalMsgQuery* globalMsg = CAknGlobalMsgQuery::NewLC();
-
-          // In OMJ 2.x beta .sis uninstallation it is enough to
-          // show the text always in english (non-localized)
-          _LIT(KJavaPleaseReboot, "To complete the uninstallation process, \
- the phone must be restarted. Until then some applications may not function properly.");
-
-          // tell that device will be rebooted
-          globalMsg->ShowMsgQueryL(
-              status,
-              KJavaPleaseReboot,
-              R_AVKON_SOFTKEYS_OK_EMPTY__OK,
-              KNullDesC(),
-              KNullDesC(),
-              0,
-              -1,
-              CAknQueryDialog::EWarningTone);
-
-          User::WaitForRequest(status);
-
-          CleanupStack::PopAndDestroy(globalMsg);
-         );
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaConverters,
-              "javaappbackconverter: showMustRebootDialog() TRAP_IGNORE exited with err %d", err);
-    }
-}
-
-
-/**
- * Create cleanup stack and run the javaappbackconverter code inside TRAP
- * harness to log unexpected leaves.
- */
-TInt E32Main()
-{
-    CTrapCleanup* pCleanupStack = CTrapCleanup::New();
-    if (NULL == pCleanupStack)
-    {
-        ELOG(EJavaConverters, "javaappbackconverter: Could not create cleanup stack!");
-        return KErrNoMemory;
-    }
-
-    LOG(EJavaConverters, EInfo, "javaappbackconverter: Starting backconverter");
-
-    // Create file server session
-    RFs fs;
-    TInt err = fs.Connect();
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaConverters,
-              "javaappbackconverter: Cannot open RFs connection. Error %d", err);
-        return err;
-    }
-
-    // Determine whether backconversion should be done or not.
-    // It should be done
-    // - if this process has been started when java_2_0.sis is uninstalled
-    // OR
-    // - if this process has been started when s60_omj_restore_midlets.sis is installed
-
-    // The path name of the loaded executable on which this process is based is
-    // 'javaappbackconverter.exe' if this process has been started from java_2_0.sis and
-    // 'javaapprestorer.exe' if this process has been started from s60_omj_restore_midlets.sis
-    _LIT(KJavaRestorerFileName, "javaapprestorer.exe");
-    TBool fStartedFromOmjSis(ETrue);
-    RProcess thisProcess;
-    TFileName filename = thisProcess.FileName();
-    if (filename.Find(KJavaRestorerFileName) > 0)
-    {
-        LOG(EJavaConverters, EInfo,
-            "javaappbackconverter: Started from s60_omj_restore_midlets.sis");
-        fStartedFromOmjSis = EFalse;
-    }
-    LOG1WSTR(EJavaConverters, EInfo,
-             "javaappbackconverter: Process file name is %s", (wchar_t *)(filename.PtrZ()));
-
-    // Check whether uninstalling or (installing/upgrading)
-    TBool fUninstallingSisPackage(EFalse);
-    TInt value(0);
-    // Ignore errors, if the value cannot be read, assume 'installing .sis'
-    RProperty::Get(KPSUidSWInstallerUiNotification, KSWInstallerUninstallation, value);
-    if (0 == value)
-    {
-        // Native installer is installing (or upgrading) a .sis package
-        LOG(EJavaConverters, EInfo, "javaappbackconverter: native installer is installing .sis");
-    }
-    else
-    {
-        // Native installer is uninstalling a .sis package
-        fUninstallingSisPackage = ETrue;
-        LOG(EJavaConverters, EInfo, "javaappbackconverter: native installer is uninstalling .sis");
-    }
-
-    if (fUninstallingSisPackage && fStartedFromOmjSis)
-    {
-        // backconversion must be done
-        LOG(EJavaConverters, EInfo, "javaappbackconverter: Going to do backconversion.");
-    }
-    else if ((!fUninstallingSisPackage) && (!fStartedFromOmjSis))
-    {
-        // backconversion must be done
-        LOG(EJavaConverters, EInfo, "javaappbackconverter: Going to restore midlets.");
-    }
-    else
-    {
-        LOG(EJavaConverters, EInfo,
-            "javaappbackconverter: Back conversion / restoration is not needed.");
-        fs.Close();
-        return KErrNone;
-    }
-
-    // The only time that this application should be executed
-    // is when native installer starts it
-    if ((User::CreatorSecureId() != KAppInstUiSecureID) &&
-            (User::CreatorSecureId() != KAppSisLauncherSecureID))
-    {
-        ELOG(EJavaConverters,
-             "javaappbackconverter: Mismatch in secure ID, only AppInstUi "
-             "or SisLauncher can launch this exe.");
-        ELOG1(EJavaConverters,
-              "javaappbackconverter: Starter has SID %x ", User::CreatorSecureId().iId);
-        fs.Close();
-        return KErrPermissionDenied;
-    }
-    else
-    {
-        LOG(EJavaConverters, EInfo, "javaappbackconverter: Starter SID was OK.");
-    }
-
-    ReregisterOldMidletStarter();
-
-    TInt ret = KErrNone;
-    TRAP(ret, ExecuteBackConverterL(fs));
-    if (ret != KErrNone)
-    {
-        ELOG1(EJavaConverters, "javaappbackconverter: ExecuteBackConverterL: Main error %d", ret);
-    }
-
-    // Kill OMJ Java Registry process. Next call to Java Registry API starts
-    // old S60 Java Registry server
-    KillRegistry();
-
-    // Start also old SystemAMS.exe to restore old S60 Java environment to functional state
-    RProcess rSystemAms;
-    _LIT(KSystemAmsProcess, "SystemAMS.exe");
-    _LIT(KEmptyCommandLine, "");
-    err = rSystemAms.Create(KSystemAmsProcess, KEmptyCommandLine);
-    if (KErrNone == err)
-    {
-        rSystemAms.Resume();
-    }
-    else
-    {
-        WLOG1(EJavaConverters,
-              "javaappbackconverter: Starting SystemAMS.exe failed, err %d", err);
-    }
-    rSystemAms.Close();
-
-    AddOldJavaAppIconsToMenuApp();
-
-    fs.Close();
-
-    if (fUninstallingSisPackage)
-    {
-        showMustRebootDialog();
-    }
-
-    delete pCleanupStack;
-    return ret;
-}