radiohswidget/src/radiohswidget.cpp
author hgs
Fri, 15 Oct 2010 16:26:27 +0300
changeset 57 21be958eb3ce
parent 54 a8ba0c289b44
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  FM Radio home screen widget
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// System includes
hgs
parents:
diff changeset
    19
#include <HbPushButton>
hgs
parents:
diff changeset
    20
#include <HbLabel>
hgs
parents:
diff changeset
    21
#include <HbDocumentLoader>
hgs
parents:
diff changeset
    22
#include <HbFrameDrawer>
hgs
parents:
diff changeset
    23
#include <HbIcon>
hgs
parents:
diff changeset
    24
#include <HbIconAnimationManager>
hgs
parents:
diff changeset
    25
#include <HbIconAnimationDefinition>
hgs
parents:
diff changeset
    26
#include <HbColorScheme>
hgs
parents:
diff changeset
    27
#include <HbDeviceMessageBox>
hgs
parents:
diff changeset
    28
#include <QGraphicsLinearLayout>
hgs
parents:
diff changeset
    29
#include <QGraphicsItem>
hgs
parents:
diff changeset
    30
#include <QDesktopServices>
hgs
parents:
diff changeset
    31
#include <QSignalMapper>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// User includes
hgs
parents:
diff changeset
    34
#include "radiohswidget.h"
hgs
parents:
diff changeset
    35
#include "radiohswidgetprofilereader.h"
hgs
parents:
diff changeset
    36
#include "radiohswidgetradioserviceclient.h"
hgs
parents:
diff changeset
    37
#include "radioservicedef.h"
57
hgs
parents: 54
diff changeset
    38
#include "radiogenrelocalizer.h"
34
hgs
parents:
diff changeset
    39
#include "radiologger.h"
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// Constants
hgs
parents:
diff changeset
    42
/** Path to docml file */
hgs
parents:
diff changeset
    43
const QString DOCML(":/ui/resource/fmradiohswidget.docml");
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/**  DOCML object name for mainLayout */
hgs
parents:
diff changeset
    46
const QString DOCML_OBJECT_NAME_MAIN_LAYOUT("mainLayout");
hgs
parents:
diff changeset
    47
/**  DOCML object name for contentLayout */
hgs
parents:
diff changeset
    48
const QString DOCML_OBJECT_NAME_CONTENT_LAYOUT("contentLayout");
hgs
parents:
diff changeset
    49
/**  DOCML object name for tunerBackgroundPushButton */
hgs
parents:
diff changeset
    50
const QString DOCML_OBJECT_NAME_TUNER_BACKGROUND_BUTTON(
hgs
parents:
diff changeset
    51
    "tunerBackgroundPushButton");
hgs
parents:
diff changeset
    52
/**  DOCML object name for tunerStackedLayout */
hgs
parents:
diff changeset
    53
const QString DOCML_OBJECT_NAME_TUNER_STACKED_LAYOUT("tunerStackedLayout");
57
hgs
parents: 54
diff changeset
    54
/**  DOCML object name for favoriteIconLayout */
hgs
parents: 54
diff changeset
    55
const QString DOCML_OBJECT_NAME_FAVORITE_ICON_LAYOUT("favoriteIconLayout");
hgs
parents: 54
diff changeset
    56
/**  DOCML object name for favoriteIcon */
hgs
parents: 54
diff changeset
    57
const QString DOCML_OBJECT_NAME_FAVORITE_ICON("favoriteIcon");
34
hgs
parents:
diff changeset
    58
/**  DOCML object name for tunerInformationStackedLayout */
hgs
parents:
diff changeset
    59
const QString DOCML_OBJECT_NAME_TUNER_INFORMATION_STACKED_LAYOUT(
hgs
parents:
diff changeset
    60
    "tunerInformationStackedLayout");
57
hgs
parents: 54
diff changeset
    61
/**  DOCML object name for lonelyRowLabel */
hgs
parents: 54
diff changeset
    62
const QString DOCML_OBJECT_NAME_LONELY_ROW_LABEL("lonelyRowLabel");
hgs
parents: 54
diff changeset
    63
/**  DOCML object name for animationIcon */
hgs
parents: 54
diff changeset
    64
const QString DOCML_OBJECT_NAME_ANIMATION_ICON("animationIcon");
hgs
parents: 54
diff changeset
    65
/**  DOCML object name for oneRowWithFavoriteLayout */
hgs
parents: 54
diff changeset
    66
const QString DOCML_OBJECT_NAME_ONE_ROW_WITH_FAVORITE_LAYOUT("oneRowWithFavoriteLayout");
hgs
parents: 54
diff changeset
    67
/**  DOCML object name for oneRowWithFavoriteLabel */
hgs
parents: 54
diff changeset
    68
const QString DOCML_OBJECT_NAME_ONE_ROW_WITH_FAVORITE_LABEL("oneRowWithFavoriteLabel");
hgs
parents: 54
diff changeset
    69
/**  DOCML object name for twoRowsLayout */
hgs
parents: 54
diff changeset
    70
const QString DOCML_OBJECT_NAME_TWO_ROWS_LAYOUT("twoRowsLayout");
hgs
parents: 54
diff changeset
    71
/**  DOCML object name for firstRowWithFavoriteLabel */
hgs
parents: 54
diff changeset
    72
const QString DOCML_OBJECT_NAME_FIRST_ROW_WITH_FAVORITE_LABEL("firstRowWithFavoriteLabel");
hgs
parents: 54
diff changeset
    73
/**  DOCML object name for secondRowLabel */
hgs
parents: 54
diff changeset
    74
const QString DOCML_OBJECT_NAME_SECOND_ROW_LABEL("secondRowLabel");
34
hgs
parents:
diff changeset
    75
/**  DOCML object name for controlButtons */
hgs
parents:
diff changeset
    76
const QString DOCML_OBJECT_NAME_CONTROL_BUTTONS_LAYOUT("controlButtons");
hgs
parents:
diff changeset
    77
/**  DOCML object name for powerToggleButton */
hgs
parents:
diff changeset
    78
const QString DOCML_OBJECT_NAME_POWER_BUTTON("powerButton");
hgs
parents:
diff changeset
    79
/**  DOCML object name for previousPushButton */
hgs
parents:
diff changeset
    80
const QString DOCML_OBJECT_NAME_PREVIOUS_BUTTON("previousPushButton");
hgs
parents:
diff changeset
    81
/**  DOCML object name for nextPushButton */
hgs
parents:
diff changeset
    82
const QString DOCML_OBJECT_NAME_NEXT_BUTTON("nextPushButton");
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
/** Unknown favorite station count. */
47
hgs
parents: 44
diff changeset
    85
const int FAVORITE_STATION_COUNT_UNDEFINED(0);
hgs
parents: 44
diff changeset
    86
/** Unknown local station count. */
hgs
parents: 44
diff changeset
    87
const int LOCAL_STATION_COUNT_UNDEFINED(0);
34
hgs
parents:
diff changeset
    88
/** Favorite station count lower boundary including this number. */
hgs
parents:
diff changeset
    89
const int FAVORITE_STATION_COUNT_LOWER_BOUNDARY(0);
hgs
parents:
diff changeset
    90
/** Favorite station count upper boundary including this number. */
hgs
parents:
diff changeset
    91
const int FAVORITE_STATION_COUNT_UPPER_BOUNDARY(100);
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
// Graphics identifiers for different push button states
hgs
parents:
diff changeset
    94
const QString CONTROL_BUTTON_GRAPHICS_NORMAL  ("qtg_fr_hsbutton_normal");
hgs
parents:
diff changeset
    95
const QString CONTROL_BUTTON_GRAPHICS_PRESSED ("qtg_fr_hsbutton_pressed");
hgs
parents:
diff changeset
    96
const QString CONTROL_BUTTON_GRAPHICS_DISABLED("qtg_fr_hsbutton_disabled");
hgs
parents:
diff changeset
    97
const QString CONTROL_BUTTON_GRAPHICS_LATCHED ("qtg_fr_hsbutton_latched");
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
// Push button icon colors for each of the states (normal, pressed, disabled
hgs
parents:
diff changeset
   100
// and latched)
hgs
parents:
diff changeset
   101
const QString CONTROL_BUTTON_ICON_COLOR_NORMAL  ("qtc_button_normal");
hgs
parents:
diff changeset
   102
const QString CONTROL_BUTTON_ICON_COLOR_PRESSED ("qtc_button_pressed");
hgs
parents:
diff changeset
   103
const QString CONTROL_BUTTON_ICON_COLOR_DISABLED("qtc_button_disabled");
hgs
parents:
diff changeset
   104
const QString CONTROL_BUTTON_ICON_COLOR_LATCHED ("qtc_button_latched");
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
// File name suffix lists for push buttons
hgs
parents:
diff changeset
   107
const QStringList POWER_BUTTON_SUFFIX(
hgs
parents:
diff changeset
   108
    (QStringList() << "_l" << "_c" << "_cr"));
hgs
parents:
diff changeset
   109
const QStringList PREVIOUS_BUTTON_SUFFIX(
hgs
parents:
diff changeset
   110
    (QStringList() << "_cl" << "_c" << "_cr"));
hgs
parents:
diff changeset
   111
const QStringList NEXT_BUTTON_SUFFIX(
hgs
parents:
diff changeset
   112
    (QStringList() << "_cl" << "_c" << "_r"));
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
/** Icon for power button off. */
hgs
parents:
diff changeset
   115
const QString POWER_BUTTON_ICON_OFF("qtg_mono_power"); 
hgs
parents:
diff changeset
   116
/** Icon for power button on. */
hgs
parents:
diff changeset
   117
const QString POWER_BUTTON_ICON_ON ("qtg_mono_power"); 
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
// Tuner background button graphics for different states.
hgs
parents:
diff changeset
   120
const QString TUNER_BUTTON_NORMAL_OFF("qtg_fr_tuner");
hgs
parents:
diff changeset
   121
const QString TUNER_BUTTON_NORMAL_ON("qtg_fr_tuner");
hgs
parents:
diff changeset
   122
const QString TUNER_BUTTON_NORMAL_PRESSED("qtg_fr_hsitems2_pressed");
hgs
parents:
diff changeset
   123
57
hgs
parents: 54
diff changeset
   124
// Favorite icon graphics names for favorite and non-favorite names
hgs
parents: 54
diff changeset
   125
const QString FAVORITE_ICON_NAME("qtg_small_favorite");
hgs
parents: 54
diff changeset
   126
const QString NON_FAVORITE_ICON_NAME("qtg_small_star_non_favourited");
hgs
parents: 54
diff changeset
   127
34
hgs
parents:
diff changeset
   128
/*!
hgs
parents:
diff changeset
   129
    \class RadioHsWidget
hgs
parents:
diff changeset
   130
    \brief Implementation of FM Radio home screen widget.
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    RadioHsWidget implements needed functions for the FM Radio home screen
hgs
parents:
diff changeset
   133
    widget.
hgs
parents:
diff changeset
   134
*/
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
/*!
hgs
parents:
diff changeset
   139
    Constructs a widget which is a child of \a parent, with widget flags set
hgs
parents:
diff changeset
   140
    to \a flags.
hgs
parents:
diff changeset
   141
    
hgs
parents:
diff changeset
   142
    Constructor should be empty and all the actual construction should be
hgs
parents:
diff changeset
   143
    done in onInitialize().
hgs
parents:
diff changeset
   144
 */
hgs
parents:
diff changeset
   145
RadioHsWidget::RadioHsWidget(QGraphicsItem* parent, Qt::WindowFlags flags)
hgs
parents:
diff changeset
   146
    : HbWidget(parent, flags),
hgs
parents:
diff changeset
   147
      mInformationAreaBackgroundButton(NULL),
hgs
parents:
diff changeset
   148
      mPowerButton(NULL),
hgs
parents:
diff changeset
   149
      mPreviousButton(NULL),
hgs
parents:
diff changeset
   150
      mNextButton(NULL),
hgs
parents:
diff changeset
   151
      mInformationAreaTwoRowsLayout(NULL),
hgs
parents:
diff changeset
   152
      mInformationLonelyRowLabel(NULL),
57
hgs
parents: 54
diff changeset
   153
      mInformationFirstRowWithFavoriteLabel(NULL),
34
hgs
parents:
diff changeset
   154
      mInformationSecondRowLabel(NULL),
hgs
parents:
diff changeset
   155
      mAnimationIcon(NULL),
57
hgs
parents: 54
diff changeset
   156
      mFavoriteIcon(NULL),
34
hgs
parents:
diff changeset
   157
      mFmRadioState(FmRadio::StateUndefined),
57
hgs
parents: 54
diff changeset
   158
      mRadioRegion(RadioRegion::None),
34
hgs
parents:
diff changeset
   159
      mFavoriteStationCount(FAVORITE_STATION_COUNT_UNDEFINED),
47
hgs
parents: 44
diff changeset
   160
      mLocalStationCount(LOCAL_STATION_COUNT_UNDEFINED),
34
hgs
parents:
diff changeset
   161
      mCurrentStationIsFavorite(false),
hgs
parents:
diff changeset
   162
      mProfileMonitor(NULL),
hgs
parents:
diff changeset
   163
      mRadioServiceClient(NULL)
hgs
parents:
diff changeset
   164
{
hgs
parents:
diff changeset
   165
    LOG_METHOD;
hgs
parents:
diff changeset
   166
}
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
/*!
hgs
parents:
diff changeset
   169
    Destructor
hgs
parents:
diff changeset
   170
 */
hgs
parents:
diff changeset
   171
RadioHsWidget::~RadioHsWidget()
hgs
parents:
diff changeset
   172
{
hgs
parents:
diff changeset
   173
    LOG_METHOD;
hgs
parents:
diff changeset
   174
}
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
/*!
hgs
parents:
diff changeset
   177
    Handles changes in FM Radio information.
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
    \param informationType Type of changed information.
hgs
parents:
diff changeset
   180
    \param information Actual information.
hgs
parents:
diff changeset
   181
 */
hgs
parents:
diff changeset
   182
void RadioHsWidget::handleRadioInformationChange(const int informationType,
hgs
parents:
diff changeset
   183
    const QVariant &information)
hgs
parents:
diff changeset
   184
{
hgs
parents:
diff changeset
   185
    LOG_METHOD;
57
hgs
parents: 54
diff changeset
   186
    
hgs
parents: 54
diff changeset
   187
    if ((informationType == RadioServiceNotification::RadioText
hgs
parents: 54
diff changeset
   188
        || informationType == RadioServiceNotification::DynamicPS) 
hgs
parents: 54
diff changeset
   189
        && !mRadioInformation.contains(Frequency))
hgs
parents: 54
diff changeset
   190
    {
hgs
parents: 54
diff changeset
   191
        // there's not yet station set in widget, the information is most likely from the previous station 
hgs
parents: 54
diff changeset
   192
        LOG("RadioHsWidget::handleRadioInformationChange: transitioning between stations, discarding update");
hgs
parents: 54
diff changeset
   193
        return;
hgs
parents: 54
diff changeset
   194
    }
hgs
parents: 54
diff changeset
   195
    
34
hgs
parents:
diff changeset
   196
    switch (informationType) {
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
    case RadioServiceNotification::FavoriteCount:
hgs
parents:
diff changeset
   199
        LOG("FavoriteCount");
hgs
parents:
diff changeset
   200
        if (information.canConvert(QVariant::Int) &&
hgs
parents:
diff changeset
   201
            information.toInt() >= FAVORITE_STATION_COUNT_LOWER_BOUNDARY &&
hgs
parents:
diff changeset
   202
            information.toInt() <= FAVORITE_STATION_COUNT_UPPER_BOUNDARY) {
hgs
parents:
diff changeset
   203
            mFavoriteStationCount = information.toInt();
47
hgs
parents: 44
diff changeset
   204
            LOG_FORMAT("mFavoriteStationCount: %d", mFavoriteStationCount);
hgs
parents: 44
diff changeset
   205
            enableStationButtons();
hgs
parents: 44
diff changeset
   206
        }
hgs
parents: 44
diff changeset
   207
        break;
hgs
parents: 44
diff changeset
   208
hgs
parents: 44
diff changeset
   209
    case RadioServiceNotification::LocalCount:
hgs
parents: 44
diff changeset
   210
        LOG("LocalCount");
hgs
parents: 44
diff changeset
   211
        if (information.canConvert(QVariant::Int) &&
hgs
parents: 44
diff changeset
   212
            information.toInt() >= FAVORITE_STATION_COUNT_LOWER_BOUNDARY &&
hgs
parents: 44
diff changeset
   213
            information.toInt() <= FAVORITE_STATION_COUNT_UPPER_BOUNDARY) {
hgs
parents: 44
diff changeset
   214
            mLocalStationCount = information.toInt();
hgs
parents: 44
diff changeset
   215
            // If there are local stations, enable the next/previous
34
hgs
parents:
diff changeset
   216
            // buttons.
47
hgs
parents: 44
diff changeset
   217
            LOG_FORMAT("mLocalStationCount: %d", mLocalStationCount);
hgs
parents: 44
diff changeset
   218
            // Enable or disable buttons only if localCount differs
hgs
parents: 44
diff changeset
   219
            // from 1.
hgs
parents: 44
diff changeset
   220
            enableStationButtons();
34
hgs
parents:
diff changeset
   221
        }
hgs
parents:
diff changeset
   222
        break;
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
    case RadioServiceNotification::CurrentIsFavorite:
hgs
parents:
diff changeset
   225
        LOG("CurrentIsFavorite");
hgs
parents:
diff changeset
   226
        if (information.canConvert(QVariant::Bool)) {
hgs
parents:
diff changeset
   227
            mCurrentStationIsFavorite = information.toBool();
hgs
parents:
diff changeset
   228
            LOG_FORMAT("currentIsFavorite: %d", mCurrentStationIsFavorite);
57
hgs
parents: 54
diff changeset
   229
            if (mFavoriteIcon->isVisible()) {
hgs
parents: 54
diff changeset
   230
                changeFavoriteIcon(true);
hgs
parents: 54
diff changeset
   231
            } else {
hgs
parents: 54
diff changeset
   232
                changeFavoriteIcon(false);
hgs
parents: 54
diff changeset
   233
            }
34
hgs
parents:
diff changeset
   234
        }
hgs
parents:
diff changeset
   235
        break;
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    case RadioServiceNotification::RadioStatus:
hgs
parents:
diff changeset
   238
        LOG("RadioStatus");
hgs
parents:
diff changeset
   239
        if (information.canConvert(QVariant::Int)) {
hgs
parents:
diff changeset
   240
            const int status = information.toInt();
hgs
parents:
diff changeset
   241
            switch (status) {
hgs
parents:
diff changeset
   242
            case RadioStatus::Playing:
57
hgs
parents: 54
diff changeset
   243
                LEVEL2(LOG("RadioStatus::Playing"));
36
hgs
parents: 34
diff changeset
   244
                handleRadioStateChange(FmRadio::StateRunning);
34
hgs
parents:
diff changeset
   245
                break;
hgs
parents:
diff changeset
   246
            case RadioStatus::Muted:
57
hgs
parents: 54
diff changeset
   247
                LEVEL2(LOG("RadioStatus::Muted"));
34
hgs
parents:
diff changeset
   248
                break;
hgs
parents:
diff changeset
   249
            case RadioStatus::Seeking:
57
hgs
parents: 54
diff changeset
   250
                LEVEL2(LOG("RadioStatus::Seeking"));
34
hgs
parents:
diff changeset
   251
                handleRadioStateChange(FmRadio::StateSeeking);
hgs
parents:
diff changeset
   252
                break;
hgs
parents:
diff changeset
   253
            case RadioStatus::NoAntenna:
57
hgs
parents: 54
diff changeset
   254
                LEVEL2(LOG("RadioStatus::NoAntenna"));
34
hgs
parents:
diff changeset
   255
                handleRadioStateChange(FmRadio::StateAntennaNotConnected);
hgs
parents:
diff changeset
   256
                break;
hgs
parents:
diff changeset
   257
            case RadioStatus::PoweringOff:
57
hgs
parents: 54
diff changeset
   258
                LEVEL2(LOG("RadioStatus::PoweringOff"));
34
hgs
parents:
diff changeset
   259
                handleRadioStateChange(FmRadio::StateClosing);
hgs
parents:
diff changeset
   260
                break;
hgs
parents:
diff changeset
   261
            default:
hgs
parents:
diff changeset
   262
                LOG("default case at case RadioStatus");
hgs
parents:
diff changeset
   263
                break;
hgs
parents:
diff changeset
   264
            }
hgs
parents:
diff changeset
   265
        }
hgs
parents:
diff changeset
   266
        break;
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    case RadioServiceNotification::Frequency:
hgs
parents:
diff changeset
   269
        LOG("Frequency");
hgs
parents:
diff changeset
   270
        // TODO: Should information.toString() be checked for too many characters? What's the limit?
hgs
parents:
diff changeset
   271
        if (information.canConvert(QVariant::String)) {
57
hgs
parents: 54
diff changeset
   272
            LEVEL2(LOG_FORMAT("frequency: %s", GETSTRING(information.toString())));
34
hgs
parents:
diff changeset
   273
            bool frequencyCleared = false;
36
hgs
parents: 34
diff changeset
   274
            if (mRadioInformation.contains(Frequency)) {
hgs
parents: 34
diff changeset
   275
                // Clear all infromation.
34
hgs
parents:
diff changeset
   276
                clearRadioInformation();
hgs
parents:
diff changeset
   277
                frequencyCleared = true;
hgs
parents:
diff changeset
   278
            }
hgs
parents:
diff changeset
   279
            // If widget do not have any frquency information, update it.
57
hgs
parents: 54
diff changeset
   280
            QString frequencyString = hbTrId("txt_fmradiohswidget_rad_list_l1_mhz").arg(information.toString());
hgs
parents: 54
diff changeset
   281
            bool frequencyUpdated = updateRadioInformation(Frequency, frequencyString);
34
hgs
parents:
diff changeset
   282
            if (frequencyCleared || frequencyUpdated) {
hgs
parents:
diff changeset
   283
                // Information changed, update the UI.
hgs
parents:
diff changeset
   284
                changeInRadioInformation();
36
hgs
parents: 34
diff changeset
   285
                mFmRadioState = FmRadio::StateRunning;
34
hgs
parents:
diff changeset
   286
            }
hgs
parents:
diff changeset
   287
        }
hgs
parents:
diff changeset
   288
        break;
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
    case RadioServiceNotification::Name:
hgs
parents:
diff changeset
   291
        LOG("Name");
hgs
parents:
diff changeset
   292
        handleSimilarRadioInformation(StationName, information);
hgs
parents:
diff changeset
   293
        break;
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    case RadioServiceNotification::Genre:
hgs
parents:
diff changeset
   296
        LOG("Genre");
57
hgs
parents: 54
diff changeset
   297
        if (information.canConvert(QVariant::Int) &&
hgs
parents: 54
diff changeset
   298
            mRadioRegion != RadioRegion::None) {
hgs
parents: 54
diff changeset
   299
            const int genre = information.toInt();
hgs
parents: 54
diff changeset
   300
            QString localizedGenre(RadioGenreLocalizer::genreToString(
hgs
parents: 54
diff changeset
   301
                mRadioRegion, genre, GenreTarget::HomeScreen));
hgs
parents: 54
diff changeset
   302
            handleSimilarRadioInformation(Pty, localizedGenre);
hgs
parents: 54
diff changeset
   303
        }
34
hgs
parents:
diff changeset
   304
        break;
hgs
parents:
diff changeset
   305
hgs
parents:
diff changeset
   306
    case RadioServiceNotification::RadioText:
hgs
parents:
diff changeset
   307
        LOG("RadioText");
hgs
parents:
diff changeset
   308
        handleSimilarRadioInformation(RadioText, information);
hgs
parents:
diff changeset
   309
        break;
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
    case RadioServiceNotification::DynamicPS:
hgs
parents:
diff changeset
   312
        LOG("DynamicPS");
hgs
parents:
diff changeset
   313
        handleSimilarRadioInformation(DynamicPsName, information);
hgs
parents:
diff changeset
   314
        break;
hgs
parents:
diff changeset
   315
57
hgs
parents: 54
diff changeset
   316
    case RadioServiceNotification::Region:
hgs
parents: 54
diff changeset
   317
        LOG("Region");
hgs
parents: 54
diff changeset
   318
        if (information.canConvert(QVariant::Int)) {
hgs
parents: 54
diff changeset
   319
            const int region = information.toInt();
hgs
parents: 54
diff changeset
   320
            switch (region) {
hgs
parents: 54
diff changeset
   321
            case RadioRegion::None:
hgs
parents: 54
diff changeset
   322
                LEVEL2(LOG("RadioRegion::None"));
hgs
parents: 54
diff changeset
   323
                mRadioRegion = RadioRegion::None;
hgs
parents: 54
diff changeset
   324
                break;
hgs
parents: 54
diff changeset
   325
            case RadioRegion::Default:
hgs
parents: 54
diff changeset
   326
                LEVEL2(LOG("RadioRegion::Default"));
hgs
parents: 54
diff changeset
   327
                mRadioRegion = RadioRegion::Default;
hgs
parents: 54
diff changeset
   328
                break;
hgs
parents: 54
diff changeset
   329
            case RadioRegion::Japan:
hgs
parents: 54
diff changeset
   330
                LEVEL2(LOG("RadioRegion::Japan"));
hgs
parents: 54
diff changeset
   331
                mRadioRegion = RadioRegion::Japan;
hgs
parents: 54
diff changeset
   332
                break;
hgs
parents: 54
diff changeset
   333
            case RadioRegion::America:
hgs
parents: 54
diff changeset
   334
                LEVEL2(LOG("RadioRegion::America"));
hgs
parents: 54
diff changeset
   335
                mRadioRegion = RadioRegion::America;
hgs
parents: 54
diff changeset
   336
                break;
hgs
parents: 54
diff changeset
   337
            case RadioRegion::Poland:
hgs
parents: 54
diff changeset
   338
                LEVEL2(LOG("RadioRegion::Poland"));
hgs
parents: 54
diff changeset
   339
                mRadioRegion = RadioRegion::Poland;
hgs
parents: 54
diff changeset
   340
                break;
hgs
parents: 54
diff changeset
   341
            default:
hgs
parents: 54
diff changeset
   342
                LOG("default case at case RadioRegion");
hgs
parents: 54
diff changeset
   343
                break;
hgs
parents: 54
diff changeset
   344
            }
hgs
parents: 54
diff changeset
   345
        }
hgs
parents: 54
diff changeset
   346
        break;
hgs
parents: 54
diff changeset
   347
        
34
hgs
parents:
diff changeset
   348
    default:
hgs
parents:
diff changeset
   349
        LOG("default case at notificationId");
hgs
parents:
diff changeset
   350
        break;
hgs
parents:
diff changeset
   351
    }
hgs
parents:
diff changeset
   352
}
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
/*!
hgs
parents:
diff changeset
   355
    Handles changes in FM Radio state.
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
    \param value New state of the radio application.
hgs
parents:
diff changeset
   358
*/
hgs
parents:
diff changeset
   359
void RadioHsWidget::handleRadioStateChange(const QVariant &value)
hgs
parents:
diff changeset
   360
{
hgs
parents:
diff changeset
   361
    LOG_METHOD;
hgs
parents:
diff changeset
   362
    int state;
hgs
parents:
diff changeset
   363
    if (value.canConvert(QVariant::Int)) {
hgs
parents:
diff changeset
   364
        state = value.toInt();
hgs
parents:
diff changeset
   365
    } else {
hgs
parents:
diff changeset
   366
        return;
hgs
parents:
diff changeset
   367
    }
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
    if (state == mFmRadioState) {
hgs
parents:
diff changeset
   370
        // State did not change, so return.
hgs
parents:
diff changeset
   371
        return;
hgs
parents:
diff changeset
   372
    }
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
    switch (state) {
hgs
parents:
diff changeset
   375
    case FmRadio::StateUndefined:
hgs
parents:
diff changeset
   376
        LOG("FmRadio::StateUndefined");
hgs
parents:
diff changeset
   377
        // Something went wrong. Widget should not be in this state after onInitialize().
hgs
parents:
diff changeset
   378
        mFmRadioState = FmRadio::StateUndefined;
hgs
parents:
diff changeset
   379
        break;
hgs
parents:
diff changeset
   380
    case FmRadio::StateNotRunning:
hgs
parents:
diff changeset
   381
        LOG("FmRadio::StateNotRunning");
hgs
parents:
diff changeset
   382
        mFmRadioState = FmRadio::StateNotRunning;
hgs
parents:
diff changeset
   383
        mRadioServiceClient->stopMonitoring();
hgs
parents:
diff changeset
   384
        changePowerButtonOn(false);
hgs
parents:
diff changeset
   385
        mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED;
47
hgs
parents: 44
diff changeset
   386
        mLocalStationCount = LOCAL_STATION_COUNT_UNDEFINED;
34
hgs
parents:
diff changeset
   387
        mCurrentStationIsFavorite = false;
hgs
parents:
diff changeset
   388
        enableStationButtons();
hgs
parents:
diff changeset
   389
        clearRadioInformation();
57
hgs
parents: 54
diff changeset
   390
        mInformationFirstRowWithFavoriteLabel->setPlainText("");
34
hgs
parents:
diff changeset
   391
        mInformationSecondRowLabel->setPlainText("");
hgs
parents:
diff changeset
   392
        mInformationLonelyRowLabel->setPlainText(hbTrId("txt_fmradiohswidget_rad_list_fm_radio"));
hgs
parents:
diff changeset
   393
        changeInformationAreaLayout(OneRow);
hgs
parents:
diff changeset
   394
        break;
hgs
parents:
diff changeset
   395
    case FmRadio::StateStarting:
hgs
parents:
diff changeset
   396
        LOG("FmRadio::StateStarting");
hgs
parents:
diff changeset
   397
        mFmRadioState = FmRadio::StateStarting;
hgs
parents:
diff changeset
   398
        changePowerButtonOn(true);
hgs
parents:
diff changeset
   399
        mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED;
47
hgs
parents: 44
diff changeset
   400
        mLocalStationCount = LOCAL_STATION_COUNT_UNDEFINED;
34
hgs
parents:
diff changeset
   401
        mCurrentStationIsFavorite = false;
hgs
parents:
diff changeset
   402
        enableStationButtons();
hgs
parents:
diff changeset
   403
        changeInformationAreaLayout(Animation);
hgs
parents:
diff changeset
   404
        break;
hgs
parents:
diff changeset
   405
    case FmRadio::StateRunning:
hgs
parents:
diff changeset
   406
        LOG("FmRadio::StateRunning");
hgs
parents:
diff changeset
   407
        mFmRadioState = FmRadio::StateRunning;
57
hgs
parents: 54
diff changeset
   408
        mRadioServiceClient->stopMonitoring();
34
hgs
parents:
diff changeset
   409
        mRadioServiceClient->startMonitoring(
hgs
parents:
diff changeset
   410
            FmRadio::VisibiltyDoNotChange);
36
hgs
parents: 34
diff changeset
   411
        changeInRadioInformation();
34
hgs
parents:
diff changeset
   412
        changePowerButtonOn(true);
hgs
parents:
diff changeset
   413
        enableStationButtons();
57
hgs
parents: 54
diff changeset
   414
        changeInformationAreaLayout(OneRowWithFavorite);
34
hgs
parents:
diff changeset
   415
        break;
hgs
parents:
diff changeset
   416
    case FmRadio::StateSeeking:
hgs
parents:
diff changeset
   417
        LOG("FmRadio::StateSeeking");
hgs
parents:
diff changeset
   418
        mFmRadioState = FmRadio::StateSeeking;
hgs
parents:
diff changeset
   419
        mCurrentStationIsFavorite = false;
hgs
parents:
diff changeset
   420
        enableStationButtons();
hgs
parents:
diff changeset
   421
        changeInformationAreaLayout(Animation);
hgs
parents:
diff changeset
   422
        break;
hgs
parents:
diff changeset
   423
    case FmRadio::StateAntennaNotConnected:
hgs
parents:
diff changeset
   424
        LOG("FmRadio::StateAntennaNotConnected");
hgs
parents:
diff changeset
   425
        mFmRadioState = FmRadio::StateAntennaNotConnected;
hgs
parents:
diff changeset
   426
        mCurrentStationIsFavorite = false;
hgs
parents:
diff changeset
   427
        enableStationButtons();
57
hgs
parents: 54
diff changeset
   428
        mInformationFirstRowWithFavoriteLabel->setPlainText("");
34
hgs
parents:
diff changeset
   429
        mInformationSecondRowLabel->setPlainText("");
hgs
parents:
diff changeset
   430
        mInformationLonelyRowLabel->setPlainText(hbTrId(
hgs
parents:
diff changeset
   431
            "txt_fmradiohswidget_rad_info_connect_wired_headset"));
hgs
parents:
diff changeset
   432
        changeInformationAreaLayout(OneRow);
hgs
parents:
diff changeset
   433
        break;
hgs
parents:
diff changeset
   434
    case FmRadio::StateClosing:
hgs
parents:
diff changeset
   435
        LOG("FmRadio::StateClosing");
hgs
parents:
diff changeset
   436
        mFmRadioState = FmRadio::StateClosing;
hgs
parents:
diff changeset
   437
        changePowerButtonOn(false);
hgs
parents:
diff changeset
   438
        mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED;
47
hgs
parents: 44
diff changeset
   439
        mLocalStationCount = LOCAL_STATION_COUNT_UNDEFINED;
34
hgs
parents:
diff changeset
   440
        mCurrentStationIsFavorite = false;
hgs
parents:
diff changeset
   441
        enableStationButtons();
hgs
parents:
diff changeset
   442
        clearRadioInformation();
57
hgs
parents: 54
diff changeset
   443
        mInformationFirstRowWithFavoriteLabel->setPlainText("");
34
hgs
parents:
diff changeset
   444
        mInformationSecondRowLabel->setPlainText("");
hgs
parents:
diff changeset
   445
        mInformationLonelyRowLabel->setPlainText(hbTrId(
hgs
parents:
diff changeset
   446
            "txt_fmradiohswidget_rad_list_fm_radio"));
hgs
parents:
diff changeset
   447
        changeInformationAreaLayout(OneRow);
hgs
parents:
diff changeset
   448
        break;
hgs
parents:
diff changeset
   449
    default:
hgs
parents:
diff changeset
   450
        LOG_FORMAT("default case at state. State: %d", state);
hgs
parents:
diff changeset
   451
        break;
hgs
parents:
diff changeset
   452
    }
hgs
parents:
diff changeset
   453
}
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
/*!
hgs
parents:
diff changeset
   456
    Called when widget is initialized. Constructs objects and connects them.
hgs
parents:
diff changeset
   457
*/
hgs
parents:
diff changeset
   458
void RadioHsWidget::onInitialize()
hgs
parents:
diff changeset
   459
{
hgs
parents:
diff changeset
   460
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   461
    mProfileMonitor = new RadioHsWidgetProfileReader(this);
hgs
parents:
diff changeset
   462
    mRadioServiceClient = new RadioHsWidgetRadioServiceClient(this);
hgs
parents:
diff changeset
   463
    
hgs
parents:
diff changeset
   464
    load(DOCML);
hgs
parents:
diff changeset
   465
    
hgs
parents:
diff changeset
   466
    // Use signal mapper to indicate button identifiers to button event
hgs
parents:
diff changeset
   467
    // slots. 
hgs
parents:
diff changeset
   468
    QSignalMapper* signalMapperPressed = new QSignalMapper(this); 
hgs
parents:
diff changeset
   469
    signalMapperPressed->setMapping(mPowerButton, Power);
hgs
parents:
diff changeset
   470
    signalMapperPressed->setMapping(mPreviousButton, Previous);
hgs
parents:
diff changeset
   471
    signalMapperPressed->setMapping(mNextButton, Next);
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
    // Need to use different signal mapper for pressed and released events, 
hgs
parents:
diff changeset
   474
    // both have same mappings but they are mapped to different slots.
hgs
parents:
diff changeset
   475
    QSignalMapper* signalMapperReleased = new QSignalMapper(this);
hgs
parents:
diff changeset
   476
    signalMapperReleased->setMapping(mPowerButton, Power);
hgs
parents:
diff changeset
   477
    signalMapperReleased->setMapping(mPreviousButton, Previous);
hgs
parents:
diff changeset
   478
    signalMapperReleased->setMapping(mNextButton, Next);
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
    // Connect button events to signal maps.
hgs
parents:
diff changeset
   481
    Radio::connect(mPowerButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map()));
hgs
parents:
diff changeset
   482
    Radio::connect(mPowerButton, SIGNAL(released()), signalMapperReleased, SLOT (map()));
hgs
parents:
diff changeset
   483
    Radio::connect(mPreviousButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map()));
hgs
parents:
diff changeset
   484
    Radio::connect(mPreviousButton, SIGNAL(released()), signalMapperReleased, SLOT (map()));
hgs
parents:
diff changeset
   485
    Radio::connect(mNextButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map()));
hgs
parents:
diff changeset
   486
    Radio::connect(mNextButton, SIGNAL(released()), signalMapperReleased, SLOT (map()));
hgs
parents:
diff changeset
   487
    
hgs
parents:
diff changeset
   488
    // Connect mapper signals to self implemented slots.
hgs
parents:
diff changeset
   489
    Radio::connect(signalMapperPressed, SIGNAL(mapped(int)), this, SLOT(changeButtonToPressed(int)));
hgs
parents:
diff changeset
   490
    Radio::connect(signalMapperReleased, SIGNAL(mapped(int)), this, SLOT(changeButtonToReleased(int)));
hgs
parents:
diff changeset
   491
    
hgs
parents:
diff changeset
   492
    mProfileMonitor->startMonitoringRadioRunningStatus();
hgs
parents:
diff changeset
   493
}
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
/*!
hgs
parents:
diff changeset
   496
    Called when widget is shown in the home screen
hgs
parents:
diff changeset
   497
*/
hgs
parents:
diff changeset
   498
void RadioHsWidget::onShow()
hgs
parents:
diff changeset
   499
{
hgs
parents:
diff changeset
   500
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   501
}
hgs
parents:
diff changeset
   502
hgs
parents:
diff changeset
   503
/*!
hgs
parents:
diff changeset
   504
    Called when widget is hidden from the home screen
hgs
parents:
diff changeset
   505
*/
hgs
parents:
diff changeset
   506
void RadioHsWidget::onHide()
hgs
parents:
diff changeset
   507
{
hgs
parents:
diff changeset
   508
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   509
}
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
/*!
hgs
parents:
diff changeset
   512
    Emited from HbPushButton:pressed() signal, changes the button layout to
hgs
parents:
diff changeset
   513
    pressed state.
hgs
parents:
diff changeset
   514
 
hgs
parents:
diff changeset
   515
    \param hsButtonIdentifier Identifies the button which was pressed.
hgs
parents:
diff changeset
   516
 */
hgs
parents:
diff changeset
   517
void RadioHsWidget::changeButtonToPressed(int hsButtonIdentifier)
hgs
parents:
diff changeset
   518
{
hgs
parents:
diff changeset
   519
    LEVEL2(LOG_METHOD);
hgs
parents:
diff changeset
   520
    buttonEvent(static_cast<ControlButtonIdentifier>(hsButtonIdentifier), Pressed);
hgs
parents:
diff changeset
   521
}
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
/*!
hgs
parents:
diff changeset
   524
    Emited from HbPushButton:released() signal, changes the button layout to
hgs
parents:
diff changeset
   525
    normal state.
hgs
parents:
diff changeset
   526
 
hgs
parents:
diff changeset
   527
    \param hsButtonIdentifier Identifies the button which was released.
hgs
parents:
diff changeset
   528
 */
hgs
parents:
diff changeset
   529
void RadioHsWidget::changeButtonToReleased(int hsButtonIdentifier)
hgs
parents:
diff changeset
   530
{
hgs
parents:
diff changeset
   531
    LEVEL2(LOG_METHOD);
hgs
parents:
diff changeset
   532
    buttonEvent(static_cast<ControlButtonIdentifier>(hsButtonIdentifier), Normal);
hgs
parents:
diff changeset
   533
}
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
/*!
hgs
parents:
diff changeset
   536
    Slot for closing FM Radio application from power button.
hgs
parents:
diff changeset
   537
 */
hgs
parents:
diff changeset
   538
void RadioHsWidget::closeRadio()
hgs
parents:
diff changeset
   539
{
hgs
parents:
diff changeset
   540
    LOG_SLOT_CALLER;
hgs
parents:
diff changeset
   541
    mRadioServiceClient->commandFmRadio(RadioServiceCommand::PowerOff);
hgs
parents:
diff changeset
   542
}
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
/*!
hgs
parents:
diff changeset
   545
    Slot for previous button clicked.
hgs
parents:
diff changeset
   546
 */
hgs
parents:
diff changeset
   547
void RadioHsWidget::changeToPreviousStation()
hgs
parents:
diff changeset
   548
{
hgs
parents:
diff changeset
   549
    LOG_SLOT_CALLER;
hgs
parents:
diff changeset
   550
    clearRadioInformation();
47
hgs
parents: 44
diff changeset
   551
    if (mFavoriteStationCount > 1) {
hgs
parents: 44
diff changeset
   552
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::PreviousFavorite);
hgs
parents: 44
diff changeset
   553
    }
hgs
parents: 44
diff changeset
   554
    else {
hgs
parents: 44
diff changeset
   555
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::Previous);
hgs
parents: 44
diff changeset
   556
    }
34
hgs
parents:
diff changeset
   557
}
hgs
parents:
diff changeset
   558
hgs
parents:
diff changeset
   559
/*!
hgs
parents:
diff changeset
   560
    Slot for next button clicked.
hgs
parents:
diff changeset
   561
 */
hgs
parents:
diff changeset
   562
void RadioHsWidget::changeToNextStation()
hgs
parents:
diff changeset
   563
{
hgs
parents:
diff changeset
   564
    LOG_SLOT_CALLER;
hgs
parents:
diff changeset
   565
    clearRadioInformation();
47
hgs
parents: 44
diff changeset
   566
    if (mFavoriteStationCount > 1) {
hgs
parents: 44
diff changeset
   567
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::NextFavorite);
hgs
parents: 44
diff changeset
   568
    }
hgs
parents: 44
diff changeset
   569
    else {
hgs
parents: 44
diff changeset
   570
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::Next);
hgs
parents: 44
diff changeset
   571
    }
34
hgs
parents:
diff changeset
   572
hgs
parents:
diff changeset
   573
}
hgs
parents:
diff changeset
   574
hgs
parents:
diff changeset
   575
/*!
hgs
parents:
diff changeset
   576
    Slot for bringing the radio application to foreground.
hgs
parents:
diff changeset
   577
 */
hgs
parents:
diff changeset
   578
void RadioHsWidget::changeRadioToForeground()
hgs
parents:
diff changeset
   579
{
hgs
parents:
diff changeset
   580
    LOG_SLOT_CALLER;
hgs
parents:
diff changeset
   581
    // If radio is not running start it to foreground by monitor request.
hgs
parents:
diff changeset
   582
    if (mFmRadioState == FmRadio::StateNotRunning) {
hgs
parents:
diff changeset
   583
        bool okToStartRadio = radioStartPermission();
hgs
parents:
diff changeset
   584
        if (okToStartRadio) {
hgs
parents:
diff changeset
   585
            handleRadioStateChange(FmRadio::StateStarting);
hgs
parents:
diff changeset
   586
            mRadioServiceClient->startMonitoring(
hgs
parents:
diff changeset
   587
                FmRadio::VisibiltyToForeground);
hgs
parents:
diff changeset
   588
        }
hgs
parents:
diff changeset
   589
    }
hgs
parents:
diff changeset
   590
    else {
hgs
parents:
diff changeset
   591
        if (mFmRadioState == FmRadio::StateClosing) {
hgs
parents:
diff changeset
   592
            // Radio is closing but user wants to power it up again.
hgs
parents:
diff changeset
   593
            mRadioServiceClient->commandFmRadio(RadioServiceCommand::PowerOn);
hgs
parents:
diff changeset
   594
            // Stop and start monitoring to get refresh.
hgs
parents:
diff changeset
   595
            mRadioServiceClient->stopMonitoring();
hgs
parents:
diff changeset
   596
            mRadioServiceClient->startMonitoring(
hgs
parents:
diff changeset
   597
                FmRadio::VisibiltyToBackground);
hgs
parents:
diff changeset
   598
            handleRadioStateChange(FmRadio::StateRunning);
hgs
parents:
diff changeset
   599
        }
hgs
parents:
diff changeset
   600
        // If radio is running, bring it to the foreground.
hgs
parents:
diff changeset
   601
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::Foreground);
hgs
parents:
diff changeset
   602
    }
hgs
parents:
diff changeset
   603
}
hgs
parents:
diff changeset
   604
hgs
parents:
diff changeset
   605
/*!
hgs
parents:
diff changeset
   606
    Slot for putting the radio application to the background.
hgs
parents:
diff changeset
   607
 */
hgs
parents:
diff changeset
   608
void RadioHsWidget::changeRadioToBackground()
hgs
parents:
diff changeset
   609
{
hgs
parents:
diff changeset
   610
    LOG_SLOT_CALLER;
hgs
parents:
diff changeset
   611
    // If radio is not running start it to background by monitor request.
hgs
parents:
diff changeset
   612
    if (mFmRadioState == FmRadio::StateNotRunning) {
hgs
parents:
diff changeset
   613
        bool okToStartRadio = radioStartPermission();
hgs
parents:
diff changeset
   614
        if (okToStartRadio) {
hgs
parents:
diff changeset
   615
            handleRadioStateChange(FmRadio::StateStarting);
hgs
parents:
diff changeset
   616
            mRadioServiceClient->startMonitoring(
hgs
parents:
diff changeset
   617
                FmRadio::VisibiltyToBackground);
hgs
parents:
diff changeset
   618
        }
hgs
parents:
diff changeset
   619
    }
hgs
parents:
diff changeset
   620
    else if (mFmRadioState == FmRadio::StateStarting) {
hgs
parents:
diff changeset
   621
        // Do nothing if radio is starting.
hgs
parents:
diff changeset
   622
    }
hgs
parents:
diff changeset
   623
    else if (mFmRadioState == FmRadio::StateClosing) {
hgs
parents:
diff changeset
   624
        // Radio is closing but user wants to power it up again.
hgs
parents:
diff changeset
   625
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::PowerOn);
hgs
parents:
diff changeset
   626
        // Stop and start monitoring to get refresh.
hgs
parents:
diff changeset
   627
        mRadioServiceClient->stopMonitoring();
hgs
parents:
diff changeset
   628
        mRadioServiceClient->startMonitoring(
hgs
parents:
diff changeset
   629
            FmRadio::VisibiltyToBackground);
hgs
parents:
diff changeset
   630
        handleRadioStateChange(FmRadio::StateRunning);
hgs
parents:
diff changeset
   631
    }
hgs
parents:
diff changeset
   632
    else {
hgs
parents:
diff changeset
   633
        // If radio is running, put it to the background.
hgs
parents:
diff changeset
   634
        // This is little bit useless because the radio is in background if
hgs
parents:
diff changeset
   635
        // user is able to click the widget.
hgs
parents:
diff changeset
   636
        mRadioServiceClient->commandFmRadio(RadioServiceCommand::Background);
hgs
parents:
diff changeset
   637
    }
hgs
parents:
diff changeset
   638
}
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
/*!
hgs
parents:
diff changeset
   641
    Powering off or on the radio.
hgs
parents:
diff changeset
   642
 */
hgs
parents:
diff changeset
   643
void RadioHsWidget::toggleRadioPower()
hgs
parents:
diff changeset
   644
{
hgs
parents:
diff changeset
   645
    LOG_SLOT_CALLER;
hgs
parents:
diff changeset
   646
    // If radio is not running start it to background by monitor request.
hgs
parents:
diff changeset
   647
    if (mFmRadioState == FmRadio::StateNotRunning || mFmRadioState == FmRadio::StateClosing) {
hgs
parents:
diff changeset
   648
        LEVEL2(LOG("Power on"));
hgs
parents:
diff changeset
   649
        // Start radio
hgs
parents:
diff changeset
   650
        changeRadioToBackground();
hgs
parents:
diff changeset
   651
    } else {
hgs
parents:
diff changeset
   652
        LEVEL2(LOG("Power off"));
hgs
parents:
diff changeset
   653
        // Close radio
hgs
parents:
diff changeset
   654
        closeRadio();
hgs
parents:
diff changeset
   655
    }
hgs
parents:
diff changeset
   656
}
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
/*!
hgs
parents:
diff changeset
   659
    Loads docml file.
hgs
parents:
diff changeset
   660
 
hgs
parents:
diff changeset
   661
    \param docml Docml filename to be loaded.
hgs
parents:
diff changeset
   662
 */
hgs
parents:
diff changeset
   663
void RadioHsWidget::load(const QString &docml)
hgs
parents:
diff changeset
   664
{
hgs
parents:
diff changeset
   665
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    QScopedPointer<HbDocumentLoader> documentLoader(new HbDocumentLoader());
hgs
parents:
diff changeset
   668
    bool loaded = false;
hgs
parents:
diff changeset
   669
    documentLoader->load(docml, &loaded);
hgs
parents:
diff changeset
   670
    if (loaded) {
hgs
parents:
diff changeset
   671
        // Find mainLayout
hgs
parents:
diff changeset
   672
        HbWidget *mainLayout = qobject_cast<HbWidget*> (
hgs
parents:
diff changeset
   673
            documentLoader->findWidget(DOCML_OBJECT_NAME_MAIN_LAYOUT));
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
        if (mainLayout) {
hgs
parents:
diff changeset
   676
            QGraphicsLinearLayout *widgetLayout = new QGraphicsLinearLayout(
hgs
parents:
diff changeset
   677
                Qt::Vertical, this);
hgs
parents:
diff changeset
   678
            widgetLayout->addItem(mainLayout);
hgs
parents:
diff changeset
   679
            setLayout(widgetLayout);
hgs
parents:
diff changeset
   680
        }
hgs
parents:
diff changeset
   681
hgs
parents:
diff changeset
   682
        // Find contentLayout
hgs
parents:
diff changeset
   683
        HbWidget *contentLayout = qobject_cast<HbWidget*> (
hgs
parents:
diff changeset
   684
            documentLoader->findWidget(DOCML_OBJECT_NAME_CONTENT_LAYOUT));
hgs
parents:
diff changeset
   685
        if (contentLayout) {
hgs
parents:
diff changeset
   686
hgs
parents:
diff changeset
   687
            // Find stacked layout for tuner area.
hgs
parents:
diff changeset
   688
            HbWidget *tunerStackedLayout = qobject_cast<HbWidget*> (
hgs
parents:
diff changeset
   689
                documentLoader->findWidget(
hgs
parents:
diff changeset
   690
                    DOCML_OBJECT_NAME_TUNER_STACKED_LAYOUT));
hgs
parents:
diff changeset
   691
            if (tunerStackedLayout) {
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
                // Find stacked layout for information area.
hgs
parents:
diff changeset
   694
                HbWidget *tunerInformationStackedLayout = qobject_cast<
hgs
parents:
diff changeset
   695
                    HbWidget*> (documentLoader->findWidget(
hgs
parents:
diff changeset
   696
                    DOCML_OBJECT_NAME_TUNER_INFORMATION_STACKED_LAYOUT));
hgs
parents:
diff changeset
   697
                if (tunerInformationStackedLayout) {
hgs
parents:
diff changeset
   698
                }
57
hgs
parents: 54
diff changeset
   699
                
hgs
parents: 54
diff changeset
   700
                // Find favorite icon.
hgs
parents: 54
diff changeset
   701
                mFavoriteIcon = qobject_cast<HbLabel *> (
hgs
parents: 54
diff changeset
   702
                    documentLoader->findWidget(
hgs
parents: 54
diff changeset
   703
                        DOCML_OBJECT_NAME_FAVORITE_ICON));
hgs
parents: 54
diff changeset
   704
                if (mFavoriteIcon) {
hgs
parents: 54
diff changeset
   705
                    mFavoriteIcon->setIcon(HbIcon(NON_FAVORITE_ICON_NAME));
hgs
parents: 54
diff changeset
   706
                    mFavoriteIcon->setVisible(false);
hgs
parents: 54
diff changeset
   707
                }
34
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
                // Find lonely label
hgs
parents:
diff changeset
   710
                mInformationLonelyRowLabel = qobject_cast<HbLabel *> (
hgs
parents:
diff changeset
   711
                    documentLoader->findWidget(
hgs
parents:
diff changeset
   712
                        DOCML_OBJECT_NAME_LONELY_ROW_LABEL));
hgs
parents:
diff changeset
   713
                if (mInformationLonelyRowLabel) {
hgs
parents:
diff changeset
   714
                    // TODO: Set the color in docml when application designer supports it.
hgs
parents:
diff changeset
   715
                    QColor color = HbColorScheme::color(
hgs
parents:
diff changeset
   716
                        "qtc_radio_tuner_normal");
hgs
parents:
diff changeset
   717
                    mInformationLonelyRowLabel->setTextColor(color);
hgs
parents:
diff changeset
   718
                }
57
hgs
parents: 54
diff changeset
   719
                
hgs
parents: 54
diff changeset
   720
                mAnimationIcon = qobject_cast<HbLabel *> (
hgs
parents: 54
diff changeset
   721
                    documentLoader->findWidget(
hgs
parents: 54
diff changeset
   722
                        DOCML_OBJECT_NAME_ANIMATION_ICON));
hgs
parents: 54
diff changeset
   723
                if (mAnimationIcon) {
hgs
parents: 54
diff changeset
   724
                    // Use animation manager to access anim loading animation.
hgs
parents: 54
diff changeset
   725
                    HbIconAnimationManager *animationManager =
hgs
parents: 54
diff changeset
   726
                        HbIconAnimationManager::global();
hgs
parents: 54
diff changeset
   727
                    // TODO: Axml extension can be removed after wk24 release.
hgs
parents: 54
diff changeset
   728
                    animationManager->addDefinitionFile(QLatin1String(
hgs
parents: 54
diff changeset
   729
                        "qtg_anim_loading.axml"));
hgs
parents: 54
diff changeset
   730
                    mAnimationIcon->setIcon(HbIcon("qtg_anim_loading"));
hgs
parents: 54
diff changeset
   731
                }
hgs
parents: 54
diff changeset
   732
hgs
parents: 54
diff changeset
   733
                // Find layout for one row with favorite icon
hgs
parents: 54
diff changeset
   734
                mInformationAreaOneRowWithFavoriteLayout = qobject_cast<
hgs
parents: 54
diff changeset
   735
                        QGraphicsWidget *> (documentLoader->findObject(
hgs
parents: 54
diff changeset
   736
                        DOCML_OBJECT_NAME_ONE_ROW_WITH_FAVORITE_LAYOUT));
hgs
parents: 54
diff changeset
   737
                if (mInformationAreaOneRowWithFavoriteLayout) {
hgs
parents: 54
diff changeset
   738
                    // Find one row
hgs
parents: 54
diff changeset
   739
                    mInformationOneRowWithFavoriteLabel = qobject_cast<
hgs
parents: 54
diff changeset
   740
                        HbLabel *> (documentLoader->findWidget(
hgs
parents: 54
diff changeset
   741
                        DOCML_OBJECT_NAME_ONE_ROW_WITH_FAVORITE_LABEL));
hgs
parents: 54
diff changeset
   742
                    if (mInformationOneRowWithFavoriteLabel) {
hgs
parents: 54
diff changeset
   743
                        // TODO: Set the color in docml when application designer supports it.
hgs
parents: 54
diff changeset
   744
                        QColor color = HbColorScheme::color(
hgs
parents: 54
diff changeset
   745
                            "qtc_radio_tuner_normal");
hgs
parents: 54
diff changeset
   746
                        mInformationOneRowWithFavoriteLabel->setTextColor(color);
hgs
parents: 54
diff changeset
   747
                    }
hgs
parents: 54
diff changeset
   748
                }
34
hgs
parents:
diff changeset
   749
hgs
parents:
diff changeset
   750
                // Find layout for two rows
hgs
parents:
diff changeset
   751
                mInformationAreaTwoRowsLayout = qobject_cast<
hgs
parents:
diff changeset
   752
                    QGraphicsWidget *> (documentLoader->findObject(
hgs
parents:
diff changeset
   753
                    DOCML_OBJECT_NAME_TWO_ROWS_LAYOUT));
hgs
parents:
diff changeset
   754
                if (mInformationAreaTwoRowsLayout) {
hgs
parents:
diff changeset
   755
                    // Find first row
57
hgs
parents: 54
diff changeset
   756
                    mInformationFirstRowWithFavoriteLabel = qobject_cast<HbLabel *> (
34
hgs
parents:
diff changeset
   757
                        documentLoader->findWidget(
57
hgs
parents: 54
diff changeset
   758
                            DOCML_OBJECT_NAME_FIRST_ROW_WITH_FAVORITE_LABEL));
hgs
parents: 54
diff changeset
   759
                    if (mInformationFirstRowWithFavoriteLabel) {
34
hgs
parents:
diff changeset
   760
                        // TODO: Set the color in docml when application designer supports it.
hgs
parents:
diff changeset
   761
                        QColor color = HbColorScheme::color(
hgs
parents:
diff changeset
   762
                            "qtc_radio_tuner_normal");
57
hgs
parents: 54
diff changeset
   763
                        mInformationFirstRowWithFavoriteLabel->setTextColor(color);
34
hgs
parents:
diff changeset
   764
                    }
hgs
parents:
diff changeset
   765
hgs
parents:
diff changeset
   766
                    // Find second row
hgs
parents:
diff changeset
   767
                    mInformationSecondRowLabel = qobject_cast<HbLabel *> (
hgs
parents:
diff changeset
   768
                        documentLoader->findWidget(
hgs
parents:
diff changeset
   769
                            DOCML_OBJECT_NAME_SECOND_ROW_LABEL));
hgs
parents:
diff changeset
   770
                    if (mInformationSecondRowLabel) {
hgs
parents:
diff changeset
   771
                        // TODO: Set the color in docml when application designer supports it.
hgs
parents:
diff changeset
   772
                        QColor color = HbColorScheme::color(
hgs
parents:
diff changeset
   773
                            "qtc_radio_tuner_normal");
hgs
parents:
diff changeset
   774
                        mInformationSecondRowLabel->setTextColor(color);
hgs
parents:
diff changeset
   775
                    }
hgs
parents:
diff changeset
   776
                }
hgs
parents:
diff changeset
   777
57
hgs
parents: 54
diff changeset
   778
                // Find push button for tuner area.
hgs
parents: 54
diff changeset
   779
                mInformationAreaBackgroundButton = qobject_cast<HbPushButton*> (
34
hgs
parents:
diff changeset
   780
                    documentLoader->findWidget(
57
hgs
parents: 54
diff changeset
   781
                        DOCML_OBJECT_NAME_TUNER_BACKGROUND_BUTTON));
hgs
parents: 54
diff changeset
   782
                if (mInformationAreaBackgroundButton) {
hgs
parents: 54
diff changeset
   783
                    // Use the frame background.
hgs
parents: 54
diff changeset
   784
                    HbFrameDrawer *tunerBackgroundButtonFrameDrawer =
hgs
parents: 54
diff changeset
   785
                        new HbFrameDrawer("qtg_fr_tuner",
hgs
parents: 54
diff changeset
   786
                            HbFrameDrawer::ThreePiecesHorizontal);
hgs
parents: 54
diff changeset
   787
                    tunerBackgroundButtonFrameDrawer->setFillWholeRect(true);
hgs
parents: 54
diff changeset
   788
                    mInformationAreaBackgroundButton->setFrameBackground(
hgs
parents: 54
diff changeset
   789
                        tunerBackgroundButtonFrameDrawer);
hgs
parents: 54
diff changeset
   790
                    // Connect the button's clicked signal. 
hgs
parents: 54
diff changeset
   791
                    Radio::connect(mInformationAreaBackgroundButton,
hgs
parents: 54
diff changeset
   792
                        SIGNAL(clicked()), this, SLOT(changeRadioToForeground()));
34
hgs
parents:
diff changeset
   793
                }
57
hgs
parents: 54
diff changeset
   794
                
34
hgs
parents:
diff changeset
   795
            }
hgs
parents:
diff changeset
   796
hgs
parents:
diff changeset
   797
            // Find layout for control buttons.
hgs
parents:
diff changeset
   798
            HbWidget *controlButtonsLayout = qobject_cast<HbWidget*> (
hgs
parents:
diff changeset
   799
                documentLoader->findWidget(
hgs
parents:
diff changeset
   800
                    DOCML_OBJECT_NAME_CONTROL_BUTTONS_LAYOUT));
hgs
parents:
diff changeset
   801
            if (controlButtonsLayout) {
hgs
parents:
diff changeset
   802
hgs
parents:
diff changeset
   803
                // Find power button.
hgs
parents:
diff changeset
   804
                mPowerButton
hgs
parents:
diff changeset
   805
                    = qobject_cast<HbPushButton *> (
hgs
parents:
diff changeset
   806
                        documentLoader->findWidget(
hgs
parents:
diff changeset
   807
                            DOCML_OBJECT_NAME_POWER_BUTTON));
hgs
parents:
diff changeset
   808
                if (mPowerButton) {
hgs
parents:
diff changeset
   809
                    defineButton(*mPowerButton,
hgs
parents:
diff changeset
   810
                        CONTROL_BUTTON_GRAPHICS_NORMAL, POWER_BUTTON_SUFFIX,
hgs
parents:
diff changeset
   811
                        POWER_BUTTON_ICON_ON,
hgs
parents:
diff changeset
   812
                        CONTROL_BUTTON_ICON_COLOR_NORMAL);
hgs
parents:
diff changeset
   813
                    // Connect the button's clicked signal.
44
hgs
parents: 38
diff changeset
   814
                    Radio::connect(mPowerButton, SIGNAL(clicked()),
hgs
parents: 38
diff changeset
   815
                                   this,         SLOT(toggleRadioPower()));
34
hgs
parents:
diff changeset
   816
                }
hgs
parents:
diff changeset
   817
hgs
parents:
diff changeset
   818
                // Find previous button.
hgs
parents:
diff changeset
   819
                mPreviousButton = qobject_cast<HbPushButton *> (
hgs
parents:
diff changeset
   820
                    documentLoader->findWidget(
hgs
parents:
diff changeset
   821
                        DOCML_OBJECT_NAME_PREVIOUS_BUTTON));
hgs
parents:
diff changeset
   822
                if (mPreviousButton) {
hgs
parents:
diff changeset
   823
                    defineButton(*mPreviousButton,
hgs
parents:
diff changeset
   824
                        CONTROL_BUTTON_GRAPHICS_DISABLED,
hgs
parents:
diff changeset
   825
                        PREVIOUS_BUTTON_SUFFIX, NULL,
hgs
parents:
diff changeset
   826
                        CONTROL_BUTTON_ICON_COLOR_DISABLED);
hgs
parents:
diff changeset
   827
                    // Connect the button's clicked signal.
44
hgs
parents: 38
diff changeset
   828
                    Radio::connect(mPreviousButton, SIGNAL(clicked()),
hgs
parents: 38
diff changeset
   829
                                   this,            SLOT(changeToPreviousStation()));
34
hgs
parents:
diff changeset
   830
                }
hgs
parents:
diff changeset
   831
hgs
parents:
diff changeset
   832
                // Find next button.
hgs
parents:
diff changeset
   833
                mNextButton
hgs
parents:
diff changeset
   834
                    = qobject_cast<HbPushButton *> (
hgs
parents:
diff changeset
   835
                        documentLoader->findWidget(
hgs
parents:
diff changeset
   836
                            DOCML_OBJECT_NAME_NEXT_BUTTON));
hgs
parents:
diff changeset
   837
                if (mNextButton) {
hgs
parents:
diff changeset
   838
                    defineButton(*mNextButton,
hgs
parents:
diff changeset
   839
                        CONTROL_BUTTON_GRAPHICS_DISABLED, NEXT_BUTTON_SUFFIX,
hgs
parents:
diff changeset
   840
                        NULL, CONTROL_BUTTON_ICON_COLOR_DISABLED);
hgs
parents:
diff changeset
   841
                    // Connect the button's clicked signal.
44
hgs
parents: 38
diff changeset
   842
                    Radio::connect(mNextButton, SIGNAL(clicked()),
hgs
parents: 38
diff changeset
   843
                                   this,        SLOT(changeToNextStation()));
34
hgs
parents:
diff changeset
   844
                }
hgs
parents:
diff changeset
   845
            }
hgs
parents:
diff changeset
   846
        }
hgs
parents:
diff changeset
   847
    }
hgs
parents:
diff changeset
   848
    else {
hgs
parents:
diff changeset
   849
        // Docml was not succesfully loaded. UI cannot be displayed.
hgs
parents:
diff changeset
   850
        // Emit error to home screen framework, which removes the widget. 
hgs
parents:
diff changeset
   851
        emit error();
hgs
parents:
diff changeset
   852
    }
hgs
parents:
diff changeset
   853
}
hgs
parents:
diff changeset
   854
hgs
parents:
diff changeset
   855
/*!
hgs
parents:
diff changeset
   856
    Groups handling of similar kind of radio information (textual) to one
hgs
parents:
diff changeset
   857
    function.
hgs
parents:
diff changeset
   858
hgs
parents:
diff changeset
   859
    \param informationType Type of changed information.
hgs
parents:
diff changeset
   860
    \param information Actual textual information.
hgs
parents:
diff changeset
   861
 */
hgs
parents:
diff changeset
   862
void RadioHsWidget::handleSimilarRadioInformation(
hgs
parents:
diff changeset
   863
    const FmRadioInformationType informationType, const QVariant &information)
hgs
parents:
diff changeset
   864
{
hgs
parents:
diff changeset
   865
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   866
    // TODO: Should information.toString() be checked for too many characters? What's the limit?
hgs
parents:
diff changeset
   867
    if (information.canConvert(QVariant::String) && updateRadioInformation(
hgs
parents:
diff changeset
   868
        informationType, information.toString())) {
hgs
parents:
diff changeset
   869
        LOG_FORMAT("informationType: %d, information: %s", informationType, GETSTRING(information.toString()));
hgs
parents:
diff changeset
   870
        changeInRadioInformation();
hgs
parents:
diff changeset
   871
    }
hgs
parents:
diff changeset
   872
}
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
/*!
hgs
parents:
diff changeset
   875
    Check if the the radio information is changed. If it is changed, it is
hgs
parents:
diff changeset
   876
    also updated.
hgs
parents:
diff changeset
   877
hgs
parents:
diff changeset
   878
    \param informationType Type of the information.
hgs
parents:
diff changeset
   879
    \param information  Information text.
hgs
parents:
diff changeset
   880
hgs
parents:
diff changeset
   881
    \returns Returns \c true, if information is updated. Returns \c false otherwise.
hgs
parents:
diff changeset
   882
 */
hgs
parents:
diff changeset
   883
bool RadioHsWidget::updateRadioInformation(const FmRadioInformationType informationType,
hgs
parents:
diff changeset
   884
    const QString &information)
hgs
parents:
diff changeset
   885
{
hgs
parents:
diff changeset
   886
    LOG_METHOD_RET("%d");
hgs
parents:
diff changeset
   887
    // If hash contains this type of information.
hgs
parents:
diff changeset
   888
    if (mRadioInformation.contains(informationType)) {
hgs
parents:
diff changeset
   889
        // If new information is empty.
hgs
parents:
diff changeset
   890
        if (information.isEmpty()) {
hgs
parents:
diff changeset
   891
            // Remove old information from the hash.
hgs
parents:
diff changeset
   892
            LEVEL2(LOG_FORMAT("informationType: %s removed", GETSTRING(informationType)));
hgs
parents:
diff changeset
   893
            mRadioInformation.remove(informationType);
hgs
parents:
diff changeset
   894
            // Return true to indicate the change.
hgs
parents:
diff changeset
   895
            return true;
hgs
parents:
diff changeset
   896
        }
hgs
parents:
diff changeset
   897
        // If new information differs from the old one.
hgs
parents:
diff changeset
   898
        if (mRadioInformation[informationType].compare(information) != 0) {
hgs
parents:
diff changeset
   899
            // Update the information.
hgs
parents:
diff changeset
   900
            LEVEL2(LOG_FORMAT("informationType: %s = %s", GETSTRING(informationType), GETSTRING(information)));
hgs
parents:
diff changeset
   901
            mRadioInformation[informationType] = information;
hgs
parents:
diff changeset
   902
            // And return true to indicate the change.
hgs
parents:
diff changeset
   903
            return true;
hgs
parents:
diff changeset
   904
        }
hgs
parents:
diff changeset
   905
    } else { // Hash do not contain this type of information.
hgs
parents:
diff changeset
   906
        // If new information is not empty.
hgs
parents:
diff changeset
   907
        if (!information.isEmpty()) {
hgs
parents:
diff changeset
   908
            // Add it to the hash.
hgs
parents:
diff changeset
   909
            LEVEL2(LOG_FORMAT("informationType: %s = %s", GETSTRING(informationType), GETSTRING(information)));
hgs
parents:
diff changeset
   910
            mRadioInformation[informationType] = information;
hgs
parents:
diff changeset
   911
            // Return true to indicate the change.
hgs
parents:
diff changeset
   912
            return true;
hgs
parents:
diff changeset
   913
        }
hgs
parents:
diff changeset
   914
    }
hgs
parents:
diff changeset
   915
    // Return false to indicate that nothing changed.
hgs
parents:
diff changeset
   916
    return false;
hgs
parents:
diff changeset
   917
}
hgs
parents:
diff changeset
   918
hgs
parents:
diff changeset
   919
/*!
hgs
parents:
diff changeset
   920
    Formatting radio information texts after a change.
hgs
parents:
diff changeset
   921
 */
hgs
parents:
diff changeset
   922
void RadioHsWidget::changeInRadioInformation()
hgs
parents:
diff changeset
   923
{
hgs
parents:
diff changeset
   924
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   925
    // Clear the rows.
hgs
parents:
diff changeset
   926
    mRadioInformationFirstRow.clear();
hgs
parents:
diff changeset
   927
    mRadioInformationSecondRow.clear();
hgs
parents:
diff changeset
   928
hgs
parents:
diff changeset
   929
    // First row contains station name.
hgs
parents:
diff changeset
   930
    if (mRadioInformation.contains(StationName)) {
hgs
parents:
diff changeset
   931
        mRadioInformationFirstRow.append(mRadioInformation.value(StationName));
hgs
parents:
diff changeset
   932
    }
hgs
parents:
diff changeset
   933
    else if (mRadioInformation.contains(Frequency)) {
hgs
parents:
diff changeset
   934
        // Or frequency.
hgs
parents:
diff changeset
   935
        mRadioInformationFirstRow.append(mRadioInformation.value(Frequency));
hgs
parents:
diff changeset
   936
    } LEVEL2(LOG_FORMAT("mRadioInformationFirstRow: %s", GETSTRING(mRadioInformationFirstRow)));
hgs
parents:
diff changeset
   937
hgs
parents:
diff changeset
   938
    // Second row of information contains radio text.
hgs
parents:
diff changeset
   939
    if (mRadioInformation.contains(RadioText)) {
hgs
parents:
diff changeset
   940
        mRadioInformationSecondRow.append(mRadioInformation.value(RadioText));
hgs
parents:
diff changeset
   941
    }
hgs
parents:
diff changeset
   942
    else if (mRadioInformation.contains(DynamicPsName)) {
hgs
parents:
diff changeset
   943
        // Or Dynamic PS name.
hgs
parents:
diff changeset
   944
        mRadioInformationSecondRow.append(mRadioInformation.value(DynamicPsName));
hgs
parents:
diff changeset
   945
    }
hgs
parents:
diff changeset
   946
    else if (mRadioInformation.contains(Pty)) {
hgs
parents:
diff changeset
   947
        // Or PTY.
hgs
parents:
diff changeset
   948
        mRadioInformationSecondRow.append(mRadioInformation.value(Pty));
hgs
parents:
diff changeset
   949
    }
hgs
parents:
diff changeset
   950
    LEVEL2(LOG_FORMAT("mRadioInformationSecondRow: %s", GETSTRING(mRadioInformationSecondRow)));
hgs
parents:
diff changeset
   951
    
hgs
parents:
diff changeset
   952
    // If second row is empty.
hgs
parents:
diff changeset
   953
    if (mRadioInformationSecondRow.isEmpty()) {
57
hgs
parents: 54
diff changeset
   954
        if (mCurrentStationIsFavorite) {
hgs
parents: 54
diff changeset
   955
            // Show favorite icon and one row.
hgs
parents: 54
diff changeset
   956
            mInformationOneRowWithFavoriteLabel->setPlainText(mRadioInformationFirstRow);
hgs
parents: 54
diff changeset
   957
            qreal width = mInformationOneRowWithFavoriteLabel->rect().width();
hgs
parents: 54
diff changeset
   958
            QFont font = mInformationOneRowWithFavoriteLabel->font();
hgs
parents: 54
diff changeset
   959
            QFontMetrics fm(font);
hgs
parents: 54
diff changeset
   960
            int textWidth = fm.width(mRadioInformationFirstRow);
hgs
parents: 54
diff changeset
   961
            if (width < textWidth) {
hgs
parents: 54
diff changeset
   962
                int a = 4;
hgs
parents: 54
diff changeset
   963
            }
hgs
parents: 54
diff changeset
   964
            changeInformationAreaLayout(OneRowWithFavorite);
hgs
parents: 54
diff changeset
   965
        } else {
hgs
parents: 54
diff changeset
   966
            // Show only the lonely row.
hgs
parents: 54
diff changeset
   967
            mInformationLonelyRowLabel->setPlainText(mRadioInformationFirstRow);
hgs
parents: 54
diff changeset
   968
            changeInformationAreaLayout(OneRowWithFavorite);
hgs
parents: 54
diff changeset
   969
        }
hgs
parents: 54
diff changeset
   970
    } else {
34
hgs
parents:
diff changeset
   971
        // Else display both rows.
57
hgs
parents: 54
diff changeset
   972
        mInformationFirstRowWithFavoriteLabel->setPlainText(mRadioInformationFirstRow);
34
hgs
parents:
diff changeset
   973
        mInformationSecondRowLabel->setPlainText(mRadioInformationSecondRow);
57
hgs
parents: 54
diff changeset
   974
        changeInformationAreaLayout(TwoRowsWithFavorite);
34
hgs
parents:
diff changeset
   975
    }
hgs
parents:
diff changeset
   976
}
hgs
parents:
diff changeset
   977
hgs
parents:
diff changeset
   978
/*!
hgs
parents:
diff changeset
   979
    Clears the radio station information. For example, when the station is
hgs
parents:
diff changeset
   980
    changed, old information should be cleared.
hgs
parents:
diff changeset
   981
 */
hgs
parents:
diff changeset
   982
void RadioHsWidget::clearRadioInformation()
hgs
parents:
diff changeset
   983
{
hgs
parents:
diff changeset
   984
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
   985
    mRadioInformation.clear();
hgs
parents:
diff changeset
   986
}
hgs
parents:
diff changeset
   987
hgs
parents:
diff changeset
   988
/*!
hgs
parents:
diff changeset
   989
    Changes visible widgets of information area stacked layout.
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
    \param layout The layout to switch visible.
hgs
parents:
diff changeset
   992
 */
hgs
parents:
diff changeset
   993
void RadioHsWidget::changeInformationAreaLayout(const InformationAreaLayout layout)
hgs
parents:
diff changeset
   994
{
hgs
parents:
diff changeset
   995
    LOG_METHOD_ENTER;
57
hgs
parents: 54
diff changeset
   996
    if (layout == OneRowWithFavorite || layout == TwoRowsWithFavorite) {
hgs
parents: 54
diff changeset
   997
        changeFavoriteIcon(true);
hgs
parents: 54
diff changeset
   998
    } else {
hgs
parents: 54
diff changeset
   999
        changeFavoriteIcon(false);
hgs
parents: 54
diff changeset
  1000
    }
34
hgs
parents:
diff changeset
  1001
    mInformationLonelyRowLabel->setVisible(layout == OneRow);
57
hgs
parents: 54
diff changeset
  1002
    mInformationAreaOneRowWithFavoriteLayout->setVisible(layout == OneRowWithFavorite);
hgs
parents: 54
diff changeset
  1003
    mInformationAreaTwoRowsLayout->setVisible(layout == TwoRowsWithFavorite);
34
hgs
parents:
diff changeset
  1004
    mAnimationIcon->setVisible(layout == Animation);
hgs
parents:
diff changeset
  1005
}
hgs
parents:
diff changeset
  1006
hgs
parents:
diff changeset
  1007
/*!
57
hgs
parents: 54
diff changeset
  1008
    Changes visibility of favorite icon. Changes also the icon between
hgs
parents: 54
diff changeset
  1009
    favorite and unfavorite.
hgs
parents: 54
diff changeset
  1010
hgs
parents: 54
diff changeset
  1011
    \param visibility \c true favorite icon is visible and \c false the icon
hgs
parents: 54
diff changeset
  1012
    is invisible.
hgs
parents: 54
diff changeset
  1013
 */
hgs
parents: 54
diff changeset
  1014
void RadioHsWidget::changeFavoriteIcon(bool visibility)
hgs
parents: 54
diff changeset
  1015
{
hgs
parents: 54
diff changeset
  1016
    LEVEL2(LOG_METHOD);
hgs
parents: 54
diff changeset
  1017
    if (mCurrentStationIsFavorite) {
hgs
parents: 54
diff changeset
  1018
        mFavoriteIcon->setIcon(HbIcon(FAVORITE_ICON_NAME));
hgs
parents: 54
diff changeset
  1019
    } else {
hgs
parents: 54
diff changeset
  1020
        mFavoriteIcon->setIcon(HbIcon(NON_FAVORITE_ICON_NAME));
hgs
parents: 54
diff changeset
  1021
    }
hgs
parents: 54
diff changeset
  1022
    mFavoriteIcon->setVisible(visibility);
hgs
parents: 54
diff changeset
  1023
}
hgs
parents: 54
diff changeset
  1024
hgs
parents: 54
diff changeset
  1025
/*!
34
hgs
parents:
diff changeset
  1026
    Changes state of power button.
hgs
parents:
diff changeset
  1027
    
hgs
parents:
diff changeset
  1028
    \param isPowerOn \c true the power is on and \c false the power is off.
hgs
parents:
diff changeset
  1029
 */
hgs
parents:
diff changeset
  1030
void RadioHsWidget::changePowerButtonOn(const bool isPowerOn)
hgs
parents:
diff changeset
  1031
{
hgs
parents:
diff changeset
  1032
    LEVEL2(LOG_METHOD);
hgs
parents:
diff changeset
  1033
    if (isPowerOn) {
hgs
parents:
diff changeset
  1034
        LEVEL2(LOG("Power on"));
57
hgs
parents: 54
diff changeset
  1035
        // TODO: Temporarily set the text to clarify the action it performs.
hgs
parents: 54
diff changeset
  1036
        // Remove when graphics displays the difference.
hgs
parents: 54
diff changeset
  1037
        mPowerButton->setText("Off");
34
hgs
parents:
diff changeset
  1038
        buttonEvent(Power, Latched);
hgs
parents:
diff changeset
  1039
    } else {
hgs
parents:
diff changeset
  1040
        LEVEL2(LOG("Power off"));
57
hgs
parents: 54
diff changeset
  1041
        // TODO: Temporarily set the text to clarify the action it performs.
hgs
parents: 54
diff changeset
  1042
        // Remove when graphics displays the difference.
hgs
parents: 54
diff changeset
  1043
        mPowerButton->setText("On");
34
hgs
parents:
diff changeset
  1044
        buttonEvent(Power, Normal);
hgs
parents:
diff changeset
  1045
    }
hgs
parents:
diff changeset
  1046
}
hgs
parents:
diff changeset
  1047
hgs
parents:
diff changeset
  1048
/*!
hgs
parents:
diff changeset
  1049
    Changes enabled state of station buttons.
hgs
parents:
diff changeset
  1050
 */
hgs
parents:
diff changeset
  1051
void RadioHsWidget::enableStationButtons()
hgs
parents:
diff changeset
  1052
{
hgs
parents:
diff changeset
  1053
    LEVEL2(LOG_METHOD_ENTER);
47
hgs
parents: 44
diff changeset
  1054
    LOG_FORMAT("RadioHsWidget::enableStationButtons count: %d", mLocalStationCount);
36
hgs
parents: 34
diff changeset
  1055
    if (mFmRadioState == FmRadio::StateAntennaNotConnected){
hgs
parents: 34
diff changeset
  1056
        changeButtonToDisabled(Next);
hgs
parents: 34
diff changeset
  1057
        changeButtonToDisabled(Previous);
hgs
parents: 34
diff changeset
  1058
    }
47
hgs
parents: 44
diff changeset
  1059
    else if (mLocalStationCount + mFavoriteStationCount > 1) {
34
hgs
parents:
diff changeset
  1060
        changeButtonToEnabled(Next);
hgs
parents:
diff changeset
  1061
        changeButtonToEnabled(Previous);
hgs
parents:
diff changeset
  1062
    }
47
hgs
parents: 44
diff changeset
  1063
    else {
34
hgs
parents:
diff changeset
  1064
        changeButtonToDisabled(Next);
hgs
parents:
diff changeset
  1065
        changeButtonToDisabled(Previous);
hgs
parents:
diff changeset
  1066
    }
hgs
parents:
diff changeset
  1067
}
hgs
parents:
diff changeset
  1068
hgs
parents:
diff changeset
  1069
/*!
hgs
parents:
diff changeset
  1070
    Makes homescreen specific push button based on parameters.
hgs
parents:
diff changeset
  1071
 
hgs
parents:
diff changeset
  1072
    \param target Target push button to modify. Must not be NULL.
hgs
parents:
diff changeset
  1073
    \param graphicsId Defines the target button background graphics.
hgs
parents:
diff changeset
  1074
    \param suffix Defines the suffix for the target button background graphics.
hgs
parents:
diff changeset
  1075
    \param icon Defines the icon for the target button. 
hgs
parents:
diff changeset
  1076
    \param iconColor Defines the icon color for the target button. 
hgs
parents:
diff changeset
  1077
 */
hgs
parents:
diff changeset
  1078
void RadioHsWidget::defineButton(HbPushButton &target, const QString &graphicsId,
hgs
parents:
diff changeset
  1079
    const QStringList &suffix, const QString &icon, const QString &iconColor)
hgs
parents:
diff changeset
  1080
{
hgs
parents:
diff changeset
  1081
    LEVEL2(LOG_METHOD);
hgs
parents:
diff changeset
  1082
    HbFrameDrawer* drawer = NULL;
hgs
parents:
diff changeset
  1083
hgs
parents:
diff changeset
  1084
    // First check if the drawer is already created for this push button
hgs
parents:
diff changeset
  1085
    if (!target.frameBackground()) {
hgs
parents:
diff changeset
  1086
        LEVEL2(LOG("Creating new frame background."));
hgs
parents:
diff changeset
  1087
        // Nope, create one now
hgs
parents:
diff changeset
  1088
        drawer = new HbFrameDrawer(graphicsId,
hgs
parents:
diff changeset
  1089
            HbFrameDrawer::ThreePiecesHorizontal);
hgs
parents:
diff changeset
  1090
        target.setFrameBackground(drawer);
hgs
parents:
diff changeset
  1091
    }
hgs
parents:
diff changeset
  1092
    else {
hgs
parents:
diff changeset
  1093
        // Frame drawer already created, only need to update frame graphics
hgs
parents:
diff changeset
  1094
        drawer = target.frameBackground();
hgs
parents:
diff changeset
  1095
        drawer->setFrameGraphicsName(graphicsId);
hgs
parents:
diff changeset
  1096
    }
hgs
parents:
diff changeset
  1097
hgs
parents:
diff changeset
  1098
    // Set file name suffix list, so that drawer can load correct 3-piece graphic files 
hgs
parents:
diff changeset
  1099
    drawer->setFileNameSuffixList(suffix);
hgs
parents:
diff changeset
  1100
    
hgs
parents:
diff changeset
  1101
    // Set the icon, if it is not NULL
hgs
parents:
diff changeset
  1102
    if (!icon.isNull()) {
hgs
parents:
diff changeset
  1103
        target.setIcon(HbIcon(icon));
hgs
parents:
diff changeset
  1104
    }
hgs
parents:
diff changeset
  1105
hgs
parents:
diff changeset
  1106
    // Update also the icon color
hgs
parents:
diff changeset
  1107
    QColor color = HbColorScheme::color(iconColor);
hgs
parents:
diff changeset
  1108
    target.icon().setColor(color);
hgs
parents:
diff changeset
  1109
hgs
parents:
diff changeset
  1110
    // Lastly, check if the buttton is disabled
hgs
parents:
diff changeset
  1111
    if (iconColor == CONTROL_BUTTON_ICON_COLOR_DISABLED) {
hgs
parents:
diff changeset
  1112
        target.setEnabled(false);
hgs
parents:
diff changeset
  1113
    }
hgs
parents:
diff changeset
  1114
    else {
hgs
parents:
diff changeset
  1115
        target.setEnabled(true);
hgs
parents:
diff changeset
  1116
    }
hgs
parents:
diff changeset
  1117
}
hgs
parents:
diff changeset
  1118
hgs
parents:
diff changeset
  1119
/*!
hgs
parents:
diff changeset
  1120
    Prepares the information needed for displaying the button correctly
hgs
parents:
diff changeset
  1121
    reflecting its state.
hgs
parents:
diff changeset
  1122
 
hgs
parents:
diff changeset
  1123
    \param buttonId Identifies the button.
hgs
parents:
diff changeset
  1124
    \param state Tells in what state the button is.
hgs
parents:
diff changeset
  1125
 */
hgs
parents:
diff changeset
  1126
void RadioHsWidget::buttonEvent(ControlButtonIdentifier buttonId,
hgs
parents:
diff changeset
  1127
    const ControlButtonState state)
hgs
parents:
diff changeset
  1128
{
hgs
parents:
diff changeset
  1129
    LEVEL2(LOG_METHOD);
hgs
parents:
diff changeset
  1130
    HbPushButton* target = NULL;
hgs
parents:
diff changeset
  1131
    QStringList suffix;
hgs
parents:
diff changeset
  1132
    QString icon;
hgs
parents:
diff changeset
  1133
hgs
parents:
diff changeset
  1134
    switch (buttonId) {
hgs
parents:
diff changeset
  1135
    case Power:
hgs
parents:
diff changeset
  1136
        LEVEL2(LOG("Power"));
hgs
parents:
diff changeset
  1137
        target = mPowerButton;
hgs
parents:
diff changeset
  1138
        icon = POWER_BUTTON_ICON_ON;
hgs
parents:
diff changeset
  1139
        suffix = POWER_BUTTON_SUFFIX;
hgs
parents:
diff changeset
  1140
        break;
hgs
parents:
diff changeset
  1141
    case Previous:
hgs
parents:
diff changeset
  1142
        LEVEL2(LOG("Previous"));
hgs
parents:
diff changeset
  1143
        target = mPreviousButton;
hgs
parents:
diff changeset
  1144
        suffix = PREVIOUS_BUTTON_SUFFIX;
hgs
parents:
diff changeset
  1145
        break;
hgs
parents:
diff changeset
  1146
    case Next:
hgs
parents:
diff changeset
  1147
        LEVEL2(LOG("Next"));
hgs
parents:
diff changeset
  1148
        target = mNextButton;
hgs
parents:
diff changeset
  1149
        suffix = NEXT_BUTTON_SUFFIX;
hgs
parents:
diff changeset
  1150
        break;
hgs
parents:
diff changeset
  1151
    default:
hgs
parents:
diff changeset
  1152
        LOG("default case at buttonId");
hgs
parents:
diff changeset
  1153
        break;
hgs
parents:
diff changeset
  1154
    }
hgs
parents:
diff changeset
  1155
    
hgs
parents:
diff changeset
  1156
    QString buttonBackgroundGraphics;
hgs
parents:
diff changeset
  1157
    QString buttonIconColors;
hgs
parents:
diff changeset
  1158
    switch (state) {
hgs
parents:
diff changeset
  1159
    case Normal:
hgs
parents:
diff changeset
  1160
        LEVEL2(LOG("Normal"));
hgs
parents:
diff changeset
  1161
        target->setProperty("state", "normal");
hgs
parents:
diff changeset
  1162
        buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_NORMAL;
hgs
parents:
diff changeset
  1163
        buttonIconColors = CONTROL_BUTTON_ICON_COLOR_NORMAL;
hgs
parents:
diff changeset
  1164
        break;
hgs
parents:
diff changeset
  1165
    case Pressed:
hgs
parents:
diff changeset
  1166
        LEVEL2(LOG("Pressed"));
hgs
parents:
diff changeset
  1167
        target->setProperty("state", "pressed");
hgs
parents:
diff changeset
  1168
        buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_PRESSED;
hgs
parents:
diff changeset
  1169
        buttonIconColors = CONTROL_BUTTON_ICON_COLOR_PRESSED;
hgs
parents:
diff changeset
  1170
        break;
hgs
parents:
diff changeset
  1171
    case Disabled:
hgs
parents:
diff changeset
  1172
        LEVEL2(LOG("Disabled"));
hgs
parents:
diff changeset
  1173
        target->setProperty("state", "disabled");
hgs
parents:
diff changeset
  1174
        buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_DISABLED;
hgs
parents:
diff changeset
  1175
        buttonIconColors = CONTROL_BUTTON_ICON_COLOR_DISABLED;
hgs
parents:
diff changeset
  1176
        break;
hgs
parents:
diff changeset
  1177
    case Latched:
hgs
parents:
diff changeset
  1178
        LEVEL2(LOG("Latched"));
hgs
parents:
diff changeset
  1179
        target->setProperty("state", "latched");
hgs
parents:
diff changeset
  1180
        buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_LATCHED;
hgs
parents:
diff changeset
  1181
        buttonIconColors = CONTROL_BUTTON_ICON_COLOR_LATCHED;
hgs
parents:
diff changeset
  1182
        break;
hgs
parents:
diff changeset
  1183
    default:
hgs
parents:
diff changeset
  1184
        LOG("default case at button state");
hgs
parents:
diff changeset
  1185
        break;
hgs
parents:
diff changeset
  1186
    }
hgs
parents:
diff changeset
  1187
hgs
parents:
diff changeset
  1188
    RadioHsWidget::defineButton(*target, buttonBackgroundGraphics,
hgs
parents:
diff changeset
  1189
        suffix, icon, buttonIconColors);
hgs
parents:
diff changeset
  1190
}
hgs
parents:
diff changeset
  1191
hgs
parents:
diff changeset
  1192
/*!
hgs
parents:
diff changeset
  1193
    Disables specified push button.
hgs
parents:
diff changeset
  1194
 
hgs
parents:
diff changeset
  1195
    \param hsButtonIdentifier Which button is to be disabled.
hgs
parents:
diff changeset
  1196
 */
hgs
parents:
diff changeset
  1197
void RadioHsWidget::changeButtonToDisabled(int hsButtonIdentifier)
hgs
parents:
diff changeset
  1198
{
hgs
parents:
diff changeset
  1199
    LEVEL2(LOG_METHOD_ENTER);
hgs
parents:
diff changeset
  1200
    buttonEvent(static_cast<ControlButtonIdentifier>(hsButtonIdentifier), Disabled);
hgs
parents:
diff changeset
  1201
}
hgs
parents:
diff changeset
  1202
hgs
parents:
diff changeset
  1203
/*!
hgs
parents:
diff changeset
  1204
    Enabled specified push button.
hgs
parents:
diff changeset
  1205
 
hgs
parents:
diff changeset
  1206
    \param hsButtonIdentifier Which button is to be enabled.
hgs
parents:
diff changeset
  1207
 */
hgs
parents:
diff changeset
  1208
void RadioHsWidget::changeButtonToEnabled(int hsButtonIdentifier)
hgs
parents:
diff changeset
  1209
{
hgs
parents:
diff changeset
  1210
    LEVEL2(LOG_METHOD_ENTER);
hgs
parents:
diff changeset
  1211
    changeButtonToReleased(hsButtonIdentifier);
hgs
parents:
diff changeset
  1212
}
hgs
parents:
diff changeset
  1213
hgs
parents:
diff changeset
  1214
/*!
hgs
parents:
diff changeset
  1215
    Checks the profile of the device. If profile is offline, user is asked a
hgs
parents:
diff changeset
  1216
    permission to start the radio in offline profile. Dialog is shown on
hgs
parents:
diff changeset
  1217
    behalf of the radio asking the permission.    
hgs
parents:
diff changeset
  1218
    
hgs
parents:
diff changeset
  1219
    \returns \c true if radio can be started, \c false if device is in
hgs
parents:
diff changeset
  1220
    offline profile and user didn't gave permission to start the radio.  
hgs
parents:
diff changeset
  1221
 */
hgs
parents:
diff changeset
  1222
bool RadioHsWidget::radioStartPermission()
hgs
parents:
diff changeset
  1223
{
hgs
parents:
diff changeset
  1224
    LOG_METHOD_ENTER;
hgs
parents:
diff changeset
  1225
    // This is true by default because we might not be in offline profile and
hgs
parents:
diff changeset
  1226
    // starting the radio is allowed in other profiles without asking a
hgs
parents:
diff changeset
  1227
    // permission.
hgs
parents:
diff changeset
  1228
    bool radioStartPermssion = true;
38
hgs
parents: 36
diff changeset
  1229
    if (mProfileMonitor->isInOfflineMode()) {
34
hgs
parents:
diff changeset
  1230
        // Device is in offline profile, ask the user for permission to start
hgs
parents:
diff changeset
  1231
        HbDeviceMessageBox box(hbTrId(
hgs
parents:
diff changeset
  1232
            "txt_fmradiohswidget_rad_info_activate_radio_in_offline_mode_hs"),
hgs
parents:
diff changeset
  1233
            HbMessageBox::MessageTypeQuestion);
hgs
parents:
diff changeset
  1234
        box.setTimeout(HbPopup::NoTimeout);
hgs
parents:
diff changeset
  1235
        box.exec();
hgs
parents:
diff changeset
  1236
        // radioStartPermssion is now true or false, depending what the user
hgs
parents:
diff changeset
  1237
        // selected. If user didn't gave permission, then radio is not
hgs
parents:
diff changeset
  1238
        // started.
hgs
parents:
diff changeset
  1239
        radioStartPermssion = box.isAcceptAction(box.triggeredAction());
hgs
parents:
diff changeset
  1240
    }
hgs
parents:
diff changeset
  1241
    return radioStartPermssion;
hgs
parents:
diff changeset
  1242
}