homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsuninstallitemstate.cpp
changeset 69 87476091b3f5
parent 63 52b0f64eeb51
child 71 1db7cc813a4e
--- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsuninstallitemstate.cpp	Wed Jul 14 15:53:30 2010 +0300
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsuninstallitemstate.cpp	Fri Jul 23 13:47:57 2010 +0300
@@ -24,7 +24,7 @@
 #include <HbListView>
 #include <HbParameterLengthLimiter>
 
-
+#include <QScopedPointer>
 #include <QStandardItemModel>
 #include <QStandardItem>
 #include <casoftwareregistry.h>
@@ -34,7 +34,7 @@
 #include "hsuninstallitemstate.h"
 #include "hsmenuevent.h"
 #include "hsmenudialogfactory.h"
-
+#include "hsmenuentryremovedhandler.h"
 /*!
  \class HsUninstallItemState
  \ingroup group_hsworkerstateplugin
@@ -49,7 +49,6 @@
 HsUninstallItemState::HsUninstallItemState(QState *parent) :
     QState(parent),
     mItemId(0),
-    mNotifier(NULL),
     mUninstallMessage(NULL),
     mUninstallJavaMessage(NULL),
     mConfirmAction(NULL)
@@ -75,6 +74,7 @@
         setObjectName(this->parent()->objectName() + objectName());
     }
     connect(this, SIGNAL(exited()), SLOT(cleanUp()));
+    
 }
 
 /*!
@@ -99,9 +99,7 @@
         // other
         createUninstallMessage();
     }
-    
-    subscribeForMemoryCardRemove();
-
+        
     HSMENUTEST_FUNC_EXIT("HsUninstallItemState::onEntry");
 }
 
@@ -116,6 +114,8 @@
         HsMenuService::executeAction(mItemId, removeActionIdentifier());
     }
     mConfirmAction = NULL;
+    mUninstallMessage = NULL;
+	mUninstallJavaMessage = NULL;
     emit exit();
 }
 
@@ -165,19 +165,6 @@
     return retval;
 }
 
-/*!
- Subscribe for memory card remove.
- */
-void HsUninstallItemState::subscribeForMemoryCardRemove()
-{
-    CaNotifierFilter filter;
-    filter.setIds(QList<int>() << mItemId);
-    mNotifier = CaService::instance()->createNotifier(filter);
-    mNotifier->setParent(this);
-    connect(mNotifier,
-        SIGNAL(entryChanged(CaEntry,ChangeType)),
-        SIGNAL(exit()));
-}
 
 /*!
  Slot launched after state has exited and in destructor.
@@ -186,21 +173,16 @@
 void HsUninstallItemState::cleanUp()
 {
     // Close messagebox if App key was pressed
-    if (mUninstallMessage) {
-        disconnect(mUninstallMessage, SIGNAL(finished(HbAction*)),
-            this, SLOT(uninstallMessageFinished(HbAction*)));
+    if (mUninstallMessage != NULL) {
         mUninstallMessage->close();
         mUninstallMessage = NULL;
     }
     
-    if (mUninstallJavaMessage) {
-        disconnect(mUninstallJavaMessage, SIGNAL(finished(HbAction*)), this, SLOT(uninstallMessageFinished(HbAction*)));
+    if (mUninstallJavaMessage != NULL) {
         mUninstallJavaMessage->close();
         mUninstallJavaMessage = NULL;
     }
 
-    delete mNotifier;
-    mNotifier = NULL;
     mConfirmAction = NULL;
     mItemId = 0;
 }
@@ -230,6 +212,39 @@
     // create and show message box
     mUninstallMessage = HsMenuDialogFactory().create(message);
     mConfirmAction = mUninstallMessage->actions().value(0);
+    
+    QScopedPointer<HsMenuEntryRemovedHandler> entryObserver(
+        new HsMenuEntryRemovedHandler(mItemId, this, SIGNAL(exit())));
+    entryObserver.take()->setParent(mUninstallMessage);
+    
+    mUninstallMessage->open(this, SLOT(uninstallMessageFinished(HbAction*)));
+}
+
+/*!
+ Method create uninstall confirmation message.
+ Used for java applications without deletion confirmation
+ and with midlet name equal to app name
+ \retval void
+ */
+void HsUninstallItemState::createSimpleUninstallJavaMessage()
+{
+    QString message;
+    message.append(
+        HbParameterLengthLimiter("txt_applib_info_remove_1_all_its_shortcuts_and").arg(
+            HsMenuService::getName(mItemId)));
+
+    // create and show message box
+    mUninstallMessage = HsMenuDialogFactory().create(message);
+    
+    QSharedPointer<CaEntry> entry = CaService::instance()->getEntry(mItemId);
+    HbIcon icon = entry->makeIcon();
+    mUninstallMessage->setIcon(icon);
+    mConfirmAction = mUninstallMessage->actions().value(0);
+
+    QScopedPointer<HsMenuEntryRemovedHandler> entryObserver(
+        new HsMenuEntryRemovedHandler(mItemId, this, SIGNAL(exit())));
+    entryObserver.take()->setParent(mUninstallMessage);
+
     mUninstallMessage->open(this, SLOT(uninstallMessageFinished(HbAction*)));
 }
 
@@ -253,74 +268,80 @@
     getApplicationsNames(componentName, applicationsNames, detailsMessage);
     
     QString section;
-    if (applicationsNames.isEmpty() && detailsMessage.isEmpty()) {
-        mDialogType = UninstallDialogDefinition01;
-        section = QString("uninstallDialogDefinition01");
-        loader.load(
+    if (applicationsNames.isEmpty() && detailsMessage.isEmpty()) {        
+        createSimpleUninstallJavaMessage();        
+    }
+    else {
+        if ( (!applicationsNames.isEmpty()) && (!detailsMessage.isEmpty())) {
+            mDialogType = UninstallDialogDefinition02;
+            section = QString("uninstallDialogDefinition02");
+            loader.load(
                 HS_UNINSTALL_DIALOG_LAYOUT, section, &loadStatusOk);
-    } else if ( (!applicationsNames.isEmpty()) && (!detailsMessage.isEmpty())) {
-        mDialogType = UninstallDialogDefinition02;
-        section = QString("uninstallDialogDefinition02");
-        loader.load(
-                HS_UNINSTALL_DIALOG_LAYOUT, section, &loadStatusOk);
-    } else if ( (!applicationsNames.isEmpty() && detailsMessage.isEmpty())) {
-        mDialogType = UninstallDialogDefinition03;
-        section = QString("uninstallDialogDefinition03");
-        loader.load(
+        }
+        else if ( (!applicationsNames.isEmpty() && detailsMessage.isEmpty())) {
+            mDialogType = UninstallDialogDefinition03;
+            section = QString("uninstallDialogDefinition03");
+            loader.load(
                 HS_UNINSTALL_DIALOG_LAYOUT, section, &loadStatusOk);
-    } else if (applicationsNames.isEmpty()  && (!detailsMessage.isEmpty())) {
-        mDialogType = UninstallDialogDefinition04;
-        section = QString("uninstallDialogDefinition04");
-        loader.load(
+        }
+        else if (applicationsNames.isEmpty() && (!detailsMessage.isEmpty())) {
+            mDialogType = UninstallDialogDefinition04;
+            section = QString("uninstallDialogDefinition04");
+            loader.load(
                 HS_UNINSTALL_DIALOG_LAYOUT, section, &loadStatusOk);
-    }
- 
-    mUninstallJavaMessage = 
-        qobject_cast<HbDialog*>(
+        }
+
+        mUninstallJavaMessage = qobject_cast<HbDialog*>(
             loader.findWidget(HS_UNINSTALL_DIALOG_NAME));
-    if (mUninstallJavaMessage != NULL) {
-        mUninstallJavaMessage->setAttribute(Qt::WA_DeleteOnClose);
-        mUninstallJavaMessage->setTimeout(HbPopup::NoTimeout);
-        mUninstallJavaMessage->actions()[0]->setParent(mUninstallJavaMessage);
-        mUninstallJavaMessage->actions()[1]->setParent(mUninstallJavaMessage);
-    
-        HbLabel* iconLabel =
+
+        if (mUninstallJavaMessage) {
+            mUninstallJavaMessage->setAttribute(Qt::WA_DeleteOnClose);
+            mUninstallJavaMessage->setTimeout(HbPopup::NoTimeout);
+            mUninstallJavaMessage->actions()[0]->setParent(mUninstallJavaMessage);
+            mUninstallJavaMessage->actions()[1]->setParent(mUninstallJavaMessage);
+
+            HbLabel* iconLabel =
             qobject_cast<HbLabel*>(
                 loader.findWidget(HS_UNINSTALL_DIALOG_CONFIRMATION_DIALOG_ICON));
-        QSharedPointer<CaEntry> entry2 = CaService::instance()->getEntry(mItemId);
-        HbIcon icon = entry2->makeIcon();
-        iconLabel->setIcon(icon);
-    
-        HbLabel* textLabel =
+            QSharedPointer<CaEntry> entry2 = CaService::instance()->getEntry(mItemId);
+            HbIcon icon = entry2->makeIcon();
+            iconLabel->setIcon(icon);
+
+            HbLabel* textLabel =
             qobject_cast<HbLabel*>(
                 loader.findWidget(HS_UNINSTALL_DIALOG_CONFIRMATION_DIALOG_LABEL));
-        textLabel->setPlainText(textLabel->plainText().arg(componentName));
-    
-        HbLabel* detailsUninstalLabel;
-        if ((mDialogType == UninstallDialogDefinition02) ||
-            (mDialogType == UninstallDialogDefinition04)) {
-            detailsUninstalLabel= qobject_cast<HbLabel*>(
+            textLabel->setPlainText(textLabel->plainText().arg(componentName));
+
+            HbLabel* detailsUninstalLabel;
+            if ((mDialogType == UninstallDialogDefinition02) ||
+                (mDialogType == UninstallDialogDefinition04)) {
+                detailsUninstalLabel= qobject_cast<HbLabel*>(
                     loader.findWidget(HS_UNINSTALL_DIALOG_DELETE_LABEL));
-            detailsUninstalLabel->setPlainText(detailsMessage);
-        }
+                detailsUninstalLabel->setPlainText(detailsMessage);
+            }
 
-        HbLabel* listView;
-        QString applicationsList;
-        QString newLine("\n");
-        if ((mDialogType == UninstallDialogDefinition02) ||
-            (mDialogType == UninstallDialogDefinition03)) {
-            listView = qobject_cast<HbLabel*>(
+            HbLabel* listView;
+            QString applicationsList;
+            QString newLine("\n");
+            if ((mDialogType == UninstallDialogDefinition02) ||
+                (mDialogType == UninstallDialogDefinition03)) {
+                listView = qobject_cast<HbLabel*>(
                     loader.findWidget(HS_UNINSTALL_DIALOG_LIST_VIEW_LABEL));
 
-            for (int i=0; i<applicationsNames.count(); i++) {
-                applicationsList = applicationsList + applicationsNames[i] + newLine;
+                for (int i=0; i<applicationsNames.count(); i++) {
+                    applicationsList = applicationsList + applicationsNames[i] + newLine;
+                }
+                listView->setPlainText(applicationsList);
             }
-            listView->setPlainText(applicationsList);
+
+            mConfirmAction = qobject_cast<HbAction*>(loader.findObject(
+                    HS_UNINSTALL_DIALOG_CONFIRMATION_ACTION));
+        
+            QScopedPointer<HsMenuEntryRemovedHandler> entryObserver(
+                new HsMenuEntryRemovedHandler(mItemId, this, SIGNAL(exit())));
+            entryObserver.take()->setParent(mUninstallJavaMessage);
+            
+            mUninstallJavaMessage->open(this, SLOT(uninstallMessageFinished(HbAction*)));
         }
-
-        mConfirmAction = qobject_cast<HbAction*>(loader.findObject(
-                HS_UNINSTALL_DIALOG_CONFIRMATION_ACTION));
-    
-        mUninstallJavaMessage->open(this, SLOT(uninstallMessageFinished(HbAction*)));
     }
 }