/*
* 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 <QDebug>
#include <QGraphicsLinearLayout>
#include <HbTextItem>

#include "hstitleresolver.h"
#include "hsdeviceinfolistener.h"
#include <QDebug>

namespace
{
    //Offline text in home screen view title
    const char hsLocTextId_Title_Offline[] = "txt_homescreen_title_offline";
    
    //Text in home screen view title, when device is out of network coverage or no SIM card present
    const char hsLocTextId_Title_NoService[] = "txt_homescreen_title_no_service";
}

/*!

*/
HsTitleResolver::HsTitleResolver(QObject *parent)
    : QObject(parent),
      mCurrentStatus(HsDeviceInfoListener::NoService)
{
    mDeviceInfoListener = new HsDeviceInfoListener(this);
    mOperatorName = mDeviceInfoListener->operatorName();
    mOfflineText = hbTrId(hsLocTextId_Title_Offline);
    mNoServiceText = hbTrId(hsLocTextId_Title_NoService);
    
    connect(mDeviceInfoListener, SIGNAL(networkNameChanged(QString)), SLOT(onNetworkNameChanged(QString)));
    connect(mDeviceInfoListener, SIGNAL(statusChanged(HsDeviceInfoListener::HsDeviceInfoStatus)), SLOT(onStatusChanged(HsDeviceInfoListener::HsDeviceInfoStatus)));
    mCurrentStatus = mDeviceInfoListener->status();
}

/*!

*/
HsTitleResolver::~HsTitleResolver()
{
}

/*!

*/
QString HsTitleResolver::title()
{
    QString titleText;
    switch (mCurrentStatus) {
        case HsDeviceInfoListener::NoService:
            titleText = mNoServiceText;
            break;
        case HsDeviceInfoListener::OfflineProfile:
            titleText = mOfflineText;
            break;
        default:
            if(mOperatorName.isEmpty()) {
                //Sometimes devicelistener has not get operatorNameChanged signal when
                //profile is changed from Offline to another which has active connections.
                mOperatorName = mDeviceInfoListener->operatorName();
            }
            titleText = mOperatorName;
            break;
    };
    qDebug() << "HsTitleResolver::title() - " << titleText;    
    return titleText;
}

/*!

*/
void HsTitleResolver::onNetworkNameChanged(const QString& name)
{
    qDebug() << "HsTitleResolver::onNetworkNameChanged() - Entry";
    if (mOperatorName != name && (mCurrentStatus == HsDeviceInfoListener::ServiceAvailable)) {
        qDebug() << "HsTitleResolver::onNetworkNameChanged() - Emitting: " << name;
        mOperatorName = name;
        emit titleChanged(name);
    }
    qDebug() << "HsTitleResolver::onNetworkNameChanged() - Exit";
}

/*!

*/
void HsTitleResolver::onStatusChanged(HsDeviceInfoListener::HsDeviceInfoStatus status)
{   
    qDebug() << "HsTitleResolver::onStatusChanged() - Entry";
    if (mCurrentStatus != status) {
        mCurrentStatus = status;
        qDebug() << "HsTitleResolver::onStatusChanged() - Emitting: " << title();
        emit titleChanged(title());
    }
    qDebug() << "HsTitleResolver::onStatusChanged() - Exit";
}

