radioapp/radioapplication/src/radioapplication.cpp
author hgs
Fri, 23 Jul 2010 10:16:59 +0300
changeset 38 f8c3d4e6102c
parent 34 bc10a61bd7d3
child 44 0a3ad94fc71c
permissions -rw-r--r--
201029
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     1
/*
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     3
* All rights reserved.
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     4
* This component and the accompanying materials are made available
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     6
* which accompanies this distribution, and is available
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     8
*
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
     9
* Initial Contributors:
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    11
*
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    12
* Contributors:
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    13
*
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    14
* Description:
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    15
*
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    16
*/
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    17
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    18
// System includes
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    19
#include <QTimer>
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    20
#include <HbDeviceMessageBox>
38
hgs
parents: 34
diff changeset
    21
#include <xqsettingsmanager.h>
hgs
parents: 34
diff changeset
    22
#include <xqsettingskey.h>
34
hgs
parents: 28
diff changeset
    23
#include <xqserviceutil.h>
hgs
parents: 28
diff changeset
    24
#include <HbSplashScreen>
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    25
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    26
// User includes
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    27
#include "radioapplication.h"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    28
#include "radiowindow.h"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    29
#include "radiouiengine.h"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    30
#include "radio_global.h"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    31
#include "radiologger.h"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    32
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    33
#ifdef BUILD_WIN32
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    34
#   include "testwindow_win32.h"
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    35
#   define CREATE_WIN32_TEST_WINDOW \
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    36
        mWin32Window.reset( new Win32Window() ); \
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    37
        mMainWindow->setParent( mWin32Window.data() ); \
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    38
        mWin32Window->addHbWindow( mMainWindow.data() ); \
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    39
        mWin32Window->show();
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    40
#   define INIT_WIN32_TEST_WINDOW \
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    41
        mWin32Window->init();
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    42
#else
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    43
#   define CREATE_WIN32_TEST_WINDOW
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    44
#   define INIT_WIN32_TEST_WINDOW
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    45
#endif // BUILD_WIN32
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    46
38
hgs
parents: 34
diff changeset
    47
hgs
parents: 34
diff changeset
    48
static XQSettingsKey gConnectionKey( XQSettingsKey::TargetCentralRepository, CENREP_CORE_APPLICATION_UIS, ID_NETWORK_CONNECTION_ALLOWED );
hgs
parents: 34
diff changeset
    49
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    50
/*!
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    51
 * Constructor
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    52
 */
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    53
RadioApplication::RadioApplication( int &argc, char *argv[] ) :
38
hgs
parents: 34
diff changeset
    54
    HbApplication( argc, argv, Hb::NoSplash ),
hgs
parents: 34
diff changeset
    55
    mSettingsManager( new XQSettingsManager( this ) )
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    56
{
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    57
    // Initializes the radio engine utils if UI logs are entered into the engine log
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    58
    INIT_COMBINED_LOGGER
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    59
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    60
    LOG_TIMESTAMP( "Start radio" );
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    61
    setApplicationName( hbTrId( "txt_rad_title_fm_radio" ) );
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    62
38
hgs
parents: 34
diff changeset
    63
    if ( XQServiceUtil::isService() ) {
hgs
parents: 34
diff changeset
    64
hgs
parents: 34
diff changeset
    65
        // Radio was started as a highway service from homescreen widget.
hgs
parents: 34
diff changeset
    66
        // Widget has already done the offline mode check so we can start without checking
hgs
parents: 34
diff changeset
    67
        init();
hgs
parents: 34
diff changeset
    68
hgs
parents: 34
diff changeset
    69
    } else {
hgs
parents: 34
diff changeset
    70
hgs
parents: 34
diff changeset
    71
        if ( isInOfflineMode() ) {
hgs
parents: 34
diff changeset
    72
            askOfflineModePermission( hbTrId( "txt_rad_info_activate_radio_in_offline_mode" ) );
hgs
parents: 34
diff changeset
    73
        } else {
hgs
parents: 34
diff changeset
    74
            init();
hgs
parents: 34
diff changeset
    75
        }
hgs
parents: 34
diff changeset
    76
34
hgs
parents: 28
diff changeset
    77
    }
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    78
}
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    79
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    80
/*!
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    81
 *
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    82
 */
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    83
RadioApplication::~RadioApplication()
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    84
{
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    85
    // Destructor needs to be defined. See explanation from RadioEngineWrapperPrivate destructor.
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    86
    // Releases the radio engine utils if it was initialized in the beginning
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    87
    RELEASE_COMBINED_LOGGER
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    88
}
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    89
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    90
/*!
34
hgs
parents: 28
diff changeset
    91
 * Private slot
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    92
 *
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    93
 */
38
hgs
parents: 34
diff changeset
    94
void RadioApplication::checkOfflineMode()
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    95
{
38
hgs
parents: 34
diff changeset
    96
    if ( isInOfflineMode() ) {
hgs
parents: 34
diff changeset
    97
        askOfflineModePermission( hbTrId( "txt_rad_info_continue_using_the_radio_in_offline" ) );
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
    98
    }
38
hgs
parents: 34
diff changeset
    99
}
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   100
38
hgs
parents: 34
diff changeset
   101
/*!
hgs
parents: 34
diff changeset
   102
 * Private slot
hgs
parents: 34
diff changeset
   103
 *
hgs
parents: 34
diff changeset
   104
 */
hgs
parents: 34
diff changeset
   105
void RadioApplication::handleOfflineQueryAnswer()
hgs
parents: 34
diff changeset
   106
{
hgs
parents: 34
diff changeset
   107
    HbDeviceMessageBox* box = static_cast<HbDeviceMessageBox*>( sender() );
hgs
parents: 34
diff changeset
   108
    box->deleteLater();
hgs
parents: 34
diff changeset
   109
    if ( box->isAcceptAction( box->triggeredAction() ) ) {
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   110
38
hgs
parents: 34
diff changeset
   111
        // If main window has not been created yet it means the offline question was asked during startup
hgs
parents: 34
diff changeset
   112
        // so we must continue with the startup sequence. If the main window was already created it means
hgs
parents: 34
diff changeset
   113
        // the question was asked when the radio was already running and the offline mode was activated.
hgs
parents: 34
diff changeset
   114
        // In that case there is no need to do anything since the user wants to continue listening to radio.
hgs
parents: 34
diff changeset
   115
        if ( !mMainWindow ) {
hgs
parents: 34
diff changeset
   116
            init();
hgs
parents: 34
diff changeset
   117
        }
24
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   118
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   119
    } else {
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   120
        quit();
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   121
    }
6df133bd92e1 Revert last code drop.
Pat Downey <patd@symbian.org>
parents:
diff changeset
   122
}
38
hgs
parents: 34
diff changeset
   123
hgs
parents: 34
diff changeset
   124
/*!
hgs
parents: 34
diff changeset
   125
 *
hgs
parents: 34
diff changeset
   126
 */
hgs
parents: 34
diff changeset
   127
void RadioApplication::init()
hgs
parents: 34
diff changeset
   128
{
hgs
parents: 34
diff changeset
   129
    // Try to optimize startup time by launching the radio server process as soon as possible.
hgs
parents: 34
diff changeset
   130
    // This way the server and UI are being initialized at the same time and the startup is faster.
hgs
parents: 34
diff changeset
   131
//        RadioUiEngine::launchRadioServer();
hgs
parents: 34
diff changeset
   132
hgs
parents: 34
diff changeset
   133
    // Splash screen needs to be shown when not started by homescreen widget
hgs
parents: 34
diff changeset
   134
    if ( !XQServiceUtil::isService() ) {
hgs
parents: 34
diff changeset
   135
        HbSplashScreen::setAppId( "fmradio" );
hgs
parents: 34
diff changeset
   136
        HbSplashScreen::start();
hgs
parents: 34
diff changeset
   137
    }
hgs
parents: 34
diff changeset
   138
hgs
parents: 34
diff changeset
   139
    Radio::connect( mSettingsManager,   SIGNAL(valueChanged(XQSettingsKey,QVariant)),
hgs
parents: 34
diff changeset
   140
                    this,               SLOT(checkOfflineMode()) );
hgs
parents: 34
diff changeset
   141
hgs
parents: 34
diff changeset
   142
    bool monitoringStarted = mSettingsManager->startMonitoring( gConnectionKey );
hgs
parents: 34
diff changeset
   143
    LOG_ASSERT( monitoringStarted, LOG( "Failed to start monitoring Offline mode!" ) );
hgs
parents: 34
diff changeset
   144
    Q_UNUSED( monitoringStarted );
hgs
parents: 34
diff changeset
   145
hgs
parents: 34
diff changeset
   146
    mMainWindow.reset( new RadioWindow() );
hgs
parents: 34
diff changeset
   147
hgs
parents: 34
diff changeset
   148
    CREATE_WIN32_TEST_WINDOW
hgs
parents: 34
diff changeset
   149
hgs
parents: 34
diff changeset
   150
    INIT_WIN32_TEST_WINDOW
hgs
parents: 34
diff changeset
   151
hgs
parents: 34
diff changeset
   152
    // Construct the real views
hgs
parents: 34
diff changeset
   153
    mMainWindow->init();
hgs
parents: 34
diff changeset
   154
hgs
parents: 34
diff changeset
   155
    mMainWindow->show();
hgs
parents: 34
diff changeset
   156
}
hgs
parents: 34
diff changeset
   157
hgs
parents: 34
diff changeset
   158
/*!
hgs
parents: 34
diff changeset
   159
 *
hgs
parents: 34
diff changeset
   160
 */
hgs
parents: 34
diff changeset
   161
bool RadioApplication::isInOfflineMode() const
hgs
parents: 34
diff changeset
   162
{
hgs
parents: 34
diff changeset
   163
    const QVariant connectionAllowed = mSettingsManager->readItemValue( gConnectionKey );
hgs
parents: 34
diff changeset
   164
    if ( connectionAllowed.canConvert( QVariant::Int ) && connectionAllowed.toInt() == NetworkNotAllowed ) {
hgs
parents: 34
diff changeset
   165
        return true;
hgs
parents: 34
diff changeset
   166
    }
hgs
parents: 34
diff changeset
   167
hgs
parents: 34
diff changeset
   168
    return false;
hgs
parents: 34
diff changeset
   169
}
hgs
parents: 34
diff changeset
   170
hgs
parents: 34
diff changeset
   171
/*!
hgs
parents: 34
diff changeset
   172
 *
hgs
parents: 34
diff changeset
   173
 */
hgs
parents: 34
diff changeset
   174
void RadioApplication::askOfflineModePermission( const QString& question )
hgs
parents: 34
diff changeset
   175
{
hgs
parents: 34
diff changeset
   176
    HbDeviceMessageBox* box = new HbDeviceMessageBox( question, HbMessageBox::MessageTypeQuestion, this );
hgs
parents: 34
diff changeset
   177
    box->setStandardButtons( HbMessageBox::Yes | HbMessageBox::No );
hgs
parents: 34
diff changeset
   178
    box->setTimeout( HbPopup::NoTimeout );
hgs
parents: 34
diff changeset
   179
    box->setDismissPolicy( HbPopup::NoDismiss );
hgs
parents: 34
diff changeset
   180
    Radio::connect( box,    SIGNAL(aboutToClose()),
hgs
parents: 34
diff changeset
   181
                    this,   SLOT(handleOfflineQueryAnswer()) );
hgs
parents: 34
diff changeset
   182
    box->show();
hgs
parents: 34
diff changeset
   183
}