/*
* 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:
*
*/
#include "psmindicator.h"
#include <QWidget>
#include <QtPlugin>
#include <QProcess>
#include <cppluginlauncher.h>
#include <hbview.h>
#include <hbapplication.h>
#include <hbmainwindow.h>
#include <hbaction.h>
#include <cpbasesettingview.h>
#include <e32debug.h>
#include <hbmessagebox.h>
#include <xqaiwrequest.h>
#include <XQServiceRequest.h>
#include <QTimer>
Q_EXPORT_PLUGIN(PsmIndicatorPlugin)
const static char IndicatorType[] = "com.nokia.hb.powersavemodeplugin/1.0";
QString KPsm = "PSM";
QString KCharging = "Charging";
PsmIndicatorPlugin::PsmIndicatorPlugin():HbIndicatorInterface(IndicatorType,HbIndicatorInterface::NotificationCategory,InteractionActivated),mRequest(NULL)
{
RDebug::Print( _L("PsmIndicatorPlugin constructor begin ") );
iIndicatorTypes << "com.nokia.hb.powersavemodeplugin/1.0";
RDebug::Print( _L("PsmIndicatorPlugin constructor end ") );
}
PsmIndicatorPlugin::~PsmIndicatorPlugin()
{
RDebug::Print( _L("PsmIndicatorPlugin destructor begin ") );
}
// ----------------------------------------------------------------------------
// psmIndicatorPlugin::indicatorTypes
// returns the indicator types handled by this plugin
// ----------------------------------------------------------------------------
QStringList PsmIndicatorPlugin::indicatorTypes() const
{
RDebug::Print( _L("PsmIndicatorPlugin indicatortypes "));
return iIndicatorTypes;
}
// ----------------------------------------------------------------------------
// psmIndicatorPlugin::createIndicator
// creates an indicator.
// ----------------------------------------------------------------------------
HbIndicatorInterface* PsmIndicatorPlugin::createIndicator(
const QString &indicatorType)
{
Q_UNUSED(indicatorType)
RDebug::Print( _L("PsmIndicatorPlugin createindicator ") );
return this;
}
// ----------------------------------------------------------------------------
// psmIndicatorPlugin::error
// returns the error code.
// ----------------------------------------------------------------------------
int PsmIndicatorPlugin::error() const
{
RDebug::Print( _L("PsmIndicatorPlugin error ") );
return mError;
}
// ----------------------------------------------------------------------------
// psmIndicatorPlugin::accessAllowed
// check for the access rights of the client. As there are no restrictions for
// this plugin it always returns true.
// ----------------------------------------------------------------------------
bool PsmIndicatorPlugin::accessAllowed(const QString &indicatorType,
const QVariantMap & securityInfo) const
{
Q_UNUSED(indicatorType)
Q_UNUSED(securityInfo)
RDebug::Print( _L("PsmIndicatorPlugin accessallowed ") );
return true;
}
// ----------------------------------------------------------------------------
// psmIndicator::handleInteraction
// called when the user interacts with the indicator.Enable the interaction
// for psm enabled and charger connected
// ----------------------------------------------------------------------------
bool PsmIndicatorPlugin::handleInteraction(InteractionType type)
{
bool handled = false;
RDebug::Print( _L("PsmIndicatorPlugin handleinteraction begin "));
if (type == InteractionActivated)
{
RDebug::Print( _L("PsmIndicatorPlugin handleinteractiontype interactionactivated ") );
//Qthighway methodology
if (mRequest)
{
delete mRequest;
mRequest = NULL;
}
mRequest = mAppMgr.create("com.nokia.symbian.ICpPluginLauncher", "launchSettingView(QString,QVariant)", false);
if (!mRequest)
{
return handled;
}
// Set arguments for request
QList<QVariant> args;
args << QVariant( "cppsmplugin.dll" );
args << QVariant ( "psm_view" );
mRequest->setArguments(args);
mRequest->setSynchronous(false);
QTimer::singleShot(20* 1000, this, SLOT(closeSettingView()));
// Make the request
if (!mRequest->send())
{
//report error
RDebug::Print( _L("PsmIndicatorPlugin handleinteraction error launching the psmview "));
}
handled = true;
}
RDebug::Print( _L("PsmIndicatorPlugin handleinteraction end ") );
return handled;
}
// ----------------------------------------------------------------------------
// psmIndicator::indicatorData
// returns the name and icon to be displayed in the universal indicator menu.
// ----------------------------------------------------------------------------
QVariant PsmIndicatorPlugin::indicatorData(int role) const
{
RDebug::Print( _L("PsmIndicatorPlugin indicatordata begin ") );
switch(role)
{
//for displaying the string in indicator.
case PrimaryTextRole:
{
return iDisplayName;
}
//for displaying the icon in indicator.
case DecorationNameRole:
{
return iIcon;
}
default:
return QVariant();
}
}
// ----------------------------------------------------------------------------
// psmIndicatorPlugin::handleClientRequest
// this function gets called when client activates plugin
// ----------------------------------------------------------------------------
bool PsmIndicatorPlugin::handleClientRequest( RequestType type,
const QVariant ¶meter)
{
RDebug::Print( _L("PsmIndicatorPlugin handleclientrequest begin ") );
bool handled(false);
switch (type)
{
case RequestActivate:
{
RDebug::Print( _L("PsmIndicatorPlugin handleclientrequest requestactivate ") );
// Get the param from the hbindicator.activate() which is called from sysap.
HbTranslator trans("powermanagement");
iDisplayName.clear();
//if it's a PSM indicator then prepare the string and icon accordingly
if((parameter.operator ==(QString("PSM"))))
{
RDebug::Print( _L("PsmIndicatorPlugin handleclientrequest requestactivate PSM "));
iDisplayName.append(hbTrId("txt_power_management_dpopinfo_psm_activated_automa"));
iIcon.append(QString("qtg_large_psm"));
}
//else it's a charging indicator then prepare the string and icon accordingly
else
{
RDebug::Print( _L("PsmIndicatorPlugin handleclientrequest requestactivate charging ") );
iDisplayName.append(hbTrId("txt_powermgt_dblist_charging"));
iIcon.append(QString("qtg_mono_flash_charging"));
}
emit dataChanged();
handled = true;
}
break;
case RequestDeactivate:
{
RDebug::Print( _L("PsmIndicatorPlugin handleclientrequest requestdeactivate ") );
// reset data
iDisplayName = QString();
iIcon=QString();
emit deactivate();
}
break;
default:
break;
}
RDebug::Print( _L("PsmIndicatorPlugin handleclientrequest end ") );
return handled;
}
void PsmIndicatorPlugin::closeSettingView()
{
if (mRequest) {
delete mRequest;
mRequest = NULL;
}
}