--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbindicatorplugin/src/usbmassstorageindicator.cpp Mon Jul 12 23:44:34 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: USB Mass Storage indicator implementation
+*
+*/
+
+#include "usbmassstorageindicator.h"
+#include <QVariant>
+#include <e32uid.h>
+#include <apadef.h>
+#include <usb/hostms/msmmindicatorclient.h>
+#include "usbdebug.h"
+
+// icon name for mass storage
+const QString KUsbIconFile("qtg_large_usb_memory");
+
+/*!
+ Constructor
+ @param indicatorType The indicator type name
+*/
+UsbMassStorageIndicator::UsbMassStorageIndicator(const QString &indicatorType) :
+HbIndicatorInterface(indicatorType,
+ HbIndicatorInterface::SettingCategory,
+ InteractionActivated),
+ mEjectStarted(false)
+{
+}
+
+/*!
+ Destructor
+*/
+UsbMassStorageIndicator::~UsbMassStorageIndicator()
+{
+ myDebug() << ">>> UsbMassStorageIndicator::~UsbMassStorageIndicator";
+}
+
+
+/*!
+ Handle user interaction
+ Request eject for all USB drives.
+*/
+bool UsbMassStorageIndicator::handleInteraction(InteractionType type)
+{
+ myDebug() << ">>> UsbMassStorageIndicator::handleInteraction";
+ bool handled = false;
+ if (type == InteractionActivated) {
+ if (!mEjectStarted) {
+ mEjectStarted = true;
+ // dismount all drives without waiting for result
+ RHostMassStorage hostMassStorage;
+ myDebug() << " UsbMassStorageIndicator::handleInteraction hostMassStorage connecting";
+ TInt err = hostMassStorage.Connect();
+ myDebug() << " UsbMassStorageIndicator::handleInteraction hostMassStorage connected";
+ if (err == KErrNone) {
+ hostMassStorage.EjectUsbDrives();
+ myDebug() << ">>> UsbMassStorageIndicator::handleInteraction EjectUsbDrives called";
+ if (err != KErrNone) {
+ myDebug() << " UsbMassStorageIndicator::handleInteraction "
+ <<"RHostMassStorage EjectUsbDrives fail " << err;
+ }
+ }
+ else {
+ myDebug() << " UsbMassStorageIndicator::handleInteraction "
+ <<"RHostMassStorage Connect fail " << err;
+ }
+ hostMassStorage.Disconnect();
+ myDebug() << ">>> UsbMassStorageIndicator::handleInteraction disconnected";
+ hostMassStorage.Close();
+ myDebug() << ">>> UsbMassStorageIndicator::handleInteraction closed";
+ }
+ handled = true;
+ }
+ myDebug() << "<<< UsbMassStorageIndicator::handleInteraction";
+ return handled;
+}
+
+/*!
+ Return the data and icon that needs to be displayed in the universal indicator menu
+*/
+QVariant UsbMassStorageIndicator::indicatorData(int role) const
+{
+ myDebug() << ">>> UsbMassStorageIndicator::indicatorData";
+ switch (role) {
+ case PrimaryTextRole:
+ return QString(hbTrId("txt_usb_dblist_usb_connected"));
+ case SecondaryTextRole:
+ return QString(hbTrId("txt_usb_dpinfo_click_to_eject"));;
+ case DecorationNameRole:
+ return KUsbIconFile;
+ default:
+ return QVariant(); //empty variant
+ }
+}
+
+/*!
+ USBIndicator::handleClientRequest
+ handles client's activate and deactivate request
+*/
+bool UsbMassStorageIndicator::handleClientRequest( RequestType type,
+ const QVariant ¶meter)
+{
+ myDebug() << ">>> UsbMassStorageIndicator::handleClientRequest";
+ Q_UNUSED(parameter);
+ if (type == RequestDeactivate) {
+ myDebug() << " UsbMassStorageIndicator::handleClientRequest deactivate";
+ mEjectStarted = false;
+ emit deactivate();
+ }
+ myDebug() << "<<< UsbMassStorageIndicator::handleClientRequest";
+ return true;
+}