--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/brdo.layers.sysdef.xml Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd"
+ [ <!ENTITY layer_real_source_path "sf/app/webuis" > ]>
+
+<SystemDefinition name="webuis" schema="1.4.0">
+ <systemModel>
+ <layer name="app_layer">
+ <module name="browserui">
+ <unit unitID="browser" name="browser" bldFile="&layer_real_source_path;/browserui/browser/group" mrp=""/>
+ <unit unitID="operatormenu" name="operatormenu" bldFile="&layer_real_source_path;/browserui/operatormenu/group" mrp=""/>
+ <unit unitID="videoservices" name="videoservices" bldFile="&layer_real_source_path;/browserui/videoservices/group" mrp=""/>
+ </module>
+ <module name="browserplugins">
+ <unit unitID="browsersysteminfoplugin" name="browsersysteminfoplugin" bldFile="&layer_real_source_path;/browserplugins/browsersysteminfoplugin/group" mrp=""/>
+ <unit unitID="browsergpsplugin" name="browsergpsplugin" bldFile="&layer_real_source_path;/browserplugins/browsergpsplugin/group" mrp=""/>
+ <unit unitID="browseraudiovideoplugin" name="browseraudiovideoplugin" bldFile="&layer_real_source_path;/browserplugins/browseraudiovideoplugin/group" mrp=""/>
+ </module>
+ <module name="pushmtm">
+ <unit unitID="pushmtm" name="pushmtm" bldFile="&layer_real_source_path;/pushmtm/group" mrp=""/>
+ </module>
+ </layer>
+ </systemModel>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/BWINS/npBrowserAudioVideoPlugin.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+ ?InitializeFuncs@@YAFPAU_NPPluginFuncs@@@Z @ 2 NONAME ; short InitializeFuncs(struct _NPPluginFuncs *)
+ ?NPP_Shutdown@@YAXXZ @ 3 NONAME ; void NPP_Shutdown(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/EABI/npBrowserAudioVideoPlugin.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,22 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+ _Z12NPP_Shutdownv @ 2 NONAME
+ _Z15InitializeFuncsP14_NPPluginFuncs @ 3 NONAME
+ _ZTI11CBavpPlugin @ 4 NONAME ; #<TI>#
+ _ZTI15CBavpController @ 5 NONAME ; #<TI>#
+ _ZTI16CBavpHwKeyEvents @ 6 NONAME ; #<TI>#
+ _ZTI18CBavpVolumeHandler @ 7 NONAME ; #<TI>#
+ _ZTI19CBavpPluginEcomMain @ 8 NONAME ; #<TI>#
+ _ZTI20CBavpControllerAudio @ 9 NONAME ; #<TI>#
+ _ZTI20CBavpControllerVideo @ 10 NONAME ; #<TI>#
+ _ZTI9CBavpView @ 11 NONAME ; #<TI>#
+ _ZTV11CBavpPlugin @ 12 NONAME ; #<VT>#
+ _ZTV15CBavpController @ 13 NONAME ; #<VT>#
+ _ZTV16CBavpHwKeyEvents @ 14 NONAME ; #<VT>#
+ _ZTV18CBavpVolumeHandler @ 15 NONAME ; #<VT>#
+ _ZTV19CBavpPluginEcomMain @ 16 NONAME ; #<VT>#
+ _ZTV20CBavpControllerAudio @ 17 NONAME ; #<VT>#
+ _ZTV20CBavpControllerVideo @ 18 NONAME ; #<VT>#
+ _ZTV9CBavpView @ 19 NONAME ; #<VT>#
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/data/10282810.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Registry file for Ecom style Browser Audio Video Plugin.
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+#include "BrowserAudioVideoPlugin.rls"
+
+// RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+// Registry info
+// The UIDs for the filters implemented in this DLL
+// -----------------------------------------------------------------------------
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = 0x10282810; // should match the name of the file.
+ // 3rd Uid of associated plugin dll (declared in the dll mmp file)
+
+ interfaces=
+ {
+ INTERFACE_INFO
+ {
+ // Identifies plugin type (used by ECom)
+ interface_uid = 0x101F8810;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ // Specific implementation (must match an implementation entry in the dll)
+ implementation_uid = 0x10282811;
+ version_no = 2;
+ // File name;Plugin's name
+ display_name = STRING_r_browser_audio_video_plugin;
+ // Mimetypes and mime extensions
+ default_data = STRING_r_mime_application;
+ // Plugin's description
+ opaque_data = STRING_r_browser_audio_video_plugin_desc;
+ },
+ IMPLEMENTATION_INFO
+ {
+ // Specific implementation (must match an implementation entry in the dll)
+ implementation_uid = 0x10282812;
+ version_no = 2;
+ // Filename;Plugin's name
+ display_name = STRING_r_browser_audio_video_plugin;
+ // Supported mimetype and extensions
+ default_data = STRING_r_mime_audio;
+ // Plugin's description
+ opaque_data = STRING_r_browser_audio_video_plugin_desc;
+ },
+ IMPLEMENTATION_INFO
+ {
+ // Specific implementation (must match an implementation entry in the dll)
+ implementation_uid = 0x10282813;
+ version_no = 2;
+ // Filename;Plugin's name
+ display_name = STRING_r_browser_audio_video_plugin;
+ // Supported mimetype and extensions
+ default_data = STRING_r_mime_video;
+ // Plugin's description
+ opaque_data = STRING_r_browser_audio_video_plugin_desc;
+ },
+ IMPLEMENTATION_INFO
+ {
+ // Specific implementation (must match an implementation entry in the dll)
+ implementation_uid = 0x10282814;
+ version_no = 2;
+ // Filename;Plugin's name
+ display_name = STRING_r_browser_audio_video_plugin;
+ // Supported mimetype and extensions
+ default_data = STRING_r_mime_wax_wvx_asx;
+ // Plugin's description
+ opaque_data = STRING_r_browser_audio_video_plugin_desc;
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/data/BrowserAudioVideoPlugin.rls Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the strings for resources of the BAVP.
+*
+*/
+
+
+rls_string STRING_r_browser_audio_video_plugin "npBrowserAudioVideoPlugin.dll;Audio Video - Real Player Plugin"
+rls_string STRING_r_browser_audio_video_plugin_desc "Audio Video Plugin for S60 Browser"
+
+rls_string STRING_r_mime_application "application/vnd.nokia.ringing-tone;rng,dm,dcf|application/vnd.nokia.ringing-tone;nrt,dm,dcf|application/sdp;sdp|application/vnd.rn-realmedia;rm"
+rls_string STRING_r_mime_audio "audio/*;3gp,3g2,amr,au,aac,awb,dcf,dm,mid,midi,mxmf,mp3,m4a,mp4,ra,ram,rpm,rmf,spmid,wav,wma"
+rls_string STRING_r_mime_video "video/*;3gp,mpeg,ram,rm,rv,wmv"
+rls_string STRING_r_mime_wax_wvx_asx "audio/x-ms-wax;wax|audio/x-ms-wvx;wvx|video/x-ms-asf;asx"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/data/BrowserAudioVideoPlugin.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,312 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the resources for the Browser Media Plugin
+*
+*/
+
+
+
+// RESOURCE IDENTIFIER
+NAME BAVP // 4 letter resource identifier
+
+// INCLUDES
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.loc>
+#include <eikon.rh>
+#include <avkon.mbg>
+
+#include <BrowserAudioVideoPlugin.mbg>
+
+#include "BrowserAudioVideoPlugin.hrh"
+#include <browseraudiovideoplugin.loc>
+#include <WmlBrowser.loc>
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF
+ {
+ buf = "";
+ }
+
+// ---------------------------------------------------
+//
+// r_note_invalid_clip
+// Note that the clip that is not supported in BAVP
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_note_invalid_clip
+ {
+ buf = qtn_mp_note_invalid_clip;
+ }
+
+//----------------------------------------------------
+//
+// r_akntapoplist_menu_volume_items
+// menu items definition for test pattern 1
+//----------------------------------------------------
+RESOURCE ARRAY r_akntapoplist_menu_volume_items
+ {
+ items =
+ {
+ LBUF { txt = qtn_browsers_sett_volume_muted; },
+ LBUF { txt = qtn_browsers_sett_volume_1; },
+ LBUF { txt = qtn_browsers_sett_volume_2; },
+ LBUF { txt = qtn_browsers_sett_volume_3; },
+ LBUF { txt = qtn_browsers_sett_volume_4; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_akntapoplist_select_message
+// message for selection
+//----------------------------------------------------
+RESOURCE TBUF64 r_akntapoplist_select_message
+ {
+ buf = qtn_akntapoplist_select_message;
+ }
+
+// ===================================================
+// Browser Media (Audio Video) Plugin controls
+// ===================================================
+RESOURCE TBUF r_text_video_plugin_play { buf = qtn_video_plugin_play; }
+RESOURCE TBUF r_text_video_plugin_stop { buf = qtn_video_plugin_stop; }
+RESOURCE TBUF r_text_video_plugin_pause { buf = qtn_video_plugin_pause; }
+RESOURCE TBUF r_text_video_plugin_full_screen { buf = qtn_video_plugin_full_screen; }
+RESOURCE TBUF r_text_video_plugin_media_volume { buf = qtn_browsers_sett_media_volume; }
+RESOURCE TBUF r_text_video_plugin_volume_mute { buf = qtn_video_plugin_mute; }
+RESOURCE TBUF r_text_video_plugin_rewind { buf = qtn_video_plugin_rewind; }
+RESOURCE TBUF r_text_video_plugin_fast_forward { buf = qtn_video_plugin_fast_forward; }
+
+RESOURCE BMPANIM_DATA r_animation_buffering
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_animation_buffering_array;
+ }
+
+RESOURCE ARRAY r_animation_buffering_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_buffering11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_audio_only_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_audio_only_animation_array;
+ }
+
+RESOURCE ARRAY r_audio_only_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_video11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_no_content_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_no_content_animation_array;
+ }
+
+RESOURCE ARRAY r_no_content_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_no_buffering_broken11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_video_stopped_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_video_stopped_animation_array;
+ }
+
+RESOURCE ARRAY r_video_stopped_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_stopped11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_video_paused_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_video_paused_animation_array;
+ }
+
+RESOURCE ARRAY r_video_paused_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_video_paused11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_audio_stopped_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_audio_stopped_animation_array;
+ }
+
+RESOURCE ARRAY r_audio_stopped_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_stopped11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_audio_paused_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_audio_paused_animation_array;
+ }
+
+RESOURCE ARRAY r_audio_paused_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_paused11; }
+ };
+ }
+
+RESOURCE BMPANIM_DATA r_audio_play_animation
+ {
+ frameinterval=150; // milli seconds
+ playmode = EAknBitmapAnimationPlayModeCycle;
+ bmpfile = "Z:\\Resource\\Apps\\BrowserAudioVideoPlugin_aif.mif";
+ frames = r_audio_play_animation_array;
+ }
+
+RESOURCE ARRAY r_audio_play_animation_array
+ {
+ items =
+ {
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing00; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing01; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing02; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing03; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing04; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing05; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing06; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing07; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing08; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing09; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing10; },
+ BMPANIM_FRAME { bmpid = EMbmBrowseraudiovideopluginQgn_graf_video_plugin_anim_audio_playing11; }
+ };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/group/BLD.INF Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project build file for BrowserAudioVideoPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// export localization files
+../loc/browseraudiovideoplugin.loc APP_LAYER_LOC_EXPORT_PATH(browseraudiovideoplugin.loc)
+../rom/BrowserAudioVideoPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPlugin.iby)
+../rom/BrowserAudioVideoPluginResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPluginResources.iby)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+gnumakefile BrowserAudioVideoPluginIcon.mk
+
+BrowserAudioVideoPluginEcom.mmp // Plugin mmp file
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE BrowserAudioVideoPlugin_aif.mif
+OPTION HEADERFILE BrowserAudioVideoPlugin.mbg
+OPTION SOURCEFILE iconlist.txt
+END
+
+PRJ_MMPFILES
+
+BrowserAudioVideoPluginEcom.mmp // Plugin mmp file
+
+#endif
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/group/BrowserAudioVideoPluginEcom.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is the .mmp for building Ecom style Browser Audio and
+* Video Plugin
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <bldvariant.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET npBrowserAudioVideoPlugin.dll
+TARGETTYPE PLUGIN
+
+UID 0x10009D8D 0x10282810
+
+EPOCALLOWDLLDATA
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+
+START RESOURCE ../data/10282810.rss
+TARGET npBrowserAudioVideoPlugin.rsc
+END
+
+START RESOURCE ../data/BrowserAudioVideoPlugin.rss
+DEPENDS avkon.rsg
+HEADER
+TARGET BrowserAudioVideoPlugin.rsc
+TARGETPATH RESOURCE_FILES_DIR
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+END
+
+APP_LAYER_SYSTEMINCLUDE
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+
+SOURCE BavpMediaRecognizer.cpp
+SOURCE BavpController.cpp
+SOURCE BavpControllerAudio.cpp
+SOURCE BavpControllerVideo.cpp
+SOURCE BavpPlugin.cpp
+SOURCE BavpNPObject.cpp
+SOURCE BavpApi.cpp
+SOURCE BavpView.cpp
+SOURCE BavpMain.cpp
+SOURCE BavpVolumeHandler.cpp
+SOURCE BavpHwKeyEvents.cpp
+SOURCE BavpClipInfo.cpp
+SOURCE BavpLogger.cpp
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY CommonEngine.lib // RSharedData
+LIBRARY eikcoctl.lib // EikBorderControl
+LIBRARY cone.lib // CoeControl
+LIBRARY Avkon.lib
+LIBRARY AknIcon.lib
+LIBRARY fbscli.lib // Extended icon skinning
+LIBRARY CdlEngine.lib // Scalable UI
+LIBRARY ws32.lib
+LIBRARY bafl.lib
+LIBRARY estlib.lib
+LIBRARY RemConCoreApi.lib
+LIBRARY RemConInterfaceBase.lib
+LIBRARY drmhelper.lib
+LIBRARY ecom.lib
+LIBRARY charconv.lib
+
+LIBRARY MediaClientAudio.lib
+LIBRARY MediaClientVideo.lib
+LIBRARY mmfcontrollerframework.lib
+LIBRARY apgrfx.lib
+LIBRARY apmime.lib
+
+LIBRARY HWRMLightClient.lib
+LIBRARY commdb.lib
+LIBRARY apengine.lib
+LIBRARY esock.lib
+LIBRARY gdi.lib
+LIBRARY hal.lib
+
+LIBRARY ConnectionManager.lib
+LIBRARY featmgr.lib
+
+LIBRARY InetProtUtil.lib
+
+LIBRARY bmpanim.lib
+LIBRARY Centralrepository.lib
+LIBRARY CenRepNotifHandler.lib
+
+#ifdef __S60_32__
+LIBRARY JavaScriptCore.lib
+#else
+LIBRARY npscript.lib
+#endif
+
+#ifdef BRDO_ASX_FF
+LIBRARY asxparser.lib
+#endif // BRDO_ASX_FF
+
+DEBUGLIBRARY flogger.lib
+
+deffile npBrowserAudioVideoPlugin.def
+nostrictdef
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/group/BrowserAudioVideoPluginIcon.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,161 @@
+#
+# Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Generating Browser Audio and Video plugin animation
+# and scalable icons.
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=\epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\BrowserAudioVideoPlugin_aif.mif
+HEADERFILENAME=$(HEADERDIR)\BrowserAudioVideoPlugin.mbg
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask depth is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+ /c8 qgn_graf_video_plugin_anim_buffering00.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering01.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering02.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering03.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering04.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering05.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering06.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering07.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering08.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering09.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering10.svg \
+ /c8 qgn_graf_video_plugin_anim_buffering11.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing00.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing01.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing02.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing03.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing04.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing05.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing06.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing07.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing08.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing09.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing10.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_playing11.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped00.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped01.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped02.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped03.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped04.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped05.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped06.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped07.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped08.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped09.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped10.svg \
+ /c8 qgn_graf_video_plugin_anim_video_stopped11.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused00.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused01.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused02.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused03.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused04.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused05.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused06.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused07.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused08.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused09.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused10.svg \
+ /c8 qgn_graf_video_plugin_anim_video_paused11.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped00.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped01.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped02.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped03.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped04.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped05.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped06.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped07.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped08.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped09.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped10.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_stopped11.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused00.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused01.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused02.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused03.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused04.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused05.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused06.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused07.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused08.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused09.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused10.svg \
+ /c8 qgn_graf_video_plugin_anim_audio_paused11.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video00.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video01.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video02.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video03.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video04.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video05.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video06.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video07.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video08.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video09.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video10.svg \
+ /c8 qgn_graf_video_plugin_anim_no_video11.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken00.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken01.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken02.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken03.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken04.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken05.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken06.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken07.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken08.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken09.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken10.svg \
+ /c8 qgn_graf_video_plugin_anim_no_buffering_broken11.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(HEADERFILENAME)&& \
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/group/iconlist.txt Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,96 @@
+-c8 qgn_graf_video_plugin_anim_buffering00
+-c8 qgn_graf_video_plugin_anim_buffering01
+-c8 qgn_graf_video_plugin_anim_buffering02
+-c8 qgn_graf_video_plugin_anim_buffering03
+-c8 qgn_graf_video_plugin_anim_buffering04
+-c8 qgn_graf_video_plugin_anim_buffering05
+-c8 qgn_graf_video_plugin_anim_buffering06
+-c8 qgn_graf_video_plugin_anim_buffering07
+-c8 qgn_graf_video_plugin_anim_buffering08
+-c8 qgn_graf_video_plugin_anim_buffering09
+-c8 qgn_graf_video_plugin_anim_buffering10
+-c8 qgn_graf_video_plugin_anim_buffering11
+-c8 qgn_graf_video_plugin_anim_audio_playing00
+-c8 qgn_graf_video_plugin_anim_audio_playing01
+-c8 qgn_graf_video_plugin_anim_audio_playing02
+-c8 qgn_graf_video_plugin_anim_audio_playing03
+-c8 qgn_graf_video_plugin_anim_audio_playing04
+-c8 qgn_graf_video_plugin_anim_audio_playing05
+-c8 qgn_graf_video_plugin_anim_audio_playing06
+-c8 qgn_graf_video_plugin_anim_audio_playing07
+-c8 qgn_graf_video_plugin_anim_audio_playing08
+-c8 qgn_graf_video_plugin_anim_audio_playing09
+-c8 qgn_graf_video_plugin_anim_audio_playing10
+-c8 qgn_graf_video_plugin_anim_audio_playing11
+-c8 qgn_graf_video_plugin_anim_video_stopped00
+-c8 qgn_graf_video_plugin_anim_video_stopped01
+-c8 qgn_graf_video_plugin_anim_video_stopped02
+-c8 qgn_graf_video_plugin_anim_video_stopped03
+-c8 qgn_graf_video_plugin_anim_video_stopped04
+-c8 qgn_graf_video_plugin_anim_video_stopped05
+-c8 qgn_graf_video_plugin_anim_video_stopped06
+-c8 qgn_graf_video_plugin_anim_video_stopped07
+-c8 qgn_graf_video_plugin_anim_video_stopped08
+-c8 qgn_graf_video_plugin_anim_video_stopped09
+-c8 qgn_graf_video_plugin_anim_video_stopped10
+-c8 qgn_graf_video_plugin_anim_video_stopped11
+-c8 qgn_graf_video_plugin_anim_video_paused00
+-c8 qgn_graf_video_plugin_anim_video_paused01
+-c8 qgn_graf_video_plugin_anim_video_paused02
+-c8 qgn_graf_video_plugin_anim_video_paused03
+-c8 qgn_graf_video_plugin_anim_video_paused04
+-c8 qgn_graf_video_plugin_anim_video_paused05
+-c8 qgn_graf_video_plugin_anim_video_paused06
+-c8 qgn_graf_video_plugin_anim_video_paused07
+-c8 qgn_graf_video_plugin_anim_video_paused08
+-c8 qgn_graf_video_plugin_anim_video_paused09
+-c8 qgn_graf_video_plugin_anim_video_paused10
+-c8 qgn_graf_video_plugin_anim_video_paused11
+-c8 qgn_graf_video_plugin_anim_audio_stopped00
+-c8 qgn_graf_video_plugin_anim_audio_stopped01
+-c8 qgn_graf_video_plugin_anim_audio_stopped02
+-c8 qgn_graf_video_plugin_anim_audio_stopped03
+-c8 qgn_graf_video_plugin_anim_audio_stopped04
+-c8 qgn_graf_video_plugin_anim_audio_stopped05
+-c8 qgn_graf_video_plugin_anim_audio_stopped06
+-c8 qgn_graf_video_plugin_anim_audio_stopped07
+-c8 qgn_graf_video_plugin_anim_audio_stopped08
+-c8 qgn_graf_video_plugin_anim_audio_stopped09
+-c8 qgn_graf_video_plugin_anim_audio_stopped10
+-c8 qgn_graf_video_plugin_anim_audio_stopped11
+-c8 qgn_graf_video_plugin_anim_audio_paused00
+-c8 qgn_graf_video_plugin_anim_audio_paused01
+-c8 qgn_graf_video_plugin_anim_audio_paused02
+-c8 qgn_graf_video_plugin_anim_audio_paused03
+-c8 qgn_graf_video_plugin_anim_audio_paused04
+-c8 qgn_graf_video_plugin_anim_audio_paused05
+-c8 qgn_graf_video_plugin_anim_audio_paused06
+-c8 qgn_graf_video_plugin_anim_audio_paused07
+-c8 qgn_graf_video_plugin_anim_audio_paused08
+-c8 qgn_graf_video_plugin_anim_audio_paused09
+-c8 qgn_graf_video_plugin_anim_audio_paused10
+-c8 qgn_graf_video_plugin_anim_audio_paused11
+-c8 qgn_graf_video_plugin_anim_no_video00
+-c8 qgn_graf_video_plugin_anim_no_video01
+-c8 qgn_graf_video_plugin_anim_no_video02
+-c8 qgn_graf_video_plugin_anim_no_video03
+-c8 qgn_graf_video_plugin_anim_no_video04
+-c8 qgn_graf_video_plugin_anim_no_video05
+-c8 qgn_graf_video_plugin_anim_no_video06
+-c8 qgn_graf_video_plugin_anim_no_video07
+-c8 qgn_graf_video_plugin_anim_no_video08
+-c8 qgn_graf_video_plugin_anim_no_video09
+-c8 qgn_graf_video_plugin_anim_no_video10
+-c8 qgn_graf_video_plugin_anim_no_video11
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken00
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken01
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken02
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken03
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken04
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken05
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken06
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken07
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken08
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken09
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken10
+-c8 qgn_graf_video_plugin_anim_no_buffering_broken11
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpClipInfo.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Store the meta information and the state of the clip played
+*
+*/
+
+
+#ifndef BAVPCLIPINFO_H
+#define BAVPCLIPINFO_H
+
+// INCLUDES
+#include <e32base.h>
+
+#include "BavpMediaRecognizer.h"
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+* CBavpClipInfo
+* Store the meta information and the state of the clip to be played
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS( CBavpClipInfo ) : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpClipInfo();
+
+ /**
+ * Destructor.
+ */
+ ~CBavpClipInfo();
+
+ public: // New methods
+
+ /**
+ * ReInit()
+ * Reinitialize the data members
+ * @param none
+ * @returns void
+ */
+ void ReInit();
+
+ public: // Data
+
+ // Audio or Video file name
+ HBufC* iFileName;
+
+ // Audio or Video url link
+ HBufC* iUrl;
+
+ // Media type
+ TBavpMediaType iMediaType;
+
+ // Resolution for width
+ TInt iResolutionWidth;
+
+ // Resolution for height
+ TInt iResolutionHeight;
+
+ // Bitrate
+ TInt iBitrate;
+
+ // Maximum volume
+ TInt iMaxVolume;
+
+ // Duration of the clip
+ TTimeIntervalMicroSeconds iDurationInSeconds;
+
+ // If clip is seekable
+ TBool iSeekable;
+
+ // If clip is a live stream
+ TBool iLiveStream;
+
+ // Is audio track
+ TBool iAudioTrack;
+
+ // Is video track
+ TBool iVideoTrack;
+
+ // Is display in fullscreen mode
+ TBool iInFullScreenMode;
+
+ // Current file position
+ TTimeIntervalMicroSeconds iPosition;
+ };
+
+#endif // BAVPCLIPINFO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpController.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,612 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Base Controller class for handling browser requests to play
+* audio or video.
+*
+*/
+
+
+#ifndef BAVPCONTROLLER_H
+#define BAVPCONTROLLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <coecntrl.h>
+#include <e32property.h> // RProperty class
+#include "FeatMgr.h"
+
+#include "BrowserAudioVideoPlugin.hrh"
+#include "BavpVolumeObserver.h" // Volume Observer class
+#include "BavpVolumeHandler.h"
+#include "BavpHwKeyEvents.h" // Hardware Key Events
+#include "BavpClipInfo.h" // Clip info
+#include <rt_gesturehelper.h>
+
+// FORWARD DECLARATIONS
+class RFs;
+class CBavpPlugin;
+class MBavpView;
+
+// CONSTANTS
+// Does this build include Side Volume Keys support
+#define HAS_HW_VOLUME_KEYS ( FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys ) )
+
+// Used to walk the content's meta data
+_LIT(KBavpTrue, "1");
+_LIT(KBavpFalse, "0");
+_LIT(KBavpLiveStream, "LiveStream");
+_LIT(KBavpSeekable, "Seekable");
+
+// ROP controller UID, ?? Helix UID ??
+const TUid KRopControllerUid =
+ {
+ 0x101F8514
+ };
+
+// The Audio or Video player state
+enum TAudioVideoState
+ {
+ EBavpNone, // Player is idle or not created yet
+ EBavpBuffering, // Loading the content
+ EBavpPlaying, // Playing the content
+ EBavpPlayComplete, // Done playing the content (end)
+ EBavpStopped, // User stopped the content
+ EBavpPaused, // User paused the content
+ EBavpBadContent, // Bad content or network error encountered
+ EBavpFastForwarding, // Fast Forwarding the content
+ EBavpFastForwardComplete, // Fast Forward reached end of content
+ EBavpRewinding, // Rewinding the content
+ EBavpRewindComplete // Rewind reached beginning of content
+ };
+
+// Use these values for fast-forwarding and rewinding
+const TInt KSkipToPosition = 2*1000*1000; // 2 seconds
+const TInt KUpdateFrequency = 400*1000; // 400 milliseconds
+const TInt KInitialDelay = 600*1000; // 600 milliseconds
+
+// CLASS DECLARATIONS
+
+/**
+* CBavpController.
+* Controller class for handling browser requests to play audio or video.
+* @lib npBrowserAudioVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpController : public CActive,
+ public MBavpVolumeObserver,
+ public MBavpHwKeyEventsObserver,
+ public MCenRepNotifyHandlerCallback
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpController( MBavpView* aView, TUint aAccessPtId );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBavpController();
+
+ public: // New pure virtual methods
+
+ /**
+ * Handles request to play the audio or video content
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ virtual void PlayAudioVideoL() = 0;
+
+ /**
+ * Handles request to stop playing the content
+ * @param none
+ * @return void
+ */
+ virtual void Stop() = 0;
+
+ /**
+ * Handles request to play content
+ * @param none
+ * @return void
+ */
+ virtual void PlayL() = 0;
+
+ /**
+ * Handles request to pause playing content
+ * @param none
+ * @return void
+ */
+ virtual void PauseL() = 0;
+
+ /**
+ * Handles request to fast forward content
+ * @param none
+ * @return void
+ */
+ virtual void FastForwardL() = 0;
+
+ /**
+ * Handles request to rewind content
+ * @param none
+ * @return void
+ */
+ virtual void RewindL() = 0;
+
+ /**
+ * Set the volume in the player, we send volume value 0-10, this method
+ * will scale before calling Player::SetVolume()
+ * @param aVolume the new volume: 0(mute) - 10(max)
+ * @return void
+ */
+ virtual void SetPlayerVolume( TInt aVolume ) = 0;
+
+ /**
+ * Get the current volume of the player
+ * This needs to be scaled to 0-10 (CR value) before returning
+ * @param none
+ * @return player volume scaled: 0(mute) - 10(max)
+ */
+ virtual TInt GetPlayerVolume() = 0;
+
+ /**
+ * To get the current position of the clip
+ * @since 3.2
+ * @param none
+ * @return TTimeIntervalMicroSeconds
+ */
+ virtual TTimeIntervalMicroSeconds getPositionL() = 0;
+
+ /**
+ * To set the position of the clip
+ * @since 3.2
+ * @param TTimeIntervalMicroSeconds
+ * @return void
+ */
+ virtual void setPositionL(TTimeIntervalMicroSeconds) = 0;
+
+ /**
+ * Handles the incoming call
+ * @param none
+ * @return void
+ */
+ virtual void HandleInComingCallL() = 0;
+
+ public: // New virtual methods
+
+ /**
+ * Handles Notifications from Browser
+ * @since 3.2
+ * @param TBool: Tell bavp plugin if Browser is in or out of focus
+ * @return void
+ */
+ virtual void HandleBrowserNotification( TBool aBrowserFocus );
+
+ /**
+ * Handles the error
+ * @param TInt aError: error to be handled
+ * @return void
+ */
+ virtual void HandleError( TInt aError );
+
+ /**
+ * Handles the keys offered by the CCoeControl
+ * @since 3.2
+ * @param TInt aKeyEvent: Which key pressed
+ * @param TInt aEventCode: Key down, key up...
+ * @return TKeyResponse: Was the key consumed
+ */
+ virtual TKeyResponse HandleKeysL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * Handles commands from Option Menu, defined in resource files
+ * @since 3.2
+ * @param TBavpCommandIds aCommand: a Command Id
+ * @return void
+ */
+ virtual void HandleCommandL( TBavpCommandIds aCommand );
+
+ /**
+ * Called by CBavpView to CBavpPlugin whenever Bavp focus changes
+ * @since 3.2
+ * @param aFocus True if plugin has focus
+ * @return none
+ */
+ virtual void BavpFocusChanged( TBool aFocus );
+
+ virtual TBool HandleGesture(RT_GestureHelper::TGestureEvent *gesture);
+
+ public: // New methods
+
+ /**
+ * Sets volume using the value from <object> attribute
+ * @since 3.2
+ * @param aVolume
+ * @return void
+ */
+ void SetVolumeFromAttribute( TInt aVolume );
+
+ /**
+ * Sets loop using the value from <object> attribute
+ * @since 3.2
+ * @param aLoopValue: The number of times to play file
+ * @param aInfiniteFlag: Set to ETrue if play infinitely, we use a loop
+ * countValue = 50 for infinite and always set this to EFalse
+ * @return void
+ */
+ void SetLoopFromAttribute( TInt aLoopValue, TBool aInfiniteFlag );
+
+ /**
+ * Refresh the coordinates of the rectangle to be drawn
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ virtual void RefreshRectCoordinatesL();
+
+ /**
+ * Sets original file name (used for scripting functionality)
+ * @since 3.2
+ * @param originalFilename
+ * @return void
+ */
+ void SetOriginalFileName( const TDesC* originalFileName );
+
+
+ /**
+ * Sets the mime type(used for scripting functionality)
+ * @since 3.2
+ * @param mime type
+ * @return void
+ */
+ void SetMimeType( const TDesC8* mimetype );
+
+ public: // New inline methods
+
+ /**
+ * Bavp has focus
+ * @since 3.2
+ * @param void
+ * @return : TBool 0 or 1 indicating the focus
+ */
+ inline TBool BavpHasFocus()
+ {
+ return iBavpHasFocus;
+ }
+
+ /**
+ * Returns the video player plugin current state
+ * @since 3.2
+ * @param none
+ * @return TVideoState
+ */
+ inline TAudioVideoState State()
+ {
+ return iCurrentState;
+ }
+
+ /**
+ * returns ETrue is the volume is muted
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsVolumeMuted()
+ {
+ return ( iCurrentVolume == KCRVolumeMute );
+ }
+
+ /**
+ * Returns ETrue is this is a video clip
+ * @since 3.2
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipVideo()
+ {
+ return iClipInfo->iVideoTrack;
+ }
+
+ /**
+ * Returns ETrue is the clip is seekable.
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipSeekable()
+ {
+ return iClipInfo->iSeekable;
+ }
+
+ /**
+ * returns ETrue is the content is local media file.
+ * Local files can be FF and Rewind
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipLocalMedia()
+ {
+ return ( iClipInfo->iMediaType == ELocalVideoFile ||
+ iClipInfo->iMediaType == ELocalAudioFile );
+ }
+
+ /**
+ * Returns TRUE if the display is on full screen, otherwise FALSE
+ * @since 3.2
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipFullScreen()
+ {
+ return iClipInfo->iInFullScreenMode;
+ }
+
+ /**
+ * Returns TRUE if the content is being fast-forwarded,
+ * otherwise FALSE
+ * @since 3.2
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipFastForwarding()
+ {
+ return ( iCurrentState == EBavpFastForwarding );
+ }
+
+ /**
+ * Returns TRUE if the content is being rewound,
+ * otherwise FALSE
+ * @since 3.2
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipRewinding()
+ {
+ return ( iCurrentState == EBavpRewinding );
+ }
+
+ /**
+ * Returns ETrue is the clip is onDemand stream.
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipOnDemand()
+ {
+ return ( iClipInfo->iMediaType != ELocalVideoFile && iClipInfo->iSeekable );
+ }
+
+ /**
+ * Returns ETrue is the clip is live stream.
+ * @param none
+ * @return TBool
+ */
+ inline TBool IsClipLive()
+ {
+ return ( iClipInfo->iLiveStream );
+ }
+
+
+ /** Returns the original filename of the clip
+ * @param none
+ * @return HBufC*
+ */
+ inline const HBufC& ClipName()
+ {
+ return *iOriginalFileName;
+ }
+
+ /** Returns the duration of the clip
+ * @param none
+ * @return TTimeIntervalMicroSeconds
+ */
+ inline TTimeIntervalMicroSeconds Duration()
+ {
+ return ( iClipInfo->iDurationInSeconds );
+ }
+
+ /** Returns the mime type of the clip
+ * @param none
+ * @return HBufC*
+ */
+ inline const HBufC8& MimeType()
+ {
+ return *iMimeType;
+ }
+
+
+
+ protected: // New methods
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void BaseConstructL( TBavpMediaType aMediaType,
+ const TDesC& aFileName );
+
+ /**
+ * Parse the ram file
+ * @param none
+ * @return void
+ */
+ void ParseRamFileL();
+#if defined(BRDO_ASX_FF)
+ /**
+ * Parse the asx file
+ * @param none
+ * @return void
+ */
+ void ParseAsxFileL();
+#endif //BRDO_ASX_FF
+ /**
+ * Set the rectangle to prepare the display
+ * @param TRect
+ * @return TRect aRect
+ */
+ TRect GetClipRect( TRect aRect );
+
+ /**
+ * Create a query dialog for the volume setting list
+ * @param none
+ * @return void
+ */
+ void CreateVolumeListDlgL();
+
+ /**
+ * Check if an incoming call comes
+ * @param none
+ * @return TBool
+ */
+ TBool IsVideoOrAudioCall();
+
+ /**
+ * Check if other audio or video controllers are playing
+ * @param none
+ * @return TBool
+ */
+ TBool IsAnotherControllerPlaying();
+
+ /**
+ * Pause or Stop the other audio or video controllers from playing
+ * @param none
+ * @return void
+ */
+ void PauseOtherControllersPlaying();
+
+ /**
+ * Handle the error from MMF for multiple media object case
+ * @param aError error code from MMF
+ * @return void
+ */
+ void HandleMultiInstanceError();
+
+ protected: // Methods from CActive
+
+ /**
+ * Implements cancellation of an outstanding request.
+ * @param none
+ * @return void
+ */
+ void DoCancel() { /* Not implemented */ }
+
+ /**
+ * Handles an active object’s request completion event.
+ * @param none
+ * @return void
+ */
+ void RunL();
+
+ public: // Methods from MBavpVolumeObserver
+
+ /**
+ * Updates the volume
+ * From MBavpVolumeObserver
+ * @since 3.2
+ * @param TInt aVolume: volume value
+ * @return void
+ */
+ void UpdateVolume( TInt aVolume );
+
+ private: // From MHwKeyEventsObserver
+
+ /**
+ * Called when volume level should be changed.
+ * Set volume control visible into navi pane.
+ * @param aVolumeChange: +1 change volume up
+ * -1 change volume down
+ */
+ void BavpHwKeyVolumeChange( TInt aVolumeChange );
+
+ /**
+ * Called when a media hardware key (play, pause...) was presed.
+ * @since 3.2
+ * @param aCommand: Command ID representing Play, Pause, ...
+ * @return void
+ */
+ // void BavpHwKeyCommand( TBavpCommandIds aCommand );
+
+ public: // Data, public
+
+ // Is Bavp Plugin in focus
+ TBool iBavpHasFocus;
+
+ // Audio Video plugin current state
+ TAudioVideoState iCurrentState;
+
+ // ClipInfo contains our metadata from the MMF/Helix and content file
+ CBavpClipInfo* iClipInfo;
+
+ // Array of pointers of CBavpController (this) instances
+ static RPointerArray<CBavpController> iBavpControllerArray;
+
+ protected: // Data
+
+ // The player is initialized and ready to be used
+ TBool iPlayerInitialized;
+
+ // Bavp plugin previous state - used when handling interrupted
+ // media, because of a phone call
+ TAudioVideoState iPreCallState;
+
+ // Last command
+ TBavpCommandIds iLastCommand;
+
+ // The number of times the audio or video file will play (loop)
+ TInt iLoopCount;
+
+ // Hold the initial value of loop
+ TInt iInitLoopCount;
+
+ // The infinite loop flag, we currently set to EFalse and use loop=50
+ // if a web site requests infinite looping
+ TBool iInfiniteLoopFlag;
+
+ // Access pt id
+ TUint iAccessPtId;
+
+ // Bavp View
+ MBavpView* iBavpView;
+
+ // Events from Hardware Keys
+ CBavpHwKeyEvents* iHwKeyEvents;
+
+ // System state
+ RProperty iIncomingCalls;
+
+ // Volume hander
+ CBavpVolumeHandler* iBavpVolumeHandler;
+
+ // Current volume level
+ TInt iCurrentVolume;
+
+ // Audio or Video player max volume
+ TInt iPlayerMaxVolume;
+
+ // Timer to jump to a new position, used for Fast Forward, Rewind
+ CPeriodic* iPositionUpdater;
+
+ // original file name. added for scripting functionality
+ HBufC* iOriginalFileName;
+
+ // mime type. added for scripting functionality
+ HBufC8* iMimeType;
+
+ //Normal display mode screen rect
+ TRect iNormalScreenRect;
+ };
+
+#endif // CBAVPCONTROLLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpControllerAudio.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Controller class for handling browser requests to play audio.
+*
+*/
+
+
+#ifndef BAVPCONTROLLERAUDIO_H
+#define BAVPCONTROLLERAUDIO_H
+
+// INCLUDES
+#include <MdaAudioSamplePlayer.h> // for MMdaAudioPlayerCallback
+#include "BavpController.h"
+
+// FORWARD DECLARATIONS
+
+// CONSTANTS
+
+// CLASS DECLARATIONS
+/**
+* CBavpControllerAudio.
+* Controller class for handling browser requests to play audio.
+* @lib npBrowserAudioVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpControllerAudio : public CBavpController,
+ public MMdaAudioPlayerCallback
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpControllerAudio* NewL( MBavpView* aView,
+ TUint aAccessPtId,
+ TBavpMediaType aMediaType,
+ const TDesC& aFileName );
+
+ /**
+ * Destructor.
+ */
+ ~CBavpControllerAudio();
+
+ public: // New methods
+
+ /*
+ * Non Leaving method to handle request to play content.
+ * @param none
+ * @return void
+ */
+ void Play();
+
+ /**
+ * Non Leaving method to handle request to pause playing content
+ * @param none
+ * @return void
+ */
+ void Pause();
+
+ private: // New methods
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpControllerAudio( MBavpView* aView, TUint aAccessPtId );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL( TBavpMediaType aMediaType, const TDesC& aFileName );
+
+ /**
+ * Open an URL link
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void OpenAudioUrlL();
+
+ /**
+ * Opens the file to be played.
+ * @param none
+ * @return void
+ */
+ void OpenAudioFileL();
+
+ public: // Methods from MBavpController
+
+ /**
+ * Handles request to play the audio or video content
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void PlayAudioVideoL();
+
+ /**
+ * Handles request to stop playing the content
+ * @param none
+ * @return void
+ */
+ void Stop();
+
+ /**
+ * Handles request to play content
+ * @param none
+ * @return void
+ */
+ void PlayL();
+
+ /**
+ * Handles request to pause playing content
+ * @param none
+ * @return void
+ */
+ void PauseL();
+
+ /**
+ * Handles request to fast forward content
+ * @param none
+ * @return void
+ */
+ void FastForwardL();
+
+ /**
+ * Handles request to rewind content
+ * @param none
+ * @return void
+ */
+ void RewindL();
+
+ /**
+ * Set the volume in the player, we send volume value 0-10, this method
+ * will scale before calling player's SetVolume()
+ * @param aVolume the new volume: 0(mute) - 10(max)
+ * @return void
+ */
+ void SetPlayerVolume( TInt aVolume );
+
+ /**
+ * Get the current volume of the player
+ * This needs to be scaled to 0-10 (CR value) before returning
+ * @param none
+ * @return player volume scaled: 0(mute) - 10(max)
+ */
+ TInt GetPlayerVolume();
+
+ /**
+ * To get the current position of the clip
+ * @since 3.2
+ * @param none
+ * @return TTimeIntervalMicroSeconds
+ */
+ TTimeIntervalMicroSeconds getPositionL();
+
+ /**
+ * To set the position of the clip
+ * @since 3.2
+ * @param TTimeIntervalMicroSeconds
+ * @return void
+ */
+ void setPositionL(TTimeIntervalMicroSeconds);
+
+ /**
+ * Handles the incoming call
+ * @param none
+ * @return void
+ */
+ void HandleInComingCallL() { }//not implemented
+
+
+ public: // Methods overridden from base class CBavpController
+
+ /**
+ * Handles the error
+ * @param TInt aError: error to be handled
+ * @return void
+ */
+ void HandleError( TInt aError );
+
+ public: // Methods from MMdaAudioPlayerCallback
+
+ /**
+ * From MMdaAudioPlayerCallback.
+ * @since 3.2
+ * @param TInt aError Error code returned from call to Init
+ * @param const TTimeIntervalMicroSeconds& aDuration, duration time
+ * @return void
+ */
+ void MapcInitComplete( TInt aError,
+ const TTimeIntervalMicroSeconds& aDuration );
+
+ /**
+ * From MMdaAudioPlayerCallback.
+ * @since 3.2
+ * @param TInt aError: Error code returned from call to Play
+ * @return void
+ */
+ void MapcPlayComplete( TInt aError );
+
+ private: // Data
+
+ // Used to call MMF for audio functionality
+ CMdaAudioPlayerUtility* iAudioPlayer;
+
+ // File Server
+ RFs iFs;
+ };
+
+#endif // CBAVPCONTROLLERAUDIO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpControllerVideo.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,431 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Controller class for handling browser requests to play video.
+*
+*/
+
+
+#ifndef BAVPCONTROLLERVIDEO_H
+#define BAVPCONTROLLERVIDEO_H
+
+// INCLUDES
+#include <browser_platform_variant.hrh>
+
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+#include <VideoPlayer2.h>
+#else
+#include <VideoPlayer.h>
+#endif
+#include "BavpController.h"
+
+// FORWARD DECLARATIONS
+class MBavpView;
+class CBavpViewFullScreen;
+
+
+// CLASS DECLARATIONS
+/**
+* CBavpController.
+* Controller class for handling browser requests to play video.
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpControllerVideo : public CBavpController,
+ public MVideoPlayerUtilityObserver,
+ public MVideoLoadingObserver,
+ public MBeating
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpControllerVideo* NewL( MBavpView* aView,
+ TUint aAccessPtId,
+ TBavpMediaType aMediaType,
+ const TDesC& aFileName );
+
+ /**
+ * Destructor.
+ */
+ ~CBavpControllerVideo();
+
+ private: // New methods
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpControllerVideo( MBavpView* aView, TUint aAccessPtId );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL( TBavpMediaType aMediaType, const TDesC& aFileName );
+
+ /**
+ * Open a video URL link
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void OpenVideoUrlL();
+
+ /**
+ * Opens the video file to be played.
+ * @param none
+ * @return void
+ */
+ void OpenVideoFileL();
+
+ /**
+ * Handle the leaving methods needed by MvpuoPrepareComplete
+ * @param none
+ * @return void
+ */
+ void PrepareCompleteL();
+
+ /**
+ * Non leaving version of initialize the video player plugin
+ * @param none
+ * @return void
+ */
+ void InitVideoPlayer();
+
+ /**
+ * Initialize the video player plugin
+ * @param none
+ * @return void
+ */
+ void InitVideoPlayerL();
+
+ /**
+ * Closes the player and delete the player instance
+ * @param none
+ * @return void
+ */
+ void UnInitVideoPlayer();
+
+ /**
+ * Rotate the screen if its height is bigger than width
+ * @param none
+ * @return void
+ */
+ void RotateScreen90();
+
+ /**
+ * Switch from normal screen to full screen display
+ * @param none
+ * @return void
+ */
+ void RevertToFullScreenL();
+
+ /**
+ * Switch from full screen to normal screen display
+ * @param none
+ * @return void
+ */
+ void RevertToNormalScreenL();
+
+ /**
+ * Switch between normal screen display and full screen display
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void ToggleScreen();
+
+ /**
+ * Refresh the coordinates of the rectangle to be drawn
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void RefreshRectCoordinatesL();
+
+ /**
+ * Switches between normal screen display and full screen display
+ * @since 3.2
+ * @param TAny* aThisData: the controller itself
+ * @return TInt error code
+ */
+ static TInt WaitForScreenSwitch( TAny* aThisData );
+
+ /**
+ * wrapper function for WaitForScreenSwitch, that leaves
+ * Switches between normal screen display and full screen display
+ * @since 3.2
+ * @param TAny* aThisData: the controller itself
+ * @return TInt error code
+ */
+ static void WaitForScreenSwitchL( TAny* aThisData );
+
+ /**
+ * Fastforward the video file currently being played or paused
+ * @since S60 v3.2
+ * @param TAny* aThisData: the controller itself
+ * @return TInt error code
+ */
+ static TInt DoFastForwardL( TAny* aThisData );
+
+ /**
+ * Rewind the video file currently being played or paused
+ * @since S60 v3.2
+ * @param TAny* aThisData: the controller itself
+ * @return TInt error code
+ */
+ static TInt DoRewindL( TAny* aThisData );
+
+ public: // Methods overridden from base class CBavpController
+
+ /**
+ * Handles the error
+ * @param TInt aError: error to be handled
+ * @return void
+ */
+ void HandleError( TInt aError );
+
+ /**
+ * Handles the keys offered by the CCoeControl
+ * @since 3.2
+ * @param TInt aKeyEvent: Which key pressed
+ * @param TInt aEventCode: Key down, key up...
+ * @return TKeyResponse: Was the key consumed
+ */
+ TKeyResponse HandleKeysL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Handles commands from Option Menu, defined in resource files
+ * @since 3.2
+ * @param TBavpCommandIds aCommand: a Command Id
+ * @return void
+ */
+ void HandleCommandL( TBavpCommandIds aCommand );
+
+ TBool HandleGesture(RT_GestureHelper::TGestureEvent *gesture);
+
+ public: // From MBavpController
+
+ /**
+ * Handles request to play the audio or video content
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void PlayAudioVideoL();
+
+ /**
+ * Handles request to stop playing the content
+ * @param none
+ * @return void
+ */
+ void Stop();
+
+ /**
+ * Handles request to play content
+ * @param none
+ * @return void
+ */
+ void PlayL();
+
+ /**
+ * Handles request to pause playing content
+ * @param none
+ * @return void
+ */
+ void PauseL();
+
+ /**
+ * Handles request to fast forward content
+ * @param none
+ * @return void
+ */
+ void FastForwardL();
+
+ /**
+ * Handles request to rewind content
+ * @param none
+ * @return void
+ */
+ void RewindL();
+
+ /**
+ * Set the volume in the player, we send volume value 0-10, this method
+ * will scale before calling player's SetVolume()
+ * @param aVolume the new volume: 0(mute) - 10(max)
+ * @return void
+ */
+ void SetPlayerVolume( TInt aVolume );
+
+ /**
+ * Get the current volume of the player
+ * This needs to be scaled to 0-10 (CR value) before returning
+ * @param none
+ * @return player volume scaled: 0(mute) - 10(max)
+ */
+ TInt GetPlayerVolume();
+
+ /**
+ * To get the current position of the clip
+ * @since 3.2
+ * @param none
+ * @return TTimeIntervalMicroSeconds
+ */
+ TTimeIntervalMicroSeconds getPositionL();
+
+ /**
+ * To set the position of the clip
+ * @since 3.2
+ * @param TTimeIntervalMicroSeconds
+ * @return void
+ */
+ void setPositionL(TTimeIntervalMicroSeconds);
+
+ /**
+ * Handles the incoming call
+ * @param none
+ * @return void
+ */
+ void HandleInComingCallL();
+
+
+ public: // Methods from MVideoPlayerUtilityObserver
+
+ /**
+ * Notification to the client that the opening of the video clip has completed, successfully, or otherwise.
+ * with the system clock
+ * @since 3.2
+ * @param TInt aError: The status of the video sample after opening
+ * @return void
+ */
+ void MvpuoOpenComplete( TInt aError );
+
+ /**
+ * Notification to the client that the opening of the video clip has been prepared
+ * successfully, or otherwise. This callback is called in response to a call to CVideoPlayerUtility::Prepare().
+ * @since 3.2
+ * @param TInt aError: The status of the video sample after opening
+ * @return void
+ */
+ void MvpuoPrepareComplete( TInt aError );
+
+ /**
+ * Notification that the frame requested by a call to GetFrameL is ready
+ * @since 3.2
+ * @param TInt aError: The status of the video sample after opening
+ * @return void
+ */
+ void MvpuoFrameReady( CFbsBitmap& /*aFrame*/, TInt /*aError*/ ) {};
+
+ /**
+ * Notification that video playback has completed. This is not called if playback is
+ * explicitly stopped by calling Stop.
+ * @since 3.2
+ * @param TInt aError: The status of the video sample after opening
+ * @return void
+ */
+ void MvpuoPlayComplete( TInt aError );
+
+ /**
+ * General event notification from controller. These events are specified by the
+ * supplier of the controller
+ * @since 3.2
+ * @param TMMFEvent &aEvent: multimedia framework event
+ * @return void
+ */
+ void MvpuoEvent( const TMMFEvent &aEvent );
+
+ /**
+ * Notification that video clip loading/rebuffering has completed
+ * @since 3.2
+ * @param TMMFEvent &aEvent: multimedia framework event
+ * @return void
+ */
+ void MvloLoadingStarted();
+
+ /**
+ * Notification that video clip loading/rebuffering has started
+ * @since 3.2
+ * @param TMMFEvent &aEvent: multimedia framework event
+ * @return void
+ */
+ void MvloLoadingComplete();
+ // MBeating
+ public:
+ /**
+ * Handles a regular heartbeat timer event
+ * @since S60 v3.2
+ * @param none
+ * @return void
+ */
+ void Beat();
+
+ /**
+ * Handles a heartbeat timer event where the timer completes out of synchronisation
+ * with the system clock
+ * @since S60 v3.2
+ * @param none
+ * @return void
+ */
+ void Synchronize();
+
+ private:
+ /**
+ * Handles the heart beat to retrieve the current playback position
+ * @param none
+ * @return void
+ */
+ void HandleScreenSaver();
+
+ TBool NoScreenSaverMode();
+ void SetDefaultAspectRatioL();
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ /**
+ * Handles a window rect update timer event where the timer completes the KWindowChangeUpdateTimeout
+ * with the system clock
+ * @since S60 v5.2
+ * @param none
+ * @return void
+ */
+ void UpdateWindowSize();
+#endif
+ private: // Data
+
+ // Used to call MMF for video functionality
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ /**
+ * MMF Client API has updated with new methods to control video display
+ *windows and video picture positioning to produce a new version of the API,
+ *CVideoPlayerUtility2. The new API is the preferred way to play video on graphics
+ *surfaces, and will support new features such as more flexible window positioning.
+ */
+ CVideoPlayerUtility2* iVideoPlayer;
+#else
+ CVideoPlayerUtility* iVideoPlayer;
+#endif
+ // Active object for display update
+ CIdle* iDisplayUpdater;
+
+ // The full screen view
+ CBavpViewFullScreen* iBavpViewFullScreen;
+ //heart beat progress
+ CHeartbeat* iBackLightUpdater;
+ TRect iNormalScreenRect;
+ RWindow* iActiveWindow;
+ };
+
+#endif // CBAVPCONTROLLERVIDEO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpHwKeyEvents.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class which implements handling Hardware Key events.
+* This class implements methods of MRemConCoreApiTargetObserver
+*
+*/
+
+
+#ifndef BAVPHWKEYEVENTS_H
+#define BAVPHWKEYEVENTS_H
+
+// INCLUDES
+#include <RemConCoreApiTargetObserver.h>
+
+// FORWARD DECLARATIONS
+class CRemConInterfaceSelector;
+class CRemConCoreApiTarget;
+class MRemConCoreApiTargetObserver;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+/**
+* MBavpHwKeyEventsObserver class for hardware key events
+* This class implements methods of MRemConCoreApiTargetObserver
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class MBavpHwKeyEventsObserver
+ {
+ public:
+ /**
+ * Called when volume level should be changed.
+ * @since 3.2
+ * @param aVolumeChange: +1 change volume up
+ * -1 change volume down
+ * @return void
+ */
+ virtual void BavpHwKeyVolumeChange( TInt aVolumeChange ) = 0;
+
+ /**
+ * Called when a media hardware key (play, pause...) was presed.
+ * @since 3.2
+ * @param aCommand: Command ID representing Play, Pause, ...
+ * @return void
+ */
+ // Incr15 SCO item that was cancelled.
+ // virtual void BavpHwKeyCommand( TBavpCommandIds aCommand ) = 0;
+ };
+
+/**
+* CBavpHwKeyEvents class to handle Side Volume Key events
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpHwKeyEvents : public CBase,
+ public MRemConCoreApiTargetObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Symbian constructor
+ * @param aObserver observer to implement callback functions
+ */
+ static CBavpHwKeyEvents* NewL( MBavpHwKeyEventsObserver& aObserver );
+
+ /**
+ * Destructor.
+ */
+ ~CBavpHwKeyEvents();
+
+ private: // Constructors and destructor
+
+ /**
+ * Default constructor.
+ * @since 3.2
+ */
+ CBavpHwKeyEvents( MBavpHwKeyEventsObserver& aObserver );
+
+ /**
+ * Constructor.
+ * @since 3.2
+ */
+ void ConstructL();
+
+ protected: // From MRemConCoreApiTargetObserver
+
+ /* Handles hardware key events
+ * @since 3.2
+ */
+ void MrccatoCommand( TRemConCoreApiOperationId aOperationId,
+ TRemConCoreApiButtonAction aButtonAct );
+
+ private:
+
+ /**
+ * Change volume depending on the level of increase or decrease
+ * @since 3.2
+ */
+ void DoChangeVolume( );
+
+ /**
+ * VolumeTimerCallback is the callback function called from change volume timer.
+ * @since 3.2
+ */
+ static TInt VolumeTimerCallback( TAny* aThis );
+
+ private: // data
+
+ MBavpHwKeyEventsObserver& iObserver;
+
+ CRemConInterfaceSelector* iInterfaceSelector;
+
+ CRemConCoreApiTarget* iCoreTarget;
+
+ CPeriodic* iVolumeTimer;
+
+ // Indicates size of volume level change
+ TInt iChange;
+ };
+
+#endif // BAVPHWKEYEVENTS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpLogger.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Logging support for Bavp
+*
+*/
+
+
+#ifndef BAVPLOGGER_H
+#define BAVPLOGGER_H
+
+
+// Logging methods for Bavp
+void Log( TBool aWrite, TPtrC aData );
+void Log( TBool aWrite, TPtrC aData, TInt aInt );
+void Log( TBool aWrite, const TPtrC s, const TPtrC p);
+void Log( TBool aWrite, const TPtrC8 s, const TPtrC8 p);
+
+#endif BAVPLOGGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpMediaRecognizer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CBavpMediaRecognizer
+*
+*/
+
+
+#ifndef BAVPMEDIARECONGNIZER_H
+#define BAVPMEDIARECONGNIZER_H
+
+// INCLUDES
+#include <apgcli.h>
+// L960: header file name with non-standard character
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+
+// Media types
+enum TBavpMediaType
+ {
+ ELocalVideoFile,
+ ELocalAudioFile,
+ ELocalRamFile,
+ ELocalSdpFile,
+ EUrl,
+ ELocalAudioPlaylist,
+#if defined(BRDO_ASX_FF)
+ ELocalAsxFile,
+#endif //BRDO_ASX_FF
+ EUnidentified
+ };
+
+/**
+* CBavpMediaRecognizer
+* Implementation of CBavpMediaRecognizer
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CBavpMediaRecognizer) : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpMediaRecognizer* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CBavpMediaRecognizer();
+
+ public: // New functions
+
+ /**
+ * Recognizes media type.
+ * @since 3.2
+ * @param aMediaName Media file name or Url
+ * @param aIncludeUrls Are Urls included or not
+ * @return TBavpMediaType
+ */
+ TBavpMediaType IdentifyMediaTypeL( const TDesC& aMediaName,
+ TBool aIncludeUrls = EFalse );
+
+ /**
+ * Recognizes media type.
+ * @since 3.2
+ * @param aMediaName Media file name or Url
+ * @param aFile file handle
+ * @param aIncludeUrls Are Urls included or not
+ * @return TBavpMediaType
+ */
+ TBavpMediaType IdentifyMediaTypeL( const TDesC& aMediaName,
+ RFile& aFile,
+ TBool aIncludeUrls = EFalse );
+
+ /**
+ * Recognizes Media files MimeType.
+ * @since 3.2
+ * @param aLocalFile File name
+ * @return TBuf<KMaxDataTypeLength>, Mime type.
+ */
+ TBuf<KMaxDataTypeLength> MimeTypeL( const TDesC& aLocalFile );
+
+ /**
+ * Checks if Url is valid or not.
+ * @since 3.2
+ * @param aUrl
+ * @return ETrue: Valid
+ * EFalse: Not valid
+ */
+ TBool ValidUrl( const TDesC& aUrl );
+
+ /**
+ * Recognizes Media files MimeType.
+ * @since 3.2
+ * @param aFile File handle
+ * @return TBuf<KMaxDataTypeLength>, Mime type.
+ */
+ TBuf<KMaxDataTypeLength> MimeTypeL( RFile& aFile );
+
+ private: // New functions
+
+ /**
+ * Checks if there is video playback support.
+ * @param aFileName
+ * @param aFileRecognitionResult Recognition result
+ * @return ETrue: Supported
+ * EFalse: Not supported
+ */
+ TBool FileHasVideoSupport( const TDesC& aFileName,
+ TDataRecognitionResult& aFileRecognitionResult );
+
+ /**
+ * Checks if there is audio playback support.
+ * @param aFileName
+ * @param aFileRecognitionResult Recognition result
+ * @return ETrue: Supported
+ * EFalse: Not supported
+ */
+ TBool FileHasAudioSupport( const TDesC& aFileName,
+ TDataRecognitionResult& aFileRecognitionResult );
+
+ /**
+ * Creates array to hold all the controller plugins that support video.
+ * @return void
+ */
+ void CreateVideoFormatsArrayL();
+
+ /**
+ * Creates array to hold all the controller plugins that support audio.
+ * @return void
+ */
+ void CreateAudioFormatsArrayL();
+
+ /**
+ * Recognizes local file
+ * @param aFileName
+ * @param aFileRecognitionResult Recognition result
+ * @return void
+ */
+ void RecognizeFileL( const TDesC& aFileName,
+ TDataRecognitionResult& aResult );
+
+ /**
+ * Reads local file to buffer
+ * @param aFileName
+ * @param aBuf, buffer
+ * @return KErrNone or one of the system wide error codes.
+ */
+ TInt ReadFile( const TDesC& aFileName, TDes8& aBuf );
+
+ /**
+ * Determines presence of file handle.
+ * @return ETrue if file handle exists.
+ */
+ TBool FileHandleExists();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpMediaRecognizer();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private: // Data
+ // Array to hold all the controller plugins that support video
+ RMMFControllerImplInfoArray iVideoControllers;
+ // Array to hold all the controller plugins that support audio
+ RMMFControllerImplInfoArray iAudioControllers;
+ // bufsize
+ TInt iBufSize;
+ // Mime type recognizer
+ RApaLsSession iRecognizer;
+ RFile iFileHandle;
+ };
+
+#endif // BAVPMEDIARECONGNIZER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpNPObject.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef BAVPNPOBJECT
+#define BAVPNPOBJECT
+
+#include <e32base.h>
+#include <npscript.h>
+
+class CBavpPlugin;
+
+typedef struct
+{
+ NPObject object;
+ CBavpPlugin *plugin;
+ NPObject* stateChangedCallback;
+ NPP nppInstance;
+} BavpNPObject;
+
+BavpNPObject* BavpNPObject_new(NPP instance);
+void BavpNPObject_stateChanged(BavpNPObject* obj, char* state);
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpPlugin.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,370 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser for handling embedded video requests.
+*
+*/
+
+
+#ifndef BAVPPLUGIN_H
+#define BAVPPLUGIN_H
+
+// INCLUDES
+#include <e32std.h>
+#include <npupp.h>
+#include <pluginadapterinterface.h> // For base class MPluginNotifier
+#include <aknnotewrappers.h> // For displaying note
+#include <drmhelper.h>
+#include <DRMCommon.h>
+#include <cecombrowserplugininterface.h>
+#include "BavpNPObject.h"
+#include <rt_gesturehelper.h>
+
+// FORWARD DECLARATIONS
+class CBavpView;
+class CBavpController;
+
+// CLASS DECLARATION
+
+/******************************************
+This class is specific to ECom Style Plugin.
+This is used for passing plugin specific initialization information to and from
+browser.
+*******************************************/
+IMPORT_C NPError InitializeFuncs( NPPluginFuncs* aPpf );
+
+// CONSTANTS
+const TInt KFirstBavpImplementationValue = 0x10282811;
+const TInt KSecondBavpImplementationValue = 0x10282812;
+const TInt KThirdBavpImplementationValue = 0x10282813;
+const TInt KFourthBavpImplementationValue = 0x10282814;
+
+/**
+* CBavpPluginEcomMain
+* Used for passing plugin specific initialization information to and from browser.
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpPluginEcomMain : public CEcomBrowserPluginInterface
+ {
+ public: // Methods from base classes
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpPluginEcomMain* NewL( TAny* aInitParam );
+
+ /**
+ * Destructor
+ */
+ ~CBavpPluginEcomMain();
+
+ /**
+ * Passed from the browser to the plugin and delcares what functions the browser
+ * makes available
+ */
+ NPNetscapeFuncs* Funcs() { return iNpf; }
+
+ private:
+
+ // Default constructor
+ CBavpPluginEcomMain( NPNetscapeFuncs* aNpf );
+
+ // By default Symbian 2nd phase constructor is private.
+ void ConstructL( NPPluginFuncs* aPluginFuncs );
+
+ // Netscape Function Pointer
+ NPNetscapeFuncs* iNpf;
+ };
+
+/**
+* CBavpPlugin class
+* Interfaces to Browser, used to pass information between browser and plugin
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpPlugin : public CBase,
+ public MPluginNotifier
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpPlugin* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBavpPlugin();
+
+ public: // New methods
+
+ /**
+ * SetWindowL
+ * @since 3.2
+ * @param MPluginAdapter *pluginAdapter: Pointer to Browser adapter class
+ * @param const TRect& aRect: rectangle representing current UI
+ * @return void
+ */
+ void SetWindowL( MPluginAdapter *pluginAdapter, NPWindow* aWindow, NPP aInstance );
+
+ /**
+ * OpenAndPlayFileL
+ * @since 3.2
+ * @param const TDesC& aFileName: Name and path of file to be played
+ * @param const HBufC* originalFileName: name of the file to be played. added for scripting.
+ * @return void
+ */
+ void OpenAndPlayFileL( const TDesC& aFileName, const HBufC* originalFileName );
+
+ /**
+ * OpenAndPlayUrlL
+ * @since 3.2
+ * @param const TDesC& aUrl: Name and path of uri to be played
+ * @return void
+ */
+ void OpenAndPlayUrlL( const TDesC& aUrl );
+
+ /**
+ * Controller
+ * @since 5.0
+ * @param void
+ * @return controller
+ */
+ CBavpController* Controller() { return iBavpController; }
+
+ /**
+ * SetNPObject
+ * iNPObject is a scriptable object
+ * @since 5.0
+ * @param BavpNPObject *aObj
+ * @return void
+ */
+ void SetNPObject( BavpNPObject* aObj ) { iNPObject = aObj; }
+
+ /**
+ * NPObject
+ * return the scriptable object
+ * @since 5.0
+ * @param void
+ * @return BavpNPObject*
+ */
+ BavpNPObject* NPObject() const { return iNPObject; }
+
+
+ public: // New methods
+
+ /**
+ * SetAccessPtId
+ * Set access pt id
+ * @since 3.2
+ * @param TUint aAccessPtId, sets the access pt id
+ * @return void
+ */
+ void SetAccessPtId( TUint aAccessPtId );
+
+ /**
+ * SetVolumeAndLoop
+ * Set volume, loop, and infinite values
+ * @since 3.2
+ * @param TInt aVolume, the volume level from web page
+ * @param TInt aLoop, the loop count from web page
+ * @param TInt aInfiniteFlag, not used
+ * @return void
+ */
+ void SetVolumeAndLoop( TInt aVolume, TInt aLoop, TInt aInfiniteFlag );
+
+ /**
+ * SetRtspUri
+ * Set Rtsp uri
+ * @since 3.2
+ * @param TInt aVolume, the volume level from web page
+ * @param TInt aLoop, the loop count from web page
+ * @param TInt aInfiniteFlag, not used
+ * @return void
+ */
+ void SetRtspUriL( const TDesC& aRtspUri );
+
+ public: // Methods from base classes
+
+ /**
+ * From MPluginNotifier
+ * @since 3.2
+ * @param TNotificationType aCallType: Represents a type of notification from Browser
+ * @param void* aParam: Contains value corresponding to notification
+ * @return TInt: Error Code
+ */
+ TInt NotifyL( TNotificationType aCallType, void* aParam );
+
+ /**
+ * Set the mime type
+ * The mimetype is returned from headers
+ * @param NPMIMEType type
+ * @return void
+ */
+ void SetMimeType(NPMIMEType type);
+
+ NPP getNPP() {return iNPP;}
+
+ NPNetscapeFuncs* getNPNFuncs();
+
+ TBool HandleGesture(void* aEvent);
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpPlugin();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ public: // Data
+
+ // Initialize as false, then set it whenever error occurs
+ TBool iError;
+
+ private: // Data
+
+ // Interface to Browser
+ MPluginAdapter* iPluginAdapter;
+
+ // Audio or Video controller
+ CBavpController* iBavpController;
+
+ // CCoeControl interface
+ CBavpView* iBavpView;
+
+ BavpNPObject* iNPObject;
+
+ // Resource offset
+ TInt iResourceOffset;
+
+ // Src file scheme, which is changed by script in run time
+ HBufC* iFileName;
+
+ // Src RTSP scheme uri, which is used to start BavpController
+ HBufC* iRtspUrl;
+
+ // Access point id
+ TUint iAccessPtId;
+
+ // Value of the Volume embedded in the HTML file
+ TInt iVolume;
+
+ // Value of the Loop embedded in the HTML file
+ TInt iLoop;
+
+ // Flag indication if the loop is set to infinite
+ TBool iInfiniteFlag;
+
+ // DRM Helper instance to address the error case from the plugin level
+ CDRMHelper* iDrmHelper;
+
+ // Mime type. Added for scripting functionality
+ HBufC8* iMimeType;
+ NPP iNPP;
+ //browser plugin state, used for play and resume
+ TBool iPauseState;
+ TBool iIsForeGround;
+ TBool iPauseInBackground;
+ TBool iPlayFromFile;
+ };
+
+/**
+********************************************************************************
+ Plugin API methods. Source located in CBavpApi.cpp
+*********************************************************************************
+*/
+
+/**
+ * Create a plugin.
+ */
+
+NPError BavpNewp( NPMIMEType pluginType, NPP instance, uint16 mode,
+ CDesCArray* argn, CDesCArray* argv, NPSavedData* saved );
+
+/**
+ * Wrapper the errors
+ */
+void BavpConstructL( NPP aInstance, CDesCArray* argn, CDesCArray* argv );
+
+/**
+ * Destroy a plugin.
+ */
+NPError BavpDestroy( NPP instance, NPSavedData** save );
+
+/**
+ * This is the parent window of a plugin.
+ */
+NPError BavpSetwindow( NPP instance, NPWindow* window );
+
+/**
+ * A new data stream has been created for sending data to the plugin.
+ */
+NPError BavpNewstream( NPP instance, NPMIMEType type, NPStream* stream,
+ NPBool seekable, uint16* stype );
+
+/**
+ * A data stream has been terminated.
+ */
+NPError BavpDestroystream( NPP instance, NPStream* stream, NPReason reason );
+
+/**
+ * A data stream has been fully saved to a file.
+ */
+void BavpAsfile( NPP instance, NPStream* stream, const TDesC& fname );
+
+/**
+ * Return the maximum number of bytes this plugin can accept from the stream.
+ */
+int32 BavpWriteready( NPP instance, NPStream* stream );
+
+/**
+ * Receive more data - return number of bytes processed.
+ */
+int32 BavpWrite( NPP instance, NPStream* stream,
+ int32 offset, int32 len, void* buffer );
+
+/**
+ * This is the URL being sensed.
+ */
+void BavpUrlnotify( NPP instance, const TDesC8& url, NPReason reason,
+ void* notifyData );
+
+/**
+ * Generic hook to retrieve values/attributes from the plugin.
+ */
+NPError BavpGetvalue( NPP instance, NPPVariable variable, void *ret_value );
+
+/**
+ * Generic hook to set values/attributes within the plugin.
+ */
+NPError BavpSetvalue( NPP instance, NPNVariable variable, void *ret_value );
+
+/**
+ * Print
+ */
+void BavpPrint( NPP instance, NPPrint* platformPrint );
+
+/**
+ * Event
+ */
+int16 BavpEvent( NPP instance, void* event );
+
+#endif // BAVPPLUGIN_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,314 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Uses the interface MPluginAdapter to notify browser of construction
+ and destruction of the plug-in, implements interface MPluginOptionHandler
+ to add menus and draws animated images while video player loading the data
+*
+*/
+
+
+#ifndef BAVPVIEW_H
+#define BAVPVIEW_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <coedef.h>
+
+#include "BrowserAudioVideoPlugin.hrh"
+#include <pluginadapterinterface.h>
+
+// CLASS DECLARATION
+class CBavpPlugin;
+class CBavpController;
+class CAknBitmapAnimation;
+
+/**
+* MBavpView
+* Handles window controls for the Browser Audio Video Plugin
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class MBavpView
+ {
+ public:
+ /**
+ * Handles the player animation state changes
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ virtual void UpdateView() = 0;
+
+ /**
+ * Returns CCoeControl instance
+ * @since 3.2
+ * @param none
+ * @return CCoeControl instance itself
+ */
+ virtual CCoeControl& CoeControl() = 0;
+
+ /**
+ * Returns handle to a standard window
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ virtual RWindow& WindowInst() = 0;
+
+ /**
+ * Check if the window is the top window instance
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ virtual TBool IsTopWindowL() = 0;
+
+ /**
+ * Check controller status
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ virtual void ControllerStateChangedL() = 0;
+
+ virtual TRect WindowRect() = 0;
+ virtual CBavpPlugin* bavPlugin() = 0;
+ };
+
+
+/**
+* CBavpView
+* Implent the interface of MBavpView
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpView : public CCoeControl,
+ public MBavpView,
+ public MOptionMenuHandler
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpView* NewL( const CCoeControl* aParent, const TRect& aRect, CBavpPlugin* aBavPlugin );
+
+ /**
+ * Destructor.
+ */
+ ~CBavpView();
+
+ public: // New functions
+
+ /**
+ * Sets the controller instance on the view
+ * @since 3.2
+ * @param CBavpController aController
+ * @return void
+ */
+ void SetBavpController( CBavpController* aController )
+ { iBavpController = aController; }
+
+ /**
+ * Sets the control's extent, specifying a TRect
+ * @since 3.2
+ * @param TRect aRect:The rectangle that defines the control's extent
+ * @return void
+ */
+ void SetRect( NPWindow* aWindow );
+
+ public: // Methods from MOptionMenuHandler
+
+ /**
+ * AddPluginOptionMenuItemsL
+ * Add the Option Menu items to the menuPane, these will be handled by plugin.
+ * @since 3.2
+ * @param aMenuPane handle of the menu that will contain the options
+ * @param aCommandBase base id that needs to be added to the command ID
+ * @param aAfter Plugin options should be added after this index
+ * @return void
+ */
+ void AddPluginOptionMenuItemsL( CEikMenuPane& aMenuPane, TInt aCommandBase,
+ TInt aAfter );
+
+ /**
+ * HandlePluginCommandL
+ * Handle the user command from the option menu to the plugin.
+ * @since 3.2
+ * @param aCommand the command ID of the option
+ * @return void
+ */
+ void HandlePluginCommandL( TInt aCommand );
+
+ public:// Methods from MBavpView
+
+ /**
+ * Handles the animation start or cancel status
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void UpdateView();
+
+ /**
+ * CCoeControl instance
+ * @since 3.2
+ * @param none
+ * @return CCoeControl instance itself
+ */
+ CCoeControl& CoeControl() { return *this; }
+
+ /**
+ * Returns RWidnows
+ * @since 3.2
+ * @param none
+ * @return RWindow: handle to a standard window
+ */
+ RWindow& WindowInst() { return Window(); }
+ TRect WindowRect() { return iWindowRect; }
+
+ /**
+ * Check if the window is the top window instance
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ TBool IsTopWindowL();
+
+ /**
+ * Monitor the controller's status and display mode changes
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void ControllerStateChangedL();
+
+ public: // Methods from CCoeControl
+
+ /**
+ * OfferKeyEventL
+ * Handle Key press event
+ * @since 3.2
+ * @param aKeyEvent : The Keyevent that is going to be passed in
+ * @param aType : The type of eventcode that is going to be passed in
+ * @return TKeyResponse
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ void HandlePointerEventL(const TPointerEvent &aPointerEvent);
+
+ protected: // Methods from CCoeControl
+
+ /**
+ * Responds to size changes to sets the size and position of the contents of this control.
+ * @param none
+ * @return void
+ */
+ void SizeChanged();
+
+ /**
+ * Called when focus changes
+ * @param aDrawNow: Flag to redraw now
+ * @return void
+ */
+ void FocusChanged( TDrawNow /*aDrawNow*/ );
+
+ /**
+ * Draw from CCoeControl
+ * @param aRect: The rect to draw
+ * @return void
+ */
+ void Draw(const TRect& aRect) const;
+
+ public:
+ CBavpPlugin* bavPlugin() { return iBavPlugin; }
+ private: // methods
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpView();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const CCoeControl* aParent,
+ const TRect& aRect, CBavpPlugin* aBavPlugin );
+
+ /**
+ * Allows us to insert plugin specific option menu items
+ */
+ void InsertOneMenuItemL( CEikMenuPane& aMenuPane,
+ TInt aCommand, TInt aResourceId, TInt index );
+
+ /**
+ * Stops all animations and run the one specified
+ */
+ void RunAnimation( CAknBitmapAnimation* aAnimation, TBool &aAnimRunning );
+
+ private: // Data
+
+ // Pointer to controller
+ CBavpController* iBavpController;
+
+ // The window server session
+ RWsSession iWsSession;
+
+ // Window id
+ TInt iWindowId;
+
+ // Rectangle that defines the control's extent
+ TRect iRect;
+ TRect iWindowRect;
+ TRect iClipRect;
+
+ // Flag to add a control from the control stack
+ TBool iIsOnStack;
+
+ // Flag to check if video buffering animation running
+ TBool iIsVideoBuffAnimRunning;
+ CAknBitmapAnimation* iVideoBuffAnimation;
+
+ // Flag to check if bad content animation is running
+ TBool iIsBadContentAnimRunning;
+ CAknBitmapAnimation* iBadContentAnimation;
+
+ // Flag to check if video stopped animation is running
+ TBool iIsVideoStoppedAnimRunning;
+ CAknBitmapAnimation* iVideoStoppedAnimation;
+
+ // Flag to check if video paused animation is running
+ TBool iIsVideoPausedAnimRunning;
+ CAknBitmapAnimation* iVideoPausedAnimation;
+
+ // Flag to check if audio playing animation running
+ TBool iIsAudioPlayAnimRunning;
+ CAknBitmapAnimation* iAudioPlayAnimation;
+
+ // Flag to check if audio stopped animation is running
+ TBool iIsAudioStoppedAnimRunning;
+ CAknBitmapAnimation* iAudioStoppedAnimation;
+
+ // Flag to check if audio paused animation is running
+ TBool iIsAudioPausedAnimRunning;
+ CAknBitmapAnimation* iAudioPausedAnimation;
+
+ // Command Id that webengine passed in for plugin
+ TInt iCommandBase;
+ CBavpPlugin* iBavPlugin;
+ };
+
+#endif // CBavpVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpViewFullScreen.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: View class for playing media in full screen.
+*
+*/
+
+
+#ifndef BAVPVIEWFULLSCREEN_H
+#define BAVPVIEWFULLSCREEN_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <e32property.h> // RProperty class
+#include <ScreensaverInternalPSKeys.h>
+#include <HWRMLight.h>
+
+// CLASS DECLARATION
+class CBavpControllerVideo;
+/**
+* CBavpViewFullScreen
+* Controller for full screen
+*/
+class CBavpViewFullScreen : public CCoeControl
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpViewFullScreen* NewL(CBavpControllerVideo* aController);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBavpViewFullScreen();
+
+ public: // From base classes
+ /**
+ * Returns RWidnows
+ * @since S60 v3.2
+ * @param none
+ * @return RWindow: handle to a standard window
+ */
+ RWindow& WindowInst() { return Window(); }
+ /**
+ * Draw from CCoeControl
+ * @since S60 v5.0
+ * @param aRect
+ * @return void
+ */
+ void Draw( const TRect& aRect ) const;
+ /**
+ * Handles pointer events
+ * @since S60 v5.0
+ * @param aPointerEvent
+ * @return void
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CBavpViewFullScreen(CBavpControllerVideo* aController);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private:
+
+ // Rectangle that defines the control's extent
+ TRect iRect;
+ CBavpControllerVideo* iNormalController;
+ };
+
+#endif // BAVPVIEWFULLSCREEN_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpVolumeHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: AO that completes on a change in the volume property.
+*
+*/
+
+
+#ifndef BAVPVOLUMEHANDLER_H
+#define BAVPVOLUMEHANDLER_H
+
+#include <e32std.h>
+#include <CenRepNotifyHandler.h>
+
+// CONSTANTS
+const TInt KGeneralProfile = 0;
+const TInt KSilentProfile = 1;
+const TInt KMeetingProfile = 2;
+
+// The Central Depository volume values:
+// 0(mute), 2, 5, 8, 10(maximum)
+// Used to populate the initial volume and the volume dialog
+const TInt KCRVolume0 = 0;
+const TInt KCRVolume2 = 2;
+const TInt KCRVolume5 = 5;
+const TInt KCRVolume8 = 8;
+const TInt KCRVolume10 = 10;
+const TInt KCRVolumeMute = KCRVolume0;
+const TInt KCRVolumeMax = KCRVolume10;
+
+// FORWARD DECLARATIONS
+class MBavpVolumeObserver;
+class CCenRepNotifyHandler;
+class CRepository;
+
+/**
+* CBavpVolumeHandler class for soft volume handling
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+class CBavpVolumeHandler : public CBase,
+ public MCenRepNotifyHandlerCallback
+ {
+ public:
+ // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBavpVolumeHandler* NewL( MBavpVolumeObserver* aObserver );
+
+ /**
+ * Destructor.
+ */
+ ~CBavpVolumeHandler();
+
+ /**
+ * function impl for MCenRepNotifyHandlerCallback interface
+ * @since 3.1
+ * @param TInt aVolume - volume value to be set to
+ * @return void
+ */
+ void HandleNotifyInt( const TUint32 aKeyId, TInt aNewValue );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CBavpVolumeHandler( MBavpVolumeObserver* aObserver );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private:
+
+ MBavpVolumeObserver* iObserver;
+
+ // Central repository for Volume settings
+ CRepository* iVolumeRepository;
+
+ // Handler to notify volume changes in central repository
+ CCenRepNotifyHandler* iVolumeCRHandler;
+
+ // Current volume settings
+ TInt iCurrentVolume;
+
+ // Previous volume settings, save for mute/unmute
+ TInt iPreviousVolume;
+
+ // Central repository for Profiles
+ CRepository* iProfileRepository;
+
+ // Handler to notify Profile changes in central repository
+ CCenRepNotifyHandler* iProfileCRHandler;
+
+ // Current profile settings
+ TInt iCurrentProfile;
+ };
+
+#endif //BAVPVOLUMEHANDLER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpVolumeObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of the interface BavpVolumeObserver used to
+* handle volume level change indications from the Browser
+*
+*/
+
+
+#ifndef BAVPVOLUMEOBSERVER_H
+#define BAVPVOLUMEOBSERVER_H
+
+/**
+* BavpVolumeObserver class for handling the volume change requests
+* @lib npBrowserVideoPlugin.lib
+* @since 3.2
+*/
+
+class MBavpVolumeObserver
+ {
+ public:
+
+ /**
+ * UpdateVolume - Method called as part of the Central
+ * repository server to set the volume value
+ * @since 3.2
+ * @param TInt aVolume: Volume value to be set to
+ * @return void
+ */
+ virtual void UpdateVolume( TInt aVolume ) = 0;
+ };
+
+#endif // BAVPVOLUMEOBSERVER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BrowserAudioVideoPlugin.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Contains enumerated list of commands used in the component
+*
+*/
+
+
+#ifndef BROWSERAUDIOVIDEOPLUGIN_HRH
+#define BROWSERAUDIOVIDEOPLUGIN_HRH
+
+// CONSTANTS
+enum TBavpCommandIds
+{
+ EBavpCmdUnknown = 0,
+ EBavpCmdPlay,
+ EBavpCmdStop,
+ EBavpCmdPause,
+ EBavpCmdClose,
+ EBavpCmdChangeVolume,
+ EBavpCmdMuteVolume,
+ EBavpCmdPlayFullScreen,
+ EBavpCmdFastForward,
+ EBavpCmdRewind
+};
+
+#endif // BROWSERAUDIOVIDEOPLUGIN_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/loc/BrowserAudioVideoPlugin.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is a localisation file for BAVP
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d:Invalid clip information note.
+//d:Shown when media could not be opened.
+//w:
+//l:popup_note_window
+//r:2.8
+//
+#define qtn_mp_note_invalid_clip "Invalid Clip. Operation canceled."
+
+//d:Menu item for Video option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_video "Video"
+
+
+//d:Menu item for Video play option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_play "Play"
+
+//d:Menu item for Video stop option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_stop "Stop"
+
+//d:Menu item for Video pause option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_pause "Pause"
+
+//d:Menu item for Video fullscreen option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_fullscreen "FullScreen"
+
+//d:Menu item for Video volume change option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_volume_down "Volume Down"
+
+//d:Menu item for Video volume change option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_volume_up "Volume Up"
+
+//d:Menu item for Video Fast Forward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_fast_forward "Fast Forward"
+
+//d:Menu item for Video Rewind option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_rewind "Rewind"
+
+//d:Menu item for Video Skip Forward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_skip_forward "Skip Forward"
+
+//d:Menu item for Video Skip Backward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_skip_backward "Skip Backward"
+
+//d:Menu item for Video volume mute option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_mute "Mute"
+
+//d:Menu item for Video Full Screen option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_full_screen "Full Screen"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/rom/BrowserAudioVideoPlugin.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The iby file contains all data that must be included in image for
+* BrowserAudioVideoPlugin
+*
+*/
+
+
+#ifndef BROWSERAUDIOVIDEOPLUGIN_IBY
+#define BROWSERAUDIOVIDEOPLUGIN_IBY
+
+ECOM_PLUGIN(npbrowseraudiovideoplugin.dll, 0x10282810.rsc)
+S60_APP_AIF_ICONS(browseraudiovideoplugin)
+
+#endif // BROWSERAUDIOVIDEOPLUGIN_IBY
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/rom/BrowserAudioVideoPluginResources.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The resource iby file contains resource that needs to be localized for
+* BrowserAudioVideoPlugin
+*
+*/
+
+
+#ifndef BROWSERAUDIOVIDEOPLUGINRESOURCES_IBY
+#define BROWSERAUDIOVIDEOPLUGINRESOURCES_IBY
+
+data=ZRESOURCE\BrowserAudioVideoPlugin.rsc RESOURCE_FILES_DIR\BrowserAudioVideoPlugin.rsc
+
+#endif // BROWSERAUDIOVIDEOPLUGINRESOURCES_IBY
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpApi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,482 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: API functions that were loaded into TLS for the Browser to use.
+*
+*/
+
+// INCLUDE FILES
+#include <Uri16.h>
+#include <mmf/common/MmfControllerFrameworkBase.h>
+#include <stdlib.h>
+
+#include "BavpLogger.h"
+#include "BavpPlugin.h"
+#include "BavpVolumeHandler.h"
+
+#include <npscript.h>
+#include "BavpNPObject.h"
+// CONSTANTS
+_LIT(KAccessPtId, "accesspointid");
+_LIT(KLoop,"loop");
+_LIT(KSrc,"src");
+_LIT(KData,"data");
+_LIT(KRtsp,"rtsp");
+_LIT(KInfinite,"infinite");
+_LIT(KVolume, "volume");
+_LIT(KHigh, "high");
+_LIT(KMiddle, "middle");
+_LIT(KLow, "low");
+
+const TInt KOneLoopValue = 1;
+const TInt KMaxLoopValue = 50;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// BavpNewp
+// Create a new instance of a plugin. This is non-leaving method.
+// Returns: NPError: Error codes recognized by Browser
+// -----------------------------------------------------------------------------
+NPError BavpNewp( NPMIMEType /* pluginType*/, // Not used locally
+ NPP aInstance, // Stores pointer to Bavp
+ uint16 /* mode */, //
+ CDesCArray* argn, // The number of arguments passed
+ CDesCArray* argv, // The values of arguments in the array
+ NPSavedData* /*saved*/ ) //
+ {
+
+ // Fix for TSW error ID: SLON-74588K, as ControlPanel is unsupported so for the time being
+ // controlPanel plugin window shown as emplty non supported window.
+
+ _LIT(KControls, "controls");
+ _LIT(KControlPanel, "controlpanel");
+
+ for ( TInt i=0; i < argn->Count(); i++ )
+ {
+ if(((*argn)[i].Compare( KControls) == 0)&&((*argv)[i].Compare(KControlPanel ) == 0))
+ {
+ return NPERR_INVALID_PLUGIN_ERROR;
+ }
+ }
+ // Create BrowserAudioVideoPlugin, call this leaving method to wrap leaving methods
+ TRAPD( err, BavpConstructL( aInstance, argn, argv ) );
+ if ( err == KErrNoMemory )
+ {
+ Log( EFalse, _L("FUNCTION BavpNewp ERROR! Out of Memory Error") );
+
+ return NPERR_OUT_OF_MEMORY_ERROR;
+ }
+
+ if ( err != KErrNone )
+ {
+ Log( EFalse, _L("FUNCTION BavpNewp ERROR! Module Load Failure") );
+ return NPERR_MODULE_LOAD_FAILED_ERROR;
+ }
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpConstructL
+// This is the leaving method to create the plugin. We have leaving setters
+// that need to be wrapped.
+// Returns: void
+// -----------------------------------------------------------------------------
+void BavpConstructL( NPP aInstance, // Stores pointer to Bavp
+ CDesCArray* argn, // The number of arguments passed
+ CDesCArray* argv ) // The values of arguments in the array
+ {
+ Log( EFalse, _L("Calling FUNCTION BavpConstructL") );
+
+ CBavpPlugin *pluginInstance( NULL );
+
+ // Create BrowserVideoPlugin
+ pluginInstance = CBavpPlugin::NewL();
+
+ // Bavp functions can now be called
+ aInstance->pdata = pluginInstance;
+
+ // Retrieve the various attributes from the HTTP file and the
+ // object/embed/bgsound/soundstart tags on that page
+ //
+ // Retrieve the access point attribute
+ TInt accessPtIndex;
+ TInt accessPtId( KUseDefaultIap );
+ if ( !argn->Find( KAccessPtId, accessPtIndex, ECmpFolded ) )
+ {
+ // If the string is found get the access pt id and convert to TInt
+ TPtrC16 accessPtValue( (*argv)[accessPtIndex] );
+ TLex lex( accessPtValue );
+ TInt intVal( 0 );
+ if ( lex.Val( intVal ) == KErrNone)
+ {
+ accessPtId = intVal;
+ }
+ }
+ pluginInstance->SetAccessPtId( accessPtId );
+
+ // Retrieve the "loop" attribute value, default value is "1",
+ // with infiniteFlag off. This handles the loop attribute missing
+ // and loop="0" cases.
+ TInt loopIndex( 0 );
+ TPtrC16 loopValue;
+ TBool infiniteFlag( EFalse ); // Always false, use loop="50" instead "infinite"
+ TInt loop( KOneLoopValue ); // Our default loop value is "1"
+
+ TInt positionLoop = argn->Find( KLoop, loopIndex, ECmpFolded );
+ if ( positionLoop == 0 )
+ {
+ // Found a loop attribute value
+ TPtrC16 pointerLoopCount( (*argv)[loopIndex] );
+ loopValue.Set( pointerLoopCount );
+
+ // Is the loop value equal to string "infinite"
+ if ( loopValue.Compare( KInfinite ) == 0 )
+ {
+ // We never play true infinite, we loop max 50 times
+ loop = KMaxLoopValue;
+ }
+ else
+ {
+ // Ensure that only a valid loop value is used (1 to 50)
+ HBufC8* convertPointerLoopCount = HBufC8::New( pointerLoopCount.Length() );
+ TPtr8 convertToByteLoop = convertPointerLoopCount->Des();
+ convertToByteLoop.Copy( pointerLoopCount );
+
+ loop = atoi( (char*)(convertToByteLoop.Ptr()) );
+ if ( loop < KOneLoopValue )
+ {
+ loop = KOneLoopValue;
+ }
+ else if ( loop > KMaxLoopValue )
+ {
+ loop = KMaxLoopValue;
+ }
+ }
+ }
+
+ // Retrieve the "volume" attribute value, default is max, so that if the
+ // "volume" attribute isn't present, the user preferences will not get
+ // overwritten. There is a check in controller->SetVolumeByAttribute that
+ // checks current and attribute volume and choses lower volume.
+ TInt positionVolumeValue( 0 );
+ TInt CRVolume( KCRVolumeMax );
+ TPtrC16 volumeValue;
+ TInt positionVol = argn->Find( KVolume, positionVolumeValue, ECmpFolded );
+ if ( positionVol == 0 )
+ {
+ TPtrC16 pointerVolumeValue( (*argv)[positionVolumeValue] );
+ volumeValue.Set( pointerVolumeValue );
+ if ( !(volumeValue.Compare( KHigh )) )
+ {
+ CRVolume = KCRVolume10;
+ }
+ else if ( !(volumeValue.Compare( KMiddle )) )
+ {
+ CRVolume = KCRVolume5;
+ }
+ else if ( !(volumeValue.Compare( KLow )) )
+ {
+ CRVolume = KCRVolume2;
+ }
+ else
+ {
+ // Convert volume numeric string (i.e. volume="6") to CR volume
+ HBufC8* convertPointerVolumeValue = HBufC8::New( pointerVolumeValue.Length() );
+ TPtr8 convertToByteVolume = convertPointerVolumeValue->Des();
+ convertToByteVolume.Append( pointerVolumeValue );
+ CRVolume = atoi( (char*)(convertToByteVolume.Ptr()) );
+ if ( CRVolume < KCRVolumeMute )
+ {
+ CRVolume = KCRVolumeMute;
+ }
+ else if ( CRVolume > KCRVolumeMax )
+ {
+ CRVolume = KCRVolumeMax;
+ }
+ }
+ }
+
+ // Set the Volume and Loop for plugin
+ pluginInstance->SetVolumeAndLoop( CRVolume, loop, infiniteFlag );
+
+ // Retrieve the "src" or "data" attribute value, if it is rtsp scheme lets
+ // save it, so we can start a controller, since rtsp content is not passed
+ // by WebKit. It is our (Bavp) responsibilty to load rtsp content.
+ TInt srcIndex( 0 );
+ TInt ret = argn->Find( KSrc, srcIndex, ECmpFolded );
+ if ( ret != 0 )
+ {
+ // If the src attribute NOT found, try to find data attribute
+ ret = argn->Find( KData, srcIndex, ECmpFolded );
+ }
+
+ if ( ret == 0 )
+ {
+ // We found either data or src attribute
+ TPtrC16 srcValue( (*argv)[ srcIndex ] );
+ TUriParser uriParser;
+ uriParser.Parse( srcValue );
+ if ( !uriParser.Extract( EUriScheme ).Compare( KRtsp ) )
+ {
+ // We found a RTSP scheme. Lets save it up, so when the BavpView
+ // is create we can start the BavpController and load rtsp. This
+ // is because rtsp will not be started by a call to BavpAsFile().
+ // NOTE: Files (http) are downloaded first and then BavpAsFile()
+ // is called, which starts the BavpController.
+ pluginInstance->SetRtspUriL( uriParser.UriDes() );
+
+ // We may have to move this to a different place if eg: the url of
+ // the object is changed later (say from javascript)
+ CBavpPluginEcomMain* lBavpPluginEcomMain = (CBavpPluginEcomMain*) Dll::Tls();
+ NPNetscapeFuncs* funcPtr = lBavpPluginEcomMain->Funcs();
+ if ( funcPtr && funcPtr->getvalue )
+ {
+ funcPtr->getvalue( aInstance, NPNNetworkAccess, (void *)&accessPtId);
+ pluginInstance->SetAccessPtId( accessPtId );
+ }
+
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// BavpDestroy(NPP aInstance, NPSavedData**)
+// Called by Browser to destroy the plugin
+// Returns: NPError: Error Code
+// -----------------------------------------------------------------------------
+NPError BavpDestroy( NPP aInstance, // Link to Browser
+ NPSavedData** /*save*/ ) // Not used locally
+ {
+ Log( EFalse, _L("Calling FUNCTION BavpDestroy") );
+
+ CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, aInstance->pdata );
+ delete pluginInstance;
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpSetwindow
+// This is the parent window of plugin
+// Returns: NPError: Error Code
+// -----------------------------------------------------------------------------
+NPError BavpSetwindow( NPP aInstance, // Link to Browser
+ NPWindow* aWindow ) // Browser's window passed to Bavp
+ {
+ Log( EFalse, _L("Calling FUNCTION BavpSetwindow") );
+
+ CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, aInstance->pdata );
+ MPluginAdapter *pluginAdapter = STATIC_CAST( MPluginAdapter*, aWindow->window);
+
+ TRAPD( err, pluginInstance->SetWindowL(pluginAdapter, aWindow, aInstance) );
+ if ( err == KErrNoMemory )
+ {
+ Log( EFalse, _L("FUNCTION BavpSetWindow ERROR! Out of Memory Error") );
+
+ // Set the error to plugin if err occurs, it's for the next create plugin check
+ pluginInstance->iError = ETrue;
+ return NPERR_OUT_OF_MEMORY_ERROR;
+ }
+
+ if ( err != KErrNone )
+ {
+ Log( EFalse, _L("FUNCTION BavpSetWindow ERROR: %d"), err );
+
+ // Set the error to plugin if err occurs, it's for the next create plugin check
+ pluginInstance->iError = ETrue;
+ return NPERR_GENERIC_ERROR;
+ }
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpNewstream
+// Indicates start of downloading of an video file from the internet
+// Returns: NPError: Error Code
+// -----------------------------------------------------------------------------
+NPError BavpNewstream( NPP instance,
+ NPMIMEType type,
+ NPStream* /*stream*/, //
+ NPBool /*seekable*/, //
+ uint16* stype ) // Will set to NP_ASFILEONLY to notify Browser how to send data
+ {
+ Log( EFalse, _L("Calling FUNCTION BavpNewstream") );
+
+ // Bavp needs to set stype to alert Browser to send data via Bavp_asfile
+ *stype = NP_ASFILEONLY;
+
+ CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, instance->pdata );
+
+ pluginInstance->SetMimeType( type );
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpDestroystream NOT USED
+// Indicates completion of downloading an video file from the internet
+// Returns: NPError: Error Code
+// -----------------------------------------------------------------------------
+NPError BavpDestroystream( NPP /*instance*/, // Not used locally
+ NPStream* /*stream*/, //
+ NPReason /*aReason*/ ) //
+ {
+ Log( EFalse, _L("Calling FUNCTION BavpDestroyStream") );
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpAsfile
+// Called by Browser when data is copied to a file.
+// Returns: void
+// -----------------------------------------------------------------------------
+void BavpAsfile( NPP aInstance, // Link to Browser
+ NPStream* stream,
+ const TDesC& aFileName ) // file name and path
+ {
+ Log( EFalse, _L("Calling FUNCTION BavpAsfile") );
+ Log( EFalse, _L("Filename:") );
+ Log( EFalse, aFileName );
+
+ CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, aInstance->pdata );
+
+ // Get the error, and set this error to iError in plugin
+ TRAPD( err, pluginInstance->OpenAndPlayFileL( aFileName, stream->url ) );
+ if ( err != KErrNone )
+ {
+ Log( EFalse, _L("FUNCTION BavpAsfile ERROR!") );
+
+ // If error, set for plugin, it's for the next create plugin check
+ pluginInstance->iError = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// BavpWriteready NOT SUPPORTED
+// -----------------------------------------------------------------------------
+int32 BavpWriteready( NPP /*instance*/,
+ NPStream* /*stream*/ )
+ {
+ // Not implemented
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpWrite NOT SUPPORTED
+// -----------------------------------------------------------------------------
+int32 BavpWrite( NPP /*instance*/,
+ NPStream* /*stream*/,
+ int32 /*offset*/,
+ int32 /*len*/,
+ void* /*buffer*/ )
+ {
+ // Not implemented
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpPrint NOT SUPPORTED
+// -----------------------------------------------------------------------------
+void BavpPrint( NPP /*instance*/,
+ NPPrint* /*platformPrint*/ )
+ {
+ // Not implemented
+ }
+
+// -----------------------------------------------------------------------------
+// BavpEvent NOT SUPPORTED
+// -----------------------------------------------------------------------------
+int16 BavpEvent( NPP instance,
+ void* event )
+ {
+ TInt ret = EFalse;
+ if (instance)
+ {
+ CBavpPlugin *plugin = static_cast<CBavpPlugin*>(instance->pdata);
+ NPEvent *ev = static_cast<NPEvent*>(event);
+
+ if (plugin)
+ {
+ if (ev->event == ENppEventPointer)
+ {
+ NPEventPointer *evp =static_cast<NPEventPointer*> (ev->param);
+ ret = plugin->HandleGesture(evp->reserved);
+ }
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpUrlnotify NOT SUPPORTED
+// -----------------------------------------------------------------------------
+void BavpUrlnotify( NPP /*instance*/,
+ const TDesC8& /*url*/,
+ NPReason /*reason*/,
+ void* /*notifyData*/ )
+ {
+ // Not implemented
+ }
+
+// -----------------------------------------------------------------------------
+// BavpSetvalue NOT SUPPORTED
+// -----------------------------------------------------------------------------
+NPError BavpSetvalue( NPP /*instance*/,
+ NPNVariable /*variable*/,
+ void* /*ret_value*/ )
+ {
+ // Not implemented
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// BavpGetvalue NOT SUPPORTED
+// -----------------------------------------------------------------------------
+NPError BavpGetvalue( NPP aInstance,
+ NPPVariable aVariable,
+ void* ret_value )
+ {
+ NPError err( NPERR_NO_ERROR );
+
+ switch( aVariable )
+ {
+ case NPPVpluginInteractiveBool:
+ // Interactive=0, Not Interactive=1
+ *(TBool *)ret_value = EFalse;
+ break;
+ case NPPVpluginScriptableNPObject:
+ {
+ // return instance of scripting object to the browser
+ BavpNPObject *pluginNPObject = BavpNPObject_new( aInstance );
+
+ CBavpPlugin *bavpplugin = (CBavpPlugin*)aInstance->pdata;
+ bavpplugin->SetNPObject(pluginNPObject);
+
+ pluginNPObject->plugin = bavpplugin;
+ pluginNPObject->nppInstance = aInstance;
+ void** ret = (void**)ret_value;
+ *ret = (void*)pluginNPObject;
+ }
+ break;
+ default:
+ break;
+ } //end switch
+
+ return err;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpClipInfo.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Store the meta information and the state of the clip played
+*
+*/
+
+
+// INCLUDE FILES
+#include "BavpClipInfo.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpClipInfo::CBavpClipInfo
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+ CBavpClipInfo::CBavpClipInfo()
+ : iMediaType( EUnidentified ),
+ iSeekable( ETrue ),
+ iLiveStream( EFalse ),
+ iVideoTrack( EFalse ),
+ iInFullScreenMode( EFalse )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpClipInfo::~CBavpClipInfo
+// Destructor
+// -----------------------------------------------------------------------------
+CBavpClipInfo::~CBavpClipInfo()
+ {
+ // iFileName is created by controller, but we have ownership
+ delete iFileName;
+
+ // iUrl is created by controller, but we have ownership
+ delete iUrl;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpClipInfo::Reinit
+// Reinitialize all the values
+// -----------------------------------------------------------------------------
+void CBavpClipInfo::ReInit()
+ {
+ iSeekable = ETrue;
+ iLiveStream = EFalse;
+ iResolutionHeight = 0;
+ iResolutionWidth = 0;
+ iBitrate = 0;
+ iMaxVolume = 0;
+ iDurationInSeconds = 0;
+ iAudioTrack = EFalse;
+ iVideoTrack = EFalse;
+ iPosition = 0;
+ // Don't modify iMediaType, iFilename, and iUrl
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpController.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,889 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Base Controller class for handling browser requests to play
+* audio or video
+*
+*/
+
+
+// INCLUDE FILES
+#include <bautils.h>
+#include <f32file.h>
+#include <utf.h>
+#include <e32cmn.h>
+#include <aknquerydialog.h> // Volume list query dialog
+#include <aknlists.h>
+#include <CTSYDomainPSKeys.h>
+
+#include <browseruisdkcrkeys.h>
+#include <BrowserAudioVideoPlugin.rsg>
+
+#include "BavpController.h"
+#include "BavpClipInfo.h"
+#include "BavpView.h"
+#include "BavpLogger.h"
+
+#if defined(BRDO_ASX_FF)
+#include "AsxParser.h"
+#endif //BRDO_ASX_FF
+
+#include "eikon.hrh"
+
+using namespace RT_GestureHelper;
+
+// CONSTANTS
+const TInt KBavpMaxLinkFileSize = 5120; // 5kB
+#ifdef __PLATFORM_VERSION_32__
+const TInt KRectPadding = 2;
+#endif
+
+// Define our static BavpController array
+RPointerArray<CBavpController> CBavpController::iBavpControllerArray;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpController::CBavpController
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpController::CBavpController( MBavpView* aView,
+ TUint aAccessPtId )
+ : CActive( EPriorityStandard ),
+ iCurrentState( EBavpNone ),
+ iPreCallState( EBavpNone ),
+ iLastCommand( EBavpCmdUnknown ),
+ iLoopCount( 1 ),
+ iInitLoopCount( 1 ),
+ iInfiniteLoopFlag( EFalse ),
+ iAccessPtId( aAccessPtId ),
+ iBavpView( aView ),
+ iOriginalFileName ( NULL ),
+ iMimeType ( NULL )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::~CBavpController()
+// Destructor
+// -----------------------------------------------------------------------------
+CBavpController::~CBavpController()
+ {
+ Log( EFalse, _L("CBavpController::~CBavpController this="), (TInt)this );
+
+ if ( iClipInfo )
+ {
+ delete iClipInfo;
+ }
+
+ iIncomingCalls.Close();
+
+ // Cancel active object and deleting removes from the ActiveScheduler
+ Cancel();
+
+ if ( iBavpVolumeHandler )
+ {
+ delete iBavpVolumeHandler;
+ }
+
+ // No need to check, if not active, Cancel() does nothing
+ if ( iPositionUpdater )
+ {
+ iPositionUpdater->Cancel();
+ delete iPositionUpdater;
+ }
+
+ if ( iHwKeyEvents )
+ {
+ delete iHwKeyEvents;
+ }
+
+ if ( iOriginalFileName )
+ {
+ delete iOriginalFileName;
+ }
+
+ if ( iMimeType )
+ {
+ delete iMimeType;
+ }
+
+ // Remove this instance from the array
+ TInt index = iBavpControllerArray.Find( this );
+ if ( index != KErrNotFound )
+ {
+ iBavpControllerArray.Remove( index );
+ }
+ if ( iBavpControllerArray.Count() == 0 )
+ {
+ iBavpControllerArray.Close();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::HandleBrowserNotification
+// Default implementation, override as needed.
+// Handles notification from the Browser concerning the Browser's focus state
+// (Browser is in-focus, out-focus, foreground, or the background application)
+// and if this plugin is in-focus or out-focus. If the Browser is out-focus,
+// this plugin (all plugins) are out-focus. This is not used currently,
+// because we do not react to the Browser changing focus. We historically would
+// stop playing audio when the browser's focus changed (including when option
+// menu is popped up, ie menu top of stack).
+// -----------------------------------------------------------------------------
+void CBavpController::HandleBrowserNotification( TBool aFocus )
+ {
+ Log( EFalse, _L("CBavpController::HandleBrowserNotification: aBrowserFocus="),
+ aFocus );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::HandleError
+// Default implementation, override as needed.
+// This default error handling implementation just displays the broken (bad)
+// content animation and sets state to EBavpBadContent.
+// -----------------------------------------------------------------------------
+void CBavpController::HandleError( TInt aError )
+ {
+ Log( EFalse, _L("CBavpController::HandleError(): aError="), aError );
+
+ if ( aError != KErrNone )
+ {
+ // Any error, display we have bad content
+ iCurrentState = EBavpBadContent;
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::HandleKeysL
+// Default implementation, override as needed.
+// Handles user key presses when the Plugin is Activated.
+// -----------------------------------------------------------------------------
+TKeyResponse CBavpController::HandleKeysL( const TKeyEvent& aKeyEvent,
+ TEventCode /*aType*/ )
+ {
+ Log( EFalse, _L("CBavpController::HandleKeysL()") );
+
+ TKeyResponse keyResponse = EKeyWasNotConsumed;
+
+ switch ( aKeyEvent.iCode )
+ {
+ // Cancel key (RSK) was pressed
+ case EKeyDevice1:
+ // Return the focus to the Browser, remove it from Bavp
+ iBavpView->CoeControl().SetFocus( EFalse );
+ keyResponse = EKeyWasConsumed;
+ break;
+
+ // Arrow keys was pressed
+ case EKeyUpArrow: // North
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // Extra KeyEvent supports diagonal event simulator wedge
+
+ case EKeyRightArrow: // East
+
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // Extra KeyEvent supports diagonal event simulator wedge
+
+ case EKeyDownArrow: // South
+
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // Extra KeyEvent supports diagonal event simulator wedge
+
+ case EKeyLeftArrow: // West
+
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // Extra KeyEvent supports diagonal event simulator wedge
+
+ // Do nothing with these keys, there is no navigating inside Bavp.
+ keyResponse = EKeyWasConsumed;
+ break;
+
+ default:
+ // Do nothing, let the rest of the key events pass back not consumed
+ break;
+ } // end of switch
+
+ return keyResponse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::HandleCommandL
+// Default implementation, override as needed.
+// Handles the commands from the Option Menu defined in TBavpCommandIds
+// -----------------------------------------------------------------------------
+void CBavpController::HandleCommandL( TBavpCommandIds aCommand )
+ {
+ Log( EFalse, _L("CBavpController::HandleCommandL(): aCommand="), (TInt)aCommand );
+
+ switch ( aCommand )
+ {
+ case EBavpCmdPlay:
+ iLastCommand = EBavpCmdPlay;
+ PlayL();
+ break;
+
+ case EBavpCmdStop:
+ iLastCommand = EBavpCmdStop;
+ Stop();
+ break;
+
+ case EBavpCmdPause:
+ iLastCommand = EBavpCmdPause;
+ PauseL();
+ break;
+
+ case EBavpCmdFastForward:
+ iLastCommand = EBavpCmdFastForward;
+ FastForwardL();
+ break;
+
+ case EBavpCmdRewind:
+ iLastCommand = EBavpCmdRewind;
+ RewindL();
+ break;
+
+ case EBavpCmdChangeVolume:
+ iLastCommand = EBavpCmdChangeVolume;
+ CreateVolumeListDlgL();
+ break;
+
+ case EBavpCmdMuteVolume:
+ iLastCommand = EBavpCmdMuteVolume;
+ iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl,
+ KCRVolumeMute );
+ break;
+
+ default:
+ iLastCommand = EBavpCmdUnknown;
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::BavpGainedFocus
+// Default implementation, override as needed.
+// Called by CBavpView to CBavpPlugin whenever Bavp Plugin has focus and soft key
+// cancel is hit. When this happens the Browser calls NotifyL with 1.
+// -----------------------------------------------------------------------------
+void CBavpController::BavpFocusChanged( TBool aFocus )
+ {
+ iBavpHasFocus = aFocus;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::SetVolumeFromAttribute
+// Provides CBavpController with the volume attribute from the tags on the
+// HTTP page, i.e. <object volume="high"...
+// -----------------------------------------------------------------------------
+void CBavpController::SetVolumeFromAttribute( TInt aAttributeVolume )
+ {
+ // Use the lower volume:
+ // 1) Current volume (iCurrentVolume)
+ // 2) Volume setting on web page (aAttributeVolume)
+ if ( aAttributeVolume < iCurrentVolume )
+ {
+ iCurrentVolume = aAttributeVolume;
+ iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl,
+ iCurrentVolume );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::SetLoopFromAttribute
+// Provides CBavpController with the loop attribute from the tags on the
+// HTTP page, i.e. <object loop="infinite"... or <object loop="4"...
+// -----------------------------------------------------------------------------
+void CBavpController::SetLoopFromAttribute( TInt aLoopValue, TBool aInfiniteFlag )
+ {
+ // Save the loop count, already checked for valid range
+ iLoopCount = aLoopValue;
+
+ // Save the initial loop count, in case we get an error while looping
+ // through the content
+ iInitLoopCount = iLoopCount;
+
+ // If the loop value is set to "infinite" looping. We currently use
+ // a max loop of 50 for infinite
+ iInfiniteLoopFlag = aInfiniteFlag;
+}
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudioo::RefreshRectCoordinatesL
+// Refresh the coordinates of rect for display
+// -----------------------------------------------------------------------------
+void CBavpController::RefreshRectCoordinatesL()
+ {
+ Log( EFalse, _L("CBavpController::RefreshRectCoordinatesL()") );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::ParseRamFileL
+// Read the ram file and parse the the url, put into iClipInfo->iUrl
+// -----------------------------------------------------------------------------
+void CBavpController::ParseRamFileL()
+ {
+ Log( EFalse, _L("CBavpController::ParseRamFileL() ") );
+
+ RFs rFs;
+ RFile ramFile;
+
+ // Connect to file server:
+ User::LeaveIfError( rFs.Connect() );
+ CleanupClosePushL( rFs );
+
+ if ( !BaflUtils::FileExists( rFs, *iClipInfo->iFileName ) )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ User::LeaveIfError( ramFile.Open( rFs, *iClipInfo->iFileName, EFileShareAny ) );
+ CleanupClosePushL( ramFile );
+
+ TInt size;
+ User::LeaveIfError( ramFile. Size( size ) );
+ if ( size > KBavpMaxLinkFileSize )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ HBufC8* urlBuf = HBufC8::NewLC( size );
+ TPtr8 ptr = urlBuf->Des();
+
+ // Read file to urlBuf
+ User::LeaveIfError( ramFile.Read( ptr ) );
+
+ // Set the iClipInfo->iUrl
+ if ( iClipInfo->iUrl )
+ {
+ delete iClipInfo->iUrl;
+ iClipInfo->iUrl = NULL;
+ }
+ iClipInfo->iUrl = HBufC::NewL( urlBuf->Length() );
+
+ TPtr urlDes = iClipInfo->iUrl->Des();
+
+ // Read to the end of the line that should be a link
+ TInt lineChange = urlBuf->LocateF( EKeyLineFeed );
+ if ( lineChange == KErrNotFound )
+ {
+ // No line change was found --> last line had no line change
+ // Copy last line to (unicode) aLink
+ CnvUtfConverter::ConvertToUnicodeFromUtf8( urlDes, *urlBuf );
+ }
+ else
+ {
+ // Set the descriptor to the end of the line
+ if ( (lineChange > 0) && (urlBuf->Des()[lineChange - 1] == EKeyEnter) )
+ {
+ lineChange--;
+ }
+
+ // Copy line to (unicode) url
+ CnvUtfConverter::ConvertToUnicodeFromUtf8( urlDes, urlBuf->Left( lineChange ) );
+ }
+
+ CleanupStack::PopAndDestroy( 3 ); // ramFile, urlBuf, rFs
+ }
+
+
+#if defined(BRDO_ASX_FF)
+// -----------------------------------------------------------------------------
+// CBavpController::ParseAsxFileL
+// Read the asx file and parse the the url, put into iClipInfo->iUrl
+// Only retrieve the first URL found
+// -----------------------------------------------------------------------------
+void CBavpController::ParseAsxFileL()
+ {
+ Log( EFalse, _L("CBavpController::ParseAsxFileL() ") );
+
+ TUint urls = 0;
+ TPtrC8 url;
+
+ if ( iClipInfo->iUrl )
+ {
+ delete iClipInfo->iUrl;
+ iClipInfo->iUrl = NULL;
+ }
+
+ CAsxParser* asxParser = CAsxParser::NewL(*iClipInfo->iFileName);
+
+ CleanupStack::PushL( asxParser );
+
+ if ( asxParser )
+ {
+ asxParser->GetUrlCount(urls);
+ if ( urls > 0 )
+ asxParser->GetUrl(1,url);
+ }
+
+ iClipInfo->iUrl = HBufC::NewL( url.Length() );
+ TPtr urlDes = iClipInfo->iUrl->Des();
+ CnvUtfConverter::ConvertToUnicodeFromUtf8( urlDes, url);
+
+ CleanupStack::PopAndDestroy(); // asxparser
+ }
+#endif // BRDO_ASX_FF
+
+
+// CBavpController::GetClipRect
+// Retrieve the rect position. Ex. not intersect with title pane and status pane
+// -----------------------------------------------------------------------------
+TRect CBavpController::GetClipRect( TRect aRect )
+ {
+ TRect clipRect ( aRect );
+ Log( EFalse, _L("GetClipRect") );
+
+#ifndef __PLATFORM_VERSION_32__
+ //For non touch device the Child rect is relative to view port,
+ //where as for Touch device the child rect is relative to the application view rect (excluding the
+ //status Pane
+ return aRect;
+#else
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, iNormalScreenRect );
+
+ // Calculate not to cover the bottom or the top of the rect.
+ if ( clipRect.iTl.iX < iNormalScreenRect.iTl.iX )
+ {
+ clipRect.iTl.iX = iNormalScreenRect.iTl.iX;
+ }
+
+ if ( clipRect.iTl.iY < iNormalScreenRect.iTl.iY )
+ {
+ clipRect.iTl.iY = iNormalScreenRect.iTl.iY;
+ }
+
+ if ( clipRect.iBr.iY > iNormalScreenRect.iBr.iY )
+ {
+ clipRect.iBr.iY = iNormalScreenRect.iBr.iY;
+ }
+
+ if ( clipRect.iBr.iX > iNormalScreenRect.iBr.iX )
+ {
+ clipRect.iBr.iX = iNormalScreenRect.iBr.iX - KRectPadding;
+ }
+
+ return clipRect;
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::CreateVolumeListDlg
+// Create the volume list query dialog
+// -----------------------------------------------------------------------------
+void CBavpController::CreateVolumeListDlgL()
+{
+ CEikTextListBox* list = new(ELeave) CAknSinglePopupMenuStyleListBox;
+ CleanupStack::PushL( list );
+
+ // Create popup list and PUSH it.
+ CAknPopupList* popupList = CAknPopupList::NewL( list,
+ R_AVKON_SOFTKEYS_OK_CANCEL,
+ AknPopupLayouts::EMenuWindow);
+ CleanupStack::PushL( popupList );
+
+ // Initialize listbox.
+ list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
+ list->CreateScrollBarFrameL( ETrue );
+ list->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+
+ // Make list items and PUSH it
+ CDesCArrayFlat* items =
+ CCoeEnv::Static()->ReadDesCArrayResourceL( R_AKNTAPOPLIST_MENU_VOLUME_ITEMS );
+
+ // Set list items.
+ CTextListBoxModel* model = list->Model();
+ model->SetItemTextArray( items );
+ model->SetOwnershipType( ELbmOwnsItemArray );
+
+ // Using the current volume set to determine the index of the volume value
+ // to highlight in the list
+ TInt volumeIndex( 0 );
+ if ( iCurrentVolume == KCRVolume0 )
+ {
+ volumeIndex = 0;
+ }
+ else if ( iCurrentVolume == KCRVolume2 )
+ {
+ volumeIndex = 1;
+ }
+ else if ( iCurrentVolume == KCRVolume5 )
+ {
+ volumeIndex = 2;
+ }
+ else if ( iCurrentVolume == KCRVolume8 )
+ {
+ volumeIndex = 3;
+ }
+ else if ( iCurrentVolume == KCRVolume10 )
+ {
+ volumeIndex = 4;
+ }
+
+ // Highlight the current item in the list box
+ list->SetCurrentItemIndexAndDraw( volumeIndex );
+
+ HBufC* title = CCoeEnv::Static()->AllocReadResourceLC( R_TEXT_VIDEO_PLUGIN_MEDIA_VOLUME);
+ popupList->SetTitleL( *title );
+ CleanupStack::PopAndDestroy(); // title
+
+ // Show popup list and then show return value.
+ TInt popupOk = popupList->ExecuteLD();
+ CleanupStack::Pop(); // popuplist
+
+ // Handle the returned value from the volume list dialog
+ if ( popupOk )
+ {
+ // Check if there is change for the volume select
+ if ( volumeIndex != list->CurrentItemIndex() )
+ {
+ // Set the current index to volume index
+ volumeIndex = list->CurrentItemIndex();
+
+ // To match the list box data to the values defined in
+ // the Central repository: (mute)0,2,5,8,10(maximum)
+ if ( volumeIndex == 0 )
+ {
+ iCurrentVolume = KCRVolume0;
+ }
+ else if ( volumeIndex == 1 )
+ {
+ iCurrentVolume = KCRVolume2;
+ }
+ else if ( volumeIndex == 2 )
+ {
+ iCurrentVolume = KCRVolume5;
+ }
+ else if ( volumeIndex == 3 )
+ {
+ iCurrentVolume = KCRVolume8;
+ }
+ else if ( volumeIndex == 4 )
+ {
+ iCurrentVolume = KCRVolume10;
+ }
+
+ Log( EFalse, _L("Return Volume from Player="), iCurrentVolume );
+
+ // Tell the volume handler about our new volume the user selected
+ iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl,
+ iCurrentVolume );
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // list
+}
+
+// -----------------------------------------------------------------------------
+// CBavpController::IsVideoOrAudioCall
+// Check if there is an incoming call
+// -----------------------------------------------------------------------------
+TBool CBavpController::IsVideoOrAudioCall()
+ {
+ Log( EFalse, _L("CBavpController::IsVideoOrAudioCall() entered") );
+
+ // Pause if there is video call
+ TInt callType;
+
+ RProperty::Get( KPSUidCtsyCallInformation,
+ KCTsyCallType,
+ callType ); // Ignore errors
+
+ return ( callType == EPSCTsyCallTypeH324Multimedia ||
+ callType == EPSCTsyCallTypeCSVoice );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::BaseConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpController::BaseConstructL( TBavpMediaType aMediaType,
+ const TDesC& aFileName )
+ {
+ Log( EFalse, _L("CBavpController::BaseConstructL enter") );
+
+ // Create Clipinfo
+ iClipInfo = new (ELeave) CBavpClipInfo();
+ iClipInfo->iMediaType = aMediaType;
+ iClipInfo->iFileName = aFileName.AllocL();
+ iClipInfo->iUrl = aFileName.AllocL();
+
+ // Watch for incoming calls
+ User::LeaveIfError( iIncomingCalls.Attach( KPSUidCtsyCallInformation,
+ KCTsyCallState ) );
+ iIncomingCalls.Subscribe( iStatus );
+
+ // Set the AO active. so we will watch for incoming calls, see RunL()
+ SetActive();
+
+ // Create Volume Handler to get the initial volume from settings CR, and
+ // watch the CR for volume changes (browser or system)
+ iBavpVolumeHandler = CBavpVolumeHandler::NewL( this );
+
+ // Create the timer for jumping (skipping) to new position
+ iPositionUpdater = CPeriodic::NewL( CActive::EPriorityStandard );
+
+ //Get normal display screen rect - not including title pane and toolbar pane
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, iNormalScreenRect );
+ // If the phone has side volume keys, create an observer for the hardware
+ // volume key events
+ if ( HAS_HW_VOLUME_KEYS )
+ {
+ TRAP_IGNORE(iHwKeyEvents = CBavpHwKeyEvents::NewL( *this ) );
+ }
+
+ // Add this BavpController instance to the array
+ iBavpControllerArray.Append( this );
+
+ Log( EFalse, _L("CBavpController::BaseConstructL exited") );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::RunL
+// If incoming call arrives, handle the audio or video player content.
+// If incoming call ends, resume the audio or video player
+// -----------------------------------------------------------------------------
+void CBavpController::RunL()
+ {
+ Log( EFalse, _L("CBavpController::RunL() entered") );
+
+ // Do we have an incoming audio or video call
+ if ( IsVideoOrAudioCall() )
+ {
+ // If we are playing content, pause if seekable or stop if streaming
+ if ( iCurrentState == EBavpPlaying )
+ {
+ // Set precall state, so we will resume playing the content,
+ // after the call is done
+ iPreCallState = EBavpPlaying;
+
+ if ( iClipInfo->iSeekable )
+ {
+ // Seekable content, pause, if there is an incoming call
+ PauseL();
+ }
+ else
+ {
+ HandleInComingCallL();
+ // Streaming content, stop, if there is an incoming call
+ Stop();
+ }
+ }
+ // If we are seeking content, pause it (these states only for seekable)
+ else if ( iCurrentState == EBavpFastForwarding ||
+ iCurrentState == EBavpRewinding )
+ {
+ // Set precall state, so we will not resume playing the content,
+ // after the call is done
+ iPreCallState = EBavpPaused;
+
+ // Stop the position updater
+ if ( iPositionUpdater->IsActive() )
+ {
+ iPositionUpdater->Cancel();
+ }
+ // Seekable content, pause, if there is an incoming call
+ PauseL();
+ }
+ }
+ else
+ {
+ // If the prev status was playing and has been paused by a phone call
+ // or a video call. Try to get the player to the previous state and
+ // invoke play function.
+ if ( iPreCallState == EBavpPlaying )
+ {
+ iPreCallState = EBavpNone;
+ PlayL();
+ }
+ }
+
+ // Listen for the incoming call property changes
+ iIncomingCalls.Subscribe( iStatus );
+
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::UpdateVolume
+// From MBavpVolumeObserver
+// Provides CBavpController with the media volume from the VolumeHandler
+// -----------------------------------------------------------------------------
+void CBavpController::UpdateVolume( TInt aVolume )
+ {
+ iCurrentVolume = aVolume;
+
+ // Notify Player of volume change
+ SetPlayerVolume( iCurrentVolume );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::BavpHwKeyVolumeChange
+// Handles the change in the Volume that is needed as per the Hardware Volume
+// key events. Remember, all volume levels in CBavpController are CR based,
+// values 0(mute) - 10(max). Use KCRVolumeX values.
+// -----------------------------------------------------------------------------
+void CBavpController::BavpHwKeyVolumeChange( TInt aVolumeChange )
+ {
+ TInt newVolume = iCurrentVolume;
+ newVolume += aVolumeChange;
+
+ Log( EFalse, _L("CBavpController::BavpHwKeyVolumeChange newVolume="), newVolume );
+
+ // Ensure the volume is within range
+ if ( newVolume < KCRVolume0 )
+ {
+ newVolume = KCRVolume0;
+ }
+ else if ( newVolume > KCRVolumeMax )
+ {
+ newVolume = KCRVolumeMax;
+ }
+
+ // Piggyback on this call to set the new volume from
+ iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl, newVolume );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::IsAnotherControllerPlaying
+// Returns ETrue, on the first controller it finds in playing state
+// -----------------------------------------------------------------------------
+TBool CBavpController::IsAnotherControllerPlaying()
+ {
+ if ( iBavpControllerArray.Count() > 1 )
+ {
+ for ( TInt i( 0 ); i < iBavpControllerArray.Count(); i++ )
+ {
+ CBavpController* bavpController = iBavpControllerArray[ i ];
+ if ( ( this != bavpController ) &&
+ ( bavpController->iCurrentState == EBavpPlaying ) )
+ {
+ return ETrue;
+ }
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::PauseOtherControllersPlaying
+// This will attempt to pause all of the other controllers (expect this one), if
+// the media can't be paused (ie live stream), it will be stopped.
+// -----------------------------------------------------------------------------
+void CBavpController::PauseOtherControllersPlaying()
+ {
+ if ( iBavpControllerArray.Count() > 1 )
+ {
+ for ( TInt i( 0 ); i < iBavpControllerArray.Count(); i++ )
+ {
+ CBavpController* bavpController = iBavpControllerArray[ i ];
+ if ( this != bavpController )
+ {
+ TRAP_IGNORE( bavpController->PauseL() );
+ iBavpView->UpdateView();
+ }
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CBavpControllerVideo::HandleMultiInstanceError
+// Handle error codes.
+// NOTES:
+// MMF errors start at -12000, see /epoc32/include/mmf/common/MMFErrors.h
+// MMF also returns -1 (KErrNotFound) and few other system-wide errors
+// -----------------------------------------------------------------------------
+void CBavpController::HandleMultiInstanceError()
+ {
+ // Handle multiple media object case
+ if ( iBavpControllerArray.Count() > 1 && IsAnotherControllerPlaying() )
+ {
+ if ( iLastCommand == EBavpCmdUnknown )
+ {
+ // Another controller is playing, and this controller was
+ // initializing, so our error is because we can only play one
+ // media object at a time. Stop this media and let
+ // the first one initialized continue to play.
+ //TRAP_IGNORE( PauseL() );
+ Stop();
+ iBavpView->UpdateView();
+ }
+ else if ( iLastCommand == EBavpCmdPlay )
+ {
+ // Another controller is playing, and the user wants to play
+ // another media object. Pause (or stop) all of the others and
+ // play this one.
+ PauseOtherControllersPlaying();
+ TRAP_IGNORE( PlayL() );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpController::SetOriginalFileName
+// Sets the file name. Used for scripting functionality
+// -----------------------------------------------------------------------------
+void CBavpController::SetOriginalFileName( const TDesC* originalFile )
+{
+ if ( originalFile )
+ {
+ iOriginalFileName = originalFile->Alloc();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBavpController::SetMimeType
+// Sets the mime type. Used for scripting functionality
+// -----------------------------------------------------------------------------
+void CBavpController::SetMimeType( const TDesC8* mimetype )
+{
+ if ( mimetype )
+ {
+ iMimeType = mimetype->Alloc();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBavpController::BavpHwKeyCommand
+// Handles transport commands (play, pause, ...) from dedicated hardware keys.
+// -----------------------------------------------------------------------------
+/*
+void CBavpController::BavpHwKeyCommand( TBavpCommandIds aCommand )
+ {
+ // Do some basic checks for the hardware keys
+ if ( aCommand == EBavpCmdPlay && iCurrentState == EBavpPlaying )
+ {
+ // We recieved a play command while playing, therefore make it pause
+ aCommand = EBavpCmdPause;
+ }
+
+ HandleCommandL( aCommand );
+ }
+*/
+
+// -----------------------------------------------------------------------------
+// HandleGesture(TGestureEvent *gesture)
+// -----------------------------------------------------------------------------
+TBool CBavpController::HandleGesture(TGestureEvent* /*gesture*/)
+ {
+ // should be implemented in derrived class.
+ return EFalse;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpControllerAudio.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,479 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Controller class for handling browser requests to play video
+*
+*/
+
+
+// INCLUDE FILES
+#include <AudioPreference.h> // For priority/pref values
+#include <mmf/common/mmferrors.h>
+
+#include "BavpLogger.h"
+#include "BavpControllerAudio.h"
+#include "BavpView.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CBavpControllerAudio* CBavpControllerAudio::NewL( MBavpView* aView,
+ TUint aAccessPtId,
+ TBavpMediaType aMediaType,
+ const TDesC& aFileName )
+ {
+ CBavpControllerAudio* self = new( ELeave ) CBavpControllerAudio( aView, aAccessPtId );
+
+ Log( EFalse, _L("CBavpControllerAudio::NewL this="), (TInt)self );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aMediaType, aFileName );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::~CBavpControllerAudio()
+// Destructor
+// -----------------------------------------------------------------------------
+CBavpControllerAudio::~CBavpControllerAudio()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::~CBavpControllerAudio") );
+
+ // If currently playing, call Stop before you close and delete
+ if ( iCurrentState == EBavpPlaying && iAudioPlayer != NULL)
+ {
+ iAudioPlayer->Stop();
+ }
+ if ( iAudioPlayer )
+ {
+ iAudioPlayer->Close();
+ delete iAudioPlayer;
+ }
+
+ iFs.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::CBavpControllerAudio
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpControllerAudio::CBavpControllerAudio( MBavpView* aView,
+ TUint aAccessPtId )
+ : CBavpController( aView, aAccessPtId )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::ConstructL( TBavpMediaType aMediaType,
+ const TDesC& aFileName )
+ {
+ // Construct the BavpController base class
+ BaseConstructL( aMediaType, aFileName );
+
+ // Create Audio Player Client:
+ iAudioPlayer = CMdaAudioPlayerUtility::NewL( *this, KAudioPriorityRealOnePlayer,
+ TMdaPriorityPreference( KAudioPrefRealOneLocalPlayback ) );
+
+ // Connect to file server:
+ User::LeaveIfError( iFs.Connect() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::OpenAudioUrlL
+// Open the audio url link
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::OpenAudioUrlL()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::OpenUrlL() ") );
+
+ // Note: Play() is called from MapcInitComplete()
+ iAudioPlayer->OpenUrlL( *iClipInfo->iUrl, iAccessPtId, KNullDesC8 );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::OpenAudioFileL
+// Open the audio file
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::OpenAudioFileL()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::OpenFileL() ") );
+
+ // Note: Play() is called from MapcInitComplete()
+ iAudioPlayer->OpenFileL( *iClipInfo->iFileName );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::PlayAudioVideoL
+// Handles request to open and play an audio or video file
+// TDesC& aFilename: Name of audio file, or video file, or URL link
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::PlayAudioVideoL()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::OpenAndPlayL() ") );
+
+ // If currently playing, call Stop before you attempt to open and play
+ if ( iCurrentState == EBavpPlaying )
+ {
+ Stop();
+ }
+
+ OpenAudioFileL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::Stop
+// Stops audio from playing, if playing.
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::Stop()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::Stop") );
+
+ iAudioPlayer->Stop();
+ iClipInfo->iPosition = 0;
+ iAudioPlayer->SetPosition( iClipInfo->iPosition );
+ iCurrentState = EBavpStopped;
+
+ iBavpView->UpdateView();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::Play
+// Non leaving method to play audio
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::Play()
+ {
+ // To keep LeaveScan from complaining everwhere, we use this non leaving
+ // method
+ TRAP_IGNORE( PlayL() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::PlayL
+// Plays audio
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::PlayL()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::PlayL") );
+
+ SetPlayerVolume( iCurrentVolume );
+
+ // Handle multiple media object case
+ if ( iBavpControllerArray.Count() > 1 && IsAnotherControllerPlaying() )
+ {
+ if ( iLastCommand == EBavpCmdPlay )
+ {
+ // Another controller is playing, and the user wants to play
+ // this media object. Pause (or stop) all of the others and
+ // play this one.
+ PauseOtherControllersPlaying();
+ }
+ }
+
+ iAudioPlayer->SetPosition( iClipInfo->iPosition );
+ iAudioPlayer->Play();
+ iCurrentState = EBavpPlaying;
+
+ iBavpView->UpdateView();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::Pause
+// Non leaving method to pause playing audio
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::Pause()
+ {
+ // To keep LeaveScan from complaining everwhere, we use this non leaving
+ // method
+ TRAP_IGNORE( PauseL() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::PauseL
+// Pauses video while playing, if playing.
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::PauseL()
+ {
+ Log( EFalse, _L("CBavpControllerAudio::PauseL") );
+
+ if ( IsClipSeekable() &&
+ (iCurrentState == EBavpPlaying || iCurrentState == EBavpPaused))
+ {
+ // Save clip position, in case we want to resume playing
+ iAudioPlayer->GetPosition(iClipInfo->iPosition);
+ iAudioPlayer->Pause();
+ iCurrentState = EBavpPaused;
+ }
+ else
+ {
+ // Not seekable content, i.e. Live stream
+ iAudioPlayer->Stop();
+ iClipInfo->iPosition = 0;
+ iCurrentState = EBavpStopped;
+ }
+
+ iBavpView->UpdateView();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::FastForwardL
+// Fast forwards the audio
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::FastForwardL()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::RewindL
+// Rewinds the audio
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::RewindL()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::SetPlayerVolume
+// Calculate the player volume from the CR volume (aka BavpController
+// volume value) and sets it
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::SetPlayerVolume( TInt aVolume )
+ {
+ TInt playerVolume( 0 );
+ if ( iPlayerInitialized )
+ {
+ TInt maxVolume = iAudioPlayer->MaxVolume();
+ if (aVolume < 0)
+ {
+ playerVolume = 0;
+ }
+ else if (aVolume > maxVolume)
+ {
+ playerVolume = maxVolume;
+ }
+ else
+ {
+ // The CR volume is 0-10, convert to Audio player volume 0-100
+ playerVolume = ( aVolume * iPlayerMaxVolume ) / KCRVolumeMax;
+ }
+
+ // Set Video player volume
+ iAudioPlayer->SetVolume( playerVolume );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::GetPlayerVolume
+// Calculate the player volume value and sets the playback volume for the audio
+// track of the video clip.
+// -----------------------------------------------------------------------------
+TInt CBavpControllerAudio::GetPlayerVolume()
+ {
+ TInt playerVolume( 0 );
+ TInt CRVolume( 0 );
+
+ if ( iPlayerInitialized )
+ {
+ // Audio player returns 0-100
+ iAudioPlayer->GetVolume( playerVolume );
+
+ // Convert to CR volume 0-10
+ CRVolume = ( playerVolume * KCRVolumeMax ) / iPlayerMaxVolume;
+ }
+
+ return CRVolume;
+ }
+
+// --------------------------------------------------------------------------
+// CBavpControllerAudio::HandleError
+// Handle error codes. We can receive errors from the MMF Video Player
+// and its MMF callbacks (mvpuoPlayComplete, etc).
+// The MMF errors are for handling content issues, such as decoding content
+// and network access.
+// NOTES:
+// MMF errors start at -12000, see /epoc32/include/mmf/common/MMFErrors.h
+// MMF also returns -1 (KErrNotFound) and few other system-wide errors
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::HandleError( TInt aError )
+ {
+ Log( EFalse, _L("In CBavpControllerAudioo::HandleError(): err="), aError );
+
+ switch ( aError )
+ {
+ case KErrMMVideoDevice:
+ case KErrMMAudioDevice:
+ // We get this when the controllers can only support
+ // playing one media at a time.
+ HandleMultiInstanceError();
+ break;
+
+ default:
+ iCurrentState = EBavpBadContent;
+ iBavpView->UpdateView();
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::MapcInitComplete
+// Required due to MMdaAudioPlayerCallback derivation.
+// Called by client to indicate initialization has completed and device is ready
+// to play.
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::MapcInitComplete( TInt aError,
+ const TTimeIntervalMicroSeconds& /*aDuration */ )
+ {
+ Log( EFalse, _L("MapcInitComplete aError="), aError );
+
+ // Check for error
+ if ( aError != KErrNone )
+ {
+ HandleError( aError );
+ return;
+ }
+
+ // Audio player is initialized, so we can interact with it, volume,
+ iPlayerInitialized = ETrue;
+
+ iClipInfo->iDurationInSeconds = iAudioPlayer->Duration();
+ iClipInfo->iPosition = 0;
+ iAudioPlayer->SetPosition( iClipInfo->iPosition );
+
+ // Get the max player volume, so we can scale volume
+ iClipInfo->iMaxVolume = iAudioPlayer->MaxVolume();
+ iPlayerMaxVolume = iClipInfo->iMaxVolume;
+
+ // Handle multiple media object case
+ if ( iBavpControllerArray.Count() > 1 && IsAnotherControllerPlaying() )
+ {
+ if ( iLastCommand == EBavpCmdUnknown )
+ {
+ // Another controller is playing, and this controller was
+ // initializing. Because we can only play one media object at a
+ // time, stop this media and let the first one
+ // initialized continue to play.
+ Stop();
+ }
+ else if ( iCurrentState == EBavpPlaying && iLastCommand == EBavpCmdPlay )
+ {
+ // Another controller is playing, and the user wants to play
+ // another media object. Pause (or stop) all of the others and
+ // play this one.
+ PauseOtherControllersPlaying();
+ Play();
+ }
+ }
+ // Handle the single media object case
+ else
+ {
+ Play();
+ }
+
+ // Stop the buffering animation and play the audio only animation
+ iBavpView->UpdateView();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::MapcPlayComplete
+// Required due to MMdaAudioPlayerCallback derivation.
+// Called by client to indicate audio file has completed or has stopped playing.
+// -----------------------------------------------------------------------------
+void CBavpControllerAudio::MapcPlayComplete( TInt aError )
+ {
+ Log( EFalse, _L("MapcPlayComplete aError="), aError );
+
+ if ( iInfiniteLoopFlag )
+ {
+ // If infinite flag set: play audio again and again...
+ iClipInfo->iPosition = 0;
+ Play();
+ }
+ else if ( ( iLoopCount - 1 ) > 0 )
+ {
+ // If loop count: play, decrement loop count, play again...
+ iClipInfo->iPosition = 0;
+ Play();
+ iLoopCount-- ;
+ }
+ else
+ {
+ // We're done looping, or just done playing the audio
+ iCurrentState = EBavpPlayComplete;
+ iClipInfo->iPosition = 0;
+ iLoopCount = iInitLoopCount;
+
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::getPositionL
+// To get the current position of the clip
+// -----------------------------------------------------------------------------
+
+ TTimeIntervalMicroSeconds CBavpControllerAudio::getPositionL()
+ {
+ if ( iAudioPlayer )
+ {
+ TTimeIntervalMicroSeconds pos;
+ iAudioPlayer->GetPosition( pos );
+ return pos;
+ }
+ return NULL;
+ }
+
+ // -----------------------------------------------------------------------------
+// CBavpControllerAudio::setPositionL
+// To set the position of the clip
+// -----------------------------------------------------------------------------
+
+ void CBavpControllerAudio::setPositionL( TTimeIntervalMicroSeconds val )
+ {
+ if ( iAudioPlayer )
+ {
+
+ if ( !IsClipSeekable() && !IsClipLocalMedia() )
+ {
+ return;
+ }
+
+ TBool didWePause = EFalse;
+ // If playing, pause it (PauseL stops the PositionUpdater)
+ if ( iCurrentState == EBavpPlaying )
+ {
+ PauseL();
+ didWePause = ETrue;
+ }
+
+ if ( (val > iClipInfo->iDurationInSeconds ) || (val < 0) )
+ {
+ val = 0;
+ }
+
+ iAudioPlayer->SetPosition(val);
+ iClipInfo->iPosition = val;
+ if ( didWePause )
+ {
+ PlayL();
+ }
+ }
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpControllerVideo.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1487 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Controller class for handling browser requests to play video
+*
+*/
+
+
+// INCLUDE FILES
+#include <mmf/common/mmferrors.h>
+#include <aknclearer.h>
+#include <AknUtils.h>
+
+#include "BavpPlugin.h"
+#include "BavpLogger.h"
+#include "BavpControllerVideo.h"
+#include "BavpView.h"
+#include "BavpViewFullScreen.h"
+#include <mmf/common/mmfcontrollerframework.h>
+#include <MMFScalingCustomCommandConstants.h>
+
+using namespace RT_GestureHelper;
+
+// CONSTANTS
+// One second represented in microseconds
+const TInt KBavpOneSecond = 1000000;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CBavpControllerVideo* CBavpControllerVideo::NewL( MBavpView* aView,
+ TUint aAccessPtId,
+ TBavpMediaType aMediaType,
+ const TDesC& aFileName )
+ {
+ CBavpControllerVideo* self = new( ELeave ) CBavpControllerVideo( aView, aAccessPtId );
+
+ Log( EFalse, _L("CBavpControllerVideo::NewL this="), (TInt)self );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aMediaType, aFileName );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::~CBavpControllerVideo()
+// Destructor
+// -----------------------------------------------------------------------------
+CBavpControllerVideo::~CBavpControllerVideo()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::~CBavpControllerVideo this="), (TInt)this );
+
+ // If currently playing, call Stop before you close and delete
+ if ( iCurrentState == EBavpPlaying && iVideoPlayer)
+ {
+ iVideoPlayer->Stop();
+ }
+
+ // Close the video plugin, and delete it
+ if ( iVideoPlayer )
+ {
+ iVideoPlayer->Close();
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ iVideoPlayer->RemoveDisplayWindow(iBavpView->WindowInst());
+#endif
+ delete iVideoPlayer;
+ }
+
+ // CIdle AO used for display update
+ if ( iDisplayUpdater )
+ {
+ delete iDisplayUpdater;
+ }
+
+ if ( iBackLightUpdater )
+ {
+ iBackLightUpdater->Cancel();
+ delete iBackLightUpdater;
+ }
+ // Used for displaying content in full screen
+ if ( iBavpViewFullScreen )
+ {
+ delete iBavpViewFullScreen;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::CBavpControllerVideo
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpControllerVideo::CBavpControllerVideo( MBavpView* aView, TUint aAccessPtId )
+ : CBavpController( aView, aAccessPtId ), iActiveWindow(NULL)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::ConstructL( TBavpMediaType aMediaType,
+ const TDesC& aFileName )
+ {
+ // Construct the BavpController base class
+ BaseConstructL( aMediaType, aFileName );
+
+ // Create CIdle (AO) to update the display
+ iDisplayUpdater = CIdle::NewL( CActive::EPriorityIdle );
+ iBackLightUpdater=CHeartbeat::NewL(CActive::EPriorityStandard);
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::PrepareCompleteL
+// Handle the leaving methods needed by MvpuoPrepareComplete
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::PrepareCompleteL()
+ {
+ // Resolution
+ TSize size;
+ iVideoPlayer->VideoFrameSizeL(size);
+ iClipInfo->iResolutionHeight = size.iHeight;
+ iClipInfo->iResolutionWidth = size.iWidth;
+
+ // Bitrate
+ iClipInfo->iBitrate = iVideoPlayer->VideoBitRateL() +
+ iVideoPlayer->AudioBitRateL();
+
+ TInt iMetaCount = iVideoPlayer->NumberOfMetaDataEntriesL();
+ CMMFMetaDataEntry* metaData = NULL;
+
+ for ( TInt i = 0; i < iMetaCount; i++ )
+ {
+ metaData = iVideoPlayer->MetaDataEntryL( i );
+
+ Log( EFalse, _L("metaData index="), i );
+ Log( EFalse, metaData->Name() );
+ Log( EFalse, metaData->Value() );
+
+ // Check if seekable
+ if ( !metaData->Name().CompareF( KBavpSeekable ) )
+ {
+ if ( !metaData->Value().CompareF( KBavpFalse ) )
+ {
+ iClipInfo->iSeekable = EFalse;
+ }
+ }
+
+ // Check if live stream
+ if ( !metaData->Name().CompareF( KBavpLiveStream ) )
+ {
+ if ( !metaData->Value().CompareF( KBavpTrue ) )
+ {
+ // Live stream is not seekable
+ iClipInfo->iLiveStream = ETrue;
+ iClipInfo->iSeekable = EFalse;
+ }
+ }
+
+ delete metaData;
+ } // end of for
+
+ // Set up the max volume
+ iClipInfo->iMaxVolume = iVideoPlayer->MaxVolume();
+ iPlayerMaxVolume = iClipInfo->iMaxVolume;
+
+ // Duration
+ iClipInfo->iDurationInSeconds = iVideoPlayer->DurationL();
+
+ // Audio track
+ iClipInfo->iAudioTrack = iVideoPlayer->AudioEnabledL();
+
+ // Video track
+ iClipInfo->iVideoTrack = iVideoPlayer->VideoBitRateL();
+
+ if ( IsClipSeekable() )
+ {
+ iVideoPlayer->SetPositionL( iClipInfo->iPosition );
+ }
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ TRect rect( iBavpView->CoeControl().Rect() );
+ CEikonEnv* eikon = CEikonEnv::Static();
+ RWsSession& ws = eikon->WsSession();
+ CWsScreenDevice* screenDevice = eikon->ScreenDevice();
+ // Clip rect manipulation.
+ // Calculate the rect for display, including title and status pane
+ TRect clipRect = GetClipRect( rect );
+ TRAPD(errAdd, iVideoPlayer->AddDisplayWindowL(CCoeEnv::Static()->WsSession(),
+ *screenDevice,
+ iBavpView->WindowInst(),
+ rect,
+ clipRect));
+ TRAPD(errScale, iVideoPlayer->SetAutoScaleL(iBavpView->WindowInst(), EAutoScaleBestFit));
+ if( ( errAdd != KErrNone ) && (iActiveWindow != &iBavpView->WindowInst()) )
+ {
+ iActiveWindow = &iBavpView->WindowInst();
+ }
+ Log( EFalse, _L("CBavpControllerVideo::InitVideoPlayerL() AddDisplayWindowL %d"), errAdd );
+ Log( EFalse, _L("CBavpControllerVideo::InitVideoPlayerL() SetAutoScaleL %d"), errScale );
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::InitVideoPlayer
+// The non-leaving version that calls the leaving version. Closes the current
+// player and prepares the MMF to play the video
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::InitVideoPlayer()
+ {
+ TRAP_IGNORE( InitVideoPlayerL() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::InitVideoPlayerL
+// Closes the current player and prepares the MMF to play the video
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::InitVideoPlayerL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::InitVideoPlayerL()") );
+
+ // If videoplayer is already opened, close and delete it
+ if ( iVideoPlayer )
+ {
+ iVideoPlayer->Close();
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ iVideoPlayer->RemoveDisplayWindow(iBavpView->WindowInst());
+#endif
+ delete iVideoPlayer;
+ iVideoPlayer = NULL;
+ }
+
+ // Get the rect to display
+ TRect rect( iBavpView->CoeControl().Rect() );
+ TPoint pt = iBavpView->WindowInst().AbsPosition();
+ rect.Move( pt.iX, pt.iY );
+
+ CEikonEnv* eikon = CEikonEnv::Static();
+ RWsSession& ws = eikon->WsSession();
+ CWsScreenDevice* screenDevice = eikon->ScreenDevice();
+
+ // Clip rect manipulation.
+ // Calculate the rect for display, including title and status pane
+ TRect clipRect = GetClipRect( rect );
+
+ Log( EFalse, _L("InitVideoPlayerL() - calling CVideoPlayerUtility::NewL") );
+
+ // Initialize the videoplayer
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ iVideoPlayer = CVideoPlayerUtility2::NewL( *this, EMdaPriorityNormal,
+ EMdaPriorityPreferenceNone);
+#else
+ iVideoPlayer = CVideoPlayerUtility::NewL( *this, EMdaPriorityNormal,
+ EMdaPriorityPreferenceNone,
+ ws, *screenDevice,
+ iBavpView->WindowInst(), rect,
+ clipRect);
+#endif
+
+ // Register for loading notification
+ iVideoPlayer->RegisterForVideoLoadingNotification( *this );
+
+ switch ( iClipInfo->iMediaType )
+ {
+ case ELocalVideoFile:
+ Log( EFalse, _L("InitVideoPlayerL() - calling OpenVideoFile") );
+ OpenVideoFileL();
+ break;
+
+ case ELocalRamFile:
+ case EUrl:
+ case ELocalSdpFile:
+#if defined(BRDO_ASX_FILE)
+ case ELocalAsxFile:
+#endif // BRDO_ASX_FILE
+ Log( EFalse, _L("InitVideoPlayerL() - calling OpenVideoUrlL") );
+ OpenVideoUrlL();
+ break;
+
+ // Not supported
+ case ELocalAudioPlaylist:
+ default:
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::UnInitVideoPlayer
+// Closes the player and delete the instance
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::UnInitVideoPlayer()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::UnInitVideoPlayer()") );
+
+ if ( iVideoPlayer )
+ {
+ iVideoPlayer->Close();
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ iVideoPlayer->RemoveDisplayWindow(iBavpView->WindowInst());
+#endif
+ delete iVideoPlayer;
+ iVideoPlayer = NULL;
+ }
+
+ iCurrentState = EBavpNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::RotateScreen90
+// Rotate the screen if needed
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::RotateScreen90()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::RotateScreen90()") );
+
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
+
+ // Rotate only if screen rect height is greater than its width
+ if ( screenRect.Height() > screenRect.Width() )
+ {
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ TRAP_IGNORE( iVideoPlayer->SetRotationL(iBavpView->WindowInst(), EVideoRotationClockwise90 ) );
+#else
+ TRAP_IGNORE( iVideoPlayer->SetRotationL( EVideoRotationClockwise90 ) );
+#endif
+
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::RevertToFullScreenL
+// Set full screen display mode
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::RevertToFullScreenL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::RevertToFullScreenL()"));
+ CBavpPluginEcomMain* npm = (CBavpPluginEcomMain*)Dll::Tls();
+ bool fullscreen = true;
+
+ //This method is not supported when using CVideoPlayerUtility2, and will
+ //always leave with KErrNotSupported. instead of variating for new player
+ //we are ignoring the Leave
+ TRAP_IGNORE( iVideoPlayer->StopDirectScreenAccessL() );
+
+
+ iClipInfo->iInFullScreenMode = ETrue;
+
+ npm->Funcs()->setvalue(iBavpView->bavPlugin()->getNPP(),
+ NPPVpluginFullScreenBool,
+ static_cast<void*>(&fullscreen));
+ iBavpView->ControllerStateChangedL();
+
+ CEikonEnv* eikon = CEikonEnv::Static();
+ RWsSession& ws = eikon->WsSession();
+ CWsScreenDevice* screenDevice = eikon->ScreenDevice();
+
+ iNormalScreenRect = iBavpView->CoeControl().Rect();
+ TPoint pt = iBavpView->WindowInst().AbsPosition();
+ iNormalScreenRect.Move(pt.iX, pt.iY);
+ TRect screenRect = eikon->EikAppUi()->ApplicationRect();
+
+ CCoeControl* parentView = iBavpView->CoeControl().Parent();
+ parentView->SetRect(screenRect);
+ iBavpView->CoeControl().SetExtent(TPoint(0,0), screenRect.Size());
+
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+
+ iVideoPlayer->RemoveDisplayWindow(iBavpView->WindowInst());
+ TRAPD(errAdd, iVideoPlayer->AddDisplayWindowL(ws,*screenDevice,iBavpView->WindowInst(), screenRect, screenRect));
+ TRAPD(errScale, iVideoPlayer->SetAutoScaleL(iBavpView->WindowInst(), EAutoScaleBestFit));
+ Log( EFalse, _L("CBavpControllerVideo::RevertToFullScreenL() errAdd %d"), errAdd);
+ Log( EFalse, _L("CBavpControllerVideo::RevertToFullScreenL() errScale %d"), errScale);
+#else
+ iVideoPlayer->SetDisplayWindowL( ws, *screenDevice,
+ iBavpView->WindowInst(),
+ screenRect, screenRect );
+
+ RotateScreen90();
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::RevertToNormalScreenL
+// Set back to normal display mode
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::RevertToNormalScreenL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::RevertToNormalScreenL()") );
+ CEikonEnv* eikon = CEikonEnv::Static();
+ RWsSession& ws = eikon->WsSession();
+ CWsScreenDevice* screenDevice = eikon->ScreenDevice();
+ CBavpPluginEcomMain* npm = (CBavpPluginEcomMain*)Dll::Tls();
+ bool fullscreen = false;
+
+ //This method is not supported when using CVideoPlayerUtility2, and will
+ //always leave with KErrNotSupported. instead of variating for new player
+ //we are ignoring the Leave
+ TRAP_IGNORE( iVideoPlayer->StopDirectScreenAccessL() );
+
+ npm->Funcs()->setvalue(iBavpView->bavPlugin()->getNPP(),
+ NPPVpluginFullScreenBool,
+ static_cast<void*>(&fullscreen));
+
+ CCoeControl* parentView = iBavpView->CoeControl().Parent();
+ parentView->SetRect(iNormalScreenRect);
+ iBavpView->CoeControl().SetExtent(TPoint(0,0), iNormalScreenRect.Size());
+
+ iClipInfo->iInFullScreenMode = EFalse;
+ RefreshRectCoordinatesL();
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ iVideoPlayer->SetRotationL(iBavpView->WindowInst(), EVideoRotationNone );
+#else
+ iVideoPlayer->SetRotationL( EVideoRotationNone );
+#endif
+
+ iBavpView->ControllerStateChangedL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::ToggleScreen
+// Start a call back for the display screen switches (Full Screen to
+// Normal Screen)
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::ToggleScreen()
+ {
+ if ( iDisplayUpdater->IsActive() )
+ {
+ iDisplayUpdater->Cancel();
+ }
+
+ iDisplayUpdater->Start( TCallBack( CBavpControllerVideo::WaitForScreenSwitch,
+ this ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::RefreshRectCoordinatesL
+// Refresh the coordinates of rect for display
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::RefreshRectCoordinatesL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::RefreshRectCoordinatesL()") );
+
+ if ( IsClipFullScreen() ) {
+ return;
+ }
+ if ( iVideoPlayer )
+ {
+
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+ UpdateWindowSize();
+#else
+ TRect rect( iBavpView->CoeControl().Rect() );
+
+ TRect wr(iBavpView->WindowRect()); //can have negative coordinates
+ //if video scrolled out of viewport
+ CEikonEnv* eikon = CEikonEnv::Static();
+ RWsSession& ws = eikon->WsSession();
+ CWsScreenDevice* screenDevice = eikon->ScreenDevice();
+
+ // Windows' absolute position, relative to the current screen
+ TPoint pt = iBavpView->WindowInst().AbsPosition();
+ rect.Move( pt.iX, pt.iY );
+ wr.Move( pt.iX, pt.iY );
+
+ // Reset clipRect
+ TRect clipRect = rect;
+ clipRect = GetClipRect( rect );
+
+ Log( EFalse, _L("\nPosition: == clipRect to DAS: ==\n") );
+ Log( EFalse, _L("\nPosition:: clipRect.x = \n"), clipRect.iTl.iX );
+ Log( EFalse, _L("\nPosition:: clipRect.y = \n"), clipRect.iTl.iY );
+ Log( EFalse, _L("\nPosition:2: clipRect.x = \n"), clipRect.iBr.iX );
+ Log( EFalse, _L("\nPosition:2: clipRect.y = \n"), clipRect.iBr.iY );
+
+ TRAP_IGNORE
+ (
+ iVideoPlayer->SetDisplayWindowL( ws, *screenDevice,
+ iBavpView->WindowInst(),
+ wr, clipRect );
+ );
+
+#endif
+ if( iCurrentState == EBavpPaused || iCurrentState == EBavpStopped || iCurrentState == EBavpPlayComplete )
+ {
+ iVideoPlayer->RefreshFrameL();
+ }
+
+ } //end of iVideoPlayer
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::WaitForScreenSwitch
+// Switches between normal screen and full screen
+// -----------------------------------------------------------------------------
+TInt CBavpControllerVideo::WaitForScreenSwitch( TAny* aThisData )
+ {
+ TRAP_IGNORE( WaitForScreenSwitchL( aThisData ) );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::WaitForScreenSwitch
+// Switches between normal screen and full screen
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::WaitForScreenSwitchL( TAny* aThisData )
+ {
+ Log( EFalse, _L("CBavpControllerVideo::WaitForScreenSwitchL()") );
+
+ // Use static cast
+ CBavpControllerVideo* thisData = STATIC_CAST(CBavpControllerVideo*, aThisData);
+
+ // Switch from Normal screen mode to Full Screen mode
+ if ( !thisData->IsClipFullScreen() )
+ {
+ thisData->RevertToFullScreenL();
+
+ }
+ else if ( thisData->IsClipFullScreen() )
+ {
+ // Switch from Full Screen mode to Normal Screen mode
+ thisData->RevertToNormalScreenL();
+
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::DoFastForwardL
+// Fast forwards the video
+// -----------------------------------------------------------------------------
+TInt CBavpControllerVideo::DoFastForwardL( TAny* aThisData )
+ {
+ CBavpControllerVideo* thisData = STATIC_CAST( CBavpControllerVideo*, aThisData );
+ TTimeIntervalMicroSeconds skipPosition( 0 );
+ TTimeIntervalMicroSeconds currentPosition( thisData->iVideoPlayer->PositionL() );
+
+ Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - currentPosition = "),
+ currentPosition.Int64() );
+
+ // If we're not at the end of clip, skip forward a few positions
+ if ( currentPosition < thisData->iClipInfo->iDurationInSeconds )
+ {
+ skipPosition = currentPosition.Int64() + KSkipToPosition;
+
+ // If skip pass end of clip, set to the end of clip
+ if ( skipPosition > thisData->iClipInfo->iDurationInSeconds )
+ {
+ skipPosition = thisData->iClipInfo->iDurationInSeconds;
+ }
+
+ Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - skipPosition = "),
+ skipPosition.Int64() );
+
+ // Set the position
+ thisData->iVideoPlayer->SetPositionL( skipPosition );
+
+ // Refresh the frame
+ thisData->iVideoPlayer->RefreshFrameL();
+ thisData->iClipInfo->iPosition = skipPosition;
+ }
+ else
+ {
+ // Fast Forward reached the end of the clip, cancel the fast forward
+ thisData->iPositionUpdater->Cancel();
+ thisData->iClipInfo->iPosition = thisData->iClipInfo->iDurationInSeconds;
+ // Set the state to complete since it reached the end of the clip
+ thisData->iCurrentState = EBavpFastForwardComplete;
+ Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - End of clip") );
+ }
+
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::DoRewindL
+// Rewinds the video
+// -----------------------------------------------------------------------------
+TInt CBavpControllerVideo::DoRewindL( TAny* aThisData )
+ {
+ CBavpControllerVideo* thisData = STATIC_CAST( CBavpControllerVideo*, aThisData );
+ TTimeIntervalMicroSeconds skipPosition( 0 );
+ TTimeIntervalMicroSeconds currentPosition( thisData->iVideoPlayer->PositionL() );
+
+ Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - currentPosition = "),
+ currentPosition.Int64() );
+
+ // We're not at the beginning of the clip, rewind a few positions
+ if ( currentPosition > 0 )
+ {
+ skipPosition = currentPosition.Int64() - KSkipToPosition;
+
+ // If skip pass beginning of clip, set to the beginning of clip
+ if ( skipPosition < 0 )
+ {
+ skipPosition = 0;
+ }
+
+ Log( EFalse, _L("CBavpControllerVideo::RewindL() - skipPosition = "),
+ skipPosition.Int64() );
+
+ // Set the position
+ thisData->iVideoPlayer->SetPositionL( skipPosition );
+
+ // Refresh the frame
+ thisData->iVideoPlayer->RefreshFrameL();
+ thisData->iClipInfo->iPosition = skipPosition;
+ }
+ else
+ {
+ // Rewind reached the beginning of the clip, cancel the rewind
+ thisData->iPositionUpdater->Cancel();
+ thisData->iClipInfo->iPosition = 0;
+ // Set the state to complete since it reached beginning of clip
+ thisData->iCurrentState = EBavpRewindComplete;
+ Log( EFalse, _L("CBavpControllerVideo::RewindL() - beginning of clip") );
+ }
+
+ return ETrue;
+ }
+
+// --------------------------------------------------------------------------
+// CBavpControllerVideo::HandleError
+// Handle error codes. We can receive errors from the MMF Video Player
+// and its MMF callbacks (mvpuoPlayComplete, etc).
+// The MMF errors are for handling content issues, such as decoding content
+// and network access.
+// NOTES:
+// MMF errors start at -12000, see /epoc32/include/mmf/common/MMFErrors.h
+// MMF also returns -1 (KErrNotFound) and few other system-wide errors
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::HandleError( TInt aError )
+ {
+ Log( EFalse, _L("In CBavpControllerVideo::HandleError(): err="), aError );
+
+ switch ( aError )
+ {
+ case KErrSessionClosed: // When we stop live streaming
+ if ( iCurrentState == EBavpBuffering ||
+ iCurrentState == EBavpStopped )
+ {
+ Log( EFalse, _L("HandleError: iCurrentState=Buffering or Stopped and err=KErrSessionClosed") );
+ // Controller needs to be re-initialized, whenever
+ // live streaming is "Stopped"
+ // iCurrentState = EBavpNone, set by UnInitVideoPlayer
+ UnInitVideoPlayer();
+ // Set state to stopped, because we "stop" live content
+ iCurrentState = EBavpStopped;
+ }
+ else if ( iCurrentState == EBavpPlaying ||
+ iCurrentState == EBavpPaused )
+ {
+ Log( EFalse, _L("HandleError:iCurrentState=Playing or Paused and err=KErrSessionClosed") );
+ // If the window is not on top, it might be a video or phone
+ // call interrupt
+ TRAP_IGNORE
+ (
+ if ( !iBavpView->IsTopWindowL() )
+ {
+ InitVideoPlayer();
+ }
+ ) // end of TRAP_IGNORE
+ }
+ else
+ {
+ }
+ break;
+
+ case KErrDisconnected:
+ // If the window is not on top, it might be a video or phone
+ // call interrupt
+ Log( EFalse, _L("HandleError: err=KErrDisconnected") );
+ TRAP_IGNORE
+ (
+ if ( !iBavpView->IsTopWindowL() )
+ {
+ InitVideoPlayer();
+ }
+ ) // end of TRAP_IGNORE
+ break;
+
+ case KErrMMVideoDevice:
+ case KErrMMAudioDevice:
+ HandleMultiInstanceError();
+ break;
+
+ // Errors from MMF (i.e. MvpuoPrepareComplete, MvpuoPlayComplete...)
+ case KErrNotFound:
+ case KErrNotSupported:
+ case KErrCorrupt:
+ case KErrInUse:
+ case KErrNoMemory:
+ case KErrAbort:
+ case KErrArgument:
+ case KErrCouldNotConnect:
+ case KErrTimedOut:
+ case KErrHardwareNotAvailable:
+ case KErrOverflow:
+ case KErrMMNotEnoughBandwidth:
+ case KErrMMNetworkRead:
+ case KErrMMNetworkWrite:
+ case KErrMMServerNotSupported:
+ case KErrMMUDPReceive:
+ case KErrMMInvalidProtocol:
+ case KErrMMInvalidURL:
+ case KErrMMProxyServer:
+ case KErrMMDecoder:
+ case KErrMMPartialPlayback:
+ // Close the player and delete player instance.
+ // iCurrentState = EBavpNone, set by UnInitVideoPlayer.
+ UnInitVideoPlayer();
+
+ // Display we have bad content
+ Log( EFalse, _L("HandleError: state=BadContent") );
+ iCurrentState = EBavpBadContent;
+ iBavpView->UpdateView();
+ break;
+
+ default:
+ // Do nothing
+ break;
+
+ } // end of switch
+
+ Log( EFalse, _L("Out CBavpControllerVideo::HandleError()") );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::HandleKeysL
+// Handles user key presses when we're Activated (aka Top of CCoeControl stack)
+// -----------------------------------------------------------------------------
+TKeyResponse CBavpControllerVideo::HandleKeysL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ TKeyResponse keyResponse( EKeyWasNotConsumed );
+
+ // If we're in full screen mode, and any key is pressed, toggle to normal
+ // screen. Consume all key presses (down, key, up) when in full screen mode.
+ if ( IsClipFullScreen() )
+ {
+ if ( aType == EEventKeyDown )
+ {
+ ToggleScreen();
+ }
+ keyResponse = EKeyWasConsumed;
+ }
+ else
+ {
+ // Use the default HandleKeysL method
+ keyResponse = CBavpController::HandleKeysL( aKeyEvent, aType );
+ }
+
+ return keyResponse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::HandleCommandL
+// Default implementation, override as needed.
+// Handles the commands from the Option Menu defined in TBavpCommandIds
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::HandleCommandL( TBavpCommandIds aCommand )
+ {
+ Log( EFalse, _L("CBavpControllerVideo::HandleCommandL(): aCommand="), (TInt)aCommand );
+
+ switch ( aCommand )
+ {
+ case EBavpCmdPlayFullScreen:
+ ToggleScreen();
+ break;
+
+ default:
+ // Use the default HandleCommandL method
+ CBavpController::HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::PlayAudioVideoL
+// Handles request to open and play an audio or video content
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::PlayAudioVideoL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::PlayAudioVideoL() ") );
+
+ if ( iClipInfo->iMediaType == ELocalRamFile )
+ {
+ ParseRamFileL();
+ }
+#if defined(BRDO_ASX_FILE)
+ else if ( iClipInfo->iMediaType == ELocalAsxFile )
+ {
+ ParseAsxFileL();
+ }
+#endif // BRDO_ASX_FILE
+ // Check for the mediatype and open the file
+ InitVideoPlayerL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::Stop
+// Stops video from playing, if playing.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::Stop()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::Stop") );
+
+ // If we are fast forwarding or rewind, stop the position updater
+ iPositionUpdater->Cancel();
+
+ if ( iVideoPlayer )
+ {
+ // Stop video and set the state to stop
+ iVideoPlayer->Stop();
+ iCurrentState = EBavpStopped;
+
+ iClipInfo->iPosition = 0;
+ TRAP_IGNORE
+ (
+ iVideoPlayer->SetPositionL( iClipInfo->iPosition );
+ iVideoPlayer->RefreshFrameL();
+ );
+ }
+
+ // The videoPlayer can play audio-only content, so we need to updateDisplay
+ // to show the audio stop animation
+ if ( !IsClipVideo() )
+ {
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::PlayL
+// Plays video
+//
+// NOTE: The MMF throws an error when interrupted by a telephone call, so
+// iCurrentState=EBavpBadContent and PlayL called after call is done.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::PlayL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::PlayL") );
+
+ if ( !iVideoPlayer || !iPlayerInitialized )
+ {
+ // 1) Live-stream clip that was stopped will close the iVideoPlayer and
+ // need buffering, because Play() will have to be reinitialized with
+ // server.
+ // 2) The initialization of multiple video instances and a single
+ // playback hardware/software (ie Julie H/W) will cause the second plus
+ // instances to return an error. HandleError() will display stop animation,
+ // and if the user selects PlayL(), and the iVideoPlayer needs to be
+ // reinitialized.
+ //
+ // The buffering animation will be stopped, when MvpuoPrepareComplete()
+ // is called.
+ iCurrentState = EBavpBuffering;
+ iBavpView->UpdateView();
+ Log( EFalse, _L("PlayL - Calling InitVideoPlayerL()") );
+
+ // This calls OpenUrlL or OpenFileL, which will call iVideoPlayer->Play
+ InitVideoPlayerL();
+ return;
+ }
+
+ if ( iCurrentState == EBavpPaused ||
+ iCurrentState == EBavpFastForwarding ||
+ iCurrentState == EBavpRewinding )
+ {
+ // If we are fast forwarding or rewind, pause
+ if ( iPositionUpdater->IsActive() )
+ {
+ // PauseL stops the PositionUpdater
+ PauseL();
+ }
+
+ // We are resuming play and the clip is seekable, get the last
+ // position and adjust the last position, if needed
+ if ( iClipInfo->iPosition >=
+ iClipInfo->iDurationInSeconds.Int64() - KBavpOneSecond )
+ {
+ // Take back one second if too near end of clip
+ TTimeIntervalMicroSeconds adjustPosition =
+ iClipInfo->iPosition.Int64() - KBavpOneSecond;
+
+ // Negative value is not allowed, use beginning of clip
+ if ( adjustPosition.Int64() < 0 )
+ {
+ adjustPosition = 0;
+ }
+
+ // Use the adjusted position
+ iClipInfo->iPosition = adjustPosition;
+ }
+ }
+ else
+ {
+ // Handle all other states, EBavpStopped, EBavpPlayComplete,
+ // EBavpRewindComplete, EBavpFastForwardComplete, EBavpBadContent
+ iClipInfo->iPosition = 0;
+ }
+
+ if ( IsClipOnDemand() && iCurrentState == EBavpStopped )
+ {
+ // On-demand that was stopped will need buffering,
+ // because Play() will have to be reinitialized with server.
+ // The buffering animation is stopped, for on-demand when
+ // MvloLoadingComplete() is called
+ iCurrentState = EBavpBuffering;
+ Log( EFalse, _L("PlayL - Set EBavpBuffering") );
+ }
+ else
+ {
+ // Set state and update view to stop any animations running
+ iCurrentState = EBavpPlaying;
+ Log( EFalse, _L("PlayL - Set EBavpPlaying") );
+ }
+
+ iBavpView->UpdateView();
+
+ iVideoPlayer->SetPositionL( iClipInfo->iPosition );
+ //Fix for "EABU-7ZW9YT" if the pause is initiated for foreground to background and also for plugin invisible and plugin playpause
+ if(iCurrentState == EBavpPaused)
+ iCurrentState = EBavpPlaying;
+
+ iVideoPlayer->Play();
+ // ETwelveOClock: Timer tick is on the second - from Symbian
+ if (!iBackLightUpdater->IsActive())
+ {
+ iBackLightUpdater->Start( ETwelveOClock, this );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::PauseL
+// Pauses video while playing. Saves the last position, if seekable content.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::PauseL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::PauseL") );
+
+ // If the position updater is running, stop it
+ iPositionUpdater->Cancel();
+
+ if ( iVideoPlayer )
+ {
+ //disable screensaver
+ iBackLightUpdater->Cancel();
+ if ( IsClipSeekable() )
+ {
+ // Seekable content, save position for possible resume
+ iVideoPlayer->PauseL();
+ iClipInfo->iPosition = iVideoPlayer->PositionL();
+ iCurrentState = EBavpPaused;
+ }
+ else
+ {
+ // Not seekable content, i.e. Live stream
+ iVideoPlayer->Stop();
+ iClipInfo->iPosition = 0;
+ iVideoPlayer->SetPositionL( iClipInfo->iPosition );
+ iCurrentState = EBavpStopped;
+ }
+ }
+ // The videoPlayer can play audio-only content, so we need to updateDisplay
+ // to show the audio paused animation
+ if ( !IsClipVideo() )
+ {
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::FastForwardL
+// Fast forwards the video. This is only called on seekable and local file
+// content.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::FastForwardL()
+ {
+ // Check that the content can be Fast Forwarded, this is used when media key
+ // is pressed. We don't allow the user to select FF from Option Menu, if this
+ // condition is not already meet.
+ if ( !IsClipSeekable() && !IsClipLocalMedia() )
+ {
+ return;
+ }
+
+ // If playing, pause it (PauseL stops the PositionUpdater)
+ if ( iCurrentState == EBavpPlaying )
+ {
+ PauseL();
+ }
+
+ iCurrentState = EBavpFastForwarding;
+ iPositionUpdater->Start( KInitialDelay, KUpdateFrequency,
+ TCallBack( &DoFastForwardL, this ) );
+ if (!iBackLightUpdater->IsActive())
+ {
+ iBackLightUpdater->Start( ETwelveOClock, this );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerAudio::RewindL
+// Rewinds the video. This is only called on seekable and local file
+// content.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::RewindL()
+ {
+ // Check that the content can be Rewound, this is used when media key
+ // is pressed. We don't allow the user to select FF from Option Menu, if this
+ // condition is not already meet.
+ if ( !IsClipSeekable() && !IsClipLocalMedia() )
+ {
+ return;
+ }
+
+ // If playing, pause it (PauseL stops the PositionUpdater)
+ if ( iCurrentState == EBavpPlaying )
+ {
+ PauseL();
+ }
+
+ iCurrentState = EBavpRewinding;
+ iPositionUpdater->Start( KInitialDelay, KUpdateFrequency,
+ TCallBack( &DoRewindL, this ) );
+ if (!iBackLightUpdater->IsActive())
+ {
+ iBackLightUpdater->Start( ETwelveOClock, this );
+ }
+
+ }
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::OpenVideoUrlL
+// Handles request to open the url link
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::OpenVideoUrlL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::OpenUrlL() entered") );
+
+ // Note: Play() is called from MvpuoPrepareComplete()
+ iVideoPlayer->OpenUrlL( *iClipInfo->iUrl, iAccessPtId,
+ KNullDesC8, KRopControllerUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::OpenVideoFileL
+// Open a video file
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::OpenVideoFileL()
+ {
+ Log( EFalse, _L("CBavpControllerVideo::OpenFileL() ") );
+
+ // Note: Play() is called from MvpuoPrepareComplete()
+ iVideoPlayer->OpenFileL( *iClipInfo->iFileName );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::SetPlayerVolume
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::SetPlayerVolume( TInt aVolume )
+ {
+ if ( iVideoPlayer && iPlayerInitialized )
+ {
+ // The CR volume is 0-10, convert to Video player volume 0-100
+ TInt playerVolume = ( aVolume * iPlayerMaxVolume ) / KCRVolumeMax;
+
+ // Set Video player volume
+ TRAP_IGNORE( iVideoPlayer->SetVolumeL( playerVolume) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::GetPlayerVolume
+// -----------------------------------------------------------------------------
+TInt CBavpControllerVideo::GetPlayerVolume()
+ {
+ TInt playerVolume( 0 );
+ TInt CRVolume( 0 );
+
+ if ( iVideoPlayer && iPlayerInitialized )
+ {
+ // Video player returns 0-100
+ playerVolume = iVideoPlayer->Volume();
+
+ // Convert to CR volume 0-10
+ CRVolume = ( playerVolume * KCRVolumeMax ) / iPlayerMaxVolume;
+ }
+
+ return CRVolume;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::MvpuoOpenComplete
+// Notification to the client that the opening of the video clip has completed,
+// successfully, or otherwise.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::MvpuoOpenComplete( TInt aError )
+ {
+ Log( EFalse, _L("MvpuoOpenComplete err="), aError );
+
+ if ( aError != KErrNone )
+ {
+ // Got an error from the MMF callback
+ HandleError( aError );
+ }
+ else
+ {
+ // No error opening player, proceed with preparing player
+ iVideoPlayer->Prepare();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::MvpuoPrepareComplete
+// Notification to the client that the opening of the video clip has been prepared
+// successfully, or otherwise.
+// This callback is called in response to a call to CVideoPlayerUtility::Prepare().
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::MvpuoPrepareComplete( TInt aError )
+ {
+ Log( EFalse, _L("MvpuoPrepareComplete err="), aError );
+
+ if ( aError != KErrNone )
+ {
+ HandleError( aError );
+ }
+ else
+ {
+ // Proceed with initialization and playing content
+
+ // Video player initialized and ready for interaction,
+ // volume, option menus, etc...
+ iPlayerInitialized = ETrue;
+
+ // Cleanup clip info
+ iClipInfo->ReInit();
+
+ // Handle all of the leaving methods of preparing the clip and
+ // controller. Reading meta data, max volume, ...
+ TRAP_IGNORE( PrepareCompleteL() );
+
+ // Full screen display mode, rotate if necessary
+ if ( IsClipFullScreen() )
+ {
+ RotateScreen90();
+ }
+
+ // Use the iCurrrentVolume, everytime we "set" the volume in the
+ // BavpController we check for Profile setting, so we can use it here
+ SetPlayerVolume( iCurrentVolume );
+
+ // Start to play this media object
+ iVideoPlayer->Play();
+
+ // Stop the buffering animation now, to avoid screen flicker
+ iCurrentState = EBavpPlaying;
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::MvpuoPlayComplete
+// Notification that video playback has completed. This is not called if playback
+// is explicitly stopped by calling Stop.
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::MvpuoPlayComplete( TInt aError )
+ {
+ Log( EFalse, _L("MvpuoPlayComplete err="), aError );
+
+ if ( aError != KErrNone )
+ {
+ // Got an error from the MMF callback
+ HandleError( aError );
+ }
+ else
+ {
+ // No error, proceed with playing complete
+ iCurrentState = EBavpPlayComplete;
+ iClipInfo->iPosition = 0;
+
+ // Set the previous call state to complete, this will ensure we
+ // don't try to replay the content if a call comes in
+ iPreCallState = EBavpPlayComplete;
+
+ // Revert back to normal screen if it's full screen display
+ if ( IsClipFullScreen() )
+ {
+ TRAP_IGNORE
+ (
+ RevertToNormalScreenL();
+ iBavpView->ControllerStateChangedL();
+ );
+ }
+
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::MvpuoEvent
+// General event notification from controller. These events are specified by the
+// supplier of the controller. Take the user initiaiated event, like selecting
+// "pause" from the menu item, or another MMF event and convert into a
+// "video plugin error", so we can process in HandleError().
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::MvpuoEvent( const TMMFEvent& aEvent )
+ {
+ Log( EFalse, _L("MvpuoEvent aEvent.iErrorCode="), aEvent.iErrorCode );
+
+ if ( aEvent.iEventType == KMMFEventCategoryVideoPlayerGeneralError )
+ {
+ HandleError( aEvent.iErrorCode );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::MvloLoadingComplete
+// Notification that video clip loading/rebuffering has started
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::MvloLoadingStarted()
+ {
+ Log( EFalse, _L("MvloLoadingStarted") );
+
+ if ( iCurrentState != EBavpPlaying )
+ {
+ // Start the buffering animation
+ iCurrentState = EBavpBuffering;
+ iBavpView->UpdateView();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::MvloLoadingComplete
+// Notification that video clip loading/rebuffering has completed
+// and starting to play
+// -----------------------------------------------------------------------------
+void CBavpControllerVideo::MvloLoadingComplete()
+ {
+ Log( EFalse, _L("MvloLoadingComplete") );
+
+ if ( !iBackLightUpdater->IsActive() )
+ {
+ iBackLightUpdater->Start( ETwelveOClock, this );
+ }
+ // Stop the buffering animation
+ iCurrentState = EBavpPlaying;
+ iBavpView->UpdateView();
+ }
+
+ // -----------------------------------------------------------------------------
+// CBavpControllerVideo::getPositionL
+// To get the current position of the clip
+// -----------------------------------------------------------------------------
+
+ TTimeIntervalMicroSeconds CBavpControllerVideo::getPositionL()
+ {
+ if ( iVideoPlayer )
+ {
+ return iVideoPlayer->PositionL();
+ }
+ return NULL;
+ }
+
+ // -----------------------------------------------------------------------------
+// CBavpControllerVideo::setPositionL
+// To set the position of the clip
+// -----------------------------------------------------------------------------
+
+ void CBavpControllerVideo::setPositionL(TTimeIntervalMicroSeconds val)
+ {
+ if ( iVideoPlayer )
+ {
+ if ( !IsClipSeekable() && !IsClipLocalMedia() )
+ {
+ return;
+ }
+
+ TBool didWePause = EFalse;
+ // If playing, pause it (PauseL stops the PositionUpdater)
+ if ( iCurrentState == EBavpPlaying )
+ {
+ PauseL();
+ didWePause = ETrue;
+ }
+
+ if ( (val > iClipInfo->iDurationInSeconds ) || (val < 0) )
+ {
+ val = 0;
+ }
+
+ iVideoPlayer->SetPositionL(val);
+ iVideoPlayer->RefreshFrameL();
+ iClipInfo->iPosition = val;
+ if ( didWePause )
+ {
+ PlayL();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::Beat
+// Call HandleScreenSaver
+// -----------------------------------------------------------------------------
+//
+void CBavpControllerVideo::Beat()
+ {
+ HandleScreenSaver();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::Synchronize
+// Call HandleScreenSaver
+// -----------------------------------------------------------------------------
+//
+void CBavpControllerVideo::Synchronize()
+ {
+ HandleScreenSaver();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::HandleScreenSaver
+// To disable backlight for screensaver if needed
+// -----------------------------------------------------------------------------
+//
+void CBavpControllerVideo::HandleScreenSaver()
+{
+ Log( EFalse, _L("CBavpControllerVideo::HandleScreenSaver() entered" ));
+
+ //disable screensaver when it's in playing|forwarding|backwarding mode
+ if ( NoScreenSaverMode() && iVideoPlayer )
+ {
+ User::ResetInactivityTime();
+ }
+}
+
+TBool CBavpControllerVideo::NoScreenSaverMode()
+{
+ return (iCurrentState == EBavpPlaying ||
+ iCurrentState == EBavpFastForwarding ||
+ iCurrentState == EBavpRewinding);
+}
+
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::SetDefaultAspectRatioL
+// Sets default aspect ratio (code is taken from mmplayer)
+// -----------------------------------------------------------------------------
+/*
+ * This function was added for consistency with mmplayer.
+ * Not used is 5.0 (S60_50) since we want to preserve correct
+ * aspect ratio and this function will stretch the video to
+ * the full screen, which due to S60_50 screen size doesn't match
+ * to correct ratio.
+ * If needed it should be called in WaitForScreenSwitchL() after
+ * screen mode changed.
+ */
+void CBavpControllerVideo::SetDefaultAspectRatioL()
+{
+ TSize frameSize;
+ TRect rect = iBavpView->CoeControl().Rect();
+
+ if ( iVideoPlayer ) {
+
+ iVideoPlayer->VideoFrameSizeL( frameSize );
+ }
+
+ if ( frameSize.iWidth > 0 && frameSize.iHeight > 0) {
+
+ TMMFScalingType scalingType = EMMFNatural;
+
+ TReal32 videoAspectRatio = (TReal)frameSize.iWidth /
+ (TReal)frameSize.iHeight;
+ TReal32 dispAspectRatio = (TReal)rect.Width() / (TReal)rect.Height();
+
+ // Choose the scaling type through the rule:
+ // videoAspectRatio - iDisplayAspectRatio > 0.1 ==> zoom
+ // videoAspectRatio - iDisplayAspectRatio < 0.1 ==> stretch
+ // videoAspectRatio = iDisplayAspectRatio ==> natural
+ if ( videoAspectRatio - dispAspectRatio > 0.1 ) {
+ scalingType = EMMFZoom;
+ }
+ else if ( videoAspectRatio != dispAspectRatio ) {
+ scalingType = EMMFStretch;
+ }
+
+ TMMFMessageDestinationPckg destinationPckg(KUidInterfaceMMFControllerScalingMsg );
+
+ TPckgBuf<TInt> scaleTypePckg( scalingType );
+
+ iVideoPlayer->CustomCommandSync( destinationPckg,
+ EMMFSetScalingType,
+ scaleTypePckg,
+ KNullDesC8 );
+ iVideoPlayer->RefreshFrameL();
+
+ }
+}
+
+void CBavpControllerVideo::HandleInComingCallL()
+
+{
+ if ( IsClipFullScreen() )
+ {
+ RevertToNormalScreenL();
+ iBavpView->ControllerStateChangedL();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::HandleGesture
+// -----------------------------------------------------------------------------
+TBool CBavpControllerVideo::HandleGesture(TGestureEvent *gesture)
+{
+ TBool ret = EFalse;
+ TGestureCode gtype = gesture->Code(EAxisBoth);
+ switch(gtype)
+ {
+ case EGestureTap:
+ {
+ if (IsClipFullScreen())
+ {
+ ToggleScreen();
+ ret = ETrue;
+ }
+ break;
+ }
+ }
+ return ret;
+}
+#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF
+// -----------------------------------------------------------------------------
+// CBavpControllerVideo::UpdateWindowSize
+// Refreshing the window co-ordinates.
+// -----------------------------------------------------------------------------
+/*
+ * MMF Client API has updated with new methods to control video display
+ * Windows and video picture positioning to produce a new version of the API,
+ * CVideoPlayerUtility2. The new API is the preferred way to play video on graphics
+ * surfaces, and will support new features such as more flexible window positioning.
+ * Updatewindow has made in separate method so that in future, timer can be
+ * implemented for redusing the call to update window.
+ */
+void CBavpControllerVideo::UpdateWindowSize()
+ {
+ TRect rect( iBavpView->CoeControl().Rect() );
+ TRect wr(iBavpView->WindowRect()); //can have negative coordinates
+ //if video scrolled out of viewport
+ CEikonEnv* eikon = CEikonEnv::Static();
+ RWsSession& ws = eikon->WsSession();
+ CWsScreenDevice* screenDevice = eikon->ScreenDevice();
+ // Reset clipRect
+ TRect clipRect = rect;
+ clipRect = GetClipRect( rect );
+ if( ( iActiveWindow != &iBavpView->WindowInst() ) && ( iActiveWindow != NULL ) )
+ {
+ //Remove the active window and add the new window
+ iVideoPlayer->RemoveDisplayWindow(iBavpView->WindowInst());
+ TRAPD(errAdd, iVideoPlayer->AddDisplayWindowL(ws,*screenDevice,iBavpView->WindowInst(), wr, clipRect));
+ TRAP_IGNORE(iVideoPlayer->SetAutoScaleL(iBavpView->WindowInst(), EAutoScaleBestFit));
+ if( errAdd == KErrNone )
+ iActiveWindow = &iBavpView->WindowInst();
+ }
+ else
+ {
+ //window is already active, only needs the window size changed or position change
+ TRAPD(err1,iVideoPlayer->SetVideoExtentL(iBavpView->WindowInst(),wr));
+ TRAPD(err2,iVideoPlayer->SetWindowClipRectL(iBavpView->WindowInst(),clipRect));
+ Log( EFalse, _L("SetVideoExtent err1 = %d"), err1 );
+ Log( EFalse, _L("SetVideoExtent err2 = %d"), err2 );
+ }
+ }
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpHwKeyEvents.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class which implements handling Hardware Volume Key events.
+* This class implements methods of MRemConCoreApiTargetObserver
+*
+*/
+
+
+// INCLUDE FILES
+#include <RemConCoreApiTarget.h>
+#include <remconinterfaceselector.h>
+#include <aknconsts.h> // KAknStandardKeyboardRepeatRate
+
+#include "BavpHwKeyEvents.h"
+#include "BavpLogger.h"
+
+// CONSTANTS
+const TInt KVolumeFirstChangePeriod = KAknKeyboardRepeatInitialDelay;
+const TInt KVolumeChangePeriod = KAknStandardKeyboardRepeatRate;
+const TInt KVolumeChangeUp = 1;
+const TInt KVolumeChangeDown = -1;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpHwKeyEvents::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CBavpHwKeyEvents* CBavpHwKeyEvents::NewL( MBavpHwKeyEventsObserver& aObserver )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::NewL") );
+
+ CBavpHwKeyEvents* self = new ( ELeave ) CBavpHwKeyEvents( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::~CBavpHwKeyEvents
+// Destructor
+// ----------------------------------------------------------------------------
+CBavpHwKeyEvents::~CBavpHwKeyEvents()
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::~CBavpHwKeyEvents") );
+
+ if ( iVolumeTimer )
+ {
+ iVolumeTimer->Cancel();
+ delete iVolumeTimer;
+ }
+
+ delete iInterfaceSelector;
+ iCoreTarget = NULL; // For LINT. Owned by iInterfaceSelector
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::CBavpHwKeyEvents
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CBavpHwKeyEvents::CBavpHwKeyEvents( MBavpHwKeyEventsObserver& aObserver )
+ : iObserver( aObserver )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpHwKeyEvents::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpHwKeyEvents::ConstructL( )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::ConstructL") );
+
+ iInterfaceSelector = CRemConInterfaceSelector::NewL();
+
+ // Owned by iInterfaceSelector
+ iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
+ iInterfaceSelector->OpenTargetL();
+
+ // Volume key pressed and held (repeat) timer.
+ iVolumeTimer = CPeriodic::NewL( EPriorityNormal );
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::MrccatoCommand
+// Handles hardware key events. The volume up/down keys can be clicked once,
+// for volume to increase/decrease one increment, or held down and the volume
+// will increase/decrease gradually until the limit is reached. The transport
+// keys (play, pause,..) will call the HandleCommandL method on the controller.
+// ----------------------------------------------------------------------------
+void CBavpHwKeyEvents::MrccatoCommand( TRemConCoreApiOperationId aOperationId,
+ TRemConCoreApiButtonAction aButtonAct )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::MrccatoCommand, OpID"), aOperationId );
+
+ switch ( aOperationId )
+ {
+ case ERemConCoreApiVolumeUp:
+ {
+ switch ( aButtonAct )
+ {
+ case ERemConCoreApiButtonPress:
+ {
+ // Volume up held down for 0.6 seconds
+ iChange = KVolumeChangeUp;
+ iVolumeTimer->Start( KVolumeFirstChangePeriod,
+ KVolumeChangePeriod,
+ TCallBack( VolumeTimerCallback, this ) );
+ break;
+ }
+ case ERemConCoreApiButtonClick:
+ {
+ // Volume up clicked once
+ iChange = KVolumeChangeUp;
+ DoChangeVolume();
+ break;
+ }
+ case ERemConCoreApiButtonRelease:
+ {
+ // Volume up key released, stop timer
+ iVolumeTimer->Cancel();
+ break;
+ }
+ default:
+ {
+ // Never hits this
+ break;
+ }
+ }
+ break;
+ }
+ case ERemConCoreApiVolumeDown:
+ {
+ switch ( aButtonAct )
+ {
+ case ERemConCoreApiButtonPress:
+ {
+ // Volume down key held for 0.6 seconds
+ iChange = KVolumeChangeDown;
+ iVolumeTimer->Start( KVolumeFirstChangePeriod,
+ KVolumeChangePeriod,
+ TCallBack( VolumeTimerCallback, this ) );
+ break;
+ }
+ case ERemConCoreApiButtonClick:
+ {
+ // Volume down clicked once
+ iChange = KVolumeChangeDown;
+ DoChangeVolume();
+ break;
+ }
+ case ERemConCoreApiButtonRelease:
+ {
+ // Volume down key released, stop timer
+ iVolumeTimer->Cancel();
+ break;
+ }
+ default:
+ {
+ // Never hits this
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ // Don’t do anything here.
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::DoChangeVolume( )
+// Change volume depending on the level of increase or decrease
+// ----------------------------------------------------------------------------
+void CBavpHwKeyEvents::DoChangeVolume( )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::DoChangeVolume") );
+
+ iObserver.BavpHwKeyVolumeChange( iChange );
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::ChangeVolume
+// Method call to change volume
+// ----------------------------------------------------------------------------
+TInt CBavpHwKeyEvents::VolumeTimerCallback( TAny* aObject )
+ {
+ // cast, and call non-static function
+ static_cast<CBavpHwKeyEvents*>( aObject )->DoChangeVolume( );
+ return KErrNone;
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpLogger.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser for handling embedded video requests.
+*
+*/
+
+
+// INCLUDE FILES
+#include <flogger.h>
+#include "BavpLogger.h"
+
+// Logging methods for debugging. Only used in the UDEB version not UREL.
+//
+// aWrite: The aWrite boolean is used to allow the Log() methods to be left in the
+// code, but not write to a log file. To write to the log file, set aWrite to
+// ETrue. You should always set aWrite to EFalse before checking in,
+// this will ensure the log file will not be filled with excessive entries. This
+// is important, because the Bavp requires on-hardware debugging.
+//
+// AudioVideo: The name of the directory (folder) where the log file is written.
+// The path "C:\Logs\AudioVideo" must be specified to enable the logging. If no
+// path is specified, no log file is created and populated.
+//
+// log: This is the file name that is created and logging entries added.
+//
+#ifdef _DEBUG
+void Log( TBool aWrite, TPtrC aData )
+ {
+ if ( aWrite )
+ {
+ RFileLogger::WriteFormat( _L( "AudioVideo" ), _L( "bavp.log" ),
+ EFileLoggingModeAppend, _L( "%S" ),
+ &aData );
+ }
+ }
+
+void Log( TBool aWrite, TPtrC aData, TInt aInt )
+ {
+ if ( aWrite )
+ {
+ RFileLogger::WriteFormat( _L( "AudioVideo" ), _L( "bavp.log" ),
+ EFileLoggingModeAppend, _L( "%S, %d" ),
+ &aData, aInt );
+ }
+ }
+
+void Log( TBool aWrite, const TPtrC s, const TPtrC p)
+ {
+ if ( aWrite )
+ {
+ RFileLogger::WriteFormat( _L( "AudioVideo" ), _L( "bavp.log" ),
+ EFileLoggingModeAppend, _L("%S, %S"),
+ &s, &p);
+ }
+ }
+
+ void Log( TBool aWrite, const TPtrC8 s, const TPtrC8 p)
+ {
+ if ( aWrite )
+ {
+ RFileLogger::WriteFormat( _L( "AudioVideo" ), _L( "bavp.log" ),
+ EFileLoggingModeAppend, _L8("%S %S"),
+ &s, &p);
+ }
+ }
+#else
+void Log( TBool /*aWrite*/, TPtrC /*aData*/ )
+ {
+ }
+
+void Log( TBool /*aWrite*/, TPtrC /*aData*/, TInt /*aInt*/ )
+ {
+ }
+void Log( TBool /*aWrite*/, const TPtrC /*s*/, const TPtrC /*p*/)
+ {
+ }
+void Log( TBool /*aWrite*/, const TPtrC8 /*s*/, const TPtrC8 /*p*/)
+ {
+ }
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpMain.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h> // For _LIT
+#include <npapi.h> // For NPError
+#include <npupp.h> // For NPNetscapeFuncs
+#include <ecom/implementationproxy.h>
+#include <cecombrowserplugininterface.h>
+
+#include "BavpLogger.h"
+#include "BavpPlugin.h" // For bap_xx methods
+
+/***************************************************/
+/**********ECOM STYLE BAVP PLUGIN ENTRY POINTS******/
+/***************************************************/
+
+// -----------------------------------------------------------------------------
+// CBavpPluginEcomMain::NewL
+// -----------------------------------------------------------------------------
+CBavpPluginEcomMain* CBavpPluginEcomMain::NewL( TAny* aInitParam )
+ {
+ Log( EFalse, _L("Calling CBavpPluginEcomMain::NewL ") );
+
+ TFuncs* funcs = REINTERPRET_CAST( TFuncs*, aInitParam );
+ CBavpPluginEcomMain* self = new (ELeave) CBavpPluginEcomMain( funcs->iNetscapeFuncs );
+ CleanupStack::PushL( self );
+ self->ConstructL( funcs->iPluginFuncs );
+ CleanupStack::Pop( self );
+
+ Dll::SetTls ( (void*) self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPluginEcomMain::ConstructL
+// -----------------------------------------------------------------------------
+void CBavpPluginEcomMain::ConstructL( NPPluginFuncs* aPluginFuncs )
+ {
+ Log( EFalse, _L("Calling CBavpPluginEcomMain::ConstructL ") );
+ InitializeFuncs( aPluginFuncs );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPluginEcomMain::CBavpPluginEcomMain
+// -----------------------------------------------------------------------------
+CBavpPluginEcomMain::CBavpPluginEcomMain( NPNetscapeFuncs* aNpf )
+ : CEcomBrowserPluginInterface(),
+ iNpf( aNpf )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPluginEcomMain::~CBavpPluginEcomMain
+// -----------------------------------------------------------------------------
+CBavpPluginEcomMain::~CBavpPluginEcomMain()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// KImplementationTable
+// -----------------------------------------------------------------------------
+const TImplementationProxy KImplementationTable[] =
+ {
+ {{KFirstBavpImplementationValue}, (TProxyNewLPtr)CBavpPluginEcomMain::NewL},
+ {{KSecondBavpImplementationValue}, (TProxyNewLPtr)CBavpPluginEcomMain::NewL},
+ {{KThirdBavpImplementationValue}, (TProxyNewLPtr)CBavpPluginEcomMain::NewL},
+ {{KFourthBavpImplementationValue}, (TProxyNewLPtr)CBavpPluginEcomMain::NewL}
+ };
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Returns the filters implemented in this DLL
+// Returns: The filters implemented in this DLL
+// -----------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+ return KImplementationTable;
+ }
+
+// -----------------------------------------------------------------------------
+// InitializeFuncs
+// -----------------------------------------------------------------------------
+EXPORT_C NPError InitializeFuncs( NPPluginFuncs* aPpf )
+ {
+ aPpf->size = sizeof(NPPluginFuncs);
+ aPpf->version = 1;
+ aPpf->newp = NewNPP_NewProc(BavpNewp);
+ aPpf->destroy = NewNPP_DestroyProc(BavpDestroy);
+ aPpf->setwindow = NewNPP_SetWindowProc(BavpSetwindow);
+ aPpf->newstream = NewNPP_NewStreamProc(BavpNewstream);
+ aPpf->destroystream = NewNPP_DestroyStreamProc(BavpDestroystream);
+ aPpf->asfile = NewNPP_StreamAsFileProc(BavpAsfile);
+ aPpf->writeready = NewNPP_WriteReadyProc(BavpWriteready);
+ aPpf->write = NewNPP_WriteProc(BavpWrite);
+ aPpf->print = NewNPP_PrintProc(BavpPrint);
+ aPpf->event = NewNPP_HandleEventProc(BavpEvent);
+ aPpf->urlnotify = NewNPP_URLNotifyProc(BavpUrlnotify);
+ aPpf->javaClass = NULL;
+ aPpf->getvalue = NewNPP_GetValueProc(BavpGetvalue);
+ aPpf->setvalue = NewNPP_SetValueProc(BavpSetvalue);
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// NPP_Shutdown
+// -----------------------------------------------------------------------------
+EXPORT_C void NPP_Shutdown(void)
+ {
+ CBavpPluginEcomMain* npm = (CBavpPluginEcomMain*)Dll::Tls();
+ delete npm;
+ Dll::SetTls( NULL );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpMediaRecognizer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,518 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CBavpMediaRecognizer
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikenv.h>
+#include <bautils.h>
+#include <mmf/server/mmfdatasourcesink.hrh>
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+
+#include "BavpMediaRecognizer.h"
+#include "BavpLogger.h"
+
+// CONSTANTS
+_LIT8(KDataTypeRAM, "audio/x-pn-realaudio-plugin");
+_LIT8(KDataTypeSDP, "application/sdp");
+_LIT8(KDataTypePlaylist, "audio/mpegurl");
+_LIT8(KDataTypeRNG, "application/vnd.nokia.ringing-tone");
+_LIT8(KDataTypeMp3, "audio/mp3");
+_LIT8(KDataTypeXmp3, "audio/x-mp3");
+_LIT8(KDataTypeAudio3gp, "audio/3gpp");
+
+#if defined(BRDO_ASX_FF)
+_LIT8(KDataTypeWvx, "video/x-ms-wvx");
+_LIT8(KDataTypeWax, "audio/x-ms-wax");
+_LIT8(KDataTypeAsx, "video/x-ms-asx");
+#endif // BRDO_ASX_FF
+
+_LIT(KUrlRtsp, "rtsp:");
+
+const TInt KDefaultBufferSize = 1000;
+
+// _LIT(KRamFileExtension,".ram");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::CBavpMediaRecognizer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpMediaRecognizer::CBavpMediaRecognizer()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpMediaRecognizer::ConstructL()
+ {
+ User::LeaveIfError( iRecognizer.Connect() );
+ if ( iRecognizer.GetMaxDataBufSize( iBufSize) || iBufSize <= 0 )
+ {
+ iBufSize = KDefaultBufferSize;
+ }
+ CreateVideoFormatsArrayL();
+ CreateAudioFormatsArrayL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CBavpMediaRecognizer* CBavpMediaRecognizer::NewL()
+ {
+ CBavpMediaRecognizer* self = new( ELeave ) CBavpMediaRecognizer;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::~CBavpMediaRecognizer
+// Destructor
+// -----------------------------------------------------------------------------
+CBavpMediaRecognizer::~CBavpMediaRecognizer()
+ {
+ iVideoControllers.ResetAndDestroy();
+ iAudioControllers.ResetAndDestroy();
+ iRecognizer.Close();
+ iFileHandle.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::IdentifyMediaTypeL
+// -----------------------------------------------------------------------------
+TBavpMediaType
+CBavpMediaRecognizer::IdentifyMediaTypeL( const TDesC& aMediaName,
+ TBool aIncludeUrls )
+ {
+ TBavpMediaType ret = EUnidentified;
+
+ if ( BaflUtils::FileExists( CEikonEnv::Static()->FsSession(), aMediaName ) )
+ {
+ TDataRecognitionResult fileRecognitionResult;
+ RecognizeFileL( aMediaName, fileRecognitionResult );
+
+ if ( !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeSDP ) )
+ {
+ ret = ELocalSdpFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalSdpFile") );
+ }
+
+ if ( ret == EUnidentified &&
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypePlaylist ) )
+ {
+ ret = ELocalAudioPlaylist;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioPlaylist") );
+ }
+
+ if ( ret == EUnidentified &&
+ FileHasAudioSupport( aMediaName, fileRecognitionResult ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRNG ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeMp3 ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeXmp3 ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAudio3gp ) )
+ {
+ ret = ELocalAudioFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioFile") );
+ }
+
+ if ( ret == EUnidentified &&
+ FileHasVideoSupport( aMediaName, fileRecognitionResult ) )
+ {
+ ret = ELocalVideoFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalVideoFile") );
+ }
+
+ if ( ret == EUnidentified &&
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRAM ) )
+ {
+ ret = ELocalRamFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalRamFile") );
+ }
+#if defined(BRDO_ASX_FF)
+ if ( ret == EUnidentified &&
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWvx ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWax ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAsx ))
+ {
+ ret = ELocalAsxFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAsxFile") );
+ }
+#endif // BRDO_ASX_FF
+ }
+ else
+ {
+ if ( aIncludeUrls && ValidUrl( aMediaName ) )
+ {
+ ret = EUrl;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - EUrl") );
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::IdentifyMediaTypeL
+// -----------------------------------------------------------------------------
+TBavpMediaType
+CBavpMediaRecognizer::IdentifyMediaTypeL( const TDesC& aMediaName,
+ RFile& aFile,
+ TBool aIncludeUrls )
+ {
+ if( aFile.SubSessionHandle() )
+ {
+ User::LeaveIfError( iFileHandle.Duplicate( aFile ) );
+ }
+
+ TBavpMediaType ret = EUnidentified;
+
+ if ( BaflUtils::FileExists( CEikonEnv::Static()->FsSession(), aMediaName ) || FileHandleExists() )
+ {
+ TDataRecognitionResult fileRecognitionResult;
+ RecognizeFileL( aMediaName, fileRecognitionResult );
+
+ if ( !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeSDP ) )
+ {
+ ret = ELocalSdpFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalSdpFile") );
+ }
+
+ if ( ret == EUnidentified &&
+ !fileRecognitionResult.iDataType.Des8().CompareF(
+ KDataTypePlaylist ) )
+ {
+ ret = ELocalAudioPlaylist;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioPlaylist") );
+ }
+
+ if ( ret == EUnidentified &&
+ FileHasAudioSupport( aMediaName, fileRecognitionResult ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRNG ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeMp3 ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeXmp3 ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAudio3gp ) )
+ {
+ ret = ELocalAudioFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioFile") );
+ }
+
+ if ( ret == EUnidentified &&
+ FileHasVideoSupport( aMediaName, fileRecognitionResult ) )
+ {
+ ret = ELocalVideoFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalVideoFile") );
+ }
+
+ if ( ret == EUnidentified &&
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRAM ) )
+ {
+ ret = ELocalRamFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalRamFile") );
+ }
+#if defined(BRDO_ASX_FF)
+ if ( ret == EUnidentified &&
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWvx ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWax ) ||
+ !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAsx ) )
+ {
+ ret = ELocalAsxFile;
+ Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAsxFile") );
+ }
+#endif // BRDO_ASX_FF
+ }
+ else
+ {
+ if (aIncludeUrls && ValidUrl(aMediaName))
+ {
+ ret = EUrl;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::MimeTypeL
+// -----------------------------------------------------------------------------
+TBuf<KMaxDataTypeLength>
+CBavpMediaRecognizer::MimeTypeL( const TDesC& aLocalFile )
+ {
+ TDataRecognitionResult fileRecognitionResult;
+ RecognizeFileL( aLocalFile,fileRecognitionResult );
+
+ if ( fileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible )
+ {
+ return fileRecognitionResult.iDataType.Des();
+ }
+
+ return KNullDesC();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::FileHasVideoSupport
+// -----------------------------------------------------------------------------
+TBool CBavpMediaRecognizer::FileHasVideoSupport( const TDesC& /*aFileName*/,
+ TDataRecognitionResult& aFileRecognitionResult)
+ {
+ // Try with mime type
+ // We have a good quess -> go with mime type
+ if ( aFileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible )
+ {
+ for (TInt i = 0 ; i < iVideoControllers.Count() ; i++)
+ {
+ RMMFFormatImplInfoArray formats =
+ iVideoControllers[i]->PlayFormats();
+ for ( TInt j = 0; j < formats.Count() ; j++ )
+ {
+ if ( formats[j]->SupportsMimeType(
+ aFileRecognitionResult.iDataType.Des8() ) )
+ return ETrue;
+ }
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::FileHasAudioSupport
+// -----------------------------------------------------------------------------
+TBool CBavpMediaRecognizer::FileHasAudioSupport(const TDesC& aFileName,
+ TDataRecognitionResult& aFileRecognitionResult )
+ {
+ // try with mime type
+ // we have a good quess -> gogo with mime type
+ if (aFileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible)
+ {
+ for (TInt i = 0 ; i < iAudioControllers.Count() ; i++)
+ {
+ RMMFFormatImplInfoArray formats =
+ iAudioControllers[i]->PlayFormats();
+ for (TInt j = 0; j < formats.Count() ; j++)
+ {
+ if ( formats[j]->SupportsMimeType(
+ aFileRecognitionResult.iDataType.Des8() ) )
+ return ETrue;
+ }
+ }
+ }
+
+ // we can't quess -> try with file extension
+ else
+ {
+ TParsePtrC parser(aFileName);
+ TBuf8<KMaxFileName> fileExtension;
+ fileExtension.Copy(parser.Ext());
+ for (TInt i = 0 ; i < iVideoControllers.Count() ; i++)
+ {
+ RMMFFormatImplInfoArray formats =
+ iAudioControllers[i]->PlayFormats();
+ for (TInt j = 0; j < formats.Count() ; j++)
+ {
+ if (formats[j]->SupportsFileExtension(fileExtension))
+ return ETrue;
+ }
+ }
+ }
+
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::ValidUrl
+// -----------------------------------------------------------------------------
+TBool CBavpMediaRecognizer::ValidUrl(const TDesC& aUrl)
+ {
+ TBool ret = EFalse;
+ if (aUrl.Find(KUrlRtsp) == 0)
+ {
+ ret = ETrue;
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::MimeTypeL
+// -----------------------------------------------------------------------------
+TBuf<KMaxDataTypeLength> CBavpMediaRecognizer::MimeTypeL(RFile& aFile)
+ {
+ if( aFile.SubSessionHandle() )
+ {
+ // Preferred
+ User::LeaveIfError( iFileHandle.Duplicate( aFile ) );
+ }
+
+ // If new handle is not valid, old might still be
+ if ( !FileHandleExists() )
+ {
+ User::Leave( KErrBadHandle );
+ }
+
+ TDataRecognitionResult fileRecognitionResult;
+ RecognizeFileL( KNullDesC(), fileRecognitionResult );
+
+ if (fileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible)
+ {
+ return fileRecognitionResult.iDataType.Des();
+ }
+ return KNullDesC();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::CreateVideoFormatsArrayL
+// -----------------------------------------------------------------------------
+void CBavpMediaRecognizer::CreateVideoFormatsArrayL()
+ {
+ CMMFControllerPluginSelectionParameters* cSelect =
+ CMMFControllerPluginSelectionParameters::NewLC();
+
+ CMMFFormatSelectionParameters* fSelect =
+ CMMFFormatSelectionParameters::NewLC();
+
+ // Set the play and record format selection parameters to be blank.
+ // - format support is only retrieved if requested.
+ cSelect->SetRequiredPlayFormatSupportL(*fSelect);
+
+ // Set the media ids
+ RArray<TUid> mediaIds;
+ CleanupClosePushL(mediaIds);
+ User::LeaveIfError(mediaIds.Append(KUidMediaTypeVideo));
+
+ // Get plugins that support at least video
+ cSelect->SetMediaIdsL( mediaIds,
+ CMMFPluginSelectionParameters::EAllowOtherMediaIds );
+
+ // iVideoControllers contains now all plugins that support at least video
+ cSelect->ListImplementationsL(iVideoControllers);
+
+ // Clean up
+ CleanupStack::PopAndDestroy( 3 ); // fSelect, cSelect, mediaIds
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::CreateAudioFormatsArrayL
+// -----------------------------------------------------------------------------
+void CBavpMediaRecognizer::CreateAudioFormatsArrayL()
+ {
+ CMMFControllerPluginSelectionParameters* cSelect =
+ CMMFControllerPluginSelectionParameters::NewLC();
+
+ CMMFFormatSelectionParameters* fSelect =
+ CMMFFormatSelectionParameters::NewLC();
+
+ // Set the play and record format selection parameters to be blank.
+ // - format support is only retrieved if requested.
+ cSelect->SetRequiredPlayFormatSupportL( *fSelect );
+
+ // Set the media ids
+ RArray<TUid> mediaIds;
+ CleanupClosePushL( mediaIds );
+ User::LeaveIfError( mediaIds.Append(KUidMediaTypeAudio) );
+
+ // Get plugins that supports audio only
+ cSelect->SetMediaIdsL( mediaIds,
+ CMMFPluginSelectionParameters::EAllowOnlySuppliedMediaIds );
+
+ // iAudioControllers contains now all audio plugins that
+ // support at least audio.
+ cSelect->ListImplementationsL( iAudioControllers );
+
+ // Clean up
+ CleanupStack::PopAndDestroy( 3 ); // fSelect, cSelect, mediaIds
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::RecognizeFileL
+// -----------------------------------------------------------------------------
+void CBavpMediaRecognizer::RecognizeFileL( const TDesC& aFileName,
+ TDataRecognitionResult& aResult )
+ {
+ aResult.Reset();
+ HBufC8* fBuf = HBufC8::NewLC( iBufSize ); // fBuf in CS
+ TPtr8 fileBuf = fBuf->Des();
+
+ // Recognize file
+ if ( FileHandleExists() )
+ {
+ User::LeaveIfError( iRecognizer.RecognizeData( iFileHandle, aResult ) );
+ }
+ else
+ {
+ // Read file
+ User::LeaveIfError( ReadFile( aFileName, fileBuf ) );
+ User::LeaveIfError( iRecognizer.RecognizeData( aFileName, fileBuf, aResult ) );
+ }
+
+ CleanupStack::PopAndDestroy(); // fBuf
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::ReadFile
+// -----------------------------------------------------------------------------
+TInt CBavpMediaRecognizer::ReadFile( const TDesC& aFileName, TDes8& aBuf )
+ {
+ RFile file;
+ TInt err;
+
+ if ( FileHandleExists() )
+ {
+ err = file.Duplicate( iFileHandle );
+ }
+ else
+ {
+ err = file.Open( CEikonEnv::Static()->FsSession(), aFileName,
+ EFileRead | EFileShareAny );
+ if ( err )
+ {
+ err = file.Open( CEikonEnv::Static()->FsSession(), aFileName,
+ EFileRead | EFileShareReadersOnly );
+ }
+ }
+
+ if ( err )
+ {
+ // If file does not exist
+ return err;
+ }
+
+ // Read the beginning of the file
+ err = file.Read( 0, aBuf, iBufSize );
+ file.Close();
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpMediaRecognizer::FileHandleExists
+// -----------------------------------------------------------------------------
+TBool CBavpMediaRecognizer::FileHandleExists()
+ {
+ TInt size(0);
+ TInt err(0);
+
+ if ( iFileHandle.SubSessionHandle() )
+ {
+ err = iFileHandle.Size( size );
+ }
+
+ return ( !err && size ) ? ETrue : EFalse;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpNPObject.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,821 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BavpNPObject.h"
+#include "BavpLogger.h"
+
+#include <badesca.h>
+#include <stdlib.h>
+#include <string.h>
+#include <npscript.h>
+
+#include "BavpPlugin.h"
+#include "BavpController.h"
+#include "BavpControllerVideo.h"
+#include "BavpControllerAudio.h"
+
+
+const int NUM_METHOD_IDENTIFIERS = 5;
+const int ID_PLAY = 0;
+const int ID_STOP = 1;
+const int ID_PAUSE = 2;
+const int ID_FASTFORWARD = 3;
+const int ID_REWIND = 4;
+static NPIdentifier bavpMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
+static const NPUTF8 *bavpIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
+ "play",
+ "stop",
+ "pause",
+ "fastforward",
+ "rewind",
+};
+
+const int NUM_PROPERTY_IDENTIFIERS = 10;
+const int ID_VOLUME = 0;
+const int ID_POSITION = 1;
+const int ID_DURATION = 2;
+const int ID_STATE_CHANGED_CALLBACK = 3;
+const int ID_STATE = 4;
+const int ID_ISVIDEOCLIP = 5;
+const int ID_ISSEEKABLE = 6;
+const int ID_CLIPNAME = 7;
+const int ID_FULLSCREENMODE = 8;
+const int ID_MIMETYPE = 9;
+static NPIdentifier bavpPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
+static const NPUTF8 *bavpPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
+ "volume",
+ "position",
+ "duration",
+ "statechangedcallback",
+ "state",
+ "isvideoclip",
+ "isseekable",
+ "clipname",
+ "fullscreenmode",
+ "mimetype",
+};
+
+static bool _initializedIdentifiers = false;
+static void initializeIdentifiers()
+{
+ if (!_initializedIdentifiers) {
+ _initializedIdentifiers = true;
+ NPN_GetStringIdentifiers (bavpPropertyIdentifierNames, NUM_PROPERTY_IDENTIFIERS, bavpPropertyIdentifiers);
+ NPN_GetStringIdentifiers (bavpIdentifierNames, NUM_METHOD_IDENTIFIERS, bavpMethodIdentifiers);
+ }
+};
+
+
+_LIT8(KNone,"None");
+_LIT8(KBuffering,"Buffering");
+_LIT8(KPlaying,"Playing");
+_LIT8(KPlayComplete,"Playcomplete");
+_LIT8(KStopped,"Stopped");
+_LIT8(KPaused,"Paused");
+_LIT8(KBadContent,"Badcontent");
+_LIT8(KFastForwarding,"Fastforwarding");
+_LIT8(KFFComplete,"Fastforward complete");
+_LIT8(KRewinding,"Rewinding");
+_LIT8(KRewindComplete,"Rewinding complete");
+_LIT8(KInvalidState,"Invalid State");
+
+
+static const TPtrC8 getState(int state)
+{
+ TPtrC8 ret;
+
+ switch (state)
+ {
+ case EBavpNone:
+ ret.Set(KNone);
+ break;
+
+ case EBavpBuffering:
+ ret.Set(KBuffering);
+ break;
+
+ case EBavpPlaying:
+ ret.Set(KPlaying);
+ break;
+
+ case EBavpPlayComplete:
+ ret.Set(KPlayComplete);
+ break;
+
+ case EBavpStopped:
+ ret.Set(KStopped);
+ break;
+
+ case EBavpPaused:
+ ret.Set(KPaused);
+ break;
+
+ case EBavpBadContent:
+ ret.Set(KBadContent);
+ break;
+
+ case EBavpFastForwarding:
+ ret.Set(KFastForwarding);
+ break;
+
+ case EBavpFastForwardComplete:
+ ret.Set(KFFComplete);
+ break;
+
+ case EBavpRewinding:
+ ret.Set(KRewinding);
+ break;
+
+ case EBavpRewindComplete:
+ ret.Set(KRewindComplete);
+ break;
+
+ default:
+ ret.Set(KInvalidState);
+ break;
+ }
+ return ret;
+}
+
+static void reportVolumeResults(int vol,CBavpController *ctlr)
+{
+ Log(ETrue,_L("SetProperty: Volume"));
+
+ TInt setvol = ctlr->GetPlayerVolume();
+ Log(ETrue,_L("Requested volume: "), vol);
+ Log(ETrue,_L("Volume set to: "),setvol);
+
+
+ if ( setvol == vol || setvol == KCRVolumeMax || setvol == KCRVolume0 )
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+}
+
+static void reportPositionResultsL(int pos, CBavpController *ctlr)
+{
+ Log(ETrue,_L("SetProperty: Position"));
+
+ if ( !(ctlr->IsClipSeekable()) && !(ctlr->IsClipLocalMedia()) )
+ {
+ Log(ETrue,_L("Cannot set position for non-seekable and non-local media content"));
+ return;
+ }
+
+ TTimeIntervalMicroSeconds ms = ctlr->getPositionL();
+ TTimeIntervalMicroSeconds durationms = ctlr->Duration();
+
+ int setpos = (int)ms.Int64();
+ int duration = (int)durationms.Int64();
+
+ Log(ETrue,_L("Requested position: "), pos);
+ Log(ETrue,_L("Position set to: "),setpos);
+
+ if ( setpos == pos || setpos == duration || setpos == 0)
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+}
+
+static void reportPlayResultsL(int initState, CBavpController *ctlr)
+{
+ if ( ctlr->IsClipVideo())
+ {
+ TPtrC8 expectedState = getState(EBavpPlaying);
+ TPtrC8 expectedState2 = getState(EBavpBuffering);
+ TPtrC8 actualState = getState(ctlr->State());
+
+ if ( initState == EBavpStopped ||
+ initState == EBavpPlayComplete ||
+ initState == EBavpRewindComplete ||
+ initState == EBavpFastForwardComplete ||
+ initState == EBavpBadContent)
+ {
+ TTimeIntervalMicroSeconds ms = ctlr->getPositionL();
+ int actualpos = (int)ms.Int64();
+
+ Log(ETrue,_L("Expected Position: "), 0);
+ Log(ETrue,_L("Actual Position: "),actualpos);
+
+ if ( actualpos != 0)
+ {
+ Log(ETrue,_L("Result: Position test failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result:Position test passed"));
+ }
+ }
+
+ if ( ctlr->IsClipOnDemand() && initState == EBavpStopped )
+ {
+ Log(ETrue,_L8("Expected State: "), expectedState2);
+ Log(ETrue,_L8("Actual State: "), actualState);
+ }
+ else
+ {
+ Log(ETrue,_L8("Expected State: "), expectedState);
+ Log(ETrue,_L8("Actual State: "), actualState);
+ }
+
+ if ( actualState.Compare(expectedState) != 0 && actualState.Compare(expectedState2) != 0)
+ {
+ Log(ETrue,_L("Result: State test failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: State test passed"));
+ }
+ }
+ else
+ {
+ TPtrC8 expectedState = getState(EBavpPlaying);
+ TPtrC8 actualState = getState(ctlr->State());
+
+ Log(ETrue,_L8("Expected State: "), expectedState);
+ Log(ETrue,_L8("Actual State: "), actualState);
+
+ if ( expectedState.Compare(actualState) != 0)
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+ }
+}
+
+static void reportStopResultsL(CBavpController *ctlr)
+{
+ TPtrC8 expectedState = getState(EBavpStopped);
+ TPtrC8 actualState = getState(ctlr->State());
+ TTimeIntervalMicroSeconds ms = ctlr->getPositionL();
+ int position = (int)ms.Int64();
+
+ Log(ETrue,_L8("Expected State: "), expectedState);
+ Log(ETrue,_L8("Actual State: "), actualState);
+ Log(ETrue,_L("Current Position: "), position);
+
+ if ( (position != 0) || (expectedState.Compare(actualState) != 0) )
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+}
+
+static void reportRewindResults(CBavpController *ctlr)
+{
+ if ( ctlr->IsClipVideo() )
+ {
+ if ( !(ctlr->IsClipSeekable()) && !(ctlr->IsClipLocalMedia()) )
+ {
+ Log(ETrue,_L("Result: Rewind is not applicable to non-seekable and non-local media content"));
+ }
+ else
+ {
+ TPtrC8 expectedState = getState(EBavpRewinding);
+ TPtrC8 expectedState2 = getState(EBavpRewindComplete);
+ TPtrC8 actualState = getState(ctlr->State());
+
+ Log(ETrue,_L8("Expected State: "), expectedState);
+ Log(ETrue,_L8("Actual State: "), actualState);
+
+ if ( (expectedState.Compare(actualState) != 0) && (expectedState2.Compare(actualState) != 0) )
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+ }
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Rewind is not applicable to Audio"));
+ }
+
+}
+
+static void reportFFResults(CBavpController *ctlr)
+{
+ if ( ctlr->IsClipVideo() )
+ {
+ if ( !(ctlr->IsClipSeekable()) && !(ctlr->IsClipLocalMedia()) )
+ {
+ Log(ETrue,_L("Result: Fastforward is not applicable to non-seekable and non-local media content"));
+ }
+ else
+ {
+ TPtrC8 expectedState = getState(EBavpFastForwarding);
+ TPtrC8 expectedState2 = getState(EBavpFastForwardComplete);
+ TPtrC8 actualState = getState(ctlr->State());
+
+ Log(ETrue,_L8("Expected State: "), expectedState);
+ Log(ETrue,_L8("Actual State: "), actualState);
+
+ if ( (expectedState.Compare(actualState) != 0) && (expectedState2.Compare(actualState) != 0) )
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+ }
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Fastforward is not applicable to Audio"));
+ }
+
+}
+
+static void reportPauseResultsL(CBavpController *ctlr)
+{
+ TBool seekablevideo = (ctlr->IsClipSeekable() && ctlr->IsClipVideo());
+ TBool seekableaudio = (ctlr->IsClipSeekable() && !ctlr->IsClipVideo()
+ && (ctlr->State() == EBavpPaused || ctlr->State() == EBavpPlaying));
+
+ if ( seekablevideo || seekableaudio )
+ {
+ TPtrC8 expectedState = getState(EBavpPaused);
+ TPtrC8 actualState = getState(ctlr->State());
+
+ Log(ETrue,_L8("Expected State: "), expectedState);
+ Log(ETrue,_L8("Actual State: "), actualState);
+
+ if ( (expectedState.Compare(actualState) != 0) )
+ {
+ Log(ETrue,_L("Result: Failed"));
+ }
+ else
+ {
+ Log(ETrue,_L("Result: Passed"));
+ }
+
+ }
+ else
+ {
+ reportStopResultsL(ctlr);
+ }
+}
+
+static void BavpDesToNpvariant(TPtrC& string, NPVariant*& variant)
+{
+ char* newString = NULL;
+ if (string.Length()) {
+ newString = new char[string.Length()];
+ }
+ if (newString) {
+ TPtr8 newStringPtr((unsigned char*)newString, 0, string.Length());
+ newStringPtr.Copy(string);
+ STRINGN_TO_NPVARIANT(newString, string.Length(), *variant);
+ }
+}
+
+static void BavpDesToNpvariant(TPtrC8& string, NPVariant*& variant)
+{
+ char* newString = NULL;
+ if (string.Length()) {
+ newString = new char[string.Length()];
+ }
+ if (newString) {
+ Mem::Copy(newString, string.Ptr(), string.Length());
+ STRINGN_TO_NPVARIANT(newString, string.Length(), *variant);
+ }
+}
+
+NPObject *BavpAllocate ()
+{
+ BavpNPObject *newInstance = (BavpNPObject *)User::AllocZ (sizeof(BavpNPObject));
+
+ return (NPObject *)newInstance;
+}
+
+void BavpInvalidate ()
+{
+ // Make sure we've released any remainging references to JavaScript
+ // objects.
+}
+
+void BavpDeallocate (BavpNPObject *obj)
+{
+ if (obj->stateChangedCallback)
+ NPN_ReleaseObject((struct NPObject*)obj->stateChangedCallback);
+ User::Free ((void *)obj);
+}
+
+bool BavpHasMethod(BavpNPObject */*obj*/, NPIdentifier name)
+{
+ int i;
+ for (i = 0; i < NUM_METHOD_IDENTIFIERS; i++) {
+ if (name == bavpMethodIdentifiers[i]){
+ return true;
+ }
+ }
+ return false;
+}
+
+
+bool BavpInvokeL(BavpNPObject *obj, NPIdentifier name, const NPVariant */* args */, uint32_t /* argCount */, NPVariant *result)
+{
+ if (!obj->plugin) {
+ NULL_TO_NPVARIANT(*result);
+ return true;
+ }
+
+ CBavpController *ctlr = obj->plugin->Controller();
+
+ if (!ctlr)
+ {
+ NULL_TO_NPVARIANT(*result);
+ return true;
+ }
+
+ int initState = ctlr->State();
+ Log( ETrue, _L("\n"));
+ Log( ETrue, _L8("Initial state:"), getState(initState));
+
+ if (name == bavpMethodIdentifiers[ID_PLAY])
+ {
+ Log( ETrue, _L("Method Invoked: Play"));
+ if ( ctlr->State() != EBavpPlaying )
+ {
+ ctlr->PlayL();
+ }
+ VOID_TO_NPVARIANT(*result);
+ reportPlayResultsL(initState,ctlr);
+ }
+ else if (name == bavpMethodIdentifiers[ID_STOP])
+ {
+ Log( ETrue, _L("Method Invoked: Stop"));
+ if ( ctlr->State() != EBavpStopped )
+ {
+ ctlr->Stop();
+ }
+ VOID_TO_NPVARIANT(*result);
+ reportStopResultsL(ctlr);
+ }
+ else if (name == bavpMethodIdentifiers[ID_PAUSE])
+ {
+ Log( ETrue, _L("Method Invoked: Pause"));
+ if ( ctlr->State() != EBavpPaused )
+ {
+ ctlr->PauseL();
+ }
+ VOID_TO_NPVARIANT(*result);
+ reportPauseResultsL(ctlr);
+ }
+ else if (name == bavpMethodIdentifiers[ID_FASTFORWARD])
+ {
+ Log( ETrue, _L("Method Invoked: FastForward"));
+ if ( ctlr->State() == EBavpRewinding )
+ {
+ ctlr->PauseL();
+ }
+
+ if ( ctlr->State() != EBavpFastForwarding )
+ {
+ ctlr->FastForwardL();
+ }
+ VOID_TO_NPVARIANT(*result);
+ reportFFResults(ctlr);
+ }
+ else if (name == bavpMethodIdentifiers[ID_REWIND])
+ {
+ Log( ETrue, _L("Method Invoked: Rewind"));
+ if ( ctlr->State() == EBavpFastForwarding )
+ {
+ ctlr->PauseL();
+ }
+
+ if ( ctlr->State() != EBavpRewinding )
+ {
+ ctlr->RewindL();
+ }
+ VOID_TO_NPVARIANT(*result);
+ reportRewindResults(ctlr);
+ }
+ else
+ {
+ Log( ETrue, _L("Unknown method invoked"));
+ return false;
+ }
+
+ return true;
+}
+
+bool BavpHasProperty(BavpNPObject */*obj*/, NPIdentifier name)
+{
+ int i;
+ for (i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++)
+ {
+ if (name == bavpPropertyIdentifiers[i]){
+ return true;
+ }
+ }
+ return false;
+}
+
+bool BavpGetPropertyL (BavpNPObject *obj, NPIdentifier name, NPVariant *variant)
+{
+ if (!obj->plugin || !(obj->plugin->Controller())){
+ NULL_TO_NPVARIANT(*variant);
+ return false;
+ }
+
+
+ if (name == bavpPropertyIdentifiers[ID_VOLUME])
+ {
+ INT32_TO_NPVARIANT(obj->plugin->Controller()->GetPlayerVolume(), *variant);
+ }
+
+ else if (name == bavpPropertyIdentifiers[ID_POSITION])
+ {
+ TTimeIntervalMicroSeconds ms = obj->plugin->Controller()->getPositionL();
+ int time = (int)ms.Int64();
+ INT32_TO_NPVARIANT(time, *variant);
+
+ }
+
+ else if (name == bavpPropertyIdentifiers[ID_DURATION])
+ {
+ TTimeIntervalMicroSeconds ms = obj->plugin->Controller()->Duration();
+ int time = (int)ms.Int64();
+ INT32_TO_NPVARIANT(time, *variant);
+ }
+
+ else if (name == bavpPropertyIdentifiers[ID_STATE_CHANGED_CALLBACK])
+ {
+ if (obj->stateChangedCallback)
+ OBJECT_TO_NPVARIANT(obj->stateChangedCallback, *variant);
+ else
+ NULL_TO_NPVARIANT(*variant);
+ }
+ else if (name == bavpPropertyIdentifiers[ID_STATE])
+ {
+ TPtrC8 state = getState((TInt)(obj->plugin->Controller()->State()));
+ BavpDesToNpvariant(state, variant);
+ }
+ else if (name == bavpPropertyIdentifiers[ID_ISVIDEOCLIP])
+ {
+ BOOLEAN_TO_NPVARIANT(obj->plugin->Controller()->IsClipVideo(), *variant);
+ }
+ else if (name == bavpPropertyIdentifiers[ID_ISSEEKABLE])
+ {
+ BOOLEAN_TO_NPVARIANT(obj->plugin->Controller()->IsClipSeekable(), *variant);
+ }
+ else if (name == bavpPropertyIdentifiers[ID_CLIPNAME])
+ {
+ const HBufC& name = obj->plugin->Controller()->ClipName();
+
+ TInt lastSlashPos = name.LocateReverse( '/' );
+ //retrieve the clip name
+ if( lastSlashPos == KErrNotFound ) {
+ lastSlashPos = 0;
+ }
+
+ TInt len = name.Length()-lastSlashPos-1;
+ TPtrC namePtr( name.Right(len));
+ BavpDesToNpvariant(namePtr, variant);
+ }
+ else if (name == bavpPropertyIdentifiers[ID_FULLSCREENMODE])
+ {
+ BOOLEAN_TO_NPVARIANT(obj->plugin->Controller()->IsClipFullScreen(), *variant);
+ }
+ else if (name == bavpPropertyIdentifiers[ID_MIMETYPE])
+ {
+ const HBufC8& name = obj->plugin->Controller()->MimeType();
+ TPtrC8 namePtr(name);
+ BavpDesToNpvariant(namePtr, variant);
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+
+}
+
+
+bool BavpSetPropertyL (BavpNPObject *obj, NPIdentifier name, NPVariant *variant)
+{
+ if (!obj->plugin)
+ return false;
+
+ CBavpController *ctlr = obj->plugin->Controller();
+
+ if (!ctlr)
+ return false;
+
+ Log(ETrue,_L("\n"));
+
+ if (name == bavpPropertyIdentifiers[ID_VOLUME])
+ {
+ int vol = 0;
+
+ if (NPVARIANT_IS_DOUBLE(*variant))
+ vol = (int)NPVARIANT_TO_DOUBLE(*variant);
+ else if (NPVARIANT_IS_INT32(*variant))
+ vol = NPVARIANT_TO_INT32(*variant);
+ else
+ {
+ Log(ETrue,_L("SetProperty: Not a valid value for volume"));
+ return false;
+ }
+
+ ctlr->SetPlayerVolume(vol);
+ reportVolumeResults(vol,ctlr);
+ }
+
+ else if (name == bavpPropertyIdentifiers[ID_POSITION])
+ {
+ int pos = 0;
+
+ if (NPVARIANT_IS_DOUBLE(*variant))
+ pos = (int)NPVARIANT_TO_DOUBLE(*variant);
+ else if (NPVARIANT_IS_INT32(*variant))
+ pos = NPVARIANT_TO_INT32(*variant);
+ else
+ {
+ Log(ETrue,_L("SetProperty: Not a valid value for position"));
+ return false;
+ }
+
+ TInt64 ms(pos);
+ CBavpController *ctlr = obj->plugin->Controller();
+ int state = ctlr->State();
+
+ if ( state != EBavpRewinding && state != EBavpFastForwarding )
+ {
+ ctlr->setPositionL(TTimeIntervalMicroSeconds(ms));
+ }
+ else
+ {
+ ctlr->Stop();
+ ctlr->setPositionL(TTimeIntervalMicroSeconds(ms));
+ }
+
+ reportPositionResultsL(pos,ctlr);
+ }
+
+ else if (name == bavpPropertyIdentifiers[ID_STATE_CHANGED_CALLBACK])
+ {
+ //int count = 0;
+ if (NPVARIANT_IS_NULL(*variant))
+ {
+ if (obj->stateChangedCallback)
+ {
+ NPN_ReleaseObject((struct NPObject*)obj->stateChangedCallback);
+ obj->stateChangedCallback = 0;
+ }
+ }
+ else if (NPVARIANT_IS_OBJECT(*variant))
+ {
+ NPObject* callback = NPVARIANT_TO_OBJECT(*variant);
+ if (obj->stateChangedCallback)
+ {
+ NPN_ReleaseObject((struct NPObject*)obj->stateChangedCallback);
+ obj->stateChangedCallback = 0;
+ }
+ NPN_RetainObject((struct NPObject*)callback);
+ obj->stateChangedCallback = callback;
+ }
+ return true;
+ }
+
+ else if (name == bavpPropertyIdentifiers[ID_FULLSCREENMODE])
+ {
+ int pos = 0;
+ TBool newmode, needtochange;
+ CBavpController *ctlr = obj->plugin->Controller();
+
+ if ( !(ctlr->IsClipVideo()) )
+ {
+ Log(ETrue,_L("Fullscreenmode not applicable for audio"));
+ return false;
+ }
+
+ if (NPVARIANT_IS_INT32(*variant))
+ {
+ pos = NPVARIANT_TO_INT32(*variant);
+ }
+ else if (NPVARIANT_IS_DOUBLE(*variant))
+ {
+ pos = (int)NPVARIANT_TO_DOUBLE(*variant);
+ }
+ else if (NPVARIANT_IS_BOOLEAN(*variant))
+ {
+ pos = NPVARIANT_TO_BOOLEAN(*variant) ? 1 : 0;
+ }
+
+ else
+ {
+ Log(ETrue,_L("SetProperty: Not a valid value for fullscreenmode"));
+ return false;
+ }
+
+ Log(ETrue,_L("SetProperty: Fullscreenmode"));
+
+ newmode = (pos == 1);
+ needtochange = (ctlr->IsClipFullScreen() != newmode);
+
+ if ( ctlr->IsClipFullScreen() )
+ {
+ Log(ETrue,_L("Current mode: Fullscreen"));
+ }
+ else
+ {
+ Log(ETrue,_L("Current mode: Normalscreen"));
+ }
+
+ if ( newmode )
+ {
+ Log(ETrue,_L("Requested mode: Fullscreen"));
+ }
+ else
+ {
+ Log(ETrue,_L("Requested mode: Normalscreen"));
+ }
+
+
+ if ( !needtochange )
+ {
+ Log(ETrue,_L("No need for mode change"));
+ return false;
+ }
+
+ ((CBavpControllerVideo *)ctlr)->HandleCommandL(EBavpCmdPlayFullScreen);
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+}
+
+
+static NPClass _BavpNPClass = {
+ 0,
+ (NPAllocateFunctionPtr) BavpAllocate,
+ (NPDeallocateFunctionPtr) BavpDeallocate,
+ (NPInvalidateFunctionPtr) BavpInvalidate,
+ (NPHasMethodFunctionPtr) BavpHasMethod,
+ (NPInvokeFunctionPtr) BavpInvokeL,
+ (NPInvokeDefaultFunctionPtr) 0,
+ (NPHasPropertyFunctionPtr) BavpHasProperty,
+ (NPGetPropertyFunctionPtr) BavpGetPropertyL,
+ (NPSetPropertyFunctionPtr) BavpSetPropertyL,
+ (NPRemovePropertyFunctionPtr) 0
+};
+static NPClass *BavpNPClass = &_BavpNPClass;
+
+
+BavpNPObject* BavpNPObject_new(NPP instance)
+{
+ initializeIdentifiers();
+ BavpNPObject *self = (BavpNPObject *)NPN_CreateObject (instance, BavpNPClass);
+ return self;
+}
+
+void BavpNPObject_stateChanged(BavpNPObject* obj, char* state)
+{
+ if (!obj || !obj->stateChangedCallback)
+ return;
+ NPVariant arg;
+ NPVariant res;
+ STRINGZ_TO_NPVARIANT(state, arg);
+ NPN_InvokeDefault(obj->nppInstance, obj->stateChangedCallback, &arg, 1, &res);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpPlugin.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,477 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser for handling embedded video requests.
+*
+*/
+
+// INCLUDE FILES
+#include <BrowserAudioVideoPlugin.rsg>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+#include <bautils.h>
+
+#include "BavpLogger.h"
+#include "BavpPlugin.h"
+#include "BavpView.h"
+#include "BavpControllerAudio.h"
+#include "BavpControllerVideo.h"
+
+#include <npscript.h>
+using namespace RT_GestureHelper;
+
+// CONSTANTS
+_LIT( KBrowserAVPluginRscFileZ, "z:BrowserAudioVideoPlugin.rsc" );
+_LIT( KBrowserAVPluginRscFile, "\\resource\\BrowserAudioVideoPlugin.rsc");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::CBavpPlugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpPlugin::CBavpPlugin()
+ : iError( EFalse ),
+ iMimeType( NULL ),
+ iPauseState ( EFalse ),
+ iIsForeGround ( ETrue ),
+ iPauseInBackground (EFalse),
+ iPlayFromFile(EFalse)
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpPlugin::ConstructL()
+ {
+ TFileName fileName;
+ TParse parse;
+
+ Dll::FileName (fileName);
+ parse.Set(KBrowserAVPluginRscFile, &fileName, NULL);
+ fileName = parse.FullName();
+ BaflUtils::NearestLanguageFile(CCoeEnv::Static()->FsSession(), fileName);
+ if ( !BaflUtils::FileExists( CCoeEnv::Static()->FsSession(), fileName ) )
+ {
+ // Use the Z drive one
+ parse.Set( KBrowserAVPluginRscFileZ, &KDC_RESOURCE_FILES_DIR, NULL );
+ fileName = parse.FullName();
+ BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(),fileName );
+ }
+ iResourceOffset = CCoeEnv::Static()->AddResourceFileL( fileName );
+ iDrmHelper = CDRMHelper::NewL( *CCoeEnv::Static() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CBavpPlugin* CBavpPlugin::NewL()
+ {
+ Log( EFalse, _L("CBavpPlugin::NewL") );
+
+ CBavpPlugin* self = new (ELeave) CBavpPlugin;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::Destructor
+// -----------------------------------------------------------------------------
+CBavpPlugin::~CBavpPlugin()
+ {
+ Log( EFalse, _L("CBavpPlugin::~CBavpPlugin") );
+
+ delete iBavpController;
+
+ delete iFileName;
+
+ delete iBavpView;
+
+ delete iDrmHelper;
+
+ if ( iMimeType )
+ {
+ delete iMimeType;
+ }
+
+
+ if ( iResourceOffset )
+ {
+ CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );
+ }
+ if ( iNPObject )
+ {
+ if (iNPObject->plugin == this)
+ iNPObject->plugin = 0;
+ NPN_ReleaseObject((struct NPObject*)(iNPObject));
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::SetWindowL
+// Handles the creation of the window for the video file.
+// Called by Browser for window creation.
+// aPluginAdapter allows callback to Browser. aRect is window size.
+// -----------------------------------------------------------------------------
+void CBavpPlugin::SetWindowL( MPluginAdapter *aPluginAdapter,
+ NPWindow* aWindow, NPP aInstance )
+ {
+ Log( EFalse, _L("CBavpPlugin::SetWindowL") );
+
+ // Set our PluginAdapter
+ iPluginAdapter = aPluginAdapter;
+ iNPP = aInstance;
+
+ // Check if error occurs last time for setWindowL
+ if ( iError )
+ {
+ // Stop browser calling NotifyL
+ iPluginAdapter->SetPluginNotifier( NULL );
+
+ // Error detected on OpenAndPlayFile
+ return;
+ }
+
+ if ( !iBavpView )
+ {
+ iBavpView = CBavpView::NewL( (CCoeControl*)iPluginAdapter->GetParentControl(), TRect(0, 0, 0, 0), this);
+
+ // Note: The pluginAdapter returns NULL
+ iBavpView->SetObserver( aPluginAdapter->GetParentControlObserver() );
+
+ // Register for Browser Notifications
+ iPluginAdapter->SetPluginNotifier( (MPluginNotifier *)this );
+
+ // Add option menu handler
+ iPluginAdapter->SetOptionMenuHandler( (MOptionMenuHandler *)iBavpView );
+
+ // Notify Browser that plugin has been constructed
+ iPluginAdapter->PluginConstructedL( iBavpView );
+ }
+ else
+ {
+ // Only setRect() is enough, since it calls SizeChanged() and
+ // inside it refreshes the rect's coordinate
+ iBavpView->SetRect( aWindow );
+
+ // If we have a Rtsp scheme, we need to play it (aka start the
+ // BavpControllerVideo). We only do this once
+ if ( iRtspUrl )
+ {
+ OpenAndPlayUrlL( *iRtspUrl );
+ delete iRtspUrl;
+ iRtspUrl = NULL;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::OpenAndPlayFileL
+// Called by Browser when ready for file to be played
+// -----------------------------------------------------------------------------
+void CBavpPlugin::OpenAndPlayFileL( const TDesC& aFilename, const HBufC* originalFileName )
+ {
+ iPlayFromFile = ETrue;
+ Log( EFalse, _L("CBavpPlugin::OpenAndPlayFileL"), (TInt)this );
+
+ if ( !iBavpView )
+ {
+ // The view is not set yet.
+ // Re-invoke the OpenAndPlayFile after the window has been initialized
+ delete iFileName;
+ iFileName = NULL;
+ iFileName = aFilename.AllocL();
+ }
+ else
+ {
+ if ( iBavpController )
+ {
+ // Will stop current audio or video player
+ delete iBavpController;
+ iBavpController = NULL;
+
+ // Set to null, otherwise, plugin will crash when it switches file
+ iBavpView->SetBavpController( NULL );
+ }
+
+ // Determine if file is audio or video, so we can start up an audio
+ // or video controller
+ CBavpMediaRecognizer* mediaRecognizer = CBavpMediaRecognizer::NewL();
+ CleanupStack::PushL( mediaRecognizer );
+ TBavpMediaType mediaType = mediaRecognizer->IdentifyMediaTypeL( aFilename );
+ CleanupStack::PopAndDestroy(); // mediaRecognizer
+
+ // Do we have audio content, let the audio controller handle it
+ if ( mediaType == ELocalAudioFile || mediaType == ELocalAudioPlaylist )
+ {
+ iBavpController = CBavpControllerAudio::NewL( iBavpView,
+ iAccessPtId,
+ mediaType,
+ aFilename );
+ }
+ else
+ {
+ // We got other content, let the video controller handle it.
+ iBavpController = CBavpControllerVideo::NewL( iBavpView,
+ iAccessPtId,
+ mediaType,
+ aFilename );
+ }
+
+ // Set the volume and loop from the attribute values
+ iBavpController->SetVolumeFromAttribute( iVolume );
+ iBavpController->SetLoopFromAttribute( iLoop, iInfiniteFlag );
+
+ // Set the original file name & mime type
+ iBavpController->SetOriginalFileName(originalFileName);
+ iBavpController->SetMimeType(iMimeType);
+
+ iBavpView->SetBavpController( iBavpController );
+
+ TRAPD( err, iBavpController->PlayAudioVideoL() );
+ if ( err )
+ {
+ Log( EFalse, _L("CBavpPlugin::OpenAndPlayFileL ERROR from PlayAudioVideoL") );
+ iBavpController->iCurrentState = EBavpBadContent;
+ iBavpView->UpdateView();
+ User::Leave( err );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::OpenAndPlayUrlL
+// Called by Browser when ready for url to be played
+// -----------------------------------------------------------------------------
+void CBavpPlugin::OpenAndPlayUrlL( const TDesC& aUrl )
+ {
+ iPlayFromFile = EFalse;
+ Log( EFalse, _L("CBavpPlugin::OpenAndPlayUrlL"), (TInt)this );
+
+ if ( iBavpController )
+ {
+ // Will stop current audio or video player
+ delete iBavpController;
+ iBavpController = NULL;
+
+ // Set to null, otherwise, plugin will crash when it switches file
+ iBavpView->SetBavpController( NULL );
+ }
+
+ iBavpController = CBavpControllerVideo::NewL( iBavpView,
+ iAccessPtId,
+ EUrl,
+ aUrl );
+
+ // iRtspUrl is used as a flag in SetWindow, which is re-entrant, so delete
+ // once we got a controller for it
+ delete iRtspUrl;
+ iRtspUrl = NULL;
+
+ // Set the volume and loop from the attribute values
+ iBavpController->SetVolumeFromAttribute( iVolume );
+ iBavpController->SetLoopFromAttribute( iLoop, iInfiniteFlag );
+
+ iBavpView->SetBavpController( iBavpController );
+
+ iBavpController->PlayAudioVideoL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::SetAccessPtId
+// Sets access pt id to be used
+// -----------------------------------------------------------------------------
+void CBavpPlugin::SetAccessPtId( TUint aAccessPtId )
+ {
+ iAccessPtId = aAccessPtId;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::SetVolumeAndLoop
+// Called to set the volume and loop value that we get from the webpage source
+// to be able to use it later
+// -----------------------------------------------------------------------------
+void CBavpPlugin::SetVolumeAndLoop( TInt aVolume, TInt aLoop, TInt aInfiniteFlag )
+ {
+ // Save volume attribute value, pass to controller after it initializes
+ iVolume = aVolume;
+
+ // Save loop attribute values, pass to controller after it initializes
+ iLoop = aLoop;
+ iInfiniteFlag = aInfiniteFlag;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::SetVolumeAndLoop
+// Called to set the volume and loop value that we get from the webpage source
+// to be able to use it later
+// -----------------------------------------------------------------------------
+void CBavpPlugin::SetRtspUriL( const TDesC& aRtspUri )
+ {
+ iRtspUrl = aRtspUri.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::NotifyL
+// MPluginNotifier callback, Browser calls this to inform Plugin of some event.
+// The biggest use is when the Browser goes in-focus or out-focus. Out-foucus
+// can happen when other component takes top of CCoeControl stack, such as the
+// Option Menu, another application, Screen saver, ...
+// -----------------------------------------------------------------------------
+TInt CBavpPlugin::NotifyL( TNotificationType aCallType, void* aParam )
+ {
+ if(iBavpController)
+ {
+ //if player is paused due to focus change or Visual history back and manually pressed Play, then we need
+ //to clear the pause state.
+ if(EBavpPlaying == iBavpController->State() && iPauseState)
+ {
+ iPauseState = EFalse;
+ }
+ }
+
+ switch ( aCallType )
+ {
+ case EApplicationFocusChanged:
+ // The browser has gone in-focus (foreground), or out-focus
+ // (background), i.e. the browser is not on top of CCoeControl stack,
+ // so inform this plugin if it is in-focus or out-focus
+ if ( iBavpController )
+ {
+ // If Browser out-focus, we send this plugin aParam=EFalse.
+ // If Browser in-focus, we send this plugin aParam=ETrue, if
+ // the plugin is (was) in-focus or activated.
+ iBavpController->HandleBrowserNotification( TBool(aParam) );
+ if(!aParam) //app background
+ {
+ iIsForeGround = EFalse;
+ //Pause for Live stream will Leave with KErrNotSupported from Helix player
+ //and intern session will be closed. For Live stream Pause should not be done
+ if(EBavpPlaying == iBavpController->State() && ( !iBavpController->IsClipLive()) )
+ {
+ iPauseState = ETrue;
+ iPauseInBackground = ETrue;
+ iBavpController->PauseL();
+ }
+ }
+ else //app foreground
+ {
+ iIsForeGround = ETrue;
+ if(EBavpPaused == iBavpController->State() && iPauseInBackground)
+ {
+ iPauseState = EFalse;
+ iPauseInBackground = EFalse;
+ iBavpController->PlayL();
+ }
+
+ }
+
+ }
+ break;
+
+ case EPluginPause :
+ if( !aParam )
+ {
+ if(iBavpController && iPauseState && (iBavpController->State() == EBavpPaused) && (iIsForeGround))
+ {
+ iPauseState = EFalse;
+ iBavpController->PlayL();
+ }
+ }
+
+ break;
+ case EPluginInvisible :
+ if( !aParam )
+ {
+ if ( iBavpController && (!iPauseState) ) //plugin background
+ {
+ //Pause for Live stream will Leave with KErrNotSupported from Helix player
+ //and intern session will be closed. For Live stream Pause should not be done
+ if( (EBavpPlaying == iBavpController->State() ) && ( !iBavpController->IsClipLive()) )
+ {
+ iPauseState = ETrue;
+ iBavpController->PauseL();
+ }
+ }
+ }
+ else if(iBavpController && iPauseState && (iBavpController->State() == EBavpPaused) && (iIsForeGround))
+ {
+ iPauseState = EFalse;
+ iBavpController->PlayL();
+ }
+ break;
+ case EAccesPointChanged :
+ if (iBavpController && !iPlayFromFile) {
+ bool state = (iBavpController->State() == EBavpPaused ||
+ iBavpController->State() == EBavpPlaying ||
+ iBavpController->State() == EBavpBuffering ||
+ iBavpController->State() == EBavpFastForwarding ||
+ iBavpController->State() == EBavpRewinding );
+ iBavpController->Stop();
+ if (state)
+ iBavpController->PlayL();
+ }
+ break;
+
+ default:
+ // Not implemented
+ break;
+
+ }; // end of switch
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::SetMimeType
+// Sets the mime name. Used for scripting functionality
+// -----------------------------------------------------------------------------
+void CBavpPlugin::SetMimeType( NPMIMEType type )
+ {
+ iMimeType = type.Alloc();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::HandleGesture
+// -----------------------------------------------------------------------------
+TBool CBavpPlugin::HandleGesture(void* aEvent)
+ {
+ TBool ret = EFalse;
+ TGestureEvent *gesture = static_cast<TGestureEvent*>(aEvent);
+ // Fix crash when iBavpController is null for bug EGUY-7TYHDC
+ if (iBavpController) {
+ ret = iBavpController->HandleGesture(gesture);
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpPlugin::getNPNFuncs
+// -----------------------------------------------------------------------------
+NPNetscapeFuncs* CBavpPlugin::getNPNFuncs()
+ {
+ CBavpPluginEcomMain* npm = (CBavpPluginEcomMain*)Dll::Tls();
+ return npm ? npm->Funcs() : NULL;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,796 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Uses the interface MPluginAdapter to notify browser of construction
+ and destruction of the plug-in, implements interface MPluginOptionHandler
+ to add menus and draws animated images while video player loading the data
+*
+*/
+
+
+// INCLUDE FILES
+#include <browser_platform_variant.hrh>
+#include <AknUtils.h>
+#include <aknclearer.h>
+#include <AknBitmapAnimation.h>
+#include <data_caging_path_literals.hrh>
+#include <barsread.h> // For TResourceReader
+#include <StringLoader.h>
+#include <pluginadapterinterface.h>
+#include <BrowserAudioVideoPlugin.rsg> // For text
+
+#include <brctldefs.h>
+
+#include "BavpLogger.h"
+#include "BavpView.h"
+#include "BavpController.h"
+#include "BavpPlugin.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpView::CBavpView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpView::CBavpView()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBavpView::ConstructL( const CCoeControl* aParent,
+ const TRect& aRect, CBavpPlugin* aBavPlugin )
+ {
+ Log( EFalse, _L("CBavpView::ConstructL") );
+ iBavPlugin = aBavPlugin;
+
+ CreateWindowL(aParent);
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ if (AknLayoutUtils::PenEnabled()) {
+ DrawableWindow()->SetPointerGrab(ETrue);
+ EnableDragEvents();
+ }
+ //To enable advance pointer info for multi-touch
+ Window().EnableAdvancedPointers();
+#endif
+ ActivateL(); // Draws icon
+ iRect = aRect;
+ CCoeControl::SetRect( aRect ); // Calls SizeChanged
+
+ User::LeaveIfError( iWsSession.Connect() );
+ iWindowId = iCoeEnv->RootWin().Identifier();
+
+ // Video buffering animation, used to show that content is buffering
+ iVideoBuffAnimation = CAknBitmapAnimation::NewL();
+ iVideoBuffAnimation->SetContainerWindowL( *this );
+ TResourceReader rrBuffering;
+ iCoeEnv->CreateResourceReaderLC( rrBuffering, R_ANIMATION_BUFFERING );
+ iVideoBuffAnimation->ConstructFromResourceL( rrBuffering );
+ CleanupStack::PopAndDestroy(); // rrBuffering
+ iIsVideoBuffAnimRunning = EFalse;
+
+ // Bad content animation, used to show that content is not available
+ iBadContentAnimation = CAknBitmapAnimation::NewL();
+ iBadContentAnimation->SetContainerWindowL( *this );
+ TResourceReader rrNoContentAnim;
+ iCoeEnv->CreateResourceReaderLC( rrNoContentAnim, R_NO_CONTENT_ANIMATION );
+ iBadContentAnimation->ConstructFromResourceL( rrNoContentAnim );
+ CleanupStack::PopAndDestroy(); // rrNoContentAnim
+ iIsBadContentAnimRunning = EFalse;
+
+ // Video stopped animation, used to show that video content is stopped
+ iVideoStoppedAnimation = CAknBitmapAnimation::NewL();
+ iVideoStoppedAnimation->SetContainerWindowL( *this );
+ TResourceReader rrVideoStoppedAnim;
+ iCoeEnv->CreateResourceReaderLC( rrVideoStoppedAnim, R_VIDEO_STOPPED_ANIMATION );
+ iVideoStoppedAnimation->ConstructFromResourceL( rrVideoStoppedAnim );
+ CleanupStack::PopAndDestroy(); // rrVideoStoppedAnim
+ iIsVideoStoppedAnimRunning = EFalse;
+
+ // Video paused animation, used to show that video content is paused
+ iVideoPausedAnimation = CAknBitmapAnimation::NewL();
+ iVideoPausedAnimation->SetContainerWindowL( *this );
+ TResourceReader rrVideoPausedAnim;
+ iCoeEnv->CreateResourceReaderLC( rrVideoPausedAnim, R_VIDEO_PAUSED_ANIMATION );
+ iVideoPausedAnimation->ConstructFromResourceL( rrVideoPausedAnim );
+ CleanupStack::PopAndDestroy(); // rrVideoPausedAnim
+ iIsVideoPausedAnimRunning = EFalse;
+
+ // Audio playing animation, used when no video is present, only audio
+ iAudioPlayAnimation = CAknBitmapAnimation::NewL();
+ iAudioPlayAnimation->SetContainerWindowL( *this );
+ TResourceReader rrAudioPlayAnim;
+ iCoeEnv->CreateResourceReaderLC( rrAudioPlayAnim, R_AUDIO_PLAY_ANIMATION );
+ iAudioPlayAnimation->ConstructFromResourceL( rrAudioPlayAnim );
+ CleanupStack::PopAndDestroy(); // rrAudioPlayAnim
+ iIsAudioPlayAnimRunning = EFalse;
+
+ // Audio stopped animation, used to show that audio content is stopped
+ iAudioStoppedAnimation = CAknBitmapAnimation::NewL();
+ iAudioStoppedAnimation->SetContainerWindowL( *this );
+ TResourceReader rrAudioStoppedAnim;
+ iCoeEnv->CreateResourceReaderLC( rrAudioStoppedAnim, R_AUDIO_STOPPED_ANIMATION );
+ iAudioStoppedAnimation->ConstructFromResourceL( rrAudioStoppedAnim );
+ CleanupStack::PopAndDestroy(); // rrAudioStoppedAnim
+ iIsAudioStoppedAnimRunning = EFalse;
+
+ // Audio paused animation, used to show that audio content is paused
+ iAudioPausedAnimation = CAknBitmapAnimation::NewL();
+ iAudioPausedAnimation->SetContainerWindowL( *this );
+ TResourceReader rrAudioPausedAnim;
+ iCoeEnv->CreateResourceReaderLC( rrAudioPausedAnim, R_AUDIO_PAUSED_ANIMATION );
+ iAudioPausedAnimation->ConstructFromResourceL( rrAudioPausedAnim );
+ CleanupStack::PopAndDestroy(); // rrAudioPausedAnim
+ iIsAudioPausedAnimRunning = EFalse;
+
+ Log( EFalse, _L("CBavpView::ConstructL - Start Buffering animation") );
+ RunAnimation(iVideoBuffAnimation, iIsVideoBuffAnimRunning);
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CBavpView* CBavpView::NewL( const CCoeControl* aParent,
+ const TRect& aRect, CBavpPlugin* aBavPlugin )
+ {
+ Log( EFalse, _L("CBavpView::NewL") );
+
+ CBavpView* self = new( ELeave ) CBavpView;
+ CleanupStack::PushL( self );
+ self->ConstructL( aParent, aRect, aBavPlugin );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::Destructor
+// -----------------------------------------------------------------------------
+CBavpView::~CBavpView()
+ {
+ Log( EFalse, _L("CBavpView::~CBavpView") );
+
+ // Check if the keyhandling is on the stack, if yes, remove it
+ if ( iIsOnStack )
+ {
+ // Check if the animation is active
+ // if it is not start animation
+ iEikonEnv->EikAppUi()->RemoveFromStack( this );
+ }
+
+ // Cancel video buffering animation, if it's still running
+ if ( iIsVideoBuffAnimRunning )
+ {
+ iVideoBuffAnimation->CancelAnimation();
+ }
+ delete iVideoBuffAnimation;
+
+ // Cancel video stopped animation, if it's still running
+ if ( iIsVideoStoppedAnimRunning )
+ {
+ iVideoStoppedAnimation->CancelAnimation();
+ }
+ delete iVideoStoppedAnimation;
+
+ // Cancel video paused animation, if it's still running
+ if ( iIsVideoPausedAnimRunning )
+ {
+ iVideoPausedAnimation->CancelAnimation();
+ }
+ delete iVideoPausedAnimation;
+
+ // Cancel audio only animation, if it's still running
+ if ( iIsAudioPlayAnimRunning )
+ {
+ iAudioPlayAnimation->CancelAnimation();
+ }
+ delete iAudioPlayAnimation;
+
+ // Cancel audio stopped animation, if it's still running
+ if ( iIsAudioStoppedAnimRunning )
+ {
+ iAudioStoppedAnimation->CancelAnimation();
+ }
+ delete iAudioStoppedAnimation;
+
+ // Cancel audio paused animation, if it's still running
+ if ( iIsAudioPausedAnimRunning )
+ {
+ iAudioPausedAnimation->CancelAnimation();
+ }
+ delete iAudioPausedAnimation;
+
+ // Cancel bad content animation, if it's still running
+ if ( iIsBadContentAnimRunning )
+ {
+ iBadContentAnimation->CancelAnimation();
+ }
+ delete iBadContentAnimation;
+
+ iWsSession.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::SizeChanged
+// Responds to size changes to sets the size and position of the contents of
+// this control
+// -----------------------------------------------------------------------------
+void CBavpView::SizeChanged()
+ {
+ Log( EFalse, _L("CBavpView::SizeChanged") );
+
+ if ( iBavpController )
+ {
+ iRect = Rect();
+ iBavpController->RefreshRectCoordinatesL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::AddPluginOptionMenuItemsL
+// Add the Option Menu items to the menuPane, these will be handled by plugin.
+// -----------------------------------------------------------------------------
+void CBavpView::AddPluginOptionMenuItemsL( CEikMenuPane& aMenuPane,
+ TInt aCommandBase,
+ TInt /*aAfter*/ )
+ {
+ Log( EFalse, _L("CBavpView::AddPluginOptionMenuItemsL") );
+
+ iCommandBase = aCommandBase;
+ TInt index( 0 );
+
+ // The menus are only added, if the controller exists and we're in
+ // normal screen and not bad content
+ if ( !iBavpController || iBavpController->IsClipFullScreen() ||
+ iBavpController->State() == EBavpBadContent )
+ {
+ return;
+ }
+
+ // Display the "Mute" menu item, unless we have HW volume keys, and...
+ if ( !HAS_HW_VOLUME_KEYS &&
+ !iBavpController->IsVolumeMuted() &&
+ !iBavpController->IsClipRewinding() &&
+ !iBavpController->IsClipFastForwarding() )
+ {
+ InsertOneMenuItemL( aMenuPane, EBavpCmdMuteVolume,
+ R_TEXT_VIDEO_PLUGIN_VOLUME_MUTE, index);
+ index++;
+ }
+
+ // Check CurrentState to determine the menu items to add
+ switch ( iBavpController->State() )
+ {
+ case EBavpStopped:
+ case EBavpRewindComplete:
+ case EBavpPlayComplete:
+ {
+ // The content is at the beginning, user can play
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPlay,
+ R_TEXT_VIDEO_PLUGIN_PLAY, index );
+ index ++;
+ break;
+ }
+ case EBavpPlaying:
+ {
+ // Check if it can be paused
+ if ( iBavpController->IsClipSeekable() )
+ {
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPause,
+ R_TEXT_VIDEO_PLUGIN_PAUSE, index);
+ index++;
+ }
+
+ // If playing, user can also stop
+ InsertOneMenuItemL( aMenuPane, EBavpCmdStop,
+ R_TEXT_VIDEO_PLUGIN_STOP, index );
+ index++;
+ // Add FF and Rewind, only if content seekable, local media, video
+ if ( iBavpController->IsClipSeekable() &&
+ iBavpController->IsClipLocalMedia() &&
+ iBavpController->IsClipVideo() )
+ {
+ InsertOneMenuItemL( aMenuPane, EBavpCmdFastForward,
+ R_TEXT_VIDEO_PLUGIN_FAST_FORWARD, index );
+ index++;
+ InsertOneMenuItemL( aMenuPane, EBavpCmdRewind,
+ R_TEXT_VIDEO_PLUGIN_REWIND, index );
+ index++;
+ }
+ // Add full screen, only if video content
+ if ( iBavpController->IsClipVideo() )
+ {
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPlayFullScreen,
+ R_TEXT_VIDEO_PLUGIN_FULL_SCREEN, index );
+ index++;
+ }
+ break;
+ }
+ case EBavpPaused:
+ {
+ // If paused, user can continue (play) or stop
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPlay,
+ R_TEXT_VIDEO_PLUGIN_PLAY, index );
+ index++;
+
+ InsertOneMenuItemL( aMenuPane, EBavpCmdStop,
+ R_TEXT_VIDEO_PLUGIN_STOP, index );
+ index++;
+ // Add FF and Rewind, only if content seekable, local media, video
+ if ( iBavpController->IsClipSeekable() &&
+ iBavpController->IsClipLocalMedia() &&
+ iBavpController->IsClipVideo() )
+ {
+ InsertOneMenuItemL( aMenuPane, EBavpCmdFastForward,
+ R_TEXT_VIDEO_PLUGIN_FAST_FORWARD, index );
+ index++;
+ InsertOneMenuItemL( aMenuPane, EBavpCmdRewind,
+ R_TEXT_VIDEO_PLUGIN_REWIND, index );
+ index++;
+ }
+ break;
+ }
+ case EBavpFastForwarding:
+ case EBavpRewinding:
+ {
+ // User can play, while FF or Rewinding
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPlay,
+ R_TEXT_VIDEO_PLUGIN_PLAY, index );
+ index++;
+ // Add pause, we should only be fast-forwarding or rewinding
+ // seekable content, no need to check
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPause,
+ R_TEXT_VIDEO_PLUGIN_PAUSE, index);
+ index++;
+ break;
+ }
+ case EBavpFastForwardComplete:
+ {
+ // Content is at the end, user can replay
+ InsertOneMenuItemL( aMenuPane, EBavpCmdPlay,
+ R_TEXT_VIDEO_PLUGIN_PLAY, index );
+ index++;
+ // Add rewind, we should only be fast-forwarding seekable content,
+ // no need to check
+ InsertOneMenuItemL( aMenuPane, EBavpCmdRewind,
+ R_TEXT_VIDEO_PLUGIN_REWIND, index );
+ index++;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ } // End of switch
+
+ // Display "Media Volume" menu item, unless we have HW volume keys and...
+ if ( !HAS_HW_VOLUME_KEYS &&
+ !iBavpController->IsClipRewinding() &&
+ !iBavpController->IsClipFastForwarding() )
+ {
+ // User can adjust volume
+ InsertOneMenuItemL( aMenuPane, EBavpCmdChangeVolume,
+ R_TEXT_VIDEO_PLUGIN_MEDIA_VOLUME, index );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::HandlePluginCommandL
+// Handle the user command from the option menu to the plugin.
+// -----------------------------------------------------------------------------
+void CBavpView::HandlePluginCommandL( TInt aCommand )
+ {
+ iBavpController->HandleCommandL( (TBavpCommandIds)(aCommand - iCommandBase) );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::OfferKeyEventL
+// Control framework calls this function to handle the key event
+// -----------------------------------------------------------------------------
+TKeyResponse CBavpView::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ Log( EFalse, _L("CBavpView::OfferKeyEventL") );
+
+ TKeyResponse keyResponse( EKeyWasNotConsumed );
+
+ //Check if the controller is already initialized
+ if (iBavpController)
+ {
+ // Let the Audio or Video controller handle the key presses
+ keyResponse = iBavpController->HandleKeysL( aKeyEvent, aType );
+ }
+
+ return keyResponse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::SetRect
+// Sets the control's extent, specifying a TRect
+// -----------------------------------------------------------------------------
+void CBavpView::SetRect( NPWindow* aWindow )
+ {
+ Log( EFalse, _L("CBavpView::SetRect") );
+ iWindowRect = TRect(TPoint(aWindow->x, aWindow->y), TSize(aWindow->width, aWindow->height));
+ iClipRect = TRect(aWindow->clipRect.left, aWindow->clipRect.top, aWindow->clipRect.right, aWindow->clipRect.bottom);
+ TRect r(iClipRect);
+ r.Intersection(iWindowRect);
+ TBool flag = iRect != r;
+ iRect = r;
+ CCoeControl::SetRect( iRect );
+
+ // Set the rect only when the animation is playing
+ if ( iIsVideoBuffAnimRunning && iVideoBuffAnimation &&
+ flag)
+ {
+ iVideoBuffAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iVideoBuffAnimation->SetRect( animRect );
+ TRAP_IGNORE( iVideoBuffAnimation->StartAnimationL() );
+ }
+ else if ( iIsAudioPlayAnimRunning && iAudioPlayAnimation &&
+ flag)
+ {
+ iAudioPlayAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iAudioPlayAnimation->SetRect( animRect );
+ TRAP_IGNORE( iAudioPlayAnimation->StartAnimationL() );
+ }
+ else if ( iIsAudioStoppedAnimRunning && iAudioStoppedAnimation &&
+ flag)
+ {
+ iAudioStoppedAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iAudioStoppedAnimation->SetRect( animRect );
+ TRAP_IGNORE( iAudioStoppedAnimation->StartAnimationL() );
+ }
+ else if ( iIsAudioPausedAnimRunning && iAudioPausedAnimation &&
+ flag)
+ {
+ iAudioPausedAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iAudioPausedAnimation->SetRect( animRect );
+ TRAP_IGNORE( iAudioPausedAnimation->StartAnimationL() );
+ }
+ else if ( iIsVideoStoppedAnimRunning && iVideoStoppedAnimation &&
+ flag)
+ {
+ iVideoStoppedAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iVideoStoppedAnimation->SetRect( animRect );
+ TRAP_IGNORE( iVideoStoppedAnimation->StartAnimationL() );
+ }
+ else if ( iIsVideoPausedAnimRunning && iVideoPausedAnimation &&
+ flag)
+ {
+ iVideoPausedAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iVideoPausedAnimation->SetRect( animRect );
+ TRAP_IGNORE( iVideoPausedAnimation->StartAnimationL() );
+ }
+ else if ( iIsBadContentAnimRunning && iBadContentAnimation &&
+ flag)
+ {
+ iBadContentAnimation->CancelAnimation();
+ TRect animRect( iWindowRect);
+ iBadContentAnimation->SetRect( animRect );
+ TRAP_IGNORE( iBadContentAnimation->StartAnimationL() );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::IsTopWindow
+// Return ETrue if the CCoeControl is the top window instance
+// -----------------------------------------------------------------------------
+TBool CBavpView::IsTopWindowL()
+ {
+ Log( EFalse, _L("CBavpView::IsTopWindowL") );
+
+ TBool ret( EFalse );
+ TInt numWg( iWsSession.NumWindowGroups() );
+ CArrayFixFlat<TInt>* wgList = new (ELeave) CArrayFixFlat<TInt>( numWg );
+
+ // Check if our window is front or not
+ if ( iWsSession.WindowGroupList( 0, wgList ) == KErrNone )
+ {
+ ret = ( iWindowId == wgList->At(0) );
+ }
+ else
+ {
+ ret = EFalse;
+ }
+
+ delete wgList;
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::UpdateView
+// Check animation running status, display the animated image if the video
+// player is not playing
+// -----------------------------------------------------------------------------
+void CBavpView::UpdateView()
+ {
+ Log( EFalse, _L("CBavpView::UpdateView") );
+
+ // Handle the bad content case, ie MMF reports an error that needs to
+ // be displayed to the user. (loss of network or bad content)
+ if ( iBavpController->State() == EBavpBadContent && !iIsBadContentAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Bad Content") );
+ RunAnimation( iBadContentAnimation, iIsBadContentAnimRunning );
+ }
+ // Handle the beffering content state
+ else if ( iBavpController->State() == EBavpBuffering && !iIsVideoBuffAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Buffering media") );
+ RunAnimation( iVideoBuffAnimation, iIsVideoBuffAnimRunning );
+ }
+ // Handle the video animations states
+ else if ( iBavpController->IsClipVideo() )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - We got Video") );
+ if ( iBavpController->State() == EBavpPlaying )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Video Playing, stop animation") );
+ TBool flag( EFalse );
+ RunAnimation( NULL, flag );
+ }
+ else if ( iBavpController->State() == EBavpStopped && !iIsVideoStoppedAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Video Stopped") );
+ RunAnimation( iVideoStoppedAnimation, iIsVideoStoppedAnimRunning );
+ }
+ else if ( iBavpController->State() == EBavpPaused && !iIsVideoPausedAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Video Paused") );
+ RunAnimation( iVideoPausedAnimation, iIsVideoPausedAnimRunning );
+ }
+ }
+ // Handle the audio animations states
+ else
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - We got Audio") );
+ if ( iBavpController->State() == EBavpPlaying && !iIsAudioPlayAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Audio Playing") );
+ RunAnimation( iAudioPlayAnimation, iIsAudioPlayAnimRunning );
+ }
+ else if ( iBavpController->State() == EBavpStopped ||
+ iBavpController->State() == EBavpPlayComplete &&
+ !iIsAudioStoppedAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Audio Stopped") );
+ RunAnimation( iAudioStoppedAnimation, iIsAudioStoppedAnimRunning );
+ }
+ else if ( iBavpController->State() == EBavpPaused && !iIsAudioPausedAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::UpdateView - Audio Paused") );
+ RunAnimation( iAudioPausedAnimation, iIsAudioPausedAnimRunning );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::FocusChanged
+// This method is called once CCoeControl::SetFocus is called, could be when
+// BavpPlugin::NotifyL causes SetFocus to be called
+// -----------------------------------------------------------------------------
+void CBavpView::FocusChanged( TDrawNow /*aDrawNow*/ )
+ {
+ iBavpController->BavpFocusChanged( IsFocused() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::Draw
+// This method is called by CCoeControl::Draw
+// -----------------------------------------------------------------------------
+void CBavpView::Draw( const TRect& aRect ) const
+ {
+
+ if (iBavpController && !iBavpController->IsClipFullScreen()) {
+ if ( Window().DisplayMode() == EColor16MA )
+ {
+ Log( EFalse, _L("BavpView::Draw() - DisplayMode=EColor16MA") );
+ CWindowGc& gc = SystemGc();
+ gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+#ifdef _DEBUG
+ gc.SetBrushColor(TRgb::Color16MA(0x0000ff00));
+#else
+ gc.SetBrushColor( TRgb::Color16MA(0) );
+#endif
+ gc.Clear( aRect );
+ }
+
+ if (iBavpController->IsClipLocalMedia() && iBavpController->IsClipSeekable()) {
+ if (iBavpController->State() == EBavpPlayComplete) {
+ TRAP_IGNORE(iBavpController->setPositionL(iBavpController->Duration()));
+ }
+ else if (iBavpController->State() == EBavpPaused) {
+ TRAP_IGNORE(iBavpController->setPositionL(iBavpController->getPositionL()));
+ }
+ }
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::ControllerStateChangedL
+// Check animation running status and the display screen mode
+// -----------------------------------------------------------------------------
+void CBavpView::ControllerStateChangedL()
+ {
+ Log( EFalse, _L("CBavpView::ControllerStateChangedL") );
+
+ // If not in full screen mode and if it is on the stack, then remove
+ // from the stack
+ if ( !iBavpController->IsClipFullScreen() && iIsOnStack )
+ {
+ iIsOnStack = EFalse;
+ iEikonEnv->EikAppUi()->RemoveFromStack( this );
+ }
+ else if ( iBavpController->IsClipFullScreen() && !iIsOnStack )
+ {
+ // If full screen mode and not on stack, add to stack
+ iIsOnStack = ETrue;
+ iEikonEnv->EikAppUi()->AddToStackL( this );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::InsertOneMenuItemL
+// Insert one menu item
+// -----------------------------------------------------------------------------
+void CBavpView::InsertOneMenuItemL( CEikMenuPane& aMenuPane, TInt aCommand,
+ TInt aResourceId, TInt index )
+ {
+ Log( EFalse, _L("CBavpView::InsertOneMenuItemL") );
+
+ CEikMenuPaneItem::SData item;
+ HBufC* buf = StringLoader::LoadLC( aResourceId );
+ item.iText.Copy( *buf );
+ CleanupStack::PopAndDestroy(); // buf
+ buf = NULL;
+
+ item.iCommandId = aCommand + iCommandBase;
+ item.iFlags = 0;
+ item.iCascadeId = 0;
+ aMenuPane.InsertMenuItemL( item, index );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpView::RunAnimation
+// Run the animation specified, and stop all the other animations
+// If the animation and run flag are NULL, we stop all animations
+// Check if animation is already running, if so don't stop, this causes flicker
+// -----------------------------------------------------------------------------
+void CBavpView::RunAnimation( CAknBitmapAnimation* aAnimation,
+ TBool &aAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::RunAnimation") );
+ // Display the animation specified, after cancelling any
+ // other animations first.
+ //
+ // Stop the video buffering animation
+ if ( iIsVideoBuffAnimRunning && iVideoBuffAnimation != aAnimation )
+ {
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel VideoBuffAnimation") );
+ iVideoBuffAnimation->CancelAnimation();
+ iIsVideoBuffAnimRunning = EFalse;
+ }
+ else if ( iIsVideoStoppedAnimRunning && iVideoStoppedAnimation != aAnimation )
+ {
+ // Stop the video stopped animation
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel VideoStoppedAnimation") );
+ iVideoStoppedAnimation->CancelAnimation();
+ iIsVideoStoppedAnimRunning = EFalse;
+ }
+ else if ( iIsVideoPausedAnimRunning && iVideoPausedAnimation != aAnimation )
+ {
+ // Stop the video paused animation
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel VideoPausedAnimation") );
+ iVideoPausedAnimation->CancelAnimation();
+ iIsVideoPausedAnimRunning = EFalse;
+ }
+ else if ( iIsAudioPlayAnimRunning && iAudioPlayAnimation != aAnimation )
+ {
+ // Stop the audio playing animation
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel AudioPlayAnimation") );
+ iAudioPlayAnimation->CancelAnimation();
+ iIsAudioPlayAnimRunning = EFalse;
+ }
+ else if ( iIsAudioStoppedAnimRunning && iAudioStoppedAnimation != aAnimation )
+ {
+ // Stop the audio stopped animation
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel AudioStoppedAnimation") );
+ iAudioStoppedAnimation->CancelAnimation();
+ iIsAudioStoppedAnimRunning = EFalse;
+ }
+ else if ( iIsAudioPausedAnimRunning && iAudioPausedAnimation != aAnimation )
+ {
+ // Stop the audio paused animation
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel AudioPausedAnimation") );
+ iAudioPausedAnimation->CancelAnimation();
+ iIsAudioPausedAnimRunning = EFalse;
+ }
+ else if ( iIsBadContentAnimRunning && iBadContentAnimation != aAnimation )
+ {
+ // Stop the bad content animation
+ Log( EFalse, _L("CBavpView::RunAnimation - cancel BadContentAnimation") );
+ iBadContentAnimation->CancelAnimation();
+ iIsBadContentAnimRunning = EFalse;
+ }
+
+ // Now, start the animation specified, if it isn't already running.
+ // If the animation and run flag are NULL, we don't start any animations.
+ if ( aAnimation && !aAnimRunning )
+ {
+ Log( EFalse, _L("CBavpView::RunAnimation - start new animation") );
+ if ( aAnimation->Rect().Size() != iRect.Size() )
+ {
+ TRect animRect( iWindowRect);
+ aAnimation->SetRect( animRect );
+ }
+ TRAP_IGNORE
+ (
+ aAnimation->StartAnimationL();
+ aAnimRunning = ETrue;
+ );
+ }
+
+ }
+
+
+void CBavpView::HandlePointerEventL(const TPointerEvent &aPointerEvent)
+ {
+ /*
+ * Plugin is sending all pointer events to the browser.
+ * Browser will process them to gesture and return back using
+ * event() function. (see PluginWin::HandleGesture(), BavpEvent() and
+ * CBavpPlugin::HandleGesture().
+ * Browser expects event position to be in absolute co-ordinates,
+ * so we convert position of the pointer event here.
+ */
+ TPoint point(aPointerEvent.iPosition + PositionRelativeToScreen());
+ NPNetscapeFuncs* funcs = iBavPlugin->getNPNFuncs();
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ if (aPointerEvent.IsAdvancedPointerEvent()) {
+ TAdvancedPointerEvent tadvp = *(static_cast<const TAdvancedPointerEvent *>(&aPointerEvent));
+ tadvp.iPosition = point;
+ if(funcs && funcs->setvalue) {
+ (funcs->setvalue)(iBavPlugin->getNPP(),
+ (NPPVariable) NPPVPluginPointerEvent,
+ (void*) &(tadvp));
+ }
+
+ }
+ else {
+#endif
+ TPointerEvent event(aPointerEvent);
+ event.iPosition = point;
+ if(funcs && funcs->setvalue) {
+ (funcs->setvalue)(iBavPlugin->getNPP(),
+ (NPPVariable) NPPVPluginPointerEvent,
+ (void*) &(event));
+ }
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ }
+#endif
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpViewFullScreen.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: View class for playing media in full screen
+*
+*/
+
+
+// INCLUDE FILES
+#include <coecntrl.h>
+
+#include "BavpViewFullScreen.h"
+#include "BavpControllerVideo.h"
+#include "BavpLogger.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CBavpViewFullScreen::CBavpViewFullScreen
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBavpViewFullScreen::CBavpViewFullScreen(CBavpControllerVideo* aController)
+ :iNormalController(aController)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpViewFullScreen::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpViewFullScreen::ConstructL()
+ {
+ CreateWindowL();
+ SetExtent( TPoint(), TSize() );
+ ActivateL();
+ SetPointerCapture( ETrue );
+ ClaimPointerGrab( ETrue );
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpViewFullScreen::HandlePointerEventL
+// Handles pointer events, simulate a KeyDown event to revert to normal screen
+// -----------------------------------------------------------------------------
+void CBavpViewFullScreen::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+{
+ Log( EFalse, _L("CBavpViewFullScreen::HandlePointerEventL") );
+ switch (aPointerEvent.iType)
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ //simulate a keyup event
+ TKeyEvent aKeyEvent;
+ aKeyEvent.iCode = 0;
+ aKeyEvent.iModifiers = 0;
+ aKeyEvent.iRepeats = 0;
+ aKeyEvent.iScanCode = EStdKeyDownArrow;
+ //convert back to normal screen
+ iNormalController->HandleKeysL(aKeyEvent, EEventKeyDown);
+ break;
+ }
+ default:
+ break;
+ }
+
+
+}
+// -----------------------------------------------------------------------------
+// CBavpViewFullScreen::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CBavpViewFullScreen* CBavpViewFullScreen::NewL(CBavpControllerVideo* aController)
+ {
+ CBavpViewFullScreen* self = new (ELeave) CBavpViewFullScreen(aController);
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBavpViewFullScreen::~CBavpViewFullScreen
+// Destructor
+// -----------------------------------------------------------------------------
+CBavpViewFullScreen::~CBavpViewFullScreen()
+ {
+ // ignore error
+ //release pointer control
+ SetPointerCapture(EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpViewFullScreen::Draw
+// This method is called by CCoeControl::Draw
+// -----------------------------------------------------------------------------
+void CBavpViewFullScreen::Draw( const TRect& aRect ) const
+ {
+ if ( Window().DisplayMode() == EColor16MA )
+ {
+ CWindowGc& gc = SystemGc();
+ gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+ gc.SetBrushColor( TRgb::Color16MA(0) );
+ gc.Clear( aRect );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpVolumeHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handles the volume, gets the initial volume from central
+* repository and monitors changes in volume.
+*
+*/
+
+
+#include <centralrepository.h>
+#include <ProfileEngineSDKCRKeys.h>
+#include <browseruisdkcrkeys.h>
+
+#include "BavpLogger.h"
+#include "BavpVolumeHandler.h"
+#include "BavpVolumeObserver.h"
+
+
+// -----------------------------------------------------------------------------
+// CBavpVolumeHandler::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CBavpVolumeHandler* CBavpVolumeHandler::NewL( MBavpVolumeObserver* aObserver )
+ {
+ Log( EFalse, _L("CBavpVolumeHandler::NewL") );
+
+ CBavpVolumeHandler* self = new (ELeave) CBavpVolumeHandler( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpVolumeHandler::CBavpVolumeHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CBavpVolumeHandler::CBavpVolumeHandler( MBavpVolumeObserver* aObserver )
+ : iObserver( aObserver )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpVolumeHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpVolumeHandler::ConstructL()
+ {
+ Log( EFalse, _L("CBavpVolumeHandler::ConstructL") );
+
+ iCurrentVolume = KCRVolume5;
+ iCurrentProfile = KGeneralProfile;
+
+ // Get volume settings from central repository
+ iVolumeRepository = CRepository::NewL( KCRUidBrowser );
+ iVolumeRepository->Get( KBrowserMediaVolumeControl, iCurrentVolume );
+
+ // If media volume key exists, watch it for changes
+ iVolumeCRHandler = CCenRepNotifyHandler::NewL( *this, *iVolumeRepository,
+ CCenRepNotifyHandler::EIntKey,
+ (TUint32)KBrowserMediaVolumeControl);
+ iVolumeCRHandler->StartListeningL();
+ iPreviousVolume = iCurrentVolume;
+
+ // Get the current profile
+ iProfileRepository = CRepository::NewL( KCRUidProfileEngine );
+ iProfileRepository->Get( KProEngActiveProfile, iCurrentProfile );
+
+ // Watch the Profile changes using a CR Notify Handler
+ iProfileCRHandler = CCenRepNotifyHandler::NewL( *this, *iProfileRepository,
+ CCenRepNotifyHandler::EIntKey,
+ (TUint32)KProEngActiveProfile );
+ iProfileCRHandler->StartListeningL();
+
+ // Now that we have initial volume and profile, lets use them.
+ // Check if we're in Silent profile or Meeting profile.
+ if ( iCurrentProfile == KSilentProfile ||
+ iCurrentProfile == KMeetingProfile )
+ {
+ // Mute the volume, we already saved the CR volume
+ // as iPreviousVolume
+ iCurrentVolume = KCRVolumeMute;
+ }
+
+ // Tell observer (BavpController) the initial volume
+ if ( iObserver )
+ {
+ iObserver->UpdateVolume( iCurrentVolume );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpVolumeHandler::~CBavpVolumeHandler
+// Destructor
+// ----------------------------------------------------------------------------
+CBavpVolumeHandler::~CBavpVolumeHandler()
+ {
+ Log( EFalse, _L("CBavpVolumeHandler::~CBavpVolumeHandler") );
+
+ // Clean up the media volume CR and CR Handler
+ if ( iVolumeCRHandler )
+ {
+ iVolumeCRHandler->StopListening();
+ delete iVolumeCRHandler;
+ }
+
+ delete iVolumeRepository;
+
+ // Clean up the Profile CR and CR Handler
+ if ( iProfileCRHandler )
+ {
+ iProfileCRHandler->StopListening();
+ delete iProfileCRHandler;
+ }
+
+ delete iProfileRepository;
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpVolumeHandler::HandleNotifyInt()
+// Handles volume and profile changes in CR
+// ----------------------------------------------------------------------------
+void CBavpVolumeHandler::HandleNotifyInt( const TUint32 aKeyId, TInt aNewValue )
+ {
+ if ( aKeyId == KBrowserMediaVolumeControl && aNewValue != iCurrentVolume )
+ {
+ // Media Volume property updated, and it changed
+ if ( iCurrentProfile == KSilentProfile ||
+ iCurrentProfile == KMeetingProfile )
+ {
+ // We got a new volume, and Profile is "quiet", save and use later
+ iPreviousVolume = aNewValue;
+ }
+ else
+ {
+ // We got a new volume and Profile allows us to use it
+ iCurrentVolume = aNewValue;
+ }
+ }
+ else if ( aKeyId == KProEngActiveProfile && aNewValue != iCurrentProfile )
+ {
+ // Profile property updated, and it changed
+ iCurrentProfile = aNewValue;
+
+ // If we got a change in profile, mute or unmute
+ if ( iCurrentProfile == KSilentProfile ||
+ iCurrentProfile == KMeetingProfile )
+ {
+ // Mute the volume
+ iPreviousVolume = iCurrentVolume;
+ iCurrentVolume = KCRVolumeMute;
+ }
+ else // Unmute the volume
+ {
+ iCurrentVolume = iPreviousVolume;
+ }
+ }
+
+ // Tell observer the new volume
+ if ( iObserver )
+ {
+ iObserver->UpdateVolume( iCurrentVolume );
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/BWINS/npGpsPlugin.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+ ?InitializeFuncs@@YAFPAU_NPPluginFuncs@@@Z @ 2 NONAME ; short InitializeFuncs(struct _NPPluginFuncs *)
+ ?NPP_Shutdown@@YAXXZ @ 3 NONAME ; void NPP_Shutdown(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/EABI/npGpsPlugin.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+ _Z12NPP_Shutdownv @ 2 NONAME
+ _Z15InitializeFuncsP14_NPPluginFuncs @ 3 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/data/1028286f.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Registry file for Ecom style Browser Location Plugin.
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+#include "GpsPlugin.rls"
+
+// RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+// Registry info
+// The UIDs for the filters implemented in this DLL
+// -----------------------------------------------------------------------------
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = 0x1028286f; // should match the name of the file.
+ // 3rd Uid of associated plugin dll (declared in the dll mmp file)
+ interfaces=
+ {
+ INTERFACE_INFO
+ {
+ // Identifies plugin type (used by ECom)
+ interface_uid = 0x101F8810;
+
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ // Specific implementation (must match an implementation entry in the dll)
+ implementation_uid = 0x10282870;
+ version_no = 2;
+ // File name;Plugin's name
+ display_name = STRING_r_browser_gps_plugin;
+ // Mimetypes and mime extensions
+ default_data = STRING_r_mime_gps;
+ // Plugin's description
+ opaque_data = STRING_r_browser_gps_desc;
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/data/GpsPlugin.rls Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the strings for resources
+*
+*/
+
+
+rls_string STRING_r_browser_gps_plugin "npGpsPlugin.dll;Browser GPS Plugin"
+rls_string STRING_r_browser_gps_desc "GPS Plugin for S60 Browser"
+rls_string STRING_r_mime_gps "application/x-gps-widget"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/group/BLD.INF Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project build file for BrowserLocationPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/BrowserGpsPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserGpsPlugin.iby)
+
+PRJ_MMPFILES
+GpsPluginEcom.mmp // Plugin mmp file
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/group/GpsPluginEcom.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is the .mmp for building Ecom style Browser Gps Plugin
+*
+*/
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET npGpsPlugin.dll
+TARGETTYPE PLUGIN
+
+UID 0x10009D8D 0x1028286f
+
+EPOCALLOWDLLDATA
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../data
+
+START RESOURCE 1028286f.rss
+TARGET npGpsPlugin.rsc
+END
+
+APP_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE ../inc
+SOURCEPATH ../src
+
+SOURCE GpsObserver.cpp
+SOURCE GpsApi.cpp
+SOURCE GpsPluginEcomMain.cpp
+SOURCE GpsPlugin.cpp
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+
+#ifdef __S60_32__
+LIBRARY JavaScriptCore.lib
+#else
+LIBRARY npscript.lib
+#endif
+
+LIBRARY lbs.lib
+LIBRARY SatInfo.lib
+LIBRARY flogger.lib
+
+DEFFILE npGpsPlugin.def
+NOSTRICTDEF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/inc/GpsObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef GPSOBSERVER_H
+#define GPSOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+#include <npscript.h>
+#include <lbs.h>
+
+// FORWARD DECLARATIONS
+class CGpsPlugin;
+
+// CONSTANTS
+
+// State enum and member variable
+
+// CLASS DECLARATIONS
+/**
+* CGpsObserver.
+* Controller class for handling browser widget requests
+* @lib npGpsPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CGpsObserver) : public CActive
+ {
+ public:
+ /**
+ * C++ default constructor.
+ */
+ static CGpsObserver* NewL( CGpsPlugin* aPlugin );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGpsObserver();
+
+ public:
+ /**
+ * Request network status change notification.
+ * @since 3.2
+ * @param name of the callback
+ * @return void
+ */
+ void RequestNotificationL( const NPString& aEvent );
+
+ /*
+ * Gets latitude
+ * @since 3.2
+ * @return latitude
+ */
+ TReal Latitude() const;
+
+ /*
+ * Gets longitude.
+ * @since 3.2
+ * @return longitude
+ */
+ TReal Longitude() const;
+
+ /*
+ * Gets altitude
+ * @since 3.2
+ * @return altitude
+ */
+ TReal Altitude() const;
+
+ /*
+ * Gets horizontal accuracy
+ * @since 3.2
+ * @return horizontal accuracy
+ */
+ TReal HorizontalAccuracy() const;
+
+ /*
+ * Gets vertical accuracy
+ * @since 3.2
+ * @return vertical accuracy
+ */
+ TReal VerticalAccuracy() const;
+
+ /*
+ * Gets tick count for the current sample
+ * @since 3.2
+ * @return
+ */
+ TInt TickCount() const;
+
+ protected: // CActive
+ /**
+ * Implements cancellation of an outstanding request.
+ * @param none
+ * @return void
+ */
+ void DoCancel();
+
+ /**
+ * Handles an active object’s request completion event.
+ * @param none
+ * @return void
+ */
+ void RunL();
+
+ /**
+ * Handles an active object’s error
+ * @param error
+ * @return void
+ */
+ TInt RunError(TInt aError);
+
+ protected:
+ /**
+ * C++ default constructor.
+ */
+ CGpsObserver(CGpsPlugin* aPlugin);
+
+ /**
+ * C++ default constructor.
+ */
+ void ConstructL();
+
+ protected:
+ CGpsPlugin* iGpsPlugin;
+
+ RPositionServer iServer;
+ RPositioner iPositioner;
+ TPositionInfo iPositionInfo;
+ TPosition iPosition;
+
+ TInt iTickCount;
+ HBufC8* iEventHandler;
+ };
+
+#endif // GPSOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/inc/GpsPlugin.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef GPSPLUGIN_H
+#define GPSPLUGIN_H
+
+// INCLUDES
+#include <cecombrowserplugininterface.h>
+#include <npscript.h>
+#include <pluginadapterinterface.h> // For base class MPluginNotifier
+
+// FORWARD DECLARATIONS
+class CGpsObserver;
+
+// CLASS DECLARATION
+
+/******************************************
+This class is specific to ECom Style Plugin. This is used for passing
+plugin specific initialization information to and from browser.
+*******************************************/
+IMPORT_C NPError InitializeFuncs( NPPluginFuncs* aPpf );
+
+// CONSTANTS
+const TInt KFirstGpsImplementationValue = 0x10282870;
+
+/**
+* CGpsPluginEcomMain
+* Used for passing plugin specific initialization information to and from browser.
+* @lib npGpsPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CGpsPluginEcomMain) : public CEcomBrowserPluginInterface
+ {
+ public: // Functions from base classes
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGpsPluginEcomMain* NewL( TAny* aInitParam );
+
+ /**
+ * Destructor
+ */
+ virtual ~CGpsPluginEcomMain();
+
+ /**
+ * Passed from the browser to the plugin and delcares what
+ * functions the browser makes available
+ */
+ NPNetscapeFuncs* Funcs() const { return iNpf; }
+
+ private:
+
+ // Default constructor
+ CGpsPluginEcomMain( NPNetscapeFuncs* aNpf );
+
+ // By default Symbian 2nd phase constructor is private.
+ void ConstructL( NPPluginFuncs* aPluginFuncs );
+
+ // Netscape Function Pointer
+ NPNetscapeFuncs* iNpf;
+ };
+
+/**
+* CGpsPlugin class
+* Interfaces to Browser, used to pass information between browser and plugin
+* @lib npGpsPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CGpsPlugin) : public CBase
+ {
+ public:
+ static CGpsPlugin* NewL();
+
+ virtual ~CGpsPlugin();
+
+ public:
+ void Deallocate ();
+ bool HasMethod( NPIdentifier name );
+ bool Invoke( NPIdentifier name,
+ NPVariant *args,
+ uint32_t argCount,
+ NPVariant *result );
+ bool HasProperty( NPIdentifier name );
+ bool GetProperty( NPIdentifier name, NPVariant *variant );
+ bool SetPropertyL( NPIdentifier name, NPVariant *variant );
+
+ public:
+ void SetInstance( NPP instance ) { iInstanceHandle = instance; }
+ bool InvokeCallback( TDesC8& name, const NPVariant *args, uint32_t argCount );
+
+ /**
+ * SetWindowL
+ * @since 2.8
+ * @param MPluginAdapter *pluginAdapter: Pointer to Browser adapter class
+ * @param const TRect& aRect: rectangle representing current UI
+ * @return void
+ */
+ void SetWindowL( MPluginAdapter *pluginAdapter, const TRect& aRect );
+
+ private:
+ CGpsPlugin();
+ void ConstructL();
+
+ private:
+ NPP iInstanceHandle;
+ NPIdentifier* iGpsPluginIdentifiers; // not owned
+
+ // Interface to Browser
+ MPluginAdapter* iPluginAdapter; // not owned
+
+ // gpsplugin feature class instance
+ CGpsObserver* iGpsObserver; // owned
+ };
+
+/**
+********************************************************************************
+ Plugin API methods. Source located in CGpsApi.cpp
+*********************************************************************************
+*/
+
+/**
+ * Create a plugin.
+ */
+
+NPError GpsNewp( NPMIMEType pluginType, NPP instance, uint16 mode,
+ CDesCArray* argn, CDesCArray* argv, NPSavedData* saved );
+
+/**
+ * Wrapper the errors
+ */
+void GpsConstructL( NPP aInstance, CDesCArray* argn, CDesCArray* argv );
+
+/**
+ * Destroy a plugin.
+ */
+NPError GpsDestroy( NPP instance, NPSavedData** save );
+
+/**
+ * Generic hook to retrieve values/attributes from the plugin.
+ */
+NPError GpsGetvalue( NPP instance, NPPVariable variable, void *ret_value );
+
+/**
+ * This is the parent window of a plugin.
+ */
+NPError GpsSetwindow(NPP instance, NPWindow* window);
+
+/**
+********************************************************************************
+ Gps Plugin API methods. Source located in CGpsApi.cpp
+*********************************************************************************
+*/
+typedef struct
+ {
+ NPObject object;
+ CGpsPlugin *plugin;
+ } GpsPluginObject;
+
+/**
+ * GpsPluginAllocate
+ */
+NPObject* GpsPluginAllocate( NPP /*npp*/, NPClass* /*aClass*/ );
+
+/**
+ * GpsPluginDeallocate
+ */
+void GpsPluginDeallocate( GpsPluginObject* obj );
+
+/**
+ * GpsPluginInvalidate
+ */
+void GpsPluginInvalidate( NPObject* /*obj*/ );
+
+/**
+ * GpsPluginHasMethod
+ */
+bool GpsPluginHasMethod( GpsPluginObject* obj,
+ NPIdentifier name );
+
+/**
+ * GpsPluginInvoke
+ */
+bool GpsPluginInvoke( GpsPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* args,
+ uint32_t argCount,
+ NPVariant* result );
+
+/**
+ * GpsPluginHasProperty
+ */
+bool GpsPluginHasProperty( GpsPluginObject* obj,
+ NPIdentifier name );
+
+/**
+ * GpsPluginGetProperty
+ */
+bool GpsPluginGetProperty( GpsPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* variant );
+
+/**
+ * GpsPluginSetProperty
+ */
+bool GpsPluginSetProperty( GpsPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* variant );
+
+/**
+ * _GpsPluginClass
+ */
+static NPClass _GpsPluginClass =
+ {
+ 0, // structVersion
+ (NPAllocateFunctionPtr) GpsPluginAllocate,
+ (NPDeallocateFunctionPtr) GpsPluginDeallocate,
+ (NPInvalidateFunctionPtr) GpsPluginInvalidate,
+ (NPHasMethodFunctionPtr) GpsPluginHasMethod,
+ (NPInvokeFunctionPtr) GpsPluginInvoke,
+ (NPInvokeDefaultFunctionPtr) 0,
+ (NPHasPropertyFunctionPtr) GpsPluginHasProperty,
+ (NPGetPropertyFunctionPtr) GpsPluginGetProperty,
+ (NPSetPropertyFunctionPtr) GpsPluginSetProperty,
+ (NPRemovePropertyFunctionPtr) 0,
+ (NPEnumerationFunctionPtr) 0
+ };
+
+/**
+ * static instance of the function pointer table
+ */
+static NPClass* GpsPluginClass = &_GpsPluginClass;
+
+#endif // GPSPLUGIN_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/rom/BrowserGpsPlugin.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The iby file contains all data that must be included in image for
+* BrowserGpsPlugin
+*
+*/
+
+
+#ifndef BROWSERGPSPLUGIN_IBY
+#define BROWSERGPSPLUGIN_IBY
+
+#ifdef __WEB_WIDGETS
+
+
+#endif //__WEB_WIDGETS
+
+#endif // BROWSERGPSPLUGIN_IBY
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/src/GpsApi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: API functions that were loaded into TLS for the Browser to use.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <npupp.h>
+#include <npscript.h>
+#include "GpsPlugin.h"
+
+// CONSTANTS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// GpsNewp
+// Create a new instance of a plugin. This is non-leaving method.
+// Returns: NPError: Error codes recognized by Browser
+// ----------------------------------------------------------------------------
+NPError GpsNewp( NPMIMEType /*pluginType*/, // Not used locally
+ NPP aInstance, // Stores pointer to Gps
+ uint16 /*mode*/, //
+ CDesCArray* argn, // The number of arguments passed
+ CDesCArray* argv, // The values of arguments in the array
+ NPSavedData* /*saved*/ ) //
+ {
+ // Create GpsPlugin, call this leaving method to wrap leaving methods
+ TRAPD( err, GpsConstructL( aInstance, argn, argv ) );
+ if ( err == KErrNoMemory )
+ {
+ return NPERR_OUT_OF_MEMORY_ERROR;
+ }
+
+ if ( err != KErrNone )
+ {
+ return NPERR_MODULE_LOAD_FAILED_ERROR;
+ }
+
+ return NPERR_NO_ERROR;
+ }
+
+// ----------------------------------------------------------------------------
+// GpsConstructL
+// This is the leaving method to create the plugin. We have leaving setters
+// that need to be wrapped.
+// Returns: void
+// ----------------------------------------------------------------------------
+void GpsConstructL( NPP aInstance, // Stores pointer to Gps
+ CDesCArray* /*argn*/, // The number of arguments passed
+ CDesCArray* /*argv*/ ) // The values of arguments in the array
+ {
+ aInstance->pdata = CGpsPlugin::NewL();
+ }
+
+// ----------------------------------------------------------------------------
+// GpsDestroy(NPP aInstance, NPSavedData**)
+// Called by Browser to destroy the plugin
+// Returns: NPError: Error Code
+// ----------------------------------------------------------------------------
+NPError GpsDestroy( NPP aInstance, // Link to Browser
+ NPSavedData** /*save*/ ) // Not used locally
+ {
+ CGpsPlugin *pluginInstance = STATIC_CAST( CGpsPlugin*, aInstance->pdata );
+ delete pluginInstance;
+ return NPERR_NO_ERROR;
+ }
+
+
+// ----------------------------------------------------------------------------
+// GpsGetvalue
+// ----------------------------------------------------------------------------
+//
+NPError GpsGetvalue( NPP instance,
+ NPPVariable variable,
+ void* ret_value)
+ {
+ if (variable==NPPVpluginScriptableNPObject)
+ {
+ CGpsPlugin *siplugin = (CGpsPlugin*)instance->pdata;
+ GpsPluginObject *pluginObject
+ = (GpsPluginObject *)NPN_CreateObject (instance, GpsPluginClass);
+ pluginObject->plugin = siplugin;
+ siplugin->SetInstance(instance);
+ void** ret = (void**)ret_value;
+ *ret = (void*)pluginObject;
+ }
+ return NPERR_NO_ERROR;
+ }
+
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// GpsPluginAllocate
+// ----------------------------------------------------------------------------
+//
+NPObject* GpsPluginAllocate( NPP /*npp*/, NPClass* /*aClass*/ )
+ {
+ GpsPluginObject* newInstance
+ = (GpsPluginObject*)User::Alloc( sizeof(GpsPluginObject) );
+ return (NPObject*)newInstance;
+ }
+
+// ----------------------------------------------------------------------------
+// GpsPluginDeallocate
+// ----------------------------------------------------------------------------
+//
+void GpsPluginDeallocate( GpsPluginObject* obj )
+ {
+ obj->plugin->Deallocate();
+ User::Free( (void*)obj );
+ }
+
+// ----------------------------------------------------------------------------
+// GpsPluginInvalidate
+// ----------------------------------------------------------------------------
+//
+void GpsPluginInvalidate( NPObject* /*obj*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// GpsPluginHasMethod
+// ----------------------------------------------------------------------------
+//
+bool GpsPluginHasMethod( GpsPluginObject* obj,
+ NPIdentifier name )
+ {
+ return obj->plugin->HasMethod( name );
+ }
+
+//-----------------------------------------------------------------------------
+// GpsPluginInvoke
+//-----------------------------------------------------------------------------
+//
+bool GpsPluginInvoke( GpsPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* args,
+ uint32_t argCount,
+ NPVariant *result )
+ {
+ return obj->plugin->Invoke( name, args, argCount, result );
+ }
+
+// ----------------------------------------------------------------------------
+// GpsPluginHasProperty
+// ----------------------------------------------------------------------------
+//
+bool GpsPluginHasProperty( GpsPluginObject* obj,
+ NPIdentifier name )
+ {
+ return obj->plugin->HasProperty( name );
+ }
+
+// ----------------------------------------------------------------------------
+// GpsPluginGetProperty
+// ----------------------------------------------------------------------------
+//
+bool GpsPluginGetProperty( GpsPluginObject* obj,
+ NPIdentifier name,
+ NPVariant *variant )
+ {
+ return obj->plugin->GetProperty( name, variant );
+ }
+
+// ----------------------------------------------------------------------------
+// GpsPluginSetProperty
+// ----------------------------------------------------------------------------
+//
+bool GpsPluginSetProperty( GpsPluginObject* obj,
+ NPIdentifier name,
+ NPVariant *variant )
+ {
+ TBool r = EFalse;
+ TRAPD( error, r = obj->plugin->SetPropertyL( name, variant ) );
+ return (r || error)? true : false;
+ }
+
+// ----------------------------------------------------------------------------
+// BapSetwindow
+// This is the parent window of plugin
+// Returns: NPError: Error Code
+// ----------------------------------------------------------------------------
+//
+NPError GpsSetwindow(
+ NPP /*aInstance*/, // Link to Browser
+ NPWindow* /*aWindow*/ ) // Browser's window passed to BAP
+ {
+ return NPERR_NO_ERROR;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/src/GpsObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <e32cmn.h>
+#include "GpsObserver.h"
+#include "GpsPlugin.h"
+
+// for debug #define BROWSER_GPS_PLUGIN_LOG
+
+#ifdef BROWSER_GPS_PLUGIN_LOG
+
+#include <flogger.h>
+
+// output goes in c:\Logs\gps (create this dir manually if it doesn't exist)
+
+_LIT(LOG_DIR, "gps");
+_LIT(LOG_NAME, "gps.log");
+
+TBuf16<256> formatBuf;
+_LIT16(formatInt,"[%d]");
+
+#define LOG_E \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("E")); \
+ formatBuf.Format(formatInt, e); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf)
+#define LOG_CONNECT \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("RPositionerServer.Connect"))
+#define LOG_NUMMODULES \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("NUMMODULES")); \
+ formatBuf.Format(formatInt, numberOfModules); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf)
+#define LOG_MODULE \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("MODULE")); \
+ formatBuf.Format(formatInt, i); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf)
+#define LOG_SATMODULE \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("SATELLITE MODULE")); \
+ formatBuf.Format(formatInt, i); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf)
+#define LOG_OPEN \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("RPositioner.Open"))
+#define LOG_OPTIONS \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("RPositioner.SetUpdateOptions"))
+#define LOG_REQUESTOR \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("RPositioner.SetRequestor"))
+#define LOG_REQUESTFIELD \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("HPositionGenericInfo.SetRequestedField"))
+#define LOG_POSITIONUPDATE \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("RPositioner.NotifyPositionUpdate"))
+#define LOG_RESPONSE \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("response"))
+#define LOG_GETPOSITION \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, _L("HPositionGenericInfo.GetPosition"))
+#define LOG_LATLNGALT \
+ int lat = iPosition.Latitude(); \
+ int lon = iPosition.Longitude(); \
+ int alt = iPosition.Altitude(); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf); \
+ formatBuf.Format(formatInt, lat); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf); \
+ formatBuf.Format(formatInt, lon); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf); \
+ formatBuf.Format(formatInt, alt); \
+ RFileLogger::Write(LOG_DIR, LOG_NAME, EFileLoggingModeAppend, formatBuf)
+
+
+#else
+
+#define LOG_E
+#define LOG_CONNECT
+#define LOG_NUMMODULES
+#define LOG_MODULE
+#define LOG_SATMODULE
+#define LOG_OPEN
+#define LOG_OPTIONS
+#define LOG_REQUESTOR
+#define LOG_REQUESTFIELD
+#define LOG_POSITIONUPDATE
+#define LOG_RESPONSE
+#define LOG_GETPOSITION
+#define LOG_LATLNGALT
+
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::NewL
+// Symbian 2-phase constructor.
+// -----------------------------------------------------------------------------
+CGpsObserver* CGpsObserver::NewL( CGpsPlugin* aPlugin )
+ {
+ CGpsObserver* self = new (ELeave) CGpsObserver( aPlugin );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::CGpsObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CGpsObserver::CGpsObserver( CGpsPlugin* aPlugin )
+ : CActive( EPriorityStandard ),
+ iGpsPlugin( aPlugin )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::ConstructL
+// 2nd-phase constructor.
+// -----------------------------------------------------------------------------
+void CGpsObserver::ConstructL()
+ {
+ TInt e; // for error codes
+
+ // 1. connect to the position server
+ e = iServer.Connect();
+ LOG_E;
+ LOG_CONNECT;
+ User::LeaveIfError( e );
+
+ // 2. find the satellite module (see the BLID application source
+ // code CSattelliteEng.cpp)
+ TUint numberOfModules = 0;
+ e = iServer.GetNumModules( numberOfModules );
+ LOG_E;
+ LOG_NUMMODULES;
+ User::LeaveIfError( e );
+
+ TPositionModuleInfo moduleInfo;
+ TInt i;
+ for ( i = 0; i < numberOfModules ; i++ )
+ {
+ LOG_MODULE;
+ e = iServer.GetModuleInfoByIndex( i, moduleInfo );
+ LOG_E;
+ if ( ( e == KErrNone ) &&
+ ( moduleInfo.Capabilities()
+ & TPositionModuleInfo::ECapabilitySatellite ) ) /* bit test */
+ {
+ break;
+ }
+ }
+
+ if ( i == numberOfModules )
+ {
+ // leave if no GPS
+ User::Leave( KErrNotFound );
+ }
+
+ // 3. open the positioner with the satellite module
+ LOG_SATMODULE;
+ TPositionModuleId moduleId = moduleInfo.ModuleId();
+ e = iPositioner.Open( iServer, moduleId );
+ LOG_E;
+ User::LeaveIfError( e );
+ LOG_OPEN;
+
+ // 4. set the requestor on the positioner (something for security)
+ iPositioner.SetRequestor( CRequestor::ERequestorService,
+ CRequestor::EFormatApplication,
+ _L("BrowserGpsPlugin")/**srvName*/ );
+ LOG_REQUESTOR;
+
+ // 5. request position notification
+ iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
+ SetActive();
+ LOG_POSITIONUPDATE;
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::~CGpsObserver()
+// Destructor
+// -----------------------------------------------------------------------------
+CGpsObserver::~CGpsObserver()
+ {
+ Cancel();
+ iPositioner.Close();
+ iServer.Close();
+
+ delete iEventHandler;
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBatteryObserver::RequestNotification
+// -----------------------------------------------------------------------------
+void CGpsObserver::RequestNotificationL( const NPString& aEvent )
+ {
+ // remove and free current handler
+ HBufC8* handler = iEventHandler;
+ iEventHandler = NULL;
+ delete handler;
+
+ //store the event handler function name
+ TInt length = aEvent.UTF8Length;
+ handler = HBufC8::NewL( length+1 );
+
+ TPtr8 tptr = handler->Des();
+ tptr.Copy( (const TUint8 *)aEvent.UTF8Characters, length );
+
+ //Remove any arguments passed in the with the function name
+ TInt pos = handler->LocateReverse( TChar('(') );
+ if ( pos != KErrNotFound )
+ {
+ length = pos;
+ }
+
+ tptr.SetLength( length );
+ tptr.ZeroTerminate();
+
+ iEventHandler = handler;
+
+ // monitoring is already active
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBatteryObserver::RunL
+// -----------------------------------------------------------------------------
+void CGpsObserver::RunL()
+ {
+ // if status ok and exists, update values and invoke callback
+ if ( iStatus == KErrNone )
+ {
+ // update saved values
+ iPositionInfo.GetPosition( iPosition );
+ LOG_GETPOSITION;
+ LOG_LATLNGALT;
+
+ iTickCount++;
+ if ( iEventHandler )
+ {
+ iGpsPlugin->InvokeCallback( *iEventHandler, NULL, 0 );
+ }
+ }
+
+ // request next update
+ iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::RunError
+// -----------------------------------------------------------------------------
+TInt CGpsObserver::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::DoCancel
+// -----------------------------------------------------------------------------
+void CGpsObserver::DoCancel()
+ {
+ iPositioner.CancelRequest( EPositionerNotifyPositionUpdate );
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::Latitude
+// -----------------------------------------------------------------------------
+TReal CGpsObserver::Latitude() const
+ {
+ return iPosition.Latitude();
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::Longitude
+// -----------------------------------------------------------------------------
+TReal CGpsObserver::Longitude() const
+ {
+ return iPosition.Longitude();
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::Altitude
+// -----------------------------------------------------------------------------
+TReal CGpsObserver::Altitude() const
+ {
+ return iPosition.Altitude();
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::HorizontalAccuracy
+// -----------------------------------------------------------------------------
+TReal CGpsObserver::HorizontalAccuracy() const
+ {
+ return iPosition.HorizontalAccuracy();
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::VerticalAccuracy
+// -----------------------------------------------------------------------------
+TReal CGpsObserver::VerticalAccuracy() const
+ {
+ return iPosition.VerticalAccuracy();
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsObserver::TIckCount
+// -----------------------------------------------------------------------------
+TInt CGpsObserver::TickCount() const
+ {
+ return iTickCount;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/src/GpsPlugin.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser for handling embedded Gps requests.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <npupp.h>
+#include <E32HAL.H>
+#include "GpsPlugin.h"
+#include "GpsObserver.h"
+#include <CSatelliteInfoUI.h>
+
+
+// CONSTANTS
+
+enum TIdentifiersNames {
+ EIdLatitude,
+ EIdLongitude,
+ EIdAlt,
+ EIdHorizontalAccuracy,
+ EIdVerticalAccuracy,
+ EIdOnGps,
+ EIdSatelliteStatus,
+ EIdTickCount,
+ EIdLast
+ };
+
+const NPUTF8 *GpsPluginIdentifierNames[EIdLast]
+= { "latitude", // 0
+ "longitude", // 1
+ "altitude", // 2
+ "horizontalaccuracy", // 3
+ "verticalaccuracy", // 4
+ "ongps", // 5
+ "showsatellitestatus", // 6
+ "tickcount", // 7
+ };
+
+const TBool IsMethod[] = {
+ EFalse, // latitude,
+ EFalse, // longitude,
+ EFalse, // altitude
+ EFalse, // horizontalaccuracy
+ EFalse, // verticalaccuracy
+ EFalse, // ongps
+ ETrue, // showSatelliteStatus
+ EFalse, // tickcount
+ };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::CGpsPlugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CGpsPlugin::CGpsPlugin()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CGpsPlugin* CGpsPlugin::NewL()
+ {
+ CGpsPlugin* self = new (ELeave) CGpsPlugin;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+void CGpsPlugin::ConstructL()
+ {
+ iGpsPluginIdentifiers = new (ELeave) NPIdentifier[EIdLast];
+ NPN_GetStringIdentifiers( GpsPluginIdentifierNames, EIdLast,
+ iGpsPluginIdentifiers );
+
+ iGpsObserver = CGpsObserver::NewL( this );
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::Destructor
+// ----------------------------------------------------------------------------
+CGpsPlugin::~CGpsPlugin()
+ {
+ delete [] iGpsPluginIdentifiers;
+ delete iGpsObserver;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::Deallocate
+// ----------------------------------------------------------------------------
+void CGpsPlugin::Deallocate ()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::InvokeCallback
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::InvokeCallback( TDesC8& name,
+ const NPVariant *args, uint32_t argCount )
+ {
+ CGpsPluginEcomMain* lGpsPPluginEcomMain = (CGpsPluginEcomMain*) Dll::Tls();
+ NPNetscapeFuncs* lNetscapeFuncs = lGpsPPluginEcomMain->Funcs();
+ if (lNetscapeFuncs && iInstanceHandle)
+ {
+ void* value = 0;
+ NPError npErr
+ = lNetscapeFuncs->getvalue( iInstanceHandle, NPNVWindowNPObject,
+ (void*)&value );
+ if (npErr == NPERR_NO_ERROR)
+ {
+ NPVariant resultVariant;
+ VOID_TO_NPVARIANT( resultVariant );
+ NPIdentifier ident
+ = NPN_GetStringIdentifier( (const NPUTF8 *)(name.Ptr()) );
+ return NPN_Invoke( iInstanceHandle, (NPObject*)value,
+ ident, args, argCount, &resultVariant );
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CWidgetManagerPlugin::HasMethod
+// ----------------------------------------------------------------------------
+
+bool CGpsPlugin::HasMethod( NPIdentifier name )
+ {
+ for ( TInt i= 0; i < EIdLast; i++ )
+ {
+ if ( name == iGpsPluginIdentifiers[i] )
+ {
+ return IsMethod[i];
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::HasProperty
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::HasProperty( NPIdentifier name )
+ {
+ for ( TInt i= 0; i < EIdLast; i++ )
+ {
+ if ( name == iGpsPluginIdentifiers[i] )
+ {
+ return !IsMethod[i];
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::GetProperty
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::GetProperty( NPIdentifier name, NPVariant *variant )
+ {
+ // default variant value maps to javascript undefined
+ VOID_TO_NPVARIANT( *variant );
+ if ( name == iGpsPluginIdentifiers[EIdLatitude] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->Latitude(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdLongitude] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->Longitude(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdAlt] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->Altitude(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdHorizontalAccuracy] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->HorizontalAccuracy(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdVerticalAccuracy] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->VerticalAccuracy(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdTickCount] )
+ {
+ INT32_TO_NPVARIANT( iGpsObserver->TickCount(), *variant );
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::Invoke
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::Invoke( NPIdentifier name,
+ NPVariant* /*args*/,
+ uint32_t /*argCount*/,
+ NPVariant *result )
+ {
+ VOID_TO_NPVARIANT( *result );
+ if ( name == iGpsPluginIdentifiers[EIdSatelliteStatus] )
+ {
+ TRAP_IGNORE(
+ CSatelliteInfoUI* satelliteUI = CSatelliteInfoUI::NewL();
+ (void) satelliteUI->ExecuteLD( _L("BrowserGpsPlugin") ) );
+ }
+ return true;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::SetPropertyL
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::SetPropertyL( NPIdentifier name, NPVariant *variant )
+ {
+ if ( name == iGpsPluginIdentifiers[EIdOnGps] )
+ {
+ NPString str = NPVARIANT_TO_STRING( *variant );
+ iGpsObserver->RequestNotificationL(str);
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CBAPPlugin::SetWindowL
+// Called by Browser for window creation.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+void CGpsPlugin::SetWindowL(
+ MPluginAdapter* /*aPluginAdapter*/, // Allows callback to Browser
+ const TRect& /*aRect*/) // Window information
+ {
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/src/GpsPluginEcomMain.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "GpsPlugin.h"
+#include <ecom/implementationproxy.h>
+#include <cecombrowserplugininterface.h>
+
+
+/*********************************************************/
+/******** ECOM STYLE GPS PLUGIN ENTRY POINTS ********/
+/*********************************************************/
+
+// -----------------------------------------------------------------------------
+// CGpsPluginEcomMain::NewL
+// -----------------------------------------------------------------------------
+CGpsPluginEcomMain* CGpsPluginEcomMain::NewL( TAny* aInitParam )
+ {
+ TFuncs* funcs = REINTERPRET_CAST( TFuncs*, aInitParam );
+ CGpsPluginEcomMain* self = new (ELeave) CGpsPluginEcomMain( funcs->iNetscapeFuncs );
+ CleanupStack::PushL( self );
+ self->ConstructL( funcs->iPluginFuncs );
+ CleanupStack::Pop( self );
+ Dll::SetTls ( (void*)self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsPluginEcomMain::ConstructL
+// -----------------------------------------------------------------------------
+void CGpsPluginEcomMain::ConstructL( NPPluginFuncs* aPluginFuncs )
+ {
+ InitializeFuncs( aPluginFuncs );
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsPluginEcomMain::CGpsPluginEcomMain
+// -----------------------------------------------------------------------------
+CGpsPluginEcomMain::CGpsPluginEcomMain( NPNetscapeFuncs* aNpf )
+ : CEcomBrowserPluginInterface(),
+ iNpf( aNpf )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGpsPluginEcomMain::~CGpsPluginEcomMain
+// -----------------------------------------------------------------------------
+CGpsPluginEcomMain::~CGpsPluginEcomMain()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// KImplementationTable
+// -----------------------------------------------------------------------------
+const TImplementationProxy KImplementationTable[] =
+ {
+ {{KFirstGpsImplementationValue}, (TProxyNewLPtr)CGpsPluginEcomMain::NewL}
+ };
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Returns the filters implemented in this DLL
+// Returns: The filters implemented in this DLL
+// -----------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+ return KImplementationTable;
+ }
+
+// -----------------------------------------------------------------------------
+// InitializeFuncs
+// -----------------------------------------------------------------------------
+EXPORT_C NPError InitializeFuncs( NPPluginFuncs* aPpf )
+ {
+ aPpf->size = sizeof(NPPluginFuncs);
+ aPpf->version = 1;
+ aPpf->newp = NewNPP_NewProc(GpsNewp);
+ aPpf->destroy = NewNPP_DestroyProc(GpsDestroy);
+ aPpf->setwindow = NewNPP_SetWindowProc(GpsSetwindow);
+ aPpf->newstream = 0;
+ aPpf->destroystream = 0;
+ aPpf->asfile = 0;
+ aPpf->writeready = 0;
+ aPpf->write = 0;
+ aPpf->print = 0;
+ aPpf->event = 0;
+ aPpf->urlnotify = 0;
+ aPpf->javaClass = 0;
+ aPpf->getvalue = NewNPP_GetValueProc(GpsGetvalue);
+ aPpf->setvalue = 0;
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// NPP_Shutdown
+// -----------------------------------------------------------------------------
+EXPORT_C void NPP_Shutdown(void)
+ {
+ CGpsPluginEcomMain* npm = (CGpsPluginEcomMain*)Dll::Tls();
+ delete npm;
+ Dll::SetTls( NULL );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/BWINS/npSystemInfoPlugin.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+ ?InitializeFuncs@@YAFPAU_NPPluginFuncs@@@Z @ 2 NONAME ; short InitializeFuncs(struct _NPPluginFuncs *)
+ ?NPP_Shutdown@@YAXXZ @ 3 NONAME ; void NPP_Shutdown(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/EABI/npSystemInfoPlugin.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+ _Z12NPP_Shutdownv @ 2 NONAME
+ _Z15InitializeFuncsP14_NPPluginFuncs @ 3 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/data/10282853.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Registry file for Ecom style Browser System Information Plugin.
+*
+*/
+
+#include <ecom/registryinfo.rh>
+#include "SystemInfoPlugin.rls"
+
+// RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+// Registry info
+// The UIDs for the filters implemented in this DLL
+// -----------------------------------------------------------------------------
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = 0x10282853; // should match the name of the file.
+ // 3rd Uid of associated plugin dll (declared in the dll mmp file)
+ interfaces=
+ {
+ INTERFACE_INFO
+ {
+ // Identifies plugin type (used by ECom)
+ interface_uid = 0x101F8810;
+
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ // Specific implementation (must match an implementation entry in the dll)
+ implementation_uid = 0x10282854;
+ version_no = 2;
+ // File name;Plugin's name
+ display_name = STRING_r_browser_system_info_plugin;
+ // Mimetypes and mime extensions
+ default_data = STRING_r_mime_system_info;
+ // Plugin's description
+ opaque_data = STRING_r_browser_system_info_desc;
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/data/SystemInfoPlugin.rls Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the strings for resources
+*
+*/
+
+
+rls_string STRING_r_browser_system_info_plugin "npSystemInfoPlugin.dll;Browser System Info Plugin"
+rls_string STRING_r_browser_system_info_desc "System Information Plugin for S60 Browser"
+rls_string STRING_r_mime_system_info "application/x-systeminfo-widget"
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/group/BLD.INF Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project build file for BrowserSystemPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/BrowserSystemInfoPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserSystemInfoPlugin.iby)
+
+PRJ_MMPFILES
+SystemInfoPluginEcom.mmp // Plugin mmp file
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/group/SystemInfoPluginEcom.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is the .mmp for building Ecom style Browser System Info Plugin
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET npSystemInfoPlugin.dll
+TARGETTYPE PLUGIN
+
+UID 0x10009D8D 0x10282853
+
+EPOCALLOWDLLDATA
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../data
+
+START RESOURCE 10282853.rss
+TARGET npSystemInfoPlugin.rsc
+END
+
+APP_LAYER_SYSTEMINCLUDE
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+
+USERINCLUDE ../inc
+SOURCEPATH ../src
+
+SOURCE SystemInfoApi.cpp
+SOURCE SystemInfoMain.cpp
+SOURCE SystemInfoPlugin.cpp
+SOURCE SystemInfoObserver.cpp
+SOURCE NetworkObserver.cpp
+SOURCE PowerObserver.cpp
+SOURCE SystemInfoMisc.cpp
+SOURCE SystemInfoBeep.cpp
+
+LIBRARY estlib.lib // libc
+LIBRARY euser.lib
+LIBRARY ecom.lib
+
+#ifdef __S60_32__
+LIBRARY JavaScriptCore.lib
+#else
+LIBRARY npscript.lib
+#endif
+
+LIBRARY cone.lib // CoeControl
+LIBRARY efsrv.lib
+LIBRARY charconv.lib
+LIBRARY HWRMVibraClient.lib
+LIBRARY HWRMLightClient.lib
+LIBRARY ProfileEng.lib
+LIBRARY MediaClientAudio.lib // CMdaAudioToneUtility
+LIBRARY etel3rdparty.lib
+LIBRARY hal.lib
+LIBRARY WidgetRegistryClient.lib // for language code
+
+DEFFILE npSystemInfoPlugin.def
+NOSTRICTDEF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/inc/NetworkObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef NETWORKOBSERVER_H
+#define NETWORKOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <etel3rdparty.h>
+#include <npscript.h>
+#include "SystemInfoObserver.h"
+
+// FORWARD DECLARATIONS
+class CSystemInfoPlugin;
+
+// CONSTANTS
+
+// State enum and member variable
+
+// CLASS DECLARATIONS
+/**
+* CNetworkObserver.
+* Interface to information about the radio network connection.
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CNetworkObserver) : public CBase, public MSystemInfoObserverClient
+ {
+public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CNetworkObserver* NewL( CSystemInfoPlugin* aPlugin );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CNetworkObserver();
+
+public:
+ enum TIdNetworkItem
+ {
+ EIdSignalStrength,
+ EIdRegistrationStatus,
+ EIdNetworkInfo
+ };
+
+ /**
+ * Request network values change notification.
+ * @since 3.2
+ * @param name of the callback, transfer ownership
+ * @return void
+ */
+ void RequestNotificationL( TIdNetworkItem aId, HBufC8* aFunctionName );
+
+public:
+
+ /**
+ * Called to get current network signal bars.
+ * @since 3.2
+ * @param void
+ * @return signal bars
+ */
+ TInt SignalBars() const;
+
+ /**
+ * Called to get current network registration status.
+ * @since 3.2
+ * @param void
+ * @return network registration status
+ */
+ TInt RegistrationStatus() const;
+
+ /**
+ * Called to get current network name
+ * @since 3.2
+ * @param void
+ * @return network name
+ */
+ const TDesC& NetworkName() const;
+
+public:
+ // from MSystemInfoObserverClient
+ virtual void SubscribeL( TInt aId, TRequestStatus& aStatus );
+ virtual void UpdateL( TInt aId );
+ virtual void Cancel( TInt aId );
+ virtual void Close( TInt aId );
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CNetworkObserver( CSystemInfoPlugin* aPlugin );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL();
+
+protected:
+ CSystemInfoPlugin* iSystemInfoPlugin; // not owned
+ CTelephony* iTelephony; // owned
+ CTelephony* iTelephony2; // owned
+ CTelephony* iTelephony3; // owned
+
+ // signal
+ CTelephony::TSignalStrengthV1Pckg iSignalPckg;
+ CTelephony::TSignalStrengthV1 iSignal;
+ CSystemInfoObserver* iSignalObserver; // owned
+ TInt iSignalStarted;
+
+ // registration status
+ CTelephony::TNetworkRegistrationV1Pckg iRegistrationStatusPckg;
+ CTelephony::TNetworkRegistrationV1 iRegistrationStatus;
+ CSystemInfoObserver* iRegistrationStatusObserver; // owned
+ HBufC8* iRegistrationStatusChangedFunction; // owned
+ TInt iRegistrationStatusStarted;
+
+ // network info (includes name)
+ CTelephony::TNetworkInfoV2Pckg iNetworkInfoPckg;
+ CTelephony::TNetworkInfoV2 iNetworkInfo;
+ CSystemInfoObserver* iNetworkInfoObserver; // owned
+ TInt iNetworkInfoStarted;
+ };
+
+#endif // NETWORKOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/inc/PowerObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef POWEROBSERVER_H
+#define POWEROBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <etel3rdparty.h>
+#include <npscript.h>
+#include "SystemInfoObserver.h"
+
+// FORWARD DECLARATIONS
+class CSystemInfoPlugin;
+
+// CONSTANTS
+
+// State enum and member variable
+
+// CLASS DECLARATIONS
+/**
+* CPowerObserver.
+* Interface to information about power and battery.
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CPowerObserver) : public CBase, public MSystemInfoObserverClient
+ {
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CPowerObserver* NewL( CSystemInfoPlugin* aPlugin );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPowerObserver();
+
+public:
+ enum TIdPowerItem
+ {
+ EIdBatteryInfo,
+ EIdIndicator // charger connected indicator
+ };
+
+ /**
+ * Request power values change notification.
+ * @since 3.2
+ * @param name of the callback
+ * @return void
+ */
+ void RequestNotificationL( TIdPowerItem aId, HBufC8* aFunctionName );
+
+public:
+ /**
+ * Called to get battery charge level.
+ * @since 3.2
+ * @param void
+ * @return charge level
+ */
+ TInt ChargeLevel() const;
+
+ /**
+ * Called to get charger connected flag.
+ * @since 3.2
+ * @param void
+ * @return 1 if charger connected, 0 if not connected
+ */
+ TInt ChargerConnected() const;
+
+public:
+ // from MSystemInfoObserverClient
+ virtual void SubscribeL( TInt aId, TRequestStatus& aStatus );
+ virtual void UpdateL( TInt aId );
+ virtual void Cancel( TInt aId );
+ virtual void Close( TInt aId );
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CPowerObserver( CSystemInfoPlugin* aPlugin );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL();
+
+public:
+ CSystemInfoPlugin* iSystemInfoPlugin;
+ CTelephony* iTelephony; // owned
+ CTelephony* iTelephony2; // owned
+
+ // battery
+ CTelephony::TBatteryInfoV1Pckg iBatteryInfoPckg;
+ CTelephony::TBatteryInfoV1 iBatteryInfo;
+ CSystemInfoObserver* iBatteryInfoObserver; // owned
+ HBufC8* iBatteryInfoChangedFunction;
+ TInt iBatteryInfoStarted;
+
+ // charger
+ CTelephony::TIndicatorV1Pckg iIndicatorPckg;
+ CTelephony::TIndicatorV1 iIndicator;
+ CSystemInfoObserver* iIndicatorObserver; // owned
+ HBufC8* iIndicatorChangedFunction;
+ TInt iIndicatorStarted;
+ };
+
+#endif // POWEROBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/inc/SystemInfoBeep.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef SYSTEMINFOBEEP_H
+#define SYSTEMINFOBEEP_H
+
+// INCLUDES
+#include <MdaAudioTonePlayer.h>
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+* CSystemInfoBeep.
+* Interface to information about the radio network connection.
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CSystemInfoBeep) : public CBase, public MMdaAudioToneObserver
+ {
+public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CSystemInfoBeep* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSystemInfoBeep();
+
+public:
+ /**
+ * Play a pure tone.
+ * @since 3.2
+ * @param frequency of tone in Hertz
+ * @param duration of tone in microseconds
+ * @return void
+ */
+ void Play( TInt aFrequency, TTimeIntervalMicroSeconds iDuration);
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CSystemInfoBeep();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL();
+
+public:
+ // from MMdaAudioToneObserver
+ void MatoPrepareComplete(TInt aError);
+ void MatoPlayComplete(TInt aError);
+
+private:
+ typedef enum TBeepState
+ {
+ EBeepIdle,
+ EBeepPreparing,
+ EBeepPlaying
+ };
+
+private:
+
+ CMdaAudioToneUtility* iToneUtil; // owned
+ TBeepState iState;
+ };
+
+#endif // SYSTEMINFOBEEP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/inc/SystemInfoMisc.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef SYSTEMINFOMISC_H
+#define SYSTEMINFOMISC_H
+
+// INCLUDES
+#include <e32base.h>
+#include <npscript.h>
+#include <HWRMVibra.h>
+#include <widgetregistryclient.h>
+
+// FORWARD DECLARATIONS
+class CHWRMLight;
+class CHWRMVibra;
+class CSystemInfoBeep;
+
+// CONSTANTS
+
+// State enum and member variable
+
+// CLASS DECLARATIONS
+/**
+* CSystemInfoMisc.
+* Interface to various platform services not requiring observers.
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CSystemInfoMisc) : public CBase
+ {
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CSystemInfoMisc* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSystemInfoMisc();
+
+public:
+ /**
+ * Called to sound a tone.
+ * @since 3.2
+ * @param void
+ * @return charge level
+ */
+ void Beep( TInt aFrequency, TTimeIntervalMicroSeconds aDuration );
+
+
+ TInt VibraMinIntensity() const;
+
+ TInt VibraMaxIntensity() const;
+
+ TInt VibraMaxDuration() const;
+
+ TInt VibraSettings() const; // TBD rename VibraProfileEnabled a "boolean"
+
+ void StartVibra( TInt aDuration, TInt aIntensity );
+
+ void StopVibra();
+
+
+ TInt LightMinIntensity() const;
+
+ TInt LightMaxIntensity() const;
+
+ TInt LightDefaultIntensity() const;
+
+ TInt LightInfiniteDuration() const;
+
+ TInt LightMaxDuration() const;
+
+ TInt LightDefaultCycleTime() const;
+
+ TInt LightTargetPrimaryDisplayAndKeyboard() const;
+
+ TInt LightTargetSystem() const;
+
+ void LightOn( TInt aLightTarget, TInt aDuration, TInt aIntensity, TInt aFadeIn );
+
+ void LightBlink( TInt aLightTarget, TInt aDuration,
+ TInt aOnDuration, TInt aOffDuration, TInt aIntensity );
+
+ void LightOff( TInt aLightTarget, TInt aDuration, TInt aFadeOut );
+
+
+ TInt TotalRam();
+
+ TInt FreeRam();
+
+
+ void Language( TDes& aLangCode );
+
+
+ void DriveList( TDes8& aDriveList );
+
+ TReal DriveSize( TChar c );
+
+ TReal DriveFree( TChar c );
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CSystemInfoMisc();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL();
+
+ CHWRMLight* iLightControl;
+ CHWRMVibra* iVibraControl;
+ CSystemInfoBeep* iBeeper;
+ RWidgetRegistryClientSession iWidgetRegistryClient;
+ TBool iWidgetRegistryConnected; // connected to Widget Registry server ?
+ };
+
+#endif // SYSTEMINFOMISC_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/inc/SystemInfoObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef SYSTEMOBSERVER_H
+#define SYSTEMOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <npscript.h>
+
+// FORWARD DECLARATIONS
+
+// CONSTANTS
+
+// State enum and member variable
+
+// CLASS DECLARATIONS
+
+/**
+ * MSystemInfoObserverClient is an interface to whatever data is being
+ * observed (RProperty, int, string, etc).
+ * @lib npSystemInfoPlugin.lib
+ * @since S60 v3.2
+ */
+class MSystemInfoObserverClient
+ {
+public:
+ virtual void SubscribeL( TInt aId, TRequestStatus& aStatus ) = 0;
+ virtual void UpdateL( TInt aId ) = 0;
+ virtual void Cancel( TInt aId ) = 0;
+ virtual void Close( TInt aId ) = 0;
+/*
+ * Outline of use for a publish and subscribe variable
+ * #include <e32property.h>
+ * #include <hwrmpowerstatesdkpskeys.h>
+ * RProperty iProperty;
+ * iProperty.Attach( KPSUidHWRMPowerState, KHWRMBatteryLevel );
+ * SubscribeL => iProperty.Subscribe( status );
+ * UpdateL => iProperty.Get( value );
+ * Cancel => iProperty.Cancel();
+ * Close => iProperty.Close();
+ * The ID parameter is there so that a class can contain
+ * multiple observers and differentiate them in these methods by ID.
+ * You can also use it for state in a state machine.
+ */
+ };
+
+/**
+* CSystemInfoObserver.
+* Active class for monitoring variables.
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CSystemInfoObserver) : public CActive
+ {
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CSystemInfoObserver* NewL( MSystemInfoObserverClient* aClient, TInt aId );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSystemInfoObserver();
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CSystemInfoObserver( MSystemInfoObserverClient* aClient, TInt aId );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param none
+ * @return void
+ */
+ void ConstructL();
+
+public:
+ /**
+ * Request observed status change notification
+ * @since 3.2
+ * @param none
+ * @return void
+ */
+ void RequestNotificationL();
+
+protected: // CActive
+ /**
+ * Implements cancellation of an outstanding request.
+ * @param none
+ * @return void
+ */
+ void DoCancel();
+
+ /**
+ * Handles an active object’s request completion event.
+ * @param none
+ * @return void
+ */
+ void RunL();
+
+ /**
+ * Handles an active object’s error
+ * @param error
+ * @return void
+ */
+ TInt RunError(TInt aError);
+
+private:
+ MSystemInfoObserverClient* iClient;
+ TInt iId;
+ };
+
+#endif // SYSTEMOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/inc/SystemInfoPlugin.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef SYSTEMINFOPLUGIN_H
+#define SYSTEMINFOPLUGIN_H
+
+// INCLUDES
+#include <cecombrowserplugininterface.h>
+#include <npscript.h>
+
+
+// FORWARD DECLARATIONS
+class CPowerObserver;
+class CNetworkObserver;
+class CSystemInfoMisc;
+class MProfileEngine;
+
+// CLASS DECLARATION
+
+/******************************************
+This class is specific to ECom Style Plugin. This is used for passing
+plugin specific initialization information to and from browser.
+*******************************************/
+IMPORT_C NPError InitializeFuncs( NPPluginFuncs* aPpf );
+
+// CONSTANTS
+const TInt KFirstSystemInfoImplementationValue = 0x10282854;
+
+/**
+* CSystemInfoPluginEcomMain
+* Used for passing plugin specific initialization information to and from browser.
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CSystemInfoPluginEcomMain) : public CEcomBrowserPluginInterface
+ {
+ public: // Functions from base classes
+
+ /**
+ * Two-phased constructor.
+ */
+ static CSystemInfoPluginEcomMain* NewL( TAny* aInitParam );
+
+ /**
+ * Destructor
+ */
+ virtual ~CSystemInfoPluginEcomMain();
+
+ /**
+ * Passed from the browser to the plugin and delcares what
+ * functions the browser makes available
+ */
+ NPNetscapeFuncs* Funcs() const { return iNpf; }
+
+ private:
+
+ // Default constructor
+ CSystemInfoPluginEcomMain( NPNetscapeFuncs* aNpf );
+
+ // By default Symbian 2nd phase constructor is private.
+ void ConstructL( NPPluginFuncs* aPluginFuncs );
+
+ // Netscape Function Pointer
+ NPNetscapeFuncs* iNpf;
+ };
+
+/**
+* CSystemInfoPlugin class
+* Interfaces to Browser, used to pass information between browser and plugin
+* @lib npSystemInfoPlugin.lib
+* @since S60 v3.2
+*/
+NONSHARABLE_CLASS(CSystemInfoPlugin) : public CBase
+ {
+ public:
+ static CSystemInfoPlugin* NewL();
+
+ virtual ~CSystemInfoPlugin();
+
+ public:
+ void Deallocate ();
+ bool HasMethod( NPIdentifier name );
+ bool Invoke( NPIdentifier name,
+ NPVariant *args,
+ uint32_t argCount,
+ NPVariant *result );
+ bool HasProperty( NPIdentifier name );
+ bool GetProperty( NPIdentifier name, NPVariant *variant );
+ bool SetPropertyL( NPIdentifier name, NPVariant *variant );
+
+ public:
+ void SetInstance( NPP instance ) { iInstanceHandle = instance; }
+ bool InvokeCallback ( TDesC8& name, const NPVariant *args, uint32_t argCount );
+
+ private:
+ CSystemInfoPlugin();
+ void ConstructL();
+
+ void VariantToInt( NPVariant& v, TInt& i );
+ void DesToNpvariant(TPtr8& string, NPVariant*& variant);
+
+ private:
+ NPP iInstanceHandle;
+ NPIdentifier* iSystemInfoPluginIdentifiers;
+ TUid iUid;
+ MProfileEngine* iProfileEngine;
+
+ // sysinfo feature class instances
+ CPowerObserver* iPowerObserver; // owned
+ CNetworkObserver* iNetworkObserver; // owned
+ CSystemInfoMisc* iSystemInfoMisc; // owned
+ };
+
+/**
+********************************************************************************
+ Plugin API methods. Source located in CSystemInfoApi.cpp
+*********************************************************************************
+*/
+
+/**
+ * Create a plugin.
+ */
+
+NPError SystemInfoNewp( NPMIMEType pluginType, NPP instance, uint16 mode,
+ CDesCArray* argn, CDesCArray* argv, NPSavedData* saved );
+
+/**
+ * Wrapper the errors
+ */
+void SystemInfoConstructL( NPP aInstance, CDesCArray* argn, CDesCArray* argv );
+
+/**
+ * Destroy a plugin.
+ */
+NPError SystemInfoDestroy( NPP instance, NPSavedData** save );
+
+/**
+ * Generic hook to retrieve values/attributes from the plugin.
+ */
+NPError SystemInfoGetvalue( NPP instance, NPPVariable variable, void *ret_value );
+
+
+/**
+********************************************************************************
+ System Info Plugin API methods. Source located in CSystemInfoApi.cpp
+*********************************************************************************
+*/
+typedef struct
+ {
+ NPObject object;
+ CSystemInfoPlugin *plugin;
+ } SystemInfoPluginObject;
+
+/**
+ * systemInfoPluginAllocate
+ */
+NPObject* systemInfoPluginAllocate( NPP /*npp*/, NPClass* /*aClass*/ );
+
+/**
+ * systemInfoPluginDeallocate
+ */
+void systemInfoPluginDeallocate( SystemInfoPluginObject* obj );
+
+/**
+ * systemInfoPluginInvalidate
+ */
+void systemInfoPluginInvalidate( NPObject* /*obj*/ );
+
+/**
+ * systemInfoPluginHasMethod
+ */
+bool systemInfoPluginHasMethod( SystemInfoPluginObject* obj,
+ NPIdentifier name );
+
+/**
+ * systemInfoPluginInvokeFunction
+ */
+bool systemInfoPluginInvokeFunction( SystemInfoPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* args,
+ uint32_t argCount,
+ NPVariant* result );
+
+/**
+ * systemInfoPluginHasProperty
+ */
+bool systemInfoPluginHasProperty( SystemInfoPluginObject* obj,
+ NPIdentifier name );
+
+/**
+ * systemInfoPluginGetProperty
+ */
+bool systemInfoPluginGetProperty ( SystemInfoPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* variant);
+
+/**
+ * systemInfoPluginSetProperty
+ */
+bool systemInfoPluginSetProperty( SystemInfoPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* variant);
+
+/**
+ * _systemInfoPluginClass
+ */
+static NPClass _systemInfoPluginClass =
+ {
+ 0, // structVersion
+ (NPAllocateFunctionPtr) systemInfoPluginAllocate,
+ (NPDeallocateFunctionPtr) systemInfoPluginDeallocate,
+ (NPInvalidateFunctionPtr) systemInfoPluginInvalidate,
+ (NPHasMethodFunctionPtr) systemInfoPluginHasMethod,
+ (NPInvokeFunctionPtr) systemInfoPluginInvokeFunction,
+ (NPInvokeDefaultFunctionPtr) 0,
+ (NPHasPropertyFunctionPtr) systemInfoPluginHasProperty,
+ (NPGetPropertyFunctionPtr) systemInfoPluginGetProperty,
+ (NPSetPropertyFunctionPtr) systemInfoPluginSetProperty,
+ (NPRemovePropertyFunctionPtr) 0,
+ (NPEnumerationFunctionPtr) 0
+ };
+
+/**
+ * static instance of the function pointer table
+ */
+static NPClass* systemInfoPluginClass = &_systemInfoPluginClass;
+
+#endif // SYSTEMINFOPLUGIN_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/rom/BrowserSystemInfoPlugin.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The iby file contains all data that must be included in image for
+* BrowserSystemInfoPlugin
+*
+*/
+
+
+#ifndef BROWSERSYSTEMINFOPLUGIN_IBY
+#define BROWSERSYSTEMINFOPLUGIN_IBY
+
+#ifdef __WEB_WIDGETS
+
+ECOM_PLUGIN(npSystemInfoPlugin.dll, npSystemInfoPlugin.rsc)
+
+#endif //__WEB_WIDGETS
+
+#endif // BROWSERSYSTEMINFOPLUGIN_IBY
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/NetworkObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include <limits.h>
+#include "NetworkObserver.h"
+#include "SystemInfoPlugin.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CNetworkObserver* CNetworkObserver::NewL( CSystemInfoPlugin* aPlugin )
+ {
+ CNetworkObserver* self = new (ELeave) CNetworkObserver( aPlugin );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::CNetworkObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CNetworkObserver::CNetworkObserver( CSystemInfoPlugin* aPlugin )
+ : iSystemInfoPlugin( aPlugin ),
+ iSignalPckg( iSignal ),
+ iRegistrationStatusPckg( iRegistrationStatus ),
+ iNetworkInfoPckg( iNetworkInfo )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CNetworkObserver::ConstructL()
+ {
+ iSignalObserver = CSystemInfoObserver::NewL( this, EIdSignalStrength );
+ iRegistrationStatusObserver = CSystemInfoObserver::NewL( this, EIdRegistrationStatus );
+ iNetworkInfoObserver = CSystemInfoObserver::NewL( this, EIdNetworkInfo );
+
+ iTelephony = CTelephony::NewL();
+ iTelephony2 = CTelephony::NewL();
+ iTelephony3 = CTelephony::NewL();
+
+ // bootstrap monitoring
+
+ // signal
+ iSignal.iSignalStrength = INT_MIN; // default indicates unknown
+ iSignal.iBar = CHAR_MIN; // default indicates unknown
+ iSignalObserver->RequestNotificationL();
+
+ // registration status
+ iRegistrationStatus.iRegStatus = CTelephony::ERegistrationUnknown; // default
+ iRegistrationStatusObserver->RequestNotificationL();
+
+ // network info
+ iNetworkInfo.iDisplayTag.Copy(_L("")); // default indicates unknown
+ iNetworkInfoObserver->RequestNotificationL();
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::~CNetworkObserver()
+// Destructor
+// -----------------------------------------------------------------------------
+CNetworkObserver::~CNetworkObserver()
+ {
+ delete iSignalObserver;
+ delete iRegistrationStatusObserver;
+ delete iRegistrationStatusChangedFunction;
+ delete iNetworkInfoObserver;
+ delete iTelephony;
+ delete iTelephony2;
+ delete iTelephony3;
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::SignalBars
+// -----------------------------------------------------------------------------
+TInt CNetworkObserver::SignalBars() const
+ {
+ if ( !iSignalStarted )
+ {
+ return INT_MIN; // value indicates unknown
+ }
+ return iSignal.iBar;
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::RegistrationStatus
+// -----------------------------------------------------------------------------
+TInt CNetworkObserver::RegistrationStatus() const
+ {
+ TInt s = iRegistrationStatus.iRegStatus;
+ // explicitly map enum values in case CTelephony API changes.
+ switch ( s )
+ {
+ case CTelephony::ERegistrationUnknown:
+ s = 0;
+ break;
+ case CTelephony::ENotRegisteredNoService:
+ s = 1;
+ break;
+ case CTelephony::ENotRegisteredEmergencyOnly:
+ s = 2;
+ break;
+ case CTelephony::ENotRegisteredSearching:
+ s = 3;
+ break;
+ case CTelephony::ERegisteredBusy:
+ s = 4;
+ break;
+ case CTelephony::ERegisteredOnHomeNetwork:
+ s = 5;
+ break;
+ case CTelephony::ERegistrationDenied:
+ s = 6;
+ break;
+ case CTelephony::ERegisteredRoaming:
+ s = 7;
+ break;
+ default:
+ s = 0;
+ break;
+ };
+
+ return s;
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::NetworkName
+// -----------------------------------------------------------------------------
+const TDesC& CNetworkObserver::NetworkName() const
+ {
+ return iNetworkInfo.iDisplayTag;
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::RequestNotificationL
+// -----------------------------------------------------------------------------
+void CNetworkObserver::RequestNotificationL( TIdNetworkItem aId, HBufC8* aFunctionName )
+ {
+ if ( aId == EIdRegistrationStatus )
+ {
+ delete iRegistrationStatusChangedFunction;
+ iRegistrationStatusChangedFunction = aFunctionName;
+ // already monitoring, don't request notification again
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::SubscribeL
+// -----------------------------------------------------------------------------
+void CNetworkObserver::SubscribeL( TInt aId, TRequestStatus& aStatus )
+ {
+ if ( aId == EIdSignalStrength )
+ {
+ if ( iSignalStarted )
+ {
+ iTelephony->NotifyChange( aStatus,
+ CTelephony::ESignalStrengthChange,
+ iSignalPckg );
+ }
+ else
+ {
+ iTelephony->GetSignalStrength( aStatus, iSignalPckg );
+ }
+ }
+ else if ( aId == EIdRegistrationStatus )
+ {
+ if ( iRegistrationStatusStarted )
+ {
+ iTelephony2->NotifyChange( aStatus,
+ CTelephony::ENetworkRegistrationStatusChange,
+ iRegistrationStatusPckg );
+ }
+ else
+ {
+ iTelephony2->GetNetworkRegistrationStatus( aStatus, iRegistrationStatusPckg );
+ }
+ }
+ else if ( aId == EIdNetworkInfo )
+ {
+ if ( iNetworkInfoStarted )
+ {
+ iTelephony3->NotifyChange( aStatus,
+ CTelephony::ECurrentNetworkInfoChange,
+ iNetworkInfoPckg );
+ }
+ else
+ {
+ iTelephony3->GetCurrentNetworkInfo( aStatus, iNetworkInfoPckg );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::UpdateL
+// -----------------------------------------------------------------------------
+void CNetworkObserver::UpdateL( TInt aId )
+ {
+ if ( aId == EIdSignalStrength )
+ {
+ iSignalStarted = 1;
+ }
+ else if ( aId == EIdRegistrationStatus )
+ {
+ iRegistrationStatusStarted = 1;
+ if ( iRegistrationStatusChangedFunction )
+ {
+ iSystemInfoPlugin->InvokeCallback( *iRegistrationStatusChangedFunction, NULL, 0 );
+ }
+ }
+ else if ( aId == EIdNetworkInfo )
+ {
+ iNetworkInfoStarted = 1;
+ // FUTURE add callback to script API
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::Cancel
+// -----------------------------------------------------------------------------
+void CNetworkObserver::Cancel( TInt aId )
+ {
+ if ( aId == EIdSignalStrength )
+ {
+ (void) iTelephony->CancelAsync( ( iSignalStarted ?
+ CTelephony::ESignalStrengthChangeCancel
+ : CTelephony::EGetSignalStrengthCancel ) );
+ }
+ else if ( aId == EIdRegistrationStatus )
+ {
+ (void) iTelephony2->CancelAsync( ( iRegistrationStatusStarted ?
+ CTelephony::ENetworkRegistrationStatusChangeCancel
+ : CTelephony::EGetNetworkRegistrationStatusCancel ) );
+ }
+ else if ( aId == EIdNetworkInfo )
+ {
+ (void) iTelephony3->CancelAsync( ( iNetworkInfoStarted ?
+ CTelephony::ECurrentNetworkInfoChangeCancel
+ : CTelephony::EGetCurrentNetworkInfoCancel ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNetworkObserver::Close
+// -----------------------------------------------------------------------------
+void CNetworkObserver::Close( TInt /*aId*/ )
+ {
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/PowerObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,215 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include <limits.h>
+#include "PowerObserver.h"
+#include "SystemInfoPlugin.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CPowerObserver* CPowerObserver::NewL( CSystemInfoPlugin* aPlugin )
+ {
+ CPowerObserver* self = new (ELeave) CPowerObserver( aPlugin );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::CPowerObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CPowerObserver::CPowerObserver( CSystemInfoPlugin* aPlugin )
+ : iSystemInfoPlugin( aPlugin ),
+ iBatteryInfoPckg( iBatteryInfo ),
+ iIndicatorPckg( iIndicator )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CPowerObserver::ConstructL()
+ {
+ iBatteryInfoObserver = CSystemInfoObserver::NewL( this, EIdBatteryInfo );
+ iIndicatorObserver = CSystemInfoObserver::NewL( this, EIdIndicator );
+
+ iTelephony = CTelephony::NewL();
+ iTelephony2 = CTelephony::NewL();
+
+ // bootstrap monitoring
+
+ // battery
+ iBatteryInfo.iChargeLevel = 0; // default indicates unknown
+ iBatteryInfoObserver->RequestNotificationL();
+
+ // charger
+ iIndicator.iIndicator = 0;
+ iIndicatorObserver->RequestNotificationL();
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::~CPowerObserver()
+// Destructor
+// -----------------------------------------------------------------------------
+CPowerObserver::~CPowerObserver()
+ {
+ delete iIndicatorObserver;
+ delete iBatteryInfoObserver;
+ delete iBatteryInfoChangedFunction;
+ delete iIndicatorChangedFunction;
+ delete iTelephony2;
+ delete iTelephony;
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::ChargeLevel
+// -----------------------------------------------------------------------------
+TInt CPowerObserver::ChargeLevel() const
+ {
+ if ( !iBatteryInfoStarted )
+ {
+ // value indicates unknown
+ return INT_MIN;
+ }
+ return STATIC_CAST( TInt, iBatteryInfo.iChargeLevel );
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::ChargerConnected
+// -----------------------------------------------------------------------------
+TInt CPowerObserver::ChargerConnected() const
+ {
+ if ( !iIndicatorStarted )
+ {
+ // value indicates unknown
+ return INT_MIN;
+ }
+ return ( CTelephony::KIndChargerConnected & iIndicator.iIndicator ) ? 1 : 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::RequestNotificationL
+// -----------------------------------------------------------------------------
+void CPowerObserver::RequestNotificationL( TIdPowerItem aId, HBufC8* aFunctionName )
+ {
+ if ( aId == EIdBatteryInfo )
+ {
+ delete iBatteryInfoChangedFunction;
+ iBatteryInfoChangedFunction = aFunctionName;
+ // already monitoring, don't request notification again
+ }
+ else if ( aId == EIdIndicator )
+ {
+ delete iIndicatorChangedFunction;
+ iIndicatorChangedFunction = aFunctionName;
+ // already monitoring, don't request notification again
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::SubscribeL
+// -----------------------------------------------------------------------------
+void CPowerObserver::SubscribeL( TInt aId, TRequestStatus& aStatus )
+ {
+ if ( aId == EIdBatteryInfo )
+ {
+ if ( iBatteryInfoStarted )
+ {
+ iTelephony->NotifyChange( aStatus,
+ CTelephony::EBatteryInfoChange,
+ iBatteryInfoPckg );
+ }
+ else
+ {
+ iTelephony->GetBatteryInfo( aStatus, iBatteryInfoPckg );
+ }
+ }
+ else if ( aId == EIdIndicator )
+ {
+ if ( iIndicatorStarted )
+ {
+ iTelephony->NotifyChange( aStatus,
+ CTelephony::EIndicatorChange,
+ iIndicatorPckg );
+ }
+ else
+ {
+ iTelephony->GetIndicator( aStatus, iIndicatorPckg );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::UpdateL
+// -----------------------------------------------------------------------------
+void CPowerObserver::UpdateL( TInt aId )
+ {
+ if ( aId == EIdBatteryInfo )
+ {
+ iBatteryInfoStarted = 1;
+ if ( iBatteryInfoChangedFunction )
+ {
+ iSystemInfoPlugin->InvokeCallback( *iBatteryInfoChangedFunction, NULL, 0 );
+ }
+ }
+ else if ( aId == EIdIndicator )
+ {
+ iIndicatorStarted = 1;
+ if ( iIndicatorChangedFunction )
+ {
+ iSystemInfoPlugin->InvokeCallback( *iIndicatorChangedFunction, NULL, 0 );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::Cancel
+// -----------------------------------------------------------------------------
+void CPowerObserver::Cancel( TInt aId )
+ {
+ if ( aId == EIdBatteryInfo )
+ {
+ (void) iTelephony->CancelAsync( ( iBatteryInfoStarted ?
+ CTelephony::EBatteryInfoChangeCancel
+ : CTelephony::EGetBatteryInfoCancel ) );
+ }
+ else if ( aId == EIdIndicator )
+ {
+ (void) iTelephony->CancelAsync( ( iIndicatorStarted ?
+ CTelephony::EIndicatorChangeCancel
+ : CTelephony::EGetIndicatorCancel ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPowerObserver::Close
+// -----------------------------------------------------------------------------
+void CPowerObserver::Close( TInt /*aId*/ )
+ {
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/SystemInfoApi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: API functions that were loaded into TLS for the Browser to use.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <npapi.h>
+#include <npscript.h>
+#include "SystemInfoPlugin.h"
+
+// CONSTANTS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// SystemInfoNewp
+// Create a new instance of a plugin. This is non-leaving method.
+// Returns: NPError: Error codes recognized by Browser
+// ----------------------------------------------------------------------------
+NPError SystemInfoNewp( NPMIMEType /*pluginType*/, // Not used locally
+ NPP aInstance, // Stores pointer to SystemInfo
+ uint16 /*mode*/, //
+ CDesCArray* argn, // The number of arguments passed
+ CDesCArray* argv, // The values of arguments in the array
+ NPSavedData* /*saved*/ ) //
+ {
+ // Create SystemInfoPlugin, call this leaving method to wrap leaving methods
+ TRAPD( err, SystemInfoConstructL( aInstance, argn, argv ) );
+ if ( err == KErrNoMemory )
+ {
+ return NPERR_OUT_OF_MEMORY_ERROR;
+ }
+
+ if ( err != KErrNone )
+ {
+ return NPERR_MODULE_LOAD_FAILED_ERROR;
+ }
+
+ return NPERR_NO_ERROR;
+ }
+
+// ----------------------------------------------------------------------------
+// SystemInfoConstructL
+// This is the leaving method to create the plugin. We have leaving setters
+// that need to be wrapped.
+// Returns: void
+// ----------------------------------------------------------------------------
+void SystemInfoConstructL( NPP aInstance, // Stores pointer to SystemInfo
+ CDesCArray* /*argn*/, // The number of arguments passed
+ CDesCArray* /*argv*/ ) // The values of arguments in the array
+ {
+ aInstance->pdata = CSystemInfoPlugin::NewL();
+ }
+
+// ----------------------------------------------------------------------------
+// SystemInfoDestroy(NPP aInstance, NPSavedData**)
+// Called by Browser to destroy the plugin
+// Returns: NPError: Error Code
+// ----------------------------------------------------------------------------
+NPError SystemInfoDestroy( NPP aInstance, // Link to Browser
+ NPSavedData** /*save*/ ) // Not used locally
+ {
+ CSystemInfoPlugin *pluginInstance = STATIC_CAST( CSystemInfoPlugin*, aInstance->pdata );
+ delete pluginInstance;
+
+ return NPERR_NO_ERROR;
+ }
+
+
+// ----------------------------------------------------------------------------
+// SystemInfoGetvalue
+// ----------------------------------------------------------------------------
+//
+NPError SystemInfoGetvalue(
+ NPP instance,
+ NPPVariable variable,
+ void* ret_value)
+ {
+ if (variable==NPPVpluginScriptableNPObject)
+ {
+ CSystemInfoPlugin *siplugin = (CSystemInfoPlugin*)instance->pdata;
+ SystemInfoPluginObject *pluginObject = (SystemInfoPluginObject *)NPN_CreateObject (instance, systemInfoPluginClass);
+ pluginObject->plugin = siplugin;
+ siplugin->SetInstance(instance);
+ void** ret = (void**)ret_value;
+ *ret = (void*)pluginObject;
+ }
+ return NPERR_NO_ERROR;
+ }
+
+
+// ============================ LOCAL FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginAllocate
+// ----------------------------------------------------------------------------
+//
+NPObject* systemInfoPluginAllocate( NPP /*npp*/, NPClass* /*aClass*/ )
+ {
+ SystemInfoPluginObject *newInstance =
+ (SystemInfoPluginObject*)User::Alloc( sizeof(SystemInfoPluginObject) );
+ return (NPObject*)newInstance;
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginDeallocate
+// ----------------------------------------------------------------------------
+//
+void systemInfoPluginDeallocate( SystemInfoPluginObject* obj)
+ {
+ obj->plugin->Deallocate();
+ User::Free( (void*)obj );
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginInvalidate
+// ----------------------------------------------------------------------------
+//
+void systemInfoPluginInvalidate( NPObject* /*obj*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginHasMethod
+// ----------------------------------------------------------------------------
+//
+bool systemInfoPluginHasMethod( SystemInfoPluginObject* obj,
+ NPIdentifier name )
+ {
+ return obj->plugin->HasMethod( name );
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginInvokeFunction
+// ----------------------------------------------------------------------------
+//
+bool systemInfoPluginInvokeFunction( SystemInfoPluginObject* obj,
+ NPIdentifier name,
+ NPVariant* args,
+ uint32_t argCount,
+ NPVariant* result)
+ {
+ return obj->plugin->Invoke( name, args, argCount, result );
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginHasProperty
+// ----------------------------------------------------------------------------
+//
+bool systemInfoPluginHasProperty( SystemInfoPluginObject* obj,
+ NPIdentifier name )
+ {
+ return obj->plugin->HasProperty( name );
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginGetProperty
+// ----------------------------------------------------------------------------
+//
+bool systemInfoPluginGetProperty( SystemInfoPluginObject* obj,
+ NPIdentifier name,
+ NPVariant *variant )
+ {
+ return obj->plugin->GetProperty( name, variant );
+ }
+
+// ----------------------------------------------------------------------------
+// systemInfoPluginSetProperty
+// ----------------------------------------------------------------------------
+//
+bool systemInfoPluginSetProperty( SystemInfoPluginObject* obj,
+ NPIdentifier name,
+ NPVariant *variant )
+ {
+ TBool r = EFalse;
+ TRAPD( error, r = obj->plugin->SetPropertyL( name, variant ) );
+ return (error || !r)? false : true;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/SystemInfoBeep.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDES
+#include "SystemInfoBeep.h"
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CSystemInfoBeep* CSystemInfoBeep::NewL()
+ {
+ CSystemInfoBeep* self = new (ELeave) CSystemInfoBeep();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ };
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::CSystemInfoBeep
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CSystemInfoBeep::CSystemInfoBeep()
+ : iState( EBeepIdle )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CSystemInfoBeep::ConstructL()
+ {
+ iToneUtil = CMdaAudioToneUtility::NewL( *this );
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::~CSystemInfoBeep
+// Destructor
+// -----------------------------------------------------------------------------
+CSystemInfoBeep::~CSystemInfoBeep()
+ {
+ delete iToneUtil;
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::Play
+// -----------------------------------------------------------------------------
+void CSystemInfoBeep::Play( TInt aFrequency, TTimeIntervalMicroSeconds aDuration )
+ {
+ if ( iState == EBeepPreparing )
+ {
+ iToneUtil->CancelPrepare();
+ }
+ else if ( iState == EBeepPlaying )
+ {
+ iToneUtil->CancelPlay();
+ }
+ iState = EBeepPreparing;
+ iToneUtil->PrepareToPlayTone( aFrequency, aDuration );
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::MatoPrepareComplete
+// -----------------------------------------------------------------------------
+void CSystemInfoBeep::MatoPrepareComplete( TInt aError )
+ {
+ if ( aError == KErrNone )
+ {
+ iState = EBeepPlaying;
+ iToneUtil->Play();
+ }
+ else
+ {
+ iState = EBeepIdle;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoBeep::MatoPlayComplete
+// -----------------------------------------------------------------------------
+void CSystemInfoBeep::MatoPlayComplete( TInt /*aError*/ )
+ {
+ iState = EBeepIdle;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/SystemInfoMain.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <ecom/implementationproxy.h>
+#include <cecombrowserplugininterface.h>
+#include "SystemInfoPlugin.h"
+
+
+/***************************************************/
+/**********ECOM STYLE SystemInfo PLUGIN ENTRY POINTS******/
+/***************************************************/
+
+// -----------------------------------------------------------------------------
+// CSystemInfoPluginEcomMain::NewL
+// -----------------------------------------------------------------------------
+CSystemInfoPluginEcomMain* CSystemInfoPluginEcomMain::NewL( TAny* aInitParam )
+ {
+ TFuncs* funcs = REINTERPRET_CAST( TFuncs*, aInitParam );
+ CSystemInfoPluginEcomMain* self = new (ELeave) CSystemInfoPluginEcomMain( funcs->iNetscapeFuncs );
+ CleanupStack::PushL( self );
+ self->ConstructL( funcs->iPluginFuncs );
+ CleanupStack::Pop( self );
+
+ Dll::SetTls ( (void*) self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoPluginEcomMain::ConstructL
+// -----------------------------------------------------------------------------
+void CSystemInfoPluginEcomMain::ConstructL( NPPluginFuncs* aPluginFuncs )
+ {
+ InitializeFuncs( aPluginFuncs );
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoPluginEcomMain::CSystemInfoPluginEcomMain
+// -----------------------------------------------------------------------------
+CSystemInfoPluginEcomMain::CSystemInfoPluginEcomMain( NPNetscapeFuncs* aNpf )
+ : CEcomBrowserPluginInterface(),
+ iNpf( aNpf )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoPluginEcomMain::~CSystemInfoPluginEcomMain
+// -----------------------------------------------------------------------------
+CSystemInfoPluginEcomMain::~CSystemInfoPluginEcomMain()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// KImplementationTable
+// -----------------------------------------------------------------------------
+const TImplementationProxy KImplementationTable[] =
+ {
+ {{KFirstSystemInfoImplementationValue}, (TProxyNewLPtr)CSystemInfoPluginEcomMain::NewL}
+ };
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Returns the filters implemented in this DLL
+// Returns: The filters implemented in this DLL
+// -----------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+ return KImplementationTable;
+ }
+
+// -----------------------------------------------------------------------------
+// InitializeFuncs
+// -----------------------------------------------------------------------------
+EXPORT_C NPError InitializeFuncs( NPPluginFuncs* aPpf )
+ {
+ aPpf->size = sizeof(NPPluginFuncs);
+ aPpf->version = 1;
+ aPpf->newp = NewNPP_NewProc(SystemInfoNewp);
+ aPpf->destroy = NewNPP_DestroyProc(SystemInfoDestroy);
+ aPpf->setwindow = 0;
+ aPpf->newstream = 0;
+ aPpf->destroystream = 0;
+ aPpf->asfile = 0;
+ aPpf->writeready = 0;
+ aPpf->write = 0;
+ aPpf->print = 0;
+ aPpf->event = 0;
+ aPpf->urlnotify = 0;
+ aPpf->javaClass = 0;
+ aPpf->getvalue = NewNPP_GetValueProc(SystemInfoGetvalue);
+ aPpf->setvalue = 0;
+
+ return NPERR_NO_ERROR;
+ }
+
+// -----------------------------------------------------------------------------
+// NPP_Shutdown
+// -----------------------------------------------------------------------------
+EXPORT_C void NPP_Shutdown(void)
+ {
+ CSystemInfoPluginEcomMain* npm = (CSystemInfoPluginEcomMain*)Dll::Tls();
+ delete npm;
+ Dll::SetTls( NULL );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/SystemInfoMisc.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include "SystemInfoMisc.h"
+#include <HWRMLight.h>
+#include <HWRMVibra.h>
+#include <hal.h>
+#include <coemain.h>
+#include "SystemInfoBeep.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSystemInfoMisc::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CSystemInfoMisc* CSystemInfoMisc::NewL()
+ {
+ CSystemInfoMisc* self = new (ELeave) CSystemInfoMisc();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSystemInfoMisc::CSystemInfoMisc
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CSystemInfoMisc::CSystemInfoMisc()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoMisc::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CSystemInfoMisc::ConstructL()
+ {
+ iLightControl = CHWRMLight::NewL();
+ iVibraControl = CHWRMVibra::NewL();
+ iBeeper = CSystemInfoBeep::NewL();
+ // Create the widget registryclient session
+ User::LeaveIfError( iWidgetRegistryClient.Connect() );
+ iWidgetRegistryConnected = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoMisc::~CSystemInfoMisc
+// Destructor
+// -----------------------------------------------------------------------------
+CSystemInfoMisc::~CSystemInfoMisc()
+ {
+ delete iLightControl;
+ delete iVibraControl;
+ delete iBeeper;
+ if ( iWidgetRegistryConnected )
+ {
+ iWidgetRegistryClient.Disconnect();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoMisc::Beep
+// -----------------------------------------------------------------------------
+void CSystemInfoMisc::Beep(TInt aFrequency, TTimeIntervalMicroSeconds aDuration )
+ {
+ iBeeper->Play( aFrequency, aDuration );
+ }
+
+TInt CSystemInfoMisc::LightMinIntensity() const
+ {
+ return KHWRMLightMinIntensity;
+ }
+
+TInt CSystemInfoMisc::LightMaxIntensity() const
+ {
+ return KHWRMLightMaxIntensity;
+ }
+TInt CSystemInfoMisc::LightDefaultIntensity() const
+ {
+ return KHWRMDefaultIntensity;
+ }
+TInt CSystemInfoMisc::LightInfiniteDuration() const
+ {
+ return KHWRMInfiniteDuration;
+ }
+TInt CSystemInfoMisc::LightMaxDuration() const
+ {
+ return KHWRMLightMaxDuration;
+ }
+TInt CSystemInfoMisc::LightDefaultCycleTime() const
+ {
+ return KHWRMDefaultCycleTime;
+ }
+TInt CSystemInfoMisc::LightTargetPrimaryDisplayAndKeyboard() const
+ {
+ return CHWRMLight::EPrimaryDisplayAndKeyboard;
+ }
+TInt CSystemInfoMisc::LightTargetSystem() const
+ {
+ return CHWRMLight::ESystemTarget;
+ }
+
+void CSystemInfoMisc::LightOn( TInt aLightTarget, TInt aDuration, TInt aIntensity, TInt aFadeIn )
+ {
+ TRAP_IGNORE( iLightControl->LightOnL(aLightTarget, aDuration, aIntensity, aFadeIn) )
+ }
+
+void CSystemInfoMisc::LightBlink( TInt aLightTarget, TInt aDuration,
+ TInt aOnDuration, TInt aOffDuration, TInt aIntensity )
+ {
+ TRAP_IGNORE( iLightControl->LightBlinkL(aLightTarget, aDuration,
+ aOnDuration, aOffDuration, aIntensity) )
+ }
+
+void CSystemInfoMisc::LightOff( TInt aLightTarget, TInt aDuration, TInt aFadeOut )
+ {
+ TRAP_IGNORE( iLightControl->LightOffL(aLightTarget, aDuration, aFadeOut) )
+ }
+
+
+TInt CSystemInfoMisc::VibraMinIntensity() const
+ {
+ return KHWRMVibraMinIntensity;
+ }
+
+TInt CSystemInfoMisc::VibraMaxIntensity() const
+ {
+ return KHWRMVibraMaxIntensity;
+ }
+
+TInt CSystemInfoMisc::VibraMaxDuration() const
+ {
+ return KHWRMVibraMaxDuration;
+ }
+
+TInt CSystemInfoMisc::VibraSettings() const
+ {
+ TInt s = iVibraControl->VibraSettings();
+ // explicitly map enum values in case Vibra API changes.
+ switch ( s )
+ {
+ case CHWRMVibra::EVibraModeUnknown:
+ s = 0;
+ break;
+ case CHWRMVibra::EVibraModeON:
+ s = 1;
+ break;
+ case CHWRMVibra::EVibraModeOFF:
+ s = 2;
+ break;
+ }
+ return s;
+ }
+
+void CSystemInfoMisc::StartVibra( TInt aDuration, TInt aIntensity )
+ {
+ TRAP_IGNORE( iVibraControl->StartVibraL( aDuration, aIntensity ) )
+ }
+
+void CSystemInfoMisc::StopVibra()
+ {
+ TRAP_IGNORE( iVibraControl->StopVibraL( ) )
+ }
+
+
+TInt CSystemInfoMisc::TotalRam()
+ {
+ TInt m = 0;
+ (void) HAL::Get( HALData::EMemoryRAM, m );
+ return m;
+ }
+
+TInt CSystemInfoMisc::FreeRam()
+ {
+ TInt m = 0;
+ (void) HAL::Get( HALData::EMemoryRAMFree, m );
+ return m;
+ }
+
+void CSystemInfoMisc::Language( TDes& aLangCode )
+ {
+ if ( iWidgetRegistryConnected )
+ {
+ iWidgetRegistryClient.GetLprojName( aLangCode );
+ }
+ else
+ {
+ aLangCode.Copy(_L(""));
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoPlugin::DriveList
+//
+// -----------------------------------------------------------------------------
+void CSystemInfoMisc::DriveList( TDes8& aDriveList )
+ {
+ RFs& fs = CCoeEnv::Static()->FsSession();
+ TDriveList driveList;
+ TInt err = fs.DriveList( driveList );
+ TInt effectiveDriveCount = 0;
+ aDriveList.SetLength( 0 );
+
+ for ( TInt i = 0; i < KMaxDrives && err == KErrNone; i++ )
+ {
+ if ( driveList[i] && i != EDriveD && i != EDriveZ )
+ {
+ TChar c;
+ if ( fs.DriveToChar( i, c ) == KErrNone )
+ {
+ if ( effectiveDriveCount )
+ {
+ aDriveList.Append( ' ' );
+ }
+ aDriveList.Append( (TUint)c );
+ effectiveDriveCount++;
+ }
+ }
+ }
+ }
+
+TReal CSystemInfoMisc::DriveSize( TChar c )
+ {
+ RFs& fs = CCoeEnv::Static()->FsSession();
+ TInt drive;
+ TVolumeInfo v;
+ if ( fs.CharToDrive( c, drive ) == KErrNone )
+ {
+ if ( drive != EDriveD && drive != EDriveZ )
+ {
+ if ( !fs.Volume( v, drive ) )
+ {
+ TInt64 si = v.iSize;
+ TReal sr = si;
+ return sr;
+ }
+ }
+ }
+ return 0;
+ }
+
+TReal CSystemInfoMisc::DriveFree( TChar c )
+ {
+ RFs& fs = CCoeEnv::Static()->FsSession();
+ TInt drive;
+ TVolumeInfo v;
+ if ( fs.CharToDrive( c, drive ) == KErrNone )
+ {
+ if ( drive != EDriveD && drive != EDriveZ )
+ {
+ if ( !fs.Volume( v, drive ) )
+ {
+ TInt64 fi = v.iFree;
+ TReal fr = fi;
+ return fr;
+ }
+ }
+ }
+ return 0;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/SystemInfoObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include "SystemInfoObserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::CSystemInfoObserver
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CSystemInfoObserver* CSystemInfoObserver::NewL( MSystemInfoObserverClient* aClient, TInt aId )
+ {
+ CSystemInfoObserver* self = new ( ELeave ) CSystemInfoObserver( aClient, aId );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::CSystemInfoObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CSystemInfoObserver::CSystemInfoObserver( MSystemInfoObserverClient* aClient, TInt aId )
+ : CActive( EPriorityStandard ),
+ iClient( aClient ),
+ iId( aId )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CSystemInfoObserver::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::~CSystemInfoObserver()
+// Destructor
+// -----------------------------------------------------------------------------
+CSystemInfoObserver::~CSystemInfoObserver()
+ {
+ Cancel();
+ if ( iClient )
+ {
+ iClient->Close( iId );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::RequestNotification
+// -----------------------------------------------------------------------------
+void CSystemInfoObserver::RequestNotificationL()
+ {
+ if ( !IsActive() )
+ {
+ iClient->SubscribeL( iId, iStatus );
+ SetActive();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::RunL
+// -----------------------------------------------------------------------------
+void CSystemInfoObserver::RunL()
+ {
+ if( iStatus == KErrNone )
+ {
+ iClient->UpdateL( iId );
+ iClient->SubscribeL( iId, iStatus ); // FUTURE consider letting client decide if to do this
+ SetActive();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::RunError
+// -----------------------------------------------------------------------------
+TInt CSystemInfoObserver::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSystemInfoObserver::DoCancel
+// -----------------------------------------------------------------------------
+void CSystemInfoObserver::DoCancel()
+ {
+ iClient->Cancel( iId );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/src/SystemInfoPlugin.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,624 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface to Browser for handling embedded system info requests.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <npupp.h>
+#include <string.h>
+#include <utf.h>
+#include <MProfileEngine.h>
+#include <MProfile.h>
+#include "SystemInfoPlugin.h"
+#include "NetworkObserver.h"
+#include "PowerObserver.h"
+#include "SystemInfoMisc.h"
+
+// CONSTANTS
+
+enum TIdentifiersNames
+ {
+ EIdChargeLevel,
+ EIdOnChargeLevel,
+ EIdChargerConnected,
+ EIdOnChargerConnected,
+ EIdSignalBars,
+ EIdNetworkName,
+ EIdNetworkRegistrationStatus,
+ EIdOnNetworkRegistrationStatus,
+ EIdLightMinIntensity,
+ EIdLightMaxIntensity,
+ EIdLightDefaultIntensity,
+ EIdLightInfiniteDuration,
+ EIdLightMaxDuration,
+ EIdLightDefaultCycleTime,
+ EIdLightTargetPrimaryDisplayAndKeyboard,
+ EIdLightTargetSystem,
+ EIdLightOn,
+ EIdLightBlink,
+ EIdLightOff,
+ EIdVibraMinIntensity,
+ EIdVibraMaxIntensity,
+ EIdVibraMaxDuration,
+ EIdVibraSettings,
+ EIdStartVibra,
+ EIdStopVibra,
+ EIdBeep,
+ EIdTotalRam,
+ EIdFreeRam,
+ EIdDriveList,
+ EIdDriveSize,
+ EIdDriveFree,
+ EIdLanguage,
+ EIdLast
+ };
+
+const NPUTF8 *systemInfoPluginIdentifierNames[EIdLast] =
+ {
+ "chargelevel",
+ "onchargelevel",
+ "chargerconnected",
+ "onchargerconnected",
+ "signalbars",
+ "networkname",
+ "networkregistrationstatus",
+ "onnetworkregistrationstatus",
+ "lightminintensity",
+ "lightmaxintensity",
+ "lightdefaultintensity",
+ "lightinfiniteduration",
+ "lightmaxduration",
+ "lightdefaultcycletime",
+ "lighttargetprimarydisplayandkeyboard",
+ "lighttargetsystem",
+ "lighton",
+ "lightblink",
+ "lightoff",
+ "vibraminintensity",
+ "vibramaxintensity",
+ "vibramaxduration",
+ "vibrasettings",
+ "startvibra",
+ "stopvibra",
+ "beep",
+ "totalram",
+ "freeram",
+ "drivelist",
+ "drivesize",
+ "drivefree",
+ "language"
+ };
+
+const TBool IsMethod[EIdLast] =
+ {
+ EFalse, // "chargelevel"
+ EFalse, // "onchargelevel"
+ EFalse, // "chargerconnected"
+ EFalse, // "onchargerconnected"
+ EFalse, // "signalbars"
+ EFalse, // "networkname"
+ EFalse, // "networkregistrationstatus"
+ EFalse, // "onnetworkregistrationstatus"
+ EFalse, // "lightminintensity"
+ EFalse, // "lightmaxintensity"
+ EFalse, // "lightdefaultintensity"
+ EFalse, // "lightinfiniteduration"
+ EFalse, // "lightmaxduration"
+ EFalse, // "lightdefaultcycletime"
+ EFalse, // "lighttargetprimarydisplayandkeyboard"
+ EFalse, // "lighttargetsystem"
+ ETrue, // "lighton"
+ ETrue, // "lightblink"
+ ETrue, // "lightoff"
+ EFalse, // "vibraminintensity"
+ EFalse, // "vibramaxintensity"
+ EFalse, // "vibramaxduration"
+ EFalse, // "vibrasettings"
+ ETrue, // "startvibra"
+ ETrue, // "stopvibra"
+ ETrue, // "beep"
+ EFalse, // "totalram"
+ EFalse, // "freeram"
+ EFalse, // "drivelist"
+ ETrue, // "drivesize"
+ ETrue, // "drivefree"
+ EFalse // "language"
+ };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::CSystemInfoPlugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CSystemInfoPlugin::CSystemInfoPlugin()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+void CSystemInfoPlugin::ConstructL()
+ {
+ iSystemInfoPluginIdentifiers = new (ELeave) NPIdentifier[EIdLast];
+ NPN_GetStringIdentifiers( systemInfoPluginIdentifierNames, EIdLast,
+ iSystemInfoPluginIdentifiers );
+ iUid = RProcess().SecureId();
+
+ // need profile to determine silent mode for beep control
+ iProfileEngine = CreateProfileEngineL();
+
+ // sysinfo feature class instances
+ iPowerObserver = CPowerObserver::NewL( this );
+ iNetworkObserver = CNetworkObserver::NewL( this );
+ iSystemInfoMisc = CSystemInfoMisc::NewL();
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CSystemInfoPlugin* CSystemInfoPlugin::NewL()
+
+ {
+ CSystemInfoPlugin* self = new (ELeave) CSystemInfoPlugin;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::Destructor
+// ----------------------------------------------------------------------------
+CSystemInfoPlugin::~CSystemInfoPlugin()
+ {
+ delete [] iSystemInfoPluginIdentifiers;
+
+ if (iProfileEngine != NULL)
+ {
+ iProfileEngine->Release();
+ }
+ // sysinfo feature class instances
+ delete iPowerObserver;
+ delete iNetworkObserver;
+ delete iSystemInfoMisc;
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::Deallocate
+//
+// ----------------------------------------------------------------------------
+void CSystemInfoPlugin::Deallocate()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::InvokeCallback
+//
+// ----------------------------------------------------------------------------
+bool CSystemInfoPlugin::InvokeCallback( TDesC8& name, const NPVariant *args, uint32_t argCount )
+ {
+ CSystemInfoPluginEcomMain* lSystemInfoPPluginEcomMain
+ = (CSystemInfoPluginEcomMain*) Dll::Tls();
+ NPNetscapeFuncs* lNetscapeFuncs = lSystemInfoPPluginEcomMain->Funcs();
+ if ( lNetscapeFuncs && iInstanceHandle )
+ {
+ void* value = 0;
+ NPError npErr = lNetscapeFuncs->getvalue( iInstanceHandle, NPNVWindowNPObject,
+ (void*)&value );
+ if ( npErr == NPERR_NO_ERROR )
+ {
+ NPVariant resultVariant;
+ VOID_TO_NPVARIANT( resultVariant );
+ NPIdentifier ident = NPN_GetStringIdentifier( (const NPUTF8 *)(name.Ptr()) );
+ return NPN_Invoke( iInstanceHandle, (NPObject*)value, ident,
+ args, argCount, &resultVariant );
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::HasMethod
+//
+// ----------------------------------------------------------------------------
+bool CSystemInfoPlugin::HasMethod( NPIdentifier name )
+ {
+ for (TInt i= 0; i < EIdLast; i++)
+ {
+ if ( name == iSystemInfoPluginIdentifiers[i] )
+ {
+ return IsMethod[i];
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::VariantToInt
+//
+// ----------------------------------------------------------------------------
+void CSystemInfoPlugin::VariantToInt( NPVariant& v, TInt& i )
+ {
+ if ( NPVARIANT_IS_INT32( v ) )
+ {
+ i = NPVARIANT_TO_INT32( v );
+ }
+ else if ( NPVARIANT_IS_DOUBLE( v ) )
+ {
+ double d = NPVARIANT_TO_DOUBLE( v );
+ i = d;
+ }
+ // leave unchanged if some other type tag on variant
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::Invoke
+//
+// ----------------------------------------------------------------------------
+bool CSystemInfoPlugin::Invoke( NPIdentifier name,
+ NPVariant* args,
+ uint32_t argCount,
+ NPVariant *result )
+ {
+ bool ret = false;
+ VOID_TO_NPVARIANT( *result );
+
+ if ( name == iSystemInfoPluginIdentifiers[EIdBeep] )
+ {
+ // don't beep if profile is silent
+ MProfile* profile = NULL;
+ TRAPD( error,
+ profile = iProfileEngine->ActiveProfileL() );
+ if ( KErrNone != error )
+ {
+ return true;
+ }
+ if ( EFalse == profile->IsSilent() )
+ {
+ TInt f = 440; // default 440 hertz
+ TInt d = 500; // default 0.5 seconds (in milliseconds)
+ if ( argCount > 0 ) VariantToInt( args[0], f );
+ if ( argCount > 1 ) VariantToInt( args[1], d );
+ // convert duration from milliseconds to microseconds, the
+ // underlying functionality doesn't really handle microseconds
+ // even though the interface specs it as microseconds
+ d = d * 1000;
+ // Note that d = 0 seems to mean "forever". Also, there
+ // are max and min frequencies but they are not defined.
+ // Below min there is silence, above max the equation
+ // seems to be f = min( max_freq, f)
+ iSystemInfoMisc->Beep( f, d );
+ }
+ profile->Release();
+ ret = true;
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightOn] )
+ {
+ TInt l = iSystemInfoMisc->LightTargetSystem();
+ TInt d = iSystemInfoMisc->LightInfiniteDuration();
+ TInt i = iSystemInfoMisc->LightDefaultIntensity();
+ TInt f = 1;
+ if ( argCount > 0 ) VariantToInt( args[0], l );
+ if ( argCount > 1 ) VariantToInt( args[1], d );
+ if ( argCount > 2 ) VariantToInt( args[2], i );
+ if ( argCount > 3 ) VariantToInt( args[3], f );
+ iSystemInfoMisc->LightOn( l, d, i, f );
+ ret = true;
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightBlink] )
+ {
+ TInt l = iSystemInfoMisc->LightTargetSystem();
+ TInt d = iSystemInfoMisc->LightInfiniteDuration();
+ TInt don = iSystemInfoMisc->LightDefaultCycleTime();
+ TInt doff = iSystemInfoMisc->LightDefaultCycleTime();
+ TInt i = iSystemInfoMisc->LightDefaultIntensity();
+ if ( argCount > 0 ) VariantToInt( args[0], l );
+ if ( argCount > 1 ) VariantToInt( args[1], d );
+ if ( argCount > 2 ) VariantToInt( args[2], don );
+ if ( argCount > 3 ) VariantToInt( args[3], doff );
+ if ( argCount > 4 ) VariantToInt( args[4], i );
+ iSystemInfoMisc->LightBlink( l, d, don, doff, i );
+ ret = true;
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightOff] )
+ {
+ TInt l = iSystemInfoMisc->LightTargetSystem();
+ TInt d = iSystemInfoMisc->LightInfiniteDuration();
+ TInt f = 1;
+ if ( argCount > 0 ) VariantToInt( args[0], l );
+ if ( argCount > 1 ) VariantToInt( args[1], d );
+ if ( argCount > 2 ) VariantToInt( args[2], f );
+ iSystemInfoMisc->LightOff( l, d, f );
+ ret = true;
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdStartVibra] )
+ {
+ TInt d = iSystemInfoMisc->VibraMaxDuration();
+ TInt i = iSystemInfoMisc->VibraMaxIntensity();
+ if ( argCount > 0 ) VariantToInt( args[0], d );
+ if ( argCount > 1 ) VariantToInt( args[1], i );
+ iSystemInfoMisc->StartVibra( d, i );
+ ret = true;
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdStopVibra] )
+ {
+ iSystemInfoMisc->StopVibra();
+ ret = true;
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdDriveSize] )
+ {
+ TUint c = 0;
+ if ( argCount > 0 && NPVARIANT_IS_STRING( args[0] ) )
+ {
+ NPString nps = NPVARIANT_TO_STRING( args[0] );
+ if ( nps.UTF8Characters ) c = nps.UTF8Characters[0];
+ }
+ if ( c > 0 )
+ {
+ TChar drive( c );
+ TReal size = iSystemInfoMisc->DriveSize( drive );
+ DOUBLE_TO_NPVARIANT( size, *result );
+ ret = true;
+ }
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdDriveFree] )
+ {
+ TUint c = 0;
+ if ( argCount > 0 && NPVARIANT_IS_STRING( args[0] ) )
+ {
+ NPString nps = NPVARIANT_TO_STRING( args[0] );
+ if ( nps.UTF8Characters ) c = nps.UTF8Characters[0];
+ }
+ if ( c > 0 )
+ {
+ TChar drive( c );
+ TReal free = iSystemInfoMisc->DriveFree( drive );
+ DOUBLE_TO_NPVARIANT( free, *result );
+ ret = true;
+ }
+ }
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::HasProperty
+//
+// ----------------------------------------------------------------------------
+bool CSystemInfoPlugin::HasProperty (NPIdentifier name)
+ {
+ for ( TInt i= 0; i < EIdLast; i++ )
+ {
+ if ( name == iSystemInfoPluginIdentifiers[i] )
+ {
+ return !IsMethod[i];
+ }
+ }
+ return false;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::GetProperty
+//
+// ----------------------------------------------------------------------------
+bool CSystemInfoPlugin::GetProperty( NPIdentifier name, NPVariant *variant )
+ {
+ // default variant value maps to javascript undefined
+ VOID_TO_NPVARIANT( *variant );
+
+ if ( name == iSystemInfoPluginIdentifiers[EIdChargeLevel] )
+ {
+ INT32_TO_NPVARIANT( iPowerObserver->ChargeLevel(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdChargerConnected] )
+ {
+ INT32_TO_NPVARIANT( iPowerObserver->ChargerConnected(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdSignalBars] )
+ {
+ INT32_TO_NPVARIANT( iNetworkObserver->SignalBars(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdNetworkRegistrationStatus] )
+ {
+ INT32_TO_NPVARIANT( iNetworkObserver->RegistrationStatus(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdNetworkName] )
+ {
+ const TDesC& inBuf = iNetworkObserver->NetworkName();
+ HBufC8* outBuf = HBufC8::New( inBuf.Length() + 1 );
+ if ( outBuf )
+ {
+ TPtr8 ptr( outBuf->Des() );
+ TInt ret = CnvUtfConverter::ConvertFromUnicodeToUtf8( ptr, inBuf );
+ DesToNpvariant(ptr, variant);
+ delete outBuf;
+ }
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightMinIntensity] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightMinIntensity(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightMaxIntensity] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightMaxIntensity(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightDefaultIntensity] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightDefaultIntensity(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightInfiniteDuration] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightInfiniteDuration(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightMaxDuration] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightMaxDuration(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightDefaultCycleTime] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightDefaultCycleTime(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightTargetPrimaryDisplayAndKeyboard] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightTargetPrimaryDisplayAndKeyboard(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLightTargetSystem] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->LightTargetSystem(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdVibraMinIntensity] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->VibraMinIntensity(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdVibraMaxIntensity] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->VibraMaxIntensity(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdVibraMaxDuration] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->VibraMaxDuration(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdVibraSettings] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->VibraSettings(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdTotalRam] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->TotalRam(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdFreeRam] )
+ {
+ INT32_TO_NPVARIANT( iSystemInfoMisc->FreeRam(), *variant );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdDriveList] )
+ {
+ HBufC8* drives = HBufC8::New( KMaxDrives*2 );
+ if ( drives )
+ {
+ TPtr8 ptr( drives->Des() );
+ iSystemInfoMisc->DriveList( ptr );
+ DesToNpvariant(ptr, variant);
+ delete drives;
+ }
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdLanguage] )
+ {
+ TBuf<64> langCode;
+ iSystemInfoMisc->Language( langCode );
+ HBufC8* outBuf = HBufC8::New( langCode.Length() + 1 );
+ if ( outBuf )
+ {
+ TPtr8 ptr( outBuf->Des() );
+ ptr.SetLength( 0 );
+ // Note: the copy below goes from 16-bit to 8-bit by
+ // dropping the high 8-bits. This will work since all
+ // codes are made from 7-bit ASCII characters see
+ // http://www.rfc-editor.org/rfc/rfc4646.txt section 7
+ // "Character Set Considerations". Also see
+ // http://www.w3.org/International/questions/qa-lang-2or3
+ ptr.Copy( langCode );
+ ptr.ZeroTerminate();
+ DesToNpvariant( ptr, variant );
+ delete outBuf;
+ }
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CSystemInfoPlugin::SetProperty
+// ----------------------------------------------------------------------------
+bool CSystemInfoPlugin::SetPropertyL( NPIdentifier name, NPVariant *variant )
+ {
+ // all writeable properties are names of callback functions
+ HBufC8* pFunctionText = NULL;
+
+ // anything but a string will result in nulling out the callback
+ if ( NPVARIANT_IS_STRING( *variant ) )
+ {
+ // canonicalize function name string: only fname (no args) and zero terminate
+ NPString str = NPVARIANT_TO_STRING( *variant );
+
+ if ( (const TUint8 *)str.UTF8Characters )
+ {
+ // allocate a copy
+ TInt length = str.UTF8Length;
+ pFunctionText = HBufC8::NewL( length+1 );
+ TPtr8 tptr = pFunctionText->Des();
+ tptr.Copy( (const TUint8 *)str.UTF8Characters, length );
+
+ //Remove any arguments passed in the with the function name
+ TInt pos = pFunctionText->Locate(TChar('('));
+ if ( pos != KErrNotFound )
+ {
+ length = pos;
+ }
+ tptr.SetLength(length);
+ tptr.ZeroTerminate();
+ }
+ }
+
+ // NOTE: pFunctionText can be NULL
+
+ if ( name == iSystemInfoPluginIdentifiers[EIdOnChargeLevel] )
+ {
+ iPowerObserver->RequestNotificationL( CPowerObserver::EIdBatteryInfo,
+ pFunctionText );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdOnChargerConnected] )
+ {
+ iPowerObserver->RequestNotificationL( CPowerObserver::EIdIndicator,
+ pFunctionText );
+ }
+ else if ( name == iSystemInfoPluginIdentifiers[EIdOnNetworkRegistrationStatus] )
+ {
+ iNetworkObserver->RequestNotificationL( CNetworkObserver::EIdRegistrationStatus,
+ pFunctionText );
+ }
+ else
+ {
+ delete pFunctionText;
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+void CSystemInfoPlugin::DesToNpvariant(TPtr8& string, NPVariant*& variant)
+{
+ char* newString = NULL;
+ if (string.Length()) {
+ newString = new char[string.Length()];
+ }
+ if (newString) {
+ Mem::Copy(newString, string.Ptr(), string.Length());
+ STRINGN_TO_NPVARIANT(newString, string.Length(), *variant);
+ }
+}
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project build file for BrowserPlugins
+*
+*/
+
+#ifdef __WEB_WIDGETS
+ #include "../browsersysteminfoplugin/group/bld.inf"
+ #include "../browsergpsplugin/group/bld.inf"
+#endif
+
+#include "../browseraudiovideoplugin/group/bld.inf"
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Aif/BrowserAIF.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* aif resources
+*
+*
+*/
+
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+ {
+ app_uid=0x10008D39;
+
+
+ // icons
+ num_icons=2;
+
+ // capabilities
+ embeddability= KAppEmbeddable;
+ hidden=KAppNotHidden;
+
+ // MIME types
+ datatype_list=
+ {
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlc";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/wml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/xhtml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.xhtml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/vnd.wap.wml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/html";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlscriptc";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlscript";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wbxml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/x-opml";
+ }
+ };
+ }
+
Binary file browserui/browser/Aif/wb48i.bmp has changed
Binary file browserui/browser/Aif/wb48m.bmp has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/AHLEInterface.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains the header file of the CAHLEInterface class.
+ *
+*/
+
+
+// This is a wrapper class for the AHLE client. Its intent is to defer
+// the construction until after the browser startup is
+// complete. Documentation is not duplicated. Only new functions or
+// those modified are described here. See AHLE.h for the detailed
+// descriptions.
+
+
+#ifndef AHLEINTERFACE_H
+#define AHLEINTERFACE_H
+
+#include <AHLE.h>
+
+_LIT(KAHLEInterfaceDummyFile, "dummy_file");
+
+class CAHLEInterface: public CBase, public MAHLEClientAPI
+ {
+ public:
+
+ enum TAHLENewType
+ {
+ EAHLENewNoArgs,
+ EAHLENewAllArgs,
+ EAHLENewDbOnlyArgs,
+ EAHLENewPrimarySizeOnlyArgs
+ };
+
+ virtual ~CAHLEInterface();
+
+ /** Engine start. */
+ IMPORT_C static CAHLEInterface* NewL();
+ IMPORT_C static CAHLEInterface* NewL( const TDesC& aDatabase );
+ IMPORT_C static CAHLEInterface* NewL( TUint aPrimarySize );
+ IMPORT_C static CAHLEInterface* NewL( const TDesC& aDatabase,
+ TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed );
+
+
+ /** Check if the client has been connected to the server */
+ IMPORT_C TBool IsConnected();
+
+ /** Set Observer */
+ IMPORT_C void SetObserverL( const MAHLEClientObserver* aObserver );
+
+ /** Engine reconfiguration. */
+ IMPORT_C TInt ReconfigureL( TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed );
+
+ /** Current engine configuration. */
+ IMPORT_C void GetConfigurationL( TUint& aPrimarySize,
+ TUint& aSecondarySize,
+ TAHLEScore& aAdaptationSpeed );
+
+ /** Get adaptive list parameters. */
+ IMPORT_C TInt GetParameters( TAHLESortOrder& aOrder ) const;
+ IMPORT_C TInt GetParameters( TAHLESortOrder& aOrder,
+ TAny* aReserved ) const;
+
+
+ /** Set adaptive list parameters. */
+ IMPORT_C TInt SetParameters( TAHLESortOrder aOrder );
+ IMPORT_C TInt SetParameters( TAHLESortOrder aOrder,
+ TAny* aReserved );
+
+
+ ////////////////////////////////////////////////////////////////
+ // ADAPTIVE LIST METHODS
+ ////////////////////////////////////////////////////////////////
+
+ /** Logging of new access. Synchronous. Used for string data. */
+ IMPORT_C TInt NewAccessL( const TDesC& aItem,
+ const TDesC& aItemName );
+
+ /** Asynchronous version of NewAccessL(). */
+ IMPORT_C void NewAccessL( TRequestStatus& aStatus,
+ const TDesC& aItem,
+ const TDesC& aItemName );
+
+ /** Get adaptive list. Here the user has the option of selecting sites/groups */
+ IMPORT_C TInt AdaptiveListL( CDesCArray& aItems,
+ CDesCArray& aItemNames,
+ const TInt aSize,
+ const TDesC& aMatch,
+ const TAHLEState aState );
+
+ /**
+ * Sorts items by their scores. Used e.g. in Favorite
+ * Links in Page feature within browser application.
+ */
+ IMPORT_C TInt OrderByScoreL( CDesCArray& aItems, CDesCArray& aItemsSorted );
+ IMPORT_C TInt OrderByScoreL( CDesCArray& aItems, RArray<TInt>& aItemsSorted );
+
+
+ /** Remove item(s). */
+ IMPORT_C TInt RemoveL( const TDesC& aItem );
+ IMPORT_C void RemoveL( const TDesC& aItem, TRequestStatus& aStatus );
+ IMPORT_C TInt RemoveL( const CDesCArray& aItems );
+ IMPORT_C void RemoveL( const CDesCArray& aItems, TRequestStatus& aStatus );
+
+
+ /** Remove matching items. */
+ IMPORT_C TInt RemoveMatchingL( const TDesC& aMatch );
+ IMPORT_C void RemoveMatchingL( const TDesC& aMatch, TRequestStatus& aStatus );
+
+
+ /** Rename item. */
+ IMPORT_C TInt RenameL( const TDesC& aItem, const TDesC& aNewName );
+
+
+ /** Get item name. */
+ IMPORT_C TInt GetNameL( const TDesC& aItem, TDesC& aName );
+
+
+ /** Clear all adaptive list items. */
+ IMPORT_C TInt Clear();
+
+
+ /** Flush cached items to persistent storage. */
+ IMPORT_C TInt Flush();
+
+
+ private:
+
+ CAHLEInterface();
+
+ static TInt AHLEInitializationCB(TAny* thisObj);
+
+
+ void ConstructL( TAHLENewType aNewType,
+ const TDesC& aDatabase,
+ TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed );
+
+ static CAHLEInterface* NewL( TAHLENewType aNewType,
+ const TDesC& aDatabase,
+ TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed );
+
+ // This final section contains the modifications from the CAHLE
+ // class. The only new method facilitates lazy construction. If not
+ // needed it will still work.
+
+ private:
+
+ /**
+ * AHLE Engine Initialization
+ * Performs the deferred loading of the AHLE dll and its
+ * initialization. Throws an exception on failure. Does nothing if
+ * already initialized.
+ */
+ void InitializeAHLEL();
+
+
+ //This private data allows the actual construction of the AHLE
+ //object to be deferred until actually needed. This will defer the
+ //loading of the server dll.
+
+ private:
+
+ CAHLE* iAHLE;
+ TUint iPrimarySize;
+ TUint iSecondarySize;
+ TAHLEScore iAdaptationSpeed;
+ TUint iDeferPrimarySize;
+ TUint iDeferSecondarySize;
+ TAHLEScore iDeferAdaptationSpeed;
+ HBufC* iDatabase;
+ TAHLENewType iNewType;
+ CIdle* iIdle;
+ };
+
+#endif /* AHLEINTERFACE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/ApiProvider.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,413 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* API provider.
+*
+*
+*/
+
+
+#ifndef MAPIPROVIDER_H
+#define MAPIPROVIDER_H
+
+// INCLUDE FILES
+#include "WmlBrowserBuild.h"
+#include "BrowserLoadObserver.h" // for LoadUrlType
+#ifdef __RSS_FEEDS
+#include "FeedsClientUtilities.h"
+#endif
+
+// FORWARD DECLARATIONS
+
+class MPreferences;
+class MCommsModel;
+class MConnection;
+class MDisplay;
+class MBmOTABinSender;
+
+//class MStartPageHandler;
+class CBrCtlInterface;
+class CBrowserDialogsProvider;
+class CFavouritesItem;
+class TFavouritesWapAp;
+class RHttpDownloadMgr;
+class CDownloadMgrUiDownloadsList;
+class CBrowserSpecialLoadObserver;
+class CBrowserSoftkeysObserver;
+class CBrowserPopupEngine;
+class CBrowserWindowManager;
+
+// CLASS DECLARATION
+
+/**
+* Interface to query several API implementations.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class MApiProvider
+ {
+ public: // New functions
+
+ /**
+ * Returns reference to the implementation of MDisplay.
+ * @since Series 60 1.2
+ * @return An implementation of MDisplay
+ */
+ virtual MDisplay& Display() const = 0;
+
+ /**
+ * Returns a reference to the implementaion of MConnection,
+ * through wich some high-level connection specific data can be set
+ * @since Series 60 1.2
+ * @return reference to MConnection object
+ */
+ virtual MConnection& Connection() const = 0;
+
+ /**
+ * Returns reference to the implementation of MPrefences.
+ * @since Series 60 1.2
+ * @return An implementation of MPrefences
+ */
+ virtual MPreferences& Preferences() const = 0;
+
+ /**
+ * Returns reference to the implementation of MCommsModel.
+ * @since Series 60 1.2
+ * @return An implementation of MCommsModel
+ */
+ virtual MCommsModel& CommsModel() const = 0;
+
+ /**
+ * Returns reference to the CBrCtlInterface
+ * @since Series 60 2.8
+ * @return A reference to CBrCtlInterface
+ */
+ virtual CBrCtlInterface& BrCtlInterface() const = 0;
+
+ /**
+ * Returns reference to CBrowserLoadObserver.
+ * @since Series 60 2.8
+ * @return An implementation of MBrCtlLoadEventObserver
+ */
+ virtual CBrowserLoadObserver& LoadObserver() const = 0;
+
+ virtual CBrowserSpecialLoadObserver& SpecialLoadObserver() const = 0;
+
+ virtual CBrowserSoftkeysObserver& SoftkeysObserver() const = 0;
+ /**
+ * Returns reference to CBrowserDialogsProvider.
+ * @since Series 60 2.8
+ * @return An implementation of MBrCtlDialogsProvider
+ */
+ virtual CBrowserDialogsProvider& DialogsProvider() const = 0;
+
+ /**
+ * Returns reference to the implementation of MBmOTABinSender.
+ * @since Series 60 1.2
+ * @return An implementation of MBmOTABinSender
+ */
+ virtual MBmOTABinSender& BmOTABinSenderL() = 0;
+
+ virtual CBrowserWindowManager& WindowMgr() const = 0;
+
+ virtual CBrowserPopupEngine& PopupEngine() const = 0;
+
+ /**
+ * Sets uid which should be activated if needed
+ * If not, it activates view immediately.
+ * @since Series 60 1.2
+ * @param aUid Uid of the view
+ */
+ virtual void SetViewToBeActivatedIfNeededL( TUid aUid, TInt aMessageId = 0 ) = 0;
+
+ /**
+ * In some cases it's not permitted to cancel fetching process.
+ * @since Series 60 1.2
+ * @return true is user can cancel fetch
+ */
+ virtual TBool IsCancelFetchAllowed() const = 0;
+
+ /**
+ * Returns Uid of the last used view.
+ * @since Series 60 1.2
+ * @return Uid of the last used view
+ */
+ virtual TUid LastActiveViewId() const = 0;
+
+ /**
+ * Sets uid of the last used view
+ * @since Series 60 1.2
+ * @param aUid Uid of the latest used view
+ */
+ virtual void SetLastActiveViewId( TUid aUid ) = 0;
+
+ /**
+ * Tells if WmlBrowser is in the middle of a shutdown process.
+ * @since Series 60 1.2
+ * @return ETrue if the app is being closed, otherwise with EFalse
+ */
+ virtual TBool ExitInProgress() const = 0;
+
+ /**
+ * Sets a flag in WmlBrowser to indicate shutdown process.
+ * @since Series 60 1.2
+ * @param aValue Determines if exit is in progress or not
+ */
+ virtual void SetExitInProgress( TBool aValue ) = 0;
+
+ /**
+ * Is there connection procedure ongoing?
+ * @since Series 60 1.2
+ * @return ETrue if connection procedure is ongoing
+ */
+ virtual TBool IsConnecting() const = 0;
+
+ /**
+ * Updates progress bar in contentview.
+ * @since Series 60 1.2
+ * @param aStatusMsg Progress bar text
+ */
+ virtual void UpdateNaviPaneL( TDesC& aStatusMsg ) = 0;
+
+ /**
+ * Set view to return to when closing the content view.
+ * @since Series60 1.2
+ * @param aUid View uid
+ */
+ virtual void SetViewToReturnOnClose( TUid const &aUid ) = 0;
+
+ /**
+ * Close the content view by activating the bookmarks view
+ * @since Series60 1.2
+ */
+ virtual void CloseContentViewL() = 0;
+
+ /**
+ * Is embedded mode ongoing?
+ * @since Series60 1.2
+ * @return ETrue if embedded mode is ongoing
+ */
+ virtual TBool IsEmbeddedModeOn() const = 0;
+
+ virtual TBool IsShutdownRequested() const = 0;
+
+ virtual void ExitBrowser(TBool aUserShutdown) = 0;
+
+ /**
+ * Is the avkon appshutter running
+ * @since Series60 2.0
+ * @return ETrue if AppShutter is active
+ */
+ virtual TBool IsAppShutterActive() const = 0;
+
+ /**
+ * Starts prefrences view if no valid ap
+ * @since Series60 2.0
+ * @return ETrue if access point has been set.
+ */
+ virtual TBool StartPreferencesViewL( TUint aListItems ) = 0;
+
+ /**
+ * Returns ETrue if at least one page has been loaded.
+ * @return ETrue if at least one page has been loaded.\n
+ * EFalse if no pages has been loaded.
+ */
+ virtual TBool IsPageLoaded() = 0;
+
+ /**
+ *
+ */
+ virtual TBool IsForeGround() const = 0;
+
+ /**
+ * Returns fetching status.
+ * @return ETrue if there is a fetch going on, EFalse otherwise.
+ */
+ virtual TBool Fetching() const = 0;
+
+ /**
+ * Returns content display status.
+ * @return ETrue if content of a new page is displayed, EFalse otherwise.
+ * (useful for zooming while page is loading)
+ */
+ virtual TBool ContentDisplayed() const = 0;
+
+ /**
+ * Sets the content display status.
+ * (useful for zooming while page is loading)
+ */
+ virtual void SetContentDisplayed( TBool aValue ) = 0;
+
+ /**
+ * Initiate fetching of bookmark.
+ * @param aBookmarkUid Uid of bookmark to fetch.
+ */
+ virtual void FetchBookmarkL( TInt aBookmarkUid ) = 0;
+
+ /**
+ * Initiate fetching of bookmark.
+ * @param aBookmarkItem Bookmark item to fetch.
+ */
+ virtual void FetchBookmarkL( const CFavouritesItem& aBookmarkItem ) = 0;
+
+ /**
+ * Initiate fetching of URL.
+ * @param aUrl URL to fetch.
+ * @param aUserName User name.
+ * @param aPassword Password.
+ * @param aAccessPoint AccessPoint.
+ */
+ virtual void FetchL(
+ const TDesC& aUrl,
+ const TDesC& aUserName,
+ const TDesC& aPassword,
+ const TFavouritesWapAp& aAccessPoint,
+ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType
+ ) = 0;
+
+ /**
+ * Initiate fetching of URL with default AP, empty username and password.
+ * @param aUrl URL to fetch.
+ */
+ virtual void FetchL( const TDesC& aUrl, CBrowserLoadObserver::TBrowserLoadUrlType aUrlType = CBrowserLoadObserver::ELoadUrlTypeOther ) = 0;
+
+ /**
+ * Cancel fetching.
+ */
+ virtual void CancelFetch( TBool aIsUserInitiated ) = 0;
+
+ /**
+ * Sets requested AP.
+ * @param aAp the AP to use when connectionneeded is called.
+ */
+ virtual void SetRequestedAP( TInt aAp ) = 0;
+
+ virtual void SetExitFromEmbeddedMode( TBool aFlag ) = 0;
+
+ //To check and set iShowProgress flag that indicates that
+ //real downloading is going on ( we are not loading from cache )
+
+ virtual TBool IsProgressShown() const = 0;
+
+ virtual void SetProgressShown( TBool aProgressShown ) = 0;
+
+ virtual TBool StartedUp() const = 0;
+
+ virtual TUint32 RequestedAp() const = 0;
+
+ /**
+ * Logs a record of opened pages to AHLE
+ */
+ virtual void LogAccessToRecentUrlL( CBrCtlInterface& aBrCtlInterface ) = 0;
+
+ /**
+ * Logs a record of requested pages to Recent Url Store
+ */
+ virtual void LogRequestedPageToRecentUrlL( const TDesC& aUrl ) = 0;
+
+ /**
+ * Starts animation.
+ */
+ virtual void StartProgressAnimationL() = 0;
+
+ /**
+ * Stops animation.
+ */
+ virtual void StopProgressAnimationL() = 0;
+
+#ifdef __RSS_FEEDS
+ /**
+ * Returns reference to FeedsClientUtilities.
+ */
+ virtual CFeedsClientUtilities& FeedsClientUtilities() const = 0;
+#endif // __RSS_FEEDS
+
+ /**
+ * Returns Uid of the previous active view from the view history.
+ * @since Series 60 3.1
+ * @return Uid of the previous active view
+ */
+ virtual TUid GetPreviousViewFromViewHistory() = 0;
+
+ /**
+ * Set the View for in which the last CBA update was made
+ * @since 5.0
+ */
+ virtual void SetLastCBAUpdateView( TUid aView ) = 0;
+
+ /**
+ * Get the view in which the last CBA update was made
+ * @since 5.0
+ * @return TUid of last view for which CBA was updated
+ */
+ virtual TUid GetLastCBAUpdateView() = 0;
+
+
+ /**
+ * Return if Flash plugin is present in the system or not
+ * @param none
+ * @return TBool
+ */
+ virtual TBool FlashPresent( ) = 0;
+
+ /**
+ * Check state of LaunchHomePage command for dimmed state in options menu and shortcut keymap
+ * @return ETrue is LaunchHomePage command should be dimmed in options menu and shortcut keymap
+ * EFalse otherwise
+ * @param none
+ */
+ virtual TBool IsLaunchHomePageDimmedL() = 0;
+
+ /**
+ * Return if the Browser was originally launched directly into the feeds view
+ * @param none
+ * @return TBool
+ */
+ virtual TBool BrowserWasLaunchedIntoFeeds() = 0;
+
+ /**
+ * Set flag to ETrue if called from another application.
+ * @since Series 60 1.2
+ * @param aValue Is browser called from some another App.
+ */
+ virtual void SetCalledFromAnotherApp( TBool aValue ) = 0;
+
+ /**
+ * Get flag if called from another application.
+ * @since Series 60 3.1
+ * @return Etrue if browser is called from some another App.
+ */
+ virtual TBool CalledFromAnotherApp() = 0;
+ /**
+ * Check from CCoeAppUi if a Dialog or Menu is diplayed on top of the view
+ * @return ETrue if Dialog or Menu is displayed
+ * EFalse otherwise
+ * @param none
+ */
+ virtual TBool IsDisplayingMenuOrDialog() = 0;
+
+ /**
+ * API to complete the delayed UI initialization. Invoked once after first view is up.
+ * @return ETrue if successful
+ * EFalse otherwise
+ * @param none
+ */
+ virtual TBool CompleteDelayedInit() = 0;
+
+};
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BmOTABinSender.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of MBmOTABinSender.
+*
+*
+*/
+
+
+
+#ifndef MBMOTABINSENDER_H
+#define MBMOTABINSENDER_H
+
+// INCLUDES
+
+ // System includes
+#include <e32def.h>
+
+ // User includes
+
+// CLASS DECLARATION
+
+/**
+* Interface to Bookmarks OTA Binary Sending.
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class MBmOTABinSender
+ {
+ public:
+
+ /**
+ * Reset and destroy bookmark list.
+ * @since Series 60 1.2
+ */
+ virtual void ResetAndDestroy() = 0;
+
+ /**
+ * Add bookmark title and URL to be sent
+ * this class will destroy passed objects.
+ * @since Series 60 1.2
+ * @param aURL bookmark's URL
+ * @param aTitle bookmark's title can be Null
+ */
+ virtual void AppendL
+ ( const TText *aURL, const TText *aTitle = NULL ) = 0;
+
+ /**
+ * Add bookmark title and URL to be sent
+ * this class will destroy passed objects
+ * @since Series 60 1.2
+ * @param aURL bookmark's URL
+ * @param aTitle bookmark's title
+ */
+ virtual void AppendL( const TDesC& aURL, const TDesC& aTitle ) = 0;
+
+ /**
+ * Sends all the bookmarks added with AddL().
+ * @since Series 60 1.2
+ */
+ virtual void SendAddressL( ) = 0;
+
+ /**
+ * Sends an OPML file.
+ * @since Series 60 3.2
+ */
+ virtual void SendOPMLFileL(const TDesC& aOPMLFile) = 0;
+ };
+
+#endif
+
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAnimation.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class to put animation to contextPane.
+*
+*
+*/
+
+
+#ifndef BROWSERANIMATION_H
+#define BROWSERANIMATION_H
+
+// INCLUDES
+
+#include <E32BASE.H>
+
+// FORWARD DECLARATIONS
+
+class CAknBitmapAnimation;
+class CFbsBitmap;
+class CEikImage;
+
+// CLASS DECLARATION
+
+/**
+* Encapsulates the animation feature of the browser.
+*/
+class CBrowserAnimation : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aResourceId BMPANIM_DATA resource
+ */
+ static CBrowserAnimation* NewL( TInt aResourceId );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserAnimation();
+
+ public: // New functions
+
+ /**
+ * Starts animation.
+ */
+ void StartL();
+
+ /**
+ * Stops animation.
+ */
+ void StopL();
+
+ TBool IsRunning() { return iIsRunning; };
+
+ protected:
+
+ /**
+ * constructor that can leave.
+ * @param aResourceId BMPANIM_DATA resource
+ */
+ void ConstructL( TInt aResourceId );
+
+ private: // Data
+
+ CAknBitmapAnimation* iAnimation; // animation object
+
+ TBool iIsRunning; // Animation is running
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAppDocument.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser document class
+*
+*
+*/
+
+#ifndef __BROWSERAPPDOCUMENT_H
+#define __BROWSERAPPDOCUMENT_H
+
+#include <browseroverriddensettings.h>
+#include "BrowserUtil.h"
+#include <akndoc.h>
+
+//CONSTANTS
+_LIT( KAttachment,"c:\\system\\temp\\Attachment.html");
+_LIT( KMailerStoreUid,"1000484b");
+
+class MDownloadedContentHandler;
+
+// CAknDocument
+class CBrowserAppDocument : public CAknDocument
+{
+public:
+ CBrowserAppDocument(CEikApplication& aApp);
+ virtual ~CBrowserAppDocument();
+
+ inline void SetFolderToOpen(TInt aFolderId) { iFolderToOpen = aFolderId; }
+
+ /**
+ * Set the MDownloadedContentHandler implementation.
+ * @param aObserver The implementation.
+ * @return None.
+ */
+ inline void SetDownloadedContentHandler(MDownloadedContentHandler *aObserver);
+
+ inline void SetIsContentHandlerRegistered( TBool aIsContentHandlerRegistered )
+ { iIsContentHandlerRegistered = aIsContentHandlerRegistered; }
+
+ inline TBool IsContentHandlerRegistered() const
+ { return iIsContentHandlerRegistered; };
+
+ TInt GetFolderToOpen() const;
+
+ HBufC* GetUrlToOpen() const;
+
+ MDownloadedContentHandler *GetDownloadedContentHandler() const;
+
+ CFileStore* OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFs);
+
+ void OpenFileL(CFileStore*& aFileStore, RFile& aFile);
+
+ TBrowserOverriddenSettings* GetOverriddenSettings();
+
+ inline void SetOverriddenSettings(TBrowserOverriddenSettings* aSettings){ iOverriddenSettings = aSettings; };
+
+protected:
+ CEikAppUi* CreateAppUiL();
+
+private:
+ MDownloadedContentHandler *iDownloadedContentHandler;
+ TInt iFolderToOpen;
+ TBool iIsContentHandlerRegistered;
+ HBufC* iUrlToOpen;
+ TBrowserOverriddenSettings* iOverriddenSettings;
+};
+
+#include "BrowserAppDocument.inl"
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAppDocument.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline methods for CBrowserAppDocument.
+*
+*/
+
+
+#ifndef BROWSER_APP_DOCUMENT_INL
+#define BROWSER_APP_DOCUMENT_INL
+
+// CONSTANTS
+_LIT( KBrowserAppDocPanicString, "BrowserAppDoc" );
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CBrowserAppDocument::SetDownloadedContentHandler
+// Implementation info:
+// Only one of the DownloadedContentHandler is allowed to be set the same time!
+// The following example will cause Panic:
+// browserAppDocument->SetDownloadedContentHandler( this );
+// browserAppDocument->SetFileDownloadedContentHandler( that );
+// It should be used like:
+// browserAppDocument->SetDownloadedContentHandler( NULL );
+// browserAppDocument->SetFileDownloadedContentHandler( this );
+// ----------------------------------------------------------------------------
+//
+inline void CBrowserAppDocument::SetDownloadedContentHandler
+ ( MDownloadedContentHandler* aObserver )
+ {
+ if ( aObserver != NULL )
+ {
+ __ASSERT_ALWAYS( iDownloadedContentHandler == NULL,
+ User::Panic( KBrowserAppDocPanicString,
+ Util::EFileDownloadedContentHandlerAlreadyInitialized ) );
+ }
+ iDownloadedContentHandler = aObserver;
+ }
+
+#endif /* BROWSER_APP_DOCUMENT_INL */
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAppEntryPoint.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* BrowserAppEntryPoint
+*
+*
+*/
+
+
+#ifndef __BROWSERAPPENTRYPOINT_
+#define __BROWSERAPPENTRYPOINT_
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAppServer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CBrowserAppServer
+*
+*
+*/
+
+
+#ifndef BrowserAppServer_H
+#define BrowserAppServer_H
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <AknServerApp.h>
+
+// CLASS DECLARATION
+class CBrowserAppServer : public CAknAppServer
+{
+public:
+ /**
+ * This is a factory function that takes a UID indicating
+ * the type of service that is to be created. The server
+ * application should implement this function to create and
+ * return service implementations for service UIDs that it
+ * recognises, and base call for all other UIDs.
+ * @param aServiceType The service object to create
+ * @return Object for all service implementations
+ */
+ CApaAppServiceBase* CreateServiceL(TUid aServiceType) const; // from CAknAppServer
+
+ /**
+ * Second-phase constructor
+ * @param The server name. ( called by the framework )
+ */
+ void ConstructL(const TDesC& aFixedServerName);
+protected:
+
+ /**
+ * ( not much info about this method... )
+ * Check the capabilities of a client.
+ * @param aMsg Object which encapsulates a client request.
+ * @param aAction
+ * @param aMissing
+ * @return
+ */
+ TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing );
+
+ /**
+ * ( not much info about this method... )
+ * Check the capabilities of a client.
+ * @param aMsg Object which encapsulates a client request.
+ * @param aAction
+ * @param aMissing
+ * @return
+ */
+ TCustomResult CustomFailureActionL(const RMessage2& /*aMsg*/, TInt /*aAction*/, const TSecurityInfo& /*aMissing*/);
+
+private:
+ /**
+ * Document capabilities.
+ */
+ TCapability iClientReqs;
+};
+
+#endif // BrowserAppServer_H
+// End Of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAppUi.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1145 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CBrowserAppUi
+*
+*
+*/
+
+#ifndef __BROWSERAPPUI_H
+#define __BROWSERAPPUI_H
+
+// INCLUDE FILES
+#include <browser_platform_variant.hrh>
+#include <aknviewappui.h>
+#include <connectionobservers.h> // CHG!
+#include <apgcli.h>
+#include "ApiProvider.h"
+#include "BrowserBuild.h"
+#include "WmlBrowserBuild.h"
+#include <recenturlstore.h>
+
+#include <favouritesdb.h>
+#include <downloadedcontenthandler.h>
+#include "WindowInfoProvider.h"
+#include <browseroverriddensettings.h>
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+#include <iaupdateobserver.h>
+#endif
+// FORWARD DECLARATIONS
+class CBrowserViewBase;
+class MCommsModel;
+class CBrowserCommsModel;
+class CBrowserPreferences;
+class CWmlBrowserBmOTABinSender;
+class CBrowserContentView;
+class CBrowserSoftkeysObserver;
+class CBrowserSpecialLoadObserver;
+class CBrowserAsyncExit;
+class CBrowserLauncherService;
+
+// Multiple Windows Support
+class CBrowserPopupEngine;
+class CBrowserWindow;
+class CBrowserWindowManager;
+class CBrowserBookmarksView;
+#ifdef __RSS_FEEDS
+ class CFeedsClientUtilities;
+#endif // __RSS_FEEDS
+
+// CONSTANTS
+
+//
+// BROWSER UI KNOWN mime types
+//
+
+
+_LIT(KOPMLMimeType, "text/x-opml");
+_LIT(KMimeTypeAppXML, "application/xml");
+_LIT(KMimeTypeTextXML, "text/xml");
+//++PK
+_LIT(KMimeTypeCapsTextXML, "Text/xml");
+//++PK
+_LIT(KMimeTypeRSS, "application/rss+xml");
+_LIT(KMimeTypeAtom, "application/atom+xml");
+_LIT(KMimeTypeRDF, "application/rdf+xml");
+
+
+class CBrowserPushMtmObserver;
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+class CIAUpdate;
+class CIAUpdateParameters;
+#endif
+// CLASS DECLARATION
+
+/**
+* CBrowserAppUi.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserAppUi : public CAknViewAppUi,
+ public MApiProvider,
+ public MConnectionStageObserver,
+ public MDownloadedContentHandler,
+ public MWindowInfoProvider
+ #ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ ,public MIAUpdateObserver
+ #endif
+ {
+ public: // Constructors and destructor
+ /**
+ * Default constructor.
+ */
+ CBrowserAppUi();
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserAppUi();
+
+ public:
+#if defined(__S60_50__)
+ /**
+ * Handling the system Event.
+ * @since Series 60 1.2
+ * @param aEvent The System event passed.
+ */
+
+ void HandleSystemEventL(const TWsEvent& aEvent);
+#endif
+ /**
+ * Get the active view.
+ * @since Series 60 1.2
+ * @return The current view.
+ */
+ CBrowserViewBase* ActiveView();
+
+ /**
+ * Checking if user wants to disconnect.
+ * @since Series 60 1.2
+ * @param aUserInitiated it can be closed by user or the system.
+ */
+ void ExitBrowser( TBool aUserInitiated );
+
+ /**
+ * Calls views' method (ALWAYS changes the view's CBA).
+ * @since Series 60 1.2
+ */
+ void UpdateCbaL();
+
+ /**
+ * Handles commandline parameters.
+ * @since Series 60 1.2
+ * @param aDocumentName Parameter string
+ * @param aDoFetch Indicates that this function shoud fetch the given
+ * URL. This parameter is required and used
+ * by new embedding architecture.
+ */
+ void ParseAndProcessParametersL( const TDesC8& aDocumentName, TBool aDoFetch = ETrue );
+
+ /**
+ * Wait a while, contentview initializing itself
+ * @since Series 60 3.2
+ */
+ void WaitCVInit();
+ /**
+ * Set flag to ETrue if called from another application.
+ * @since Series 60 1.2
+ * @param aValue Is browser called from some another App.
+ */
+ void SetCalledFromAnotherApp( TBool aValue );
+
+ /**
+ * Get flag if called from another application.
+ * @since Series 60 3.1
+ * @return Etrue if browser is called from some another App.
+ */
+ TBool CalledFromAnotherApp();
+
+ /**
+ * Override CAknViewAppUi::ProcessCommandL. Calls CAknAppUi::StopDisplayingMenuBar() before iView one.
+ * @since Series 60
+ * @param aCommand GUI command
+ */
+ void ProcessCommandL(TInt aCommand);
+
+ /**
+ * Get the instance of the browser UI.
+ * @since Series 60 1.2
+ * @return The browser UI.
+ */
+ static CBrowserAppUi* Static();
+
+ /**
+ * Contentview.
+ * @since Series 60 1.2
+ */
+ CBrowserContentView* ContentView() const;
+
+ /**
+ * Check Operator Menu or Video Services status
+ * @since Series 60 2.0
+ * @return ETrue if browser is running in Operator Menu or Video Services app
+ */
+ TBool IsEmbeddedInOperatorMenu() const;
+
+ /**
+ * Check if avkon appshutter is running
+ * @since Series60 2.0
+ * @return ETrue if avkon appshutter is running
+ */
+ TBool IsAppShutterActive() const;
+
+ /**
+ * Returns value of iSomeItemsNotSecure member
+ * @since Series60 2.0
+ * @return ETrue if some items is unsecure in page
+ */
+ TBool SomeItemsNotSecure() const;
+
+ /**
+ * Fetch the home page
+ */
+ void FetchHomePageL();
+
+ /**
+ * Check if the application is in foreground
+ * @return ETrue if application is in foreground
+ */
+ inline TBool IsForeGround() const
+ { return iIsForeground; }
+
+ /**
+ * Sets a private status to indicate that Browser has to use
+ * a special exiting method.
+ */
+ inline void SetExitFromEmbeddedMode( TBool aFlag )
+ { iExitFromEmbeddedMode = aFlag; }
+
+ /**
+ * Sets a the uid of the embedding application if the
+ * Browser is embedded.
+ */
+ inline void SetEmbeddingAppliacationUid( TUid aEmbeddingApplicationUid )
+ { iEmbeddingApplicationUid = aEmbeddingApplicationUid; }
+
+ inline void SetBrowserLauncherService( CBrowserLauncherService* aBrowserLauncherService )
+ { iBrowserLauncherService = aBrowserLauncherService; }
+
+ inline CBrowserLauncherService* BrowserLauncherService() const
+ { return iBrowserLauncherService; }
+
+ void CloseWindowL( TInt aWindowId = 0 );
+
+ inline CBrowserBookmarksView* GetBookmarksView()
+ { return iBookmarksView; }
+
+ void OpenLinkInNewWindowL( const CFavouritesItem& aBookmarkItem );
+
+ /**
+ * Launching HomePage (AP home page, or user-defined home page).
+ */
+ void LaunchHomePageL();
+
+ /**
+ * Set home page found flag
+ * @param aPgNotFoundFlag: indicate if home page is found or not.
+ */
+ void SetPgNotFound(TBool aPgNotFoundFlag) {iPgNotFound = aPgNotFoundFlag;};
+
+ /**
+ * Catch any key presses that are Application wide. Called from OfferKeyEventL() in view containers
+ * @param aKeyEvent:
+ * @param aType:
+ */
+ TKeyResponse OfferApplicationSpecificKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+ /**
+ * Sets requested AP.
+ * @param aAp the AP to use when connectionneeded is called.
+ */
+ void SetRequestedAP( TInt aAp );
+
+ /**
+ * Gets the currently focused image, and saves it to Gallery.
+ */
+ void SaveFocusedImageToGalleryL();
+
+ /**
+ * Check if shutdown was requested.
+ * @return ETrue if shutdown was requested.
+ */
+ TBool IsShutdownRequested() const;
+
+ /**
+ * Check if a progress bar is shown.
+ * @return ETrue if progress bar is shown.
+ */
+ TBool IsProgressShown() const;
+
+ /**
+ * Sets prograss bar showing status.
+ * @param ETrue to show, EFalse to hide the progress bar
+ */
+ void SetProgressShown( TBool aProgressShown );
+
+ /**
+ * Check if RFile content should be handled
+ * by BrowserUI rather than sent off to BrCtl
+ * @return ETrue if it should be handled by BrowserUI
+ * @param an RFile filehandle, and an allocated buffer to hold
+ * discovered mime type
+ */
+ TBool CBrowserAppUi::RecognizeUiFileL( RFile& aFileHandle, TBuf<KMaxDataTypeLength>& aDataTypeDes );
+
+ /**
+ * Confirm with the user that a file should be handled by
+ * BrowserUI according to it's mime type with appropriate
+ * dialogs, etc. The name is used for the dialogs
+ * @return ETrue if yes, EFalse otherwise
+ * @param a filename to be shown in dialog, and a mime type
+ * to switch on so we can show different dialogs in different situations
+ */
+ TBool ConfirmUiHandlingL( TFileName& aFilename, TBuf<KMaxDataTypeLength>& aDataTypeDes );
+
+ /**
+ * Given a file handle (RFile) and a file path,
+ * copy the contents of the RFile to the file path given
+ * @return void
+ * @param a filehandle RFile, and a path to copy the contents to
+ */
+ void CopyUiRFileToFileL( RFile& aFile, const TDesC& aFilepath );
+
+ /**
+ * Handle a file that BrowserUi can process (as opposed to
+ * BrCtl)
+ * This will also setup views accordingly (the setup may be different from the HandleUiDownload case)
+ * @return void
+ * @param the full path of the filename to be handled and the mime type
+ * so that handling can be different for different mime types
+ */
+ void HandleUiFileL( TFileName& aFilepath, TBuf<KMaxDataTypeLength>& aDataTypeDes );
+
+ /**
+ * Handle a file that BrowserUi can process that is downloaded from the content view
+ * This will also setup views accordingly (the setup may be different from the HandleUiFile case)
+ * @return void
+ * @param the full path of the filename to be handled and the mime type
+ * so that handling can be different for different mime types
+ */
+ void HandleUiDownloadL( TFileName& aFilepath, TBuf<KMaxDataTypeLength>& aDataTypeDes );
+
+ /**
+ * Launch the browser so that it starts directly into the feeds view
+ * @return void
+ * @param none
+ */
+ void LaunchIntoFeedsL();
+
+ public: // From CEikAppUi
+ /**
+ * Handles user commands.
+ * @param aCommand Command to be handled.
+ */
+ void HandleCommandL( TInt aCommand );
+ void HandleWsEventL(const TWsEvent& aEvent,CCoeControl* aDestination);
+
+ public: // Functions from MApiProvider
+
+ /**
+ * Returns reference to the implementation of MDisplay.
+ * @return An implementation of MDisplay.
+ */
+ MDisplay& Display() const;
+
+ /**
+ * Returns a reference to the implementaion of MConnection,
+ * through wich some high-level connection specific data can be set.
+ * @return reference to MConnection object.
+ */
+ MConnection& Connection( ) const;
+
+ /**
+ * Returns reference to the implementation of MPrefences.
+ * @return An implementation of MPrefences.
+ */
+ MPreferences& Preferences() const;
+
+ /**
+ * Returns reference to the implementation of MCommsModel.
+ * @return An implementation of MCommsModel.
+ */
+ MCommsModel& CommsModel() const;
+
+ /**
+ * Returns reference to the CBrCtlInterface
+ * @return A reference to CBrCtlInterface
+ */
+ CBrCtlInterface& BrCtlInterface() const;
+
+ /**
+ * Returns reference to CBrowserLoadObserver.
+ * @return An implementation of MBrCtlLoadEventObserver
+ */
+ CBrowserLoadObserver& LoadObserver() const;
+
+ /**
+ * Returns reference to CBrowserLoadObserver.
+ * @return An implementation of MBrCtlLoadEventObserver
+ */
+ CBrowserSpecialLoadObserver& SpecialLoadObserver() const;
+
+ CBrowserSoftkeysObserver& SoftkeysObserver() const;
+
+ /**
+ * Returns reference to CBrowserDialogsProvider.
+ * @return An implementation of MBrCtlDialogsProvider
+ */
+ CBrowserDialogsProvider& DialogsProvider() const;
+
+ CBrowserPopupEngine& PopupEngine() const;
+
+ /**
+ * Returns reference to the implementation of MBmOTABinSender.
+ * @return An implementation of MBmOTABinSender.
+ */
+ MBmOTABinSender& BmOTABinSenderL();
+
+
+ /**
+ * Returns reference to the implementation of MStartPageHandler.
+ * @return An implementation of MStartPageHandler.
+ */
+ CBrowserWindowManager& WindowMgr() const;
+
+ /**
+ *
+ */
+ inline TBool StartedUp() const { return iStartedUp; };
+
+ /**
+ *
+ */
+ void ConnNeededStatusL( TInt aErr );
+
+ /**
+ * Checks the last used AP.
+ * @return the Id of the last used AP.
+ */
+ inline TUint32 RequestedAp() const { return iRequestedAp; }
+
+ /**
+ * In some cases it's not permitted to cancel fetching process.
+ * @return ETrue if cancelling fetch is allowed, otherwise EFalse.
+ */
+ TBool IsCancelFetchAllowed() const;
+
+ /**
+ * Sets uid which should be activated if needed.
+ * If not, it activates view immediately.
+ * @param aUid Uid of the view.
+ * @param aMessageId Id of the message.
+ */
+ void SetViewToBeActivatedIfNeededL( TUid aUid, TInt aMessageId = 0 );
+
+ /**
+ * Returns the Uid of the last visited Uid.
+ * @return Uid of the last used view.
+ */
+ TUid LastActiveViewId() const;
+
+ /**
+ * Sets uid of the last used view.
+ * @param aUid Uid of the latest used view.
+ */
+ void SetLastActiveViewId( TUid aUid );
+
+
+ /**
+ * Gets uid of the current view.
+ * @param none
+ * @return TUid of the current view
+ */
+ TUid GetCurrentViewId() const
+ {
+ return iCurrentView;
+ }
+
+ /**
+ * Set the View for in which the last CBA update was made
+ * @since 5.0
+ */
+ void SetLastCBAUpdateView( TUid aView ) { iLastCBAUpdateView = aView; }
+
+ /**
+ * Get the view in which the last CBA update was made
+ * @since 5.0
+ * @return TUid of last view for which CBA was updated
+ */
+ TUid GetLastCBAUpdateView() { return iLastCBAUpdateView; }
+
+ /**
+ * Tells if Browser is in the middle of a shutdown process.
+ * @return ETrue if the app is being closed, otherwise with EFalse.
+ */
+ TBool ExitInProgress() const;
+
+ /**
+ * Sets a flag in Browser to indicate shutdown process.
+ * @param aValue ETrue if exit process will be started, otherwise EFalse.
+ */
+ void SetExitInProgress( TBool aValue );
+
+ /**
+ * Is Browser connection procedure ongoing or not.
+ * @return ETrue if connection procedure is ongoing, otherwise EFalse.
+ */
+ TBool IsConnecting() const;
+
+ /**
+ * Updates progress bar in contentview.
+ * @param aStatusMsg Progress bar text.
+ */
+ void UpdateNaviPaneL( TDesC& aStatusMsg );
+
+ /**
+ * Set view to return to when closing the content view.
+ * @since Series60 1.2
+ * @param aUid View uid
+ */
+ void SetViewToReturnOnClose( TUid const &aUid );
+
+ /**
+ * Close the content view by activating the bookmarks view
+ * @since Series60 1.2
+ */
+ void CloseContentViewL();
+
+ /**
+ * Tells if Browser is in the embedded mode
+ * @return ETrue if the Browser is in the embedded mode,
+ * otherwise with EFalse.
+ */
+ TBool IsEmbeddedModeOn() const;
+
+ /**
+ * Starts prefrences view if no valid ap
+ * @since Series60 2.0
+ * @return ETrue if access point has been set otherwise EFalse.
+ */
+ TBool StartPreferencesViewL( TUint aListItems );
+
+ /**
+ * Gives back a pointer to the Recent Url Store
+ * @return iRecentUrlStore
+ */
+ CRecentUrlStore* RecentUrlStore();
+
+ /**
+ * Returns ETrue if at least one page has been loaded.
+ * @return ETrue if at least one page has been loaded.\n
+ * EFalse if no pages has been loaded.
+ */
+ TBool IsPageLoaded();
+
+ /**
+ * Returns fetching status.
+ * @return ETrue if there is a fetch going on.\n
+ * EFalse otherwise.
+ */
+ TBool Fetching() const;
+
+ /**
+ * Checks if the content of a new page is displayed.
+ * @return ETrue if the content is displayed.
+ * EFalse otherwise.
+ * (useful for zooming while page is loading)
+ */
+ TBool ContentDisplayed() const;
+
+ /**
+ * Sets the content displayed status
+ * (useful for zooming while page is loading)
+ */
+ void SetContentDisplayed( TBool aValue );
+
+ /**
+ * Initiate fetching of bookmark.
+ * @param aBookmarkUid Uid of bookmark to fetch.
+ */
+ void FetchBookmarkL( TInt aBookmarkUid );
+
+ /**
+ * Initiate fetching of bookmark.
+ * @param aBookmarkItem Bookmark item to fetch.
+ */
+ void FetchBookmarkL( const CFavouritesItem& aBookmarkItem );
+
+ /**
+ * Initiate fetching of URL.
+ * @param aUrl URL to fetch.
+ * @param aUserName User name.
+ * @param aPassword Password.
+ * @param aAccessPoint AccessPoint.
+ */
+ void FetchL
+ (
+ const TDesC& aUrl,
+ const TDesC& aUserName,
+ const TDesC& aPassword,
+ const TFavouritesWapAp& aAccessPoint,
+ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType
+ = CBrowserLoadObserver::ELoadUrlTypeOther
+ );
+
+ /**
+ * Initiate fetching of URL with default AP, empty username and password.
+ * @param aUrl URL to fetch.
+ */
+ void FetchL( const TDesC& aUrl, CBrowserLoadObserver::TBrowserLoadUrlType aUrlType
+ = CBrowserLoadObserver::ELoadUrlTypeOther );
+
+ /**
+ * Cancel fetching.
+ */
+ void CancelFetch( TBool aIsUserInitiated = EFalse );
+
+ /**
+ * Starts animation.
+ */
+ void StartProgressAnimationL();
+
+ /**
+ * Stops animation.
+ */
+ void StopProgressAnimationL();
+
+ /*
+ * Return True if browser was launched especially into feeds view
+ */
+ TBool BrowserWasLaunchedIntoFeeds() { return(iOverriddenLaunchContextId == EBrowserContextIdFeeds); }
+
+ /*
+ * record the overridden launch context id
+ */
+ void SetOverriddenLaunchContextId(TUint aId) { iOverriddenLaunchContextId = aId; }
+
+
+#ifdef __RSS_FEEDS
+ /**
+ * Returns reference to FeedsClientUtilities.
+ */
+ CFeedsClientUtilities& FeedsClientUtilities() const;
+#endif // __RSS_FEEDS
+
+
+ /**
+ * Returns the Uid of the previous active view from the view history.
+ * @return Uid of the previous active view.
+ */
+ TUid GetPreviousViewFromViewHistory();
+
+ /**
+ * Return if Flash plugin is present in the system or not
+ * @param none
+ * @return TBool
+ */
+ TBool FlashPresent( );
+
+
+ /**
+ * Check state of LaunchHomePage command for dimmed state in options menu and shortcut keymap
+ * @return ETrue is LaunchHomePage command should be dimmed in options menu and shortcut keymap
+ * EFalse otherwise
+ * @param none
+ */
+ TBool IsLaunchHomePageDimmedL();
+ /**
+ * Check from CCoeAppUi if a Dialog or Menu is diplayed on top of the view
+ * @return ETrue if Dialog or Menu is displayed
+ * EFalse otherwise
+ * @param none
+ */
+ TBool IsDisplayingMenuOrDialog();
+
+ /**
+ * Function to complete the delayed intialization of Browser
+ * @return ETrue if initialization was successful
+ * EFalse otherwise
+ * @param none
+ */
+ TBool CompleteDelayedInit();
+
+
+ public: // from MWindowInfoProvider
+
+ HBufC* CreateWindowInfoLC( const CBrowserWindow& aWindow ) ;
+ void SwitchWindowL();
+
+ /**
+ * Initializes the browser, if it is in embedded mode.
+ * In embedded mode the browser is initialized later, not when it
+ * is constructed. First the browser must wait for the embedding
+ * application to send the startup parameters, and only after that
+ * can be initialized. This method is required and used by new
+ * embedding architecture.
+ */
+ void InitBrowserL();
+
+ /* This method is used for normal startup and when the first view is Bookmarks.
+ * In order to show the Bookmarks view, initialize only bookmarks and delay the
+ * remaining initialization.
+ */
+ void InitBookmarksL();
+
+ /* This method is used for normal startup and when the first view is Bookmarks.
+ * This method includes intialization stuff which are not necessary for Bookmarks
+ * view. This is done using async CIdle approach.
+ */
+ void DelayedInitL();
+
+ /**
+ * From CAknViewAppUi, CEikAppUi
+ * Handles changes in keyboard focus when an
+ * application switches to foreground
+ * @param aForeground Is foreground event?
+ */
+ void HandleForegroundEventL( TBool aForeground );
+
+ public: // From MDownloadedContentHandler
+
+ virtual TBool HandleContentL( const TDesC& aFileName,
+ const CAiwGenericParamList& aParamList,
+ TBool& aContinue );
+
+ virtual TAny* DownloadedContentHandlerReserved1( TAny* /*aAnyParam*/ );
+
+ void SetContentHandlingResult( TBool aClientWantsToContinue, TBool aWasContentHandled );
+
+ /**
+ * Loads the defined search page into content view.
+ */
+ void LoadSearchPageL();
+
+ // This member is public, so BrowserLauncher.dll can close the browser.
+ CBrowserAsyncExit *iBrowserAsyncExit;
+ public:
+ void StopConnectionObserving();
+
+#ifdef BRDO_OCC_ENABLED_FF
+ //Retry flags
+ void SetRetryFlag(TBool flag);
+ TBool GetRetryFlag();
+#endif
+
+ private:
+
+ /**
+ *Callback for late constructing of the SendUi in idle
+ *Needed to provide better response time for the user
+ *@return Returns 0
+ */
+ static TInt DelayedSendUiConstructL(TAny* aCBrowserAppUi);
+
+
+ /**
+ * Calls ProcessCommandParametersL with the given parameters.
+ * @param aParams startup parameter (will be casted).
+ * @return Returns 0 (called only once).
+ */
+ //static TInt DelayedProcessParametersL( TAny* aParams );
+
+ /**
+ * Callback function for CIdle. Calls DoStopDelay.
+ * @param aCBrowserAppUi
+ * @return Returns 0 (called only once).
+ */
+ static TInt StopDelay( TAny* aCBrowserAppUi);
+
+ /**
+ * Stops CActiveSchedulerWait loop started
+ * by ParseAndProcessParametersL().
+ */
+ void DoStopDelay();
+
+ /**
+ *Construct SendUI now
+ */
+ void DoConstructSendUiL();
+
+ /*
+ * Changes the connection
+ * @param
+ * @return None.
+ */
+ void ChangeConnectionL();
+
+ /*
+ * send disconnect event to multiple windows
+ */
+ void SendDisconnectEventL();
+
+ /**
+ * Check if Flash plugin is present in the system or not
+ * @param none
+ * @return TBool
+ */
+ TBool CheckFlashPresent( );
+
+
+ /**
+ * Checks if a HomePage will be launched
+ * @param none
+ * @return TBool - ETrue if no homepage will be launched otherwise return EFalse
+ */
+ TBool NoHomePageToBeLaunchedL();
+
+ /**
+ * Show the name of browser and version of the browser
+ * @param none
+ */
+ void ShowNameAndVersionL();
+
+ /**
+ * There's a homepage to be launched so start in content view
+ * [Convenience function that gets used in 2 places]
+ * @param none
+ */
+ void StartFetchHomePageL();
+ TBool IsSameWinApp(TUid aMessageUid);
+#ifdef BRDO_OCC_ENABLED_FF
+ //For Call back for reconnectivity
+ static TInt RetryConnectivity(TAny* aCBrowserAppUi);
+ TInt RetryInternetConnection();
+ void CheckOccConnectionStage();
+#endif
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ /**
+ * Check updates
+ */
+ void CheckUpdatesL();
+
+ /**
+ * Clean IAD update parameters
+ */
+ void CleanUpdateParams();
+
+ /**
+ * This callback function is called when the update checking operation has completed.
+ *
+ * @param aErrorCode The error code of the observed update operation.
+ * KErrNone for successful completion,
+ * otherwise a system wide error code.
+ * @param aAvailableUpdates Number of the updates that were found available.
+ */
+ void CheckUpdatesComplete( TInt aErrorCode, TInt aAvailableUpdates );
+
+ /**
+ * This callback function is called when an update operation has completed.
+ *
+ * @param aErrorCode The error code of the completed update operation.
+ * KErrNone for successful completion,
+ * otherwise a system wide error code.
+ * @param aResult Details about the completed update operation.
+ * Ownership is transferred.
+ */
+ void UpdateComplete( TInt aErrorCode, CIAUpdateResult* aResultDetails );
+
+ /**
+ * This callback function is called when an update query operation has completed.
+ *
+ * @param aErrorCode The error code of the observed query operation.
+ * KErrNone for successful completion,
+ * otherwise a system wide error code.
+ * @param aUpdateNow ETrue informs that an update operation should be started.
+ * EFalse informs that there is no need to start an update
+ * operation.
+ */
+ void UpdateQueryComplete( TInt aErrorCode, TBool aUpdateNow ){return;}
+
+ /**
+ * This function is checking the existence of the file containing last update time
+ * @param None
+ * @return TBool.
+ */
+ TBool CheckUpdateFileAvailable();
+
+ /**
+ * This function is deleting of the file(if exist) containing last update time
+ * @param None
+ * @return None.
+ */
+ void DeleteUpdateFile();
+
+ /**
+ * This function is will write the current time in file
+ * @param None
+ * @return None.
+ */
+ void WriteUpdateFile();
+
+ /**
+ * This function will read the content of the file if it exists
+ * @param None
+ * @return TBool.
+ */
+ TInt64 ReadUpdateFile();
+
+ /**
+ * Callback function to complete the IAD udated check on CIdle::RunL
+ * @param None
+ * @return TBool.
+ */
+ static TInt CompleteIADUpdateCallback( TAny* aBrowserAppUi );
+#endif
+ protected:
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Sends Browser to the background. The task whose window group
+ * is at the next ordinal position is brought up to the foreground.
+ */
+ void SendBrowserToBackground();
+
+ /**
+ *
+ */
+ void DelayedConstructL();
+
+ /**
+ * Clear the cache.
+ */
+ void ClearTheCacheL(TBool afterQuery = EFalse, TBool aShowDoneNote = ETrue);
+
+
+ /**
+ * Delete cookies.
+ */
+ void DeleteCookiesL();
+
+
+ /**
+ * Delete Form and Password Data
+ * @param aShowPromptAndComplete - show confirmation prompt and completion info note if True
+ */
+ void ClearFormAndPasswdDataL(TBool aShowPromptAndComplete);
+
+
+ /**
+ * Clear History of all open windows
+ */
+ void CBrowserAppUi::ClearHistoryL();
+
+
+ /**
+ * Prompt before clearing history
+ */
+ void CBrowserAppUi::ClearHistoryWithPromptL();
+
+
+ /**
+ * Clear All Privacy Data
+ */
+ void CBrowserAppUi::ClearAllPrivacyL();
+
+ /**
+ * Disconnect.
+ */
+ void DisconnectL();
+
+ /**
+ * Updates the soft keys. Previously a callback in ViewShellObserver
+ */
+ void UpdateSoftKeys();
+ /**
+ * Logs a record of opened pages to Recent Url Store
+ */
+ void LogAccessToRecentUrlL( CBrCtlInterface& aBrCtlInterface );
+
+ /**
+ * Logs a record of requested pages to Recent Url Store
+ */
+ void LogRequestedPageToRecentUrlL( const TDesC& aUrl );
+
+ /**
+ * Load previous page from history (back button)
+ * @since Series60 1.2
+ */
+ void HistoryLoadPrevious();
+
+ /**
+ * Load next page from history (forward button)
+ * @since Series60 1.2
+ */
+ void HistoryLoadNext();
+
+ /**
+ * Creating a full url containing username, password,
+ * server domain and document path.
+ * @return buffer pointing to the url
+ */
+ HBufC* CreateFullUrlLC( const TDesC& aUrl,
+ const TDesC& aUsername,
+ const TDesC& aPassword );
+
+
+ protected: // from MConnectionStageObserver
+ /**
+ * Connection stage achieved.
+ */
+ void ConnectionStageAchievedL();
+
+ protected: // From CAknViewAppUi, CEikAppUi
+
+ /**
+ * Processes shell commands.
+ * @param aCommand Command to process.
+ * @return //TODO
+ */
+ TBool ProcessCommandParametersL(TApaCommand aCommand,TFileName& /*aDocumentName*/,const TDesC8& /*aTail*/ );
+
+
+ /**
+ * Handle the external message.
+ * @param aClientHandleOfTargetWindowGroup Handle.
+ * @param aMessageUid Message id.
+ * @param aMessageParameters Message parameters.
+ * @return Response to the message.
+ */
+ MCoeMessageObserver::TMessageResponse HandleMessageL( TUint32 aClientHandleOfTargetWindowGroup,
+ TUid aMessageUid,
+ const TDesC8& aMessageParameters );
+
+ /**
+ * Handles screen resolution changes
+ */
+ void HandleResourceChangeL( TInt aType );
+
+ /**
+ * Handles application specific events like OOM from window server.
+ * @param aEventType The type of event.
+ * @param aWsEvent window server event.
+ * @return Key response.
+ */
+ void HandleApplicationSpecificEventL(TInt aEventType, const TWsEvent& aWsEvent);
+
+ private:
+
+ TUint32 iRequestedAp;
+ TBool iCalledFromAnotherApp;
+
+ TBool iIsForeground;
+ TUid iViewToBeActivatedIfNeeded;
+ TUid iViewToReturnOnClose;
+
+ TUid iLastViewId;
+ TBool iSecureSiteVisited;
+
+
+ CWmlBrowserBmOTABinSender* iSender;
+
+ CConnectionStageNotifierWCB* iConnStageNotifier;
+
+ CIdle* iIdle; // at construction phase
+ CActiveSchedulerWait iWait;
+
+ TBool iExitInProgress;
+
+ RSocketServ iSockServSess;
+
+ TBool iShutdownRequested;
+ TBool iHTTPSecurityIndicatorSupressed;
+ CRecentUrlStore* iRecentUrlStore;
+ TInt iParametrizedLaunchInProgress; //ETrue when launch with parameters is in idling
+
+ TBool iExitFromEmbeddedMode;
+
+ // Flag to indicate that real downloading is
+ // going on ( we are not loading from cache )
+
+ TBool iShowProgress;
+ TBool iLongZeroPressed;
+ TBool iStartedUp;
+ TBool iFeatureManager;
+ TBool iUserExit;
+ TBool iPgNotFound;
+ TBool iSuppressAlwaysAsk;
+ TBool iFlashPresent;
+ TBool iSpecialSchemeinAddress;
+
+ RFavouritesSession iFavouritesSess;
+
+ // The Uid of the embedding application.
+ TUid iEmbeddingApplicationUid;
+
+ TUid iPreviousView;
+ TUid iCurrentView;
+
+ // Uid for tracking what view the last CBA update was made under,
+ // used to avoid extraneous updates
+ TUid iLastCBAUpdateView;
+
+ // Observing changes in PushMtm
+ CBrowserPushMtmObserver* iPushMtmObserver; // owned
+
+ // Record browser launch's overridden context id
+ TUint iOverriddenLaunchContextId;
+
+ TBool iBrowserAlreadyRunning;
+
+#ifdef BRDO_OCC_ENABLED_FF
+ CPeriodic *iRetryConnectivity;
+ TBool reConnectivityFlag;
+#endif
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ CIAUpdate* iUpdate;
+ CIAUpdateParameters* iParameters;
+ RFs iFs;
+ CIdle* iDelayedUpdate;
+#endif
+ TBool iSameWinApp;
+ TInt iWindowIdFromFromExternApp;
+ protected:
+
+ CBrowserCommsModel* iCommsModel;
+ CBrowserPreferences* iPreferences;
+
+ MConnection* iConnection;
+
+ CBrowserDialogsProvider* iDialogsProvider;
+ mutable CBrowserPopupEngine* iPopupEngine;
+ CBrowserLauncherService* iBrowserLauncherService; // Not owned
+ CActiveSchedulerWait iLauncherServiceWait;
+ TBool iClientWantsToContinue;
+ TBool iWasContentHandled;
+ RArray<TUint>* iZoomLevelArray;
+ TUint iCurrentZoomLevelIndex;
+ TUint iCurrentZoomLevel;
+
+ CBrowserWindowManager* iWindowManager;
+ CIdle* iLateSendUi;
+ CBrowserBookmarksView* iBookmarksView; // not owned
+#ifdef __RSS_FEEDS
+ CFeedsClientUtilities* iFeedsClientUtilities;
+#endif // __RSS_FEEDS
+ };
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAppViewBase.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserAppViewBase.
+*
+*
+*/
+
+
+#ifndef BROWSER_APP_VIEW_BASE_H
+#define BROWSER_APP_VIEW_BASE_H
+
+// INCLUDE FILES
+#include <aknview.h>
+
+// FORWARD DECLARATION
+
+class MApiProvider;
+
+// CLASS DECLARATION
+
+/**
+* Class to encapsulate a softkey pair made up of an Command ID and Resource qtn
+*/
+class TSKPair
+ {
+public:
+ /**
+ * Constructor.
+ * @param NONE. command and qtn are set to default.
+ */
+ TSKPair();
+
+ /**
+ * Constructor.
+ * @param Command and Resource IDs
+ */
+ TSKPair(TInt aId,TInt aRsc);
+
+ /**
+ * check to see if command/qtn are not currently set to the default assignment
+ */
+ TBool IsAssigned();
+
+ /**
+ * define an == operator to check pair equality
+ * @param TSK pair
+ */
+ TBool operator==(TSKPair aSKPair);
+
+ /**
+ * define an = operator for assignment
+ * @param TSK pair
+ */
+ void operator=(TSKPair aSKPair);
+
+ /**
+ * a function to set the pair directly
+ * @param Command and Resource Ids
+ */
+ void setPair(TInt aId, TInt aRsc);
+
+ /**
+ * retrieve the command ID
+ */
+ TInt id() { return iCmdId; }
+
+ /**
+ * retrieve the qtn resource ID
+ */
+ TInt qtn() { return iQtnRsc; }
+private:
+
+ /**
+ * private variables to hold command and resource ids
+ */
+ TInt iCmdId;
+ TInt iQtnRsc;
+ };
+
+/**
+* Base class all of the browser's views. Allows CBA setting and holds pointer
+* to API provider.
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserViewBase : public CAknView
+ {
+ public: // construction
+
+ /**
+ * Constructor.
+ * @param aApiProvider The API provider
+ */
+ CBrowserViewBase( MApiProvider& aApiProvider );
+
+ public: // new methods
+
+ /**
+ * Get the API provider.
+ * @since Series 60 1.2
+ * @return The API provider
+ */
+ MApiProvider& ApiProvider();
+
+ /**
+ * Update the view's CBA, according to its current state.
+ * This will call the view's CommandSetResourceIdL to get the
+ * command set's resource id and then change the command set to that.
+ * Note, there is no Push/Pop of CBA-s! The CBA which changes is always
+ * that of the view; that is, if there is another CBA Push()-ed on top
+ * of it (e.g. dialogs etc.), that will be unchanged.
+ * @since Series 60 1.2
+ */
+ void UpdateCbaL();
+
+ /**
+ * Switch cba visibility, checking landscape state
+ * @param aVisible Visibility
+ */
+ void MakeCbaVisible(TBool aVisible);
+
+ /**
+ * Update goto pane, if it is present in the view.
+ * @since Series 60 1.2
+ */
+ virtual void UpdateGotoPaneL();
+
+ /**
+ * Clear CBA.
+ * @since Series 60 1.2
+ */
+ void ClearCbaL();
+
+ /**
+ * Return command set id, to be displayed.
+ * Derived classes should implement this method.
+ * @since Series 60 1.2
+ * @return
+ * - 0 if the command set should not be changed\n
+ * - Otherwise, the desired command set's resource id
+ */
+ virtual TInt CommandSetResourceIdL() = 0;
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ virtual void CommandSetResourceDynL(TSKPair &lsk, TSKPair &rsk, TSKPair &msk) = 0;
+
+ /**
+ * Handles client rect changes
+ */
+ virtual void HandleClientRectChange() = 0;
+
+ /**
+ * Gets the id of the previous active view.
+ */
+ inline TUid GetPreviousViewID()
+ { return iPreviousViewID; }
+
+ /**
+ * Sets the id of the previous active view.
+ * @param aUid UID of previous view
+ */
+ inline void SetPreviousViewID(TUid aUid)
+ { iPreviousViewID = aUid; }
+
+ /**
+ * gets the current view's id
+ */
+ virtual TUid Id() const = 0;
+
+ virtual void LaunchSearchApplicationL( const TDesC& aSearchString );
+ //private:
+ protected:
+
+ MApiProvider& iApiProvider; // API provider
+
+ // Id of the view which was active before this view.
+ TUid iPreviousViewID;
+
+
+ private:
+ // For each child view class, track
+ // the last command set, dynamic lsk,rsk,msk settings
+ // to update CBA as little as possible
+ TInt iLastCommandSet;
+ TSKPair iLastLSK;
+ TSKPair iLastRSK;
+ TSKPair iLastMSK;
+ };
+
+#endif// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserApplication.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser application class
+*
+*
+*/
+
+
+#ifndef __BROWSER_APPLICATION_H
+#define __BROWSER_APPLICATION_H
+
+#include <aknapp.h>
+
+const TUid KUidBrowserApplication = { 0x10008D39 };
+
+class CBrowserApplication : public CAknApplication
+{
+protected:
+ TUid AppDllUid() const;
+ CApaDocument* CreateDocumentL();
+ void NewAppServerL(CApaAppServer*& aAppServer);
+};
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserAsyncExit.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* CBrowserAsyncExit class can exit the Browser in async mode. It calls the CBrowserAppUi`s
+* ExitBrowserL() method, when the object completes the request.
+* The class helps avoiding to send event.iCode EKeyApplication1; event
+* to the embedded browser to exit.
+*
+*
+*/
+
+#ifndef __BROWSERASYNCEXIT_H
+#define __BROWSERASYNCEXIT_H
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+
+// CLASS DEFINITION
+class CBrowserAsyncExit : public CActive
+ {
+ public: // constructors
+
+ /**
+ * Create a CBrowserAsyncExit object, Leaves on failure.
+ * @param aApiProvider Api provider. Not owned.
+ * @return A pointer to the created instance of CBrowserAsyncExit.
+ */
+ static CBrowserAsyncExit* NewL( MApiProvider* aApiProvider );
+
+ /**
+ * Create a CBrowserAsyncExit object. Leaves on failure.
+ * @param aApiProvider Api provider. Not owned.
+ * @return A pointer to the created instance of CBrowserAsyncExit
+ */
+ static CBrowserAsyncExit* NewLC( MApiProvider* aApiProvider );
+
+ private: // default c++, and 2nd phase constructor
+
+ /**
+ * Constructs this object
+ * @param aApiProvider Api provider. Not owned.
+ */
+ CBrowserAsyncExit( MApiProvider* aApiProvider );
+
+ /**
+ * Performs second phase construction of this object
+ */
+ void ConstructL();
+
+ public:
+
+ /**
+ * Destroy the object and release all memory objects
+ */
+ ~CBrowserAsyncExit();
+
+ /**
+ * Complete an asynchronous request.
+ */
+ void Start();
+
+ protected: // from CActive
+
+ /**
+ * Cancel any outstanding requests
+ */
+ void DoCancel();
+
+ /**
+ * Handles object`s request completion event.
+ */
+ void RunL();
+
+ private:
+
+ /**
+ * To access CBrowserAppUi`s BrowserExitL() method.
+ */
+ MApiProvider* iApiProvider; // not owned
+ };
+
+#endif // __BROWSERASYNCEXIT_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserBmOTABinSender.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This class implements the behavior of an anchor element.
+*
+*/
+
+#ifndef WMLBROWSERBMOTABINSENDER_H
+#define WMLBROWSERBMOTABINSENDER_H
+
+// INCLUDES
+
+ // System includes
+#include <e32base.h>
+#include <bldvariant.hrh>
+
+ // User includes
+//#include "WmlBrowserBuild.h"
+
+
+
+#include "BmOTABinSender.h"
+
+// FORWARD DECLARATION
+class CSendUi;
+class CMessageData;
+
+// CLASS DECLARATION
+
+/**
+* The class for implementing the CBookmarkOTAItem.
+* Item is binary encoded in WBXML format.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBookmarkOTAItem : public CBase
+ {
+ friend class CWmlBrowserBmOTABinSender;
+
+ public:
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aURL is URL of the bookmark or current card's URL address
+ * @param aTitle is title of the bookmark or title of the current card's URL address
+ * @return new Bookmark OTA item
+ */
+ static CBookmarkOTAItem* NewL( const TDesC& aURL,
+ const TDesC& aTitle );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBookmarkOTAItem();
+
+ protected:
+
+ /**
+ * Constructor.
+ */
+ CBookmarkOTAItem();
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * Encode input params to binary WBXML format.
+ * @since Series 60 1.2
+ * @param aURL is URL of the bookmark or current card's URL address
+ * @param aTitle is title of the bookmark or title of the current card's URL address
+ */
+ void ConstructL( const TDesC& aURL, const TDesC& aTitle );
+
+ protected: // data
+
+ /**
+ * Binary encoded bookmark in WBXML format
+ */
+ HBufC *iBookmark;
+ };
+
+/**
+* The class for implementing the CWmlBrowserBmOTABinSender.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CWmlBrowserBmOTABinSender : public CBase, public MBmOTABinSender
+ {
+ public : // public construction
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ */
+ static CWmlBrowserBmOTABinSender* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CWmlBrowserBmOTABinSender();
+
+ public: // from MBmOTABinSender
+
+ /**
+ * Reset and destroy bookmark list.
+ * @since Series 60 1.2
+ */
+ void ResetAndDestroy();
+
+ /**
+ * Add bookmark title and URL to be sent
+ * this class will destroy passed objects.
+ * @since Series 60 1.2
+ * @param aURL bookmark's URL
+ * @param aTitle bookmark's title can be Null
+ */
+ void AppendL( const TText *aURL, const TText *aTitle = NULL );
+
+ /**
+ * Add bookmark title and URL to be sent
+ * this class will destroy passed objects.
+ * @since Series 60 1.2
+ * @param aURL bookmark's URL
+ * @param aTitle bookmark's title
+ */
+ void AppendL( const TDesC& aURL, const TDesC& aTitle );
+
+ /**
+ * Sends all the bookmarks added with AddL().
+ * @since Series 60 1.2
+ */
+ void SendAddressL( );
+
+ /**
+ * Sends an OPML file.
+ * @since Series 60 3.2
+ */
+ virtual void SendOPMLFileL(const TDesC& aOPMLFile);
+
+ protected: // construction
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ /**
+ * Constructor.
+ */
+ CWmlBrowserBmOTABinSender();
+
+ private: // new methods
+
+ /**
+ * Creates a new attachment file for BT and IR´.
+ * @since Series 60 1.2
+ * @param fs Already connected file session
+ * @param aBody body of the message
+ * @return system error code or KErrNone
+ */
+ TInt WriteMessageBodyIntoFileL( RFs &fs, TDesC& aBody );
+
+ private: // data
+
+ /// List of bookmarks to be sent. Owned.
+ CArrayPtrFlat<CBookmarkOTAItem> iBookmarks;
+
+ /// Pointer to SendUi. Owned.
+ CSendUi* iSendUi;
+ };
+
+
+#endif // WMLBROWSERBMOTABINSENDER_H
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserBuild.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Defines whether WIM is part of Browser or not
+*
+*
+*/
+
+
+// INCLUDES
+#if !defined(__BROWSERBUILD_H__)
+#define __BROWSERBUILD_H__
+
+// Comment out to disable Expanded view support
+//#define _EXPANDED_VIEW //lint !e760 expression macro ok
+
+
+
+
+
+// Use this flag to send bookmark as plaing ascii text
+// instead of binary OTA.
+//#define _BOOKMARK_SENT_ASCII
+// Use this flag to enable Bluetooth and IR
+//#define _BOOKMARK_SEND_BT_IR_ENABLED
+//#endif
+
+#endif // __BROWSERBUILD_H__
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserCommandLineParser.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* parsing command lines could be used in view activation
+*
+*
+*/
+
+
+
+#ifndef BROWSER_COMMAND_LINE_PARSER_H
+#define BROWSER_COMMAND_LINE_PARSER_H
+
+// INCLUDES
+#include <E32Base.h>
+
+// CLASS DECLARATION
+
+/**
+* CBrowserCommandLineParser8 class
+* Purpose: parsing command lines could be used in view activation.
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserCommandLineParser8 : public CBase
+ {
+ public: //Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aParamString String of parameters
+ */
+ static CBrowserCommandLineParser8* NewL( const TDesC8& aParamString );
+
+ /**
+ * Two-phased constructor. Cleanup stack used.
+ * @param aParamString String of parameters
+ */
+ static CBrowserCommandLineParser8* NewLC( const TDesC8& aParamString );
+
+ /**
+ * C++ Default constructor.
+ */
+ CBrowserCommandLineParser8();
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserCommandLineParser8();
+
+ public: // New functions
+
+ /**
+ * Count the parameters.
+ * @since Series 60 1.2
+ * @return Count of parameters
+ */
+ TUint Count() const;
+
+ /**
+ * Set parameters to member variable.
+ * @since Series 60 1.2
+ * @param aParamString String of parameters
+ */
+ void SetL( const TDesC8& aParamString );
+
+ /**
+ * Get pointer to a certain parameter in parameter array.
+ * @since Series 60 1.2
+ * @param aIndex Index from where to get the parameter
+ */
+ TPtrC8 Param( TUint aIndex );
+
+ /**
+ * Check whether the parameter is integer or not.
+ * @since Series 60 1.2
+ * @param aIndex Index from where to get the parameter
+ * @return ETrue if the parameter is integer
+ */
+ TBool IntegerParam( TUint aIndex );
+
+ /**
+ * Extract a signed integer from parameter array.
+ * @since Series 60 1.2
+ * @param aIndex Index from where the parameter is extracted
+ * @return Parameter as signed integer
+ */
+ TInt ParamToInteger( TUint aIndex );
+
+
+ private:
+
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL( const TDesC8& aParamString );
+
+ /**
+ * Fill array with parameters.
+ * Strips any white spaces.
+ * @since Series 60 1.2
+ */
+ void FillUpParamsL();
+
+ private: // Data
+
+ HBufC8* iParamString ; //copy created in ConstructL
+
+ CArrayFixFlat<TPtrC8>* iParams; //array of parameters
+ };
+
+#endif // BROWSER_COMMAND_LINE_PARSER_H// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserCommsModel.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of class CBrowserCommsModel.
+*
+*
+*/
+
+
+#ifndef BROWSER_COMMS_MODEL_H
+#define BROWSER_COMMS_MODEL_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <ActiveApDb.h>
+#include "CommsModel.h"
+
+// FORWARD DECLARATION
+
+// class CApListItem;
+class CApListItemList;
+
+// CLASS DECLARATION
+
+/**
+* Comms model for the Browser.
+* Provides CommsDb / AP database handling. Because querying AP-s is slow, but
+* there should not be many of them, this class keeps a cached copy of AP-s.
+* AP db is observed, and the cached list of AP-s is kept up to date.
+* However, if database changes but we cannot get new data (database locked
+* etc., the cached list is kept (until we can get the new data successfully)).
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserCommsModel:
+ public CBase, public MCommsModel, public MActiveApDbObserver
+ {
+ public: // construction
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed model
+ */
+ static CBrowserCommsModel* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserCommsModel();
+
+ protected: // construction
+
+ /**
+ * Constructor.
+ */
+ CBrowserCommsModel();
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ public: // from MCommsModel
+
+ /**
+ * Get Access Point Engine object.
+ * @since Series 60 1.2
+ * @return Access Point Engine object
+ */
+ CActiveApDb& ApDb() const;
+
+ /**
+ * Get CommsDb object.
+ * @since Series 60 1.2
+ * @return CommsDb object
+ */
+ CCommsDatabase& CommsDb() const;
+
+ /**
+ * Get a copy of access points in a list.
+ * The caller is responsible for destroying the returned list.
+ * @since Series 60 1.2
+ * @return List of access points.
+ */
+ CApListItemList* CopyAccessPointsL();
+
+ /**
+ * Get pointer to model's cached access points.
+ * The owner of the list is the model. List contents may be updated
+ * if database update occurs.
+ * @since Series 60 1.2
+ * @return List of access points.
+ */
+ const CApListItemList* AccessPointsL();
+
+ /**
+ * Refresh the cached access points.
+ */
+ void RefreshAccessPointsL();
+
+ /**
+ * Add an observer. Duplicates allowed.
+ * @since Series 60 1.2
+ * @param aObserver The observer to add.
+ */
+ void AddObserverL( MCommsModelObserver& aObserver );
+
+ /**
+ * Remove an observer. Does nothing if not added / already removed.
+ * @since Series 60 1.2
+ * @param aObserver The observer to remove.
+ */
+ void RemoveObserver( MCommsModelObserver& aObserver );
+
+ public: // from MActiveApDbObserver
+
+ /**
+ * Handle database event (refresh cached AP list on change).
+ * @since Series 60 1.2
+ * @param aEvent Database-related event.
+ */
+ void HandleApDbEventL( MActiveApDbObserver::TEvent aEvent );
+
+ private: // new methods
+
+ /**
+ * Get all access points (implementation detail). If database is
+ * inaccessible, old data remains and update becomes pending.
+ * @since Series 60 1.2
+ */
+ void GetAccessPointsL();
+
+ /**
+ * Get all access points (implementation detail).
+ * @since Series 60 1.2
+ * @param aList Append access points to this list
+ */
+ void DoGetAccessPointsL( CApListItemList& aList ) const;
+
+ /**
+ * Successfully got new AP data. Notify observers.
+ * @since Series 60 1.2
+ */
+ void NotifyObserversL();
+
+ private: // data
+
+ /**
+ * Access Point database.
+ */
+ CActiveApDb* iDb;
+
+ /**
+ * Cached AP list. Since querying the AP Engine is expensive (slow),
+ * we maintain a cached list of AP-s for quick access. Hopefully
+ * there are not too many of them.
+ */
+ CApListItemList* iCachedApList;
+
+ /**
+ * Array of observer pointers. Array owned, contents not.
+ */
+ CArrayPtrFlat<MCommsModelObserver>* iObservers;
+
+ /**
+ * ETrue if database has changed, but could not get new data yet.
+ */
+ TBool iUpdatePending;
+
+
+ /**
+ *Etrue if referesh needs to be done on next access to cached data
+ *Added as a result of performance tuning
+ */
+ TBool iDelayedRefresh;
+ };
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserContentView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,714 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser content view
+*
+*
+*/
+
+
+#ifndef __BROWSERCONTENTVIEW_H
+#define __BROWSERCONTENTVIEW_H
+
+// INCLUDES
+#include <apparc.h>
+#include <sendui.h>
+#include <FindItemDialog.h>
+#include <brctlinterface.h>
+
+#include "BrowserAppViewBase.h"
+#include "BrowserGotoPane.h"
+#include <AknToolbar.h>
+#include <AknToolbarObserver.h>
+#include <aknappui.h>
+#include "WindowObserver.h"
+
+// FORWARD DECLARATIONS
+
+class TVwsViewId;
+class CBrowserContentViewContainer;
+class CBrowserContentViewZoomModeTimer;
+class CBrowserBookmarksModel;
+class CAknNavigationControlContainer;
+class CFindItemMenu;
+class CAknInfoPopupNoteController;
+class CAknStylusPopUpMenu;
+class CBrowserContentViewToolbar;
+class CBrowserShortcutKeyMap;
+
+// CONSTANTS
+
+const TInt KStatusMessageMaxLength=40;
+
+//The Zoom tooltip won't disappear
+const TInt KZoomModeShowDisableTime( 5* 1000 * 1000 ); // 5000 seconds - disable the timer
+
+
+// STRUCTS
+
+struct TWindowsMenuItemsDimCheck
+ {
+ TBool dimOpenInNewWin;
+ TBool dimSwitchWin ;
+ TBool dimCloseWin ;
+ TBool dimAllowPopups ;
+ TBool dimBlockPopups ;
+ };
+
+/**
+* Declaration for Browser's content view.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserContentView : public CBrowserViewBase,
+ public MGotoPaneObserver,
+ public MBrCtlStateChangeObserver,
+ public MBrCtlCommandObserver,
+ public MAknToolbarObserver,
+ public MWindowObserver
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ * @param aApiProvider Reference to the API provider.
+ * @param aRect
+ */
+ static CBrowserContentView* NewLC( MApiProvider& aApiProvider, TRect& aRect );
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserContentView();
+
+ /**
+ * Callback - we should initialize the list of DO elements.
+ * @since 1.2
+ */
+ void OptionListInitL();
+
+ /**
+ * Callback - we should add an element to the list of DO elements.
+ * @since 1.2
+ */
+ void OptionListAddItemL(
+ const TDesC& aText,
+ TUint32 aElemID,
+ TBool aIsPrevType );
+
+ /**
+ * Update the title.
+ * @since 1.2
+ */
+ void UpdateTitleL( MApiProvider& aApiProvider );
+
+ CBrowserContentViewContainer* Container() const{ return iContainer; };
+
+ void ResetPreviousViewFlag() { iWasInFeedsView = EFalse; }
+ /**
+ * Get the top left position of the application window.
+ * This is used to place the toolbar.
+ * @return The top left point of the application rect on the screen
+ */
+ TPoint OnScreenPosition();
+
+ /**
+ * Get a pointer to the instance of the class handling the toolbar state.
+ * This is used when the Browser is shut down, to save the user settings
+ * @return A pointer to the class handling the toolbar
+ */
+ CBrowserContentViewToolbar* BrowserContentViewToolbar() { return iBrowserContentViewToolbar; }
+
+ /**
+ * Find if the platform spports touch
+ * @return ETrue if the platform supports touch, EFalse otherwise
+ */
+ TBool PenEnabled() { return iPenEnabled; }
+
+ /**
+ * Find if the Full Screen mode is on
+ * @return ETrue if the Full Screen mode is on, EFalse otherwise
+ */
+ TBool FullScreenMode() { return iContentFullScreenMode; }
+ public: // from MEikStatusPaneObserver
+
+ /**
+ * Handles status pane size change.
+ */
+ void HandleStatusPaneSizeChange();
+
+ public: // from MBrCtlStateChangeObserver
+
+ /**
+ * State change event handling for ImageMapView changes.
+ * @param aState which state we are in
+ * @param aValue state specific value
+ * @return void
+ */
+ void StateChanged( TBrCtlDefs::TBrCtlState aState, TInt aValue );
+
+ public: // from MBrCtlCommandObserver
+
+ /**
+ * Executes commands requested by the webengine
+ * @param aCommand which state we are in
+ * @param aAttributesNames name list
+ * @param aAttributeValues value list
+ * @return void
+ */
+ void HandleCommandL(TBrCtlDefs::TBrCtlClientCommands aCommand, const CArrayFix<TPtrC>& aAttributesNames,
+ const CArrayFix<TPtrC>& aAttributeValues) ;
+ /* Handle Goto Pane event.
+ * @since 1.2
+ * @param aGotoPane The Goto Pane in which the event occurred.
+ * @param aEvent Goto Pane event
+ */
+ void HandleGotoPaneEventL(
+ CBrowserGotoPane* aGotoPane,
+ MGotoPaneObserver::TEvent aEvent );
+
+ /**
+ * Set Last visited bookmark.
+ * @since 1.2
+ */
+ void SetLastVisitedBookmarkL();
+
+ /**
+ * Update navi pane.
+ * @since 1.2
+ * @param aStatusMsg Status message
+ */
+ void UpdateNaviPaneL( TDesC& aStatusMsg );
+
+ /**
+ * Update navi pane.
+ * @since 1.2
+ * @param aLeftScrollBar Will the left scrollbar be updated
+ * @param aRightScrollBar Will the right scrollbar be updated
+ */
+ void UpdateNaviPaneL( TBool aLeftScrollBar, TBool aRightScrollBar );
+
+ /**
+ * Get the id.
+ * @since 1.2
+ * @return UID
+ */
+ TUid Id() const;
+
+ /**
+ * Is find item in progress.
+ * @since 1.2
+ * @return ETrue if the find item is in progress, otherwise EFalse
+ */
+ TBool FindItemIsInProgress();
+
+ /**
+ * Handles client rect changes
+ */
+ void HandleClientRectChange();
+
+ /**
+ * Zoom page in zoom mode
+ * @since 3.2.3
+ */
+ void ZoomModeImagesL();
+
+ /**
+ * Zoom page in
+ * @since 3.0
+ */
+ void ZoomImagesInL( TInt aDuration = KZoomModeShowDisableTime );
+
+ /**
+ * Zoom page out
+ * @since 3.0
+ */
+ void ZoomImagesOutL( TInt aDuration = KZoomModeShowDisableTime );
+
+ /**
+ * Zoom slider is to be visible or not in Content View.
+ * @param aVisible. ETrue if the slider is to visible, EFalse if not.
+ * @since 5.0
+ */
+ void MakeZoomSliderVisibleL( TBool aVisible );
+
+ /**
+ * Is ZoomSlider is up?
+ * @since 5.0
+ * @return ETrue if the ZoomSlider is up, otherwise EFalse
+ */
+ TBool ZoomSliderVisible() { return iZoomSliderVisible; }
+
+ /**
+ * Is History view is up?
+ * @since 3.0
+ * @return ETrue if the History View is up, otherwise EFalse
+ */
+ TBool IsHistoryViewUp();
+
+ /**
+ * Is History view at the beginning i.e. first page in history
+ * @since 5.0
+ * @return ETrue if the History is at the beginning, otherwise EFalse
+ */
+ TBool IsHistoryAtBeginning();
+
+ /**
+ * Is History view at the end i.e. last page in history
+ * @since 5.0
+ * @return ETrue if the History is at the end, otherwise EFalse
+ */
+ TBool IsHistoryAtEnd();
+
+ /**
+ * Is Shortcut Keymap view is up?
+ * @since 5.0
+ * @return ETrue if the Shortcut Keymap is up, otherwise EFalse
+ */
+ TBool KeymapIsUp();
+
+ /**
+ * Return true if we're in zoom mode
+ */
+ TBool isZoomMode();
+
+ /**
+ * Gets Miniature view ( old name: Thumbnail view ) status.
+ * @since 3.0
+ * @return True if Miniature view is active, othervise False.
+ */
+ inline TBool IsMiniatureViewUp() { return iThumbnailViewIsUp; }
+
+ /**
+ * check if the plugin player is up
+ * @since 3.2
+ * @return True if Miniature view is active, othervise False.
+ */
+ inline TBool IsPluginPlayerUp() const { return iPluginPlayerIsUp; }
+
+
+ /**
+ * Find specifies keyword on page. Set aFindString to NULL if
+ * searching in directions.
+ * @since 3.0
+ * @param aFindString The string to find on page. If seaching for direction
+ * this must be NULL.
+ * @param aFindDirection Search direction. True: next, otherwise: previous.
+ */
+ void FindKeywordL( HBufC* aFindString, TBool aFindDirection = EFalse );
+
+ /**
+ * Handles opening a feed with the url
+ * @since 3.1
+ * @param aUrl - the url of the feed
+ * @return void
+ */
+ void HandleSubscribeToWithUrlL(TPtrC aUrl);
+
+ /**
+ * Check status of contentview fullscreen mode
+ * @since 7.x
+ * @return True if currently in fullscreen mode, othervise False.
+ */
+ inline TBool FullScreenMode() const { return iContentFullScreenMode; }
+
+ public: // from MAknToolbarObserver
+ /**
+ * Should be used to set the properties of some toolbar components
+ * before it is drawn.
+ * @param aResourceId The resource ID for particular toolbar
+ * @param aToolbar The toolbar object pointer
+ */
+ void DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ );
+
+ /**
+ * Handles toolbar events for a certain toolbar item.
+ * @param aCommand The command ID of some toolbar item.
+ */
+ void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand);}
+
+ public: // from MWindowObserver
+ void WindowEventHandlerL( TWindowEvent aEvent, TInt aWindowId );
+
+ // from CAknView
+
+ /**
+ * Handles commands.
+ * @param aCommand Command to be handled
+ */
+ void HandleCommandL( TInt aCommand );
+
+ // from CAknView
+
+ /**
+ * From @c MEikMenuObserver. Menu emphasising or de-emphasising function.
+ * @c CEikMenuBar objects call this on their observer. Updates the value of
+ * the flags for the (@c aMenuControl) on the control stack.
+ * @param aMenuControl The control to be emphasised or de-emphasisied.
+ * @param aEmphasis @c ETrue to emphasize the menu, @c EFalse to refuse the
+ * focus.
+ */
+ void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis);
+
+ TRect ResizeClientRect();
+ void SetContentContainerRect();
+
+ private:
+
+ /**
+ * Generic Zoom function
+ * @since 3.0
+ * @param aDirection 1 for In, -1 for Out
+ * @param aLow low boundary for zoom level checking
+ * @param aHigh high boundary for zoom level checking
+ * @param aDuration the time to display zoom indicator
+ */
+ void ZoomImagesL( TInt aDirection, TUint aLow, TUint aHigh, TInt aDuration );
+
+ TInt FindCurrentZoomIndex(TInt aCurrentZoomLevel);
+
+ void SaveCurrentZoomLevel(TBool saveZoom);
+
+ protected: // from CAknView
+
+ /**
+ * @since 1.2
+ * @param aPrevViewId Previous view id
+ * @param aCustomMessageId
+ * @param aCustomMessage
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @since 1.2
+ */
+ void DoDeactivate();
+
+ protected: // from CBrowserViewBase
+
+ /**
+ * @since 1.2
+ */
+ TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+
+ private:
+
+ /**
+ * @param aApiProvider Reference to API provider
+ */
+ CBrowserContentView( MApiProvider& aApiProvider );
+
+ /**
+ * Symbian OS contructor.
+ * @param aRect
+ */
+ void ConstructL( TRect& aRect );
+
+ /**
+ * Send address.
+ */
+ void SendAddressL( );
+
+ /**
+ * This method is used to update the Option menu label text
+ * @param aMenuPane Menu pane to be configured.
+ * @param aCommandId Identifies the menu item (as defined in .hrh file) to be updated.
+ * @param aResourceId New label resource ID
+ */
+ void UpdateOptionMenuItemLabelL(
+ CEikMenuPane* aMenuPane,
+ const TInt aCommandId,
+ const TInt aResourceId );
+
+ /**
+ * Do search for specified items in current page.
+ * @param aSearchCase items to be searched for
+ */
+ void DoSearchL( CFindItemEngine::TFindItemSearchCase aSearchCase );
+
+ /**
+ *
+ */
+ void SetNavipaneViewL();
+
+ /**
+ * Force updating the Goto Pane. Does nothing if Goto Pane is not
+ * visible.
+ */
+ void UpdateGotoPaneL();
+
+ /**
+ * View history pane
+ */
+ void ViewHistoryL();
+
+ /**
+ * Dynamically initialize menu panes.
+ * @param aResourceId ID for the resource to be loaded
+ * @param aMenuPane Menu pane
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * Handles a selection from the subscribe to sub-menu.
+ * @since 3.0
+ * @param aCommand - A menu command
+ * @return void
+ */
+ void HandleSubscribeToL(TInt aCommand);
+
+ /**
+ * Deals with menu items for Multiple Windows Support
+ * @since 3.1
+ * @param aWindowMenuItems - bool for each window submenu item that is set to true if it should be dimmed ; false if not
+ * @return true is all items were true otherwise false is returned.
+ */
+ TBool CheckForEmptyWindowsMenuL(TWindowsMenuItemsDimCheck* aWindowMenuItems);
+
+ /**
+ * Deals with dimming menu items for Multiple Windows Support
+ * @since 3.1
+ * @param aMenuPane - A menu pane
+ * @param aWindowMenuItems - lists each window submenu item and whether it should be dimmed
+ * @return void
+ */
+ void DimMultipleWindowsMenuItems( CEikMenuPane& aMenuPane, TWindowsMenuItemsDimCheck aWindowMenuItems);
+
+ /**
+ * Check if the input is activate
+ * @param none
+ * @return ETrue if input is
+ */
+ TBool IsEditMode();
+ private:
+
+ void ProcessCommandL( TInt aCommand );
+
+ void GotoUrlInGotoPaneL();
+
+ /**
+ * Adds the saved bookmark's id to the bottom of the list.
+ * @param aUid Uid of the bookmark
+ */
+ void AddBMUidToLastPlaceToCurrentListL( const TInt aUid );
+
+ /**
+ * callback handler for fullscreen status pane timer
+ */
+ static TInt CallHideFsStatusPane(TAny* aCBrowserContentView );
+
+ /**
+ * Hides the status pane for fullscreen mode and cancels timer
+ */
+ void HideFsStatusPane();
+
+ /**
+ * Callback handler for auto fullscreen mode timer
+ */
+ static TInt CallActivateAutoFullScreen(TAny* aCBrowserContentView);
+
+ /**
+ * Activate Automatic Full screen mode
+ */
+ void ActivateAutoFullScreenMode();
+
+ /**
+ * Start auto fullscreen timer
+ */
+ void StartAutoFullScreenTimer();
+
+ /**
+ * Suspend auto fullscreen timer
+ */
+ void SuspendAutoFullScreenTimer();
+
+ /**
+ * Start auto fullscreen Idle timer
+ */
+ void StartAutoFullScreenIdleTimer();
+
+ /**
+ * Suspend auto fullscreen Idle timer
+ */
+ void SuspendAutoFullScreenIdleTimer();
+ public:
+
+ // BrowserContentViewContainer can use this method to pop up 'Go to' pane.
+ void LaunchGotoAddressEditorL();
+
+ void UpdateFullScreenL();
+
+ void SetFullScreenOffL();
+
+ /**
+ * Launches the Find keyword pane.
+ * @since 3.0
+ */
+ void LaunchFindKeywordEditorL();
+
+ /**
+ * Initializes iZoomLevelArray, iCurrentZoomLevelIndex, iCurrentZoomLevel,
+ * iZoomInVisible, iZoomOutVisible members.
+ *
+ * Note: these members must be initialized later, after the BrowserContentView was constructed
+ * in BrowserAppUi, because initializing zooming, requires iBrowserControl, which is created in
+ * BrowserAppUi::ConstructL(), and creating iBrowserControl requires a created BrowserContentView
+ * object. So zoom levels must be initialized after BrowserAppUi created the iBrowserControl member.
+ * @since 3.0
+ */
+ void SetZoomLevelL();
+
+ /**
+ * Shows zoom level text in title pane for aDuration seconds.
+ * @since 3.0
+ * @param aResourceId Resource of the zoom level string
+ * @param aLevel The zoom level which will be shown formatting
+ * with the resource string.
+ */
+ void SetZoomLevelTitleTextL( TInt aResourceId , TInt aDuration = KZoomModeShowDisableTime );
+
+
+ /**
+ * Gets the text zoom levels.
+ */
+ void GetTextZoomLevelsL();
+
+ /**
+ * Handle zoom mode command
+ */
+ void SetZoomModeL( TBool aZoomMode );
+
+ /**
+ * Handle pointer events when Goto pane is visible
+ */
+ void HandlePointerCommand(TInt aCommand) { TRAP_IGNORE(HandleCommandL(aCommand)); }
+
+ /**
+ * Add new bookmark to the database.
+ * @param aAsLastVisited ETrue if the meaning is to update "Last visited" bookmark
+ * @param aUrl The URL that should be bookmarked
+ */
+ void AddNewBookmarkL( TBool aAsLastVisited, HBufC* aUrl = NULL );
+
+ void ShowKeymap();
+
+ void HideKeymap();
+
+ void RedrawKeymap();
+
+ /**
+ * Set whether in content view full screen mode or not.
+ * @since 5.0
+ * @param aEnableFullScreen boolean. True: Enter fullscreen, False: Exit
+ * @return void
+ */
+ void EnableFullScreenModeL( TBool aEnableFullScreen );
+
+ void HandlePluginFullScreen(TBool aFullScreen);
+
+ /**
+ * Show or hide status pane for fullscreen mode
+ * @since 7.x
+ * @param aShow boolean. True: show status pane, False: start timer that hides status pane on timeout
+ * @return void
+ */
+ void ShowFsStatusPane(TBool aShow);
+
+ void setFullScreenFlag(){ iWasContentFullScreenMode = iContentFullScreenMode; }
+
+ void CBrowserContentView::HandleStatusPaneCallBack();
+
+ private:
+
+ CAknNavigationControlContainer* iNaviPane;
+ CAknNavigationDecorator* iNaviDecorator;
+ TBufC<KStatusMessageMaxLength> iStatusMsg;
+ CBrowserBookmarksModel* iBookmarksModel;
+ CBrowserContentViewContainer* iContainer;
+
+
+ // Find keyword pane's keyword
+ HBufC* iEnteredKeyword;
+
+ // Zoom images...
+ // Array contains the zoom levels. ( 30%, 40%, ... defined in webengine)
+ RArray<TUint>* iZoomLevelArray;
+
+ // The index of the zoom level in iZoomLevelArray.
+ TUint iCurrentZoomLevelIndex;
+ // Zoom text...
+ // Array contains the text zoom levels. ( All small,Small,Normal )
+ CArrayFixFlat<TInt>* iTextZoomLevelArray;
+ // The index of the zoom level in iTextZoomLevelArray.
+ // This index equals to text sizes in EAllSmall...
+ TUint iCurrentTextZoomLevelIndex;
+ CArrayFixFlat<TInt>* iFontSizeArray;
+
+ TBool iHistoryViewIsUp;
+ TBool iThumbnailViewIsUp;
+ TBool iSynchRequestViewIsUp;
+ TBool iImageMapActive;
+ CAknInfoPopupNoteController* iToolBarInfoNote;
+
+ TBool iPluginPlayerIsUp;
+ TBool iSmartTextViewIsUp;
+
+ TBool iFindItemIsInProgress;
+ //Flag to check if the last view was Feeds engine
+ TBool iWasInFeedsView;
+ CAknStylusPopUpMenu* iStylusPopupMenu; // owned
+ CBrowserContentViewToolbar* iBrowserContentViewToolbar; // owned
+ TBool iPenEnabled;
+ CBrowserShortcutKeyMap* iShortcutKeyMap; // owned
+
+ // True if the ZoomSlider is currently visible
+ TBool iZoomSliderVisible;
+ // True if in zoom mode, zoom indicator (tooltip or slider) displayed
+ TBool iZoomMode;
+ CBrowserContentViewZoomModeTimer *iZoomModeTimer;
+
+ // True if the browser is in Full Screen Mode in ContentView
+ TBool iContentFullScreenMode;
+ TBool iHistoryAtBeginning;
+ TBool iHistoryAtEnd;
+ TBool iIsPluginFullScreenMode;
+
+ CAknAppUiBase::TAppUiOrientation iOrientation;
+ TBool iWasContentFullScreenMode;
+ CPeriodic *iPeriodic;
+ TUint iCurrentZoomLevel;
+ TUint iSavedZoomLevel;
+ TBool iOptionsMenuActive;
+ CPeriodic *iAutoFSPeriodic;
+ CPeriodic *iIdlePeriodic;
+ TBool iFullScreenBeforeEditModeEntry;
+ HBufC* iTitle;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserContentViewContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser content view container
+*
+*
+*/
+
+
+#ifndef __BROWSERCONTENTVIEWCONTAINER_H
+#define __BROWSERCONTENTVIEWCONTAINER_H
+
+// INCLUDES
+
+#include <coecntrl.h>
+#include "Browser.hrh"
+#include <bldvariant.hrh>
+
+#include <e32hashtab.h>
+
+
+// CONSTANTS
+
+// DATA TYPES
+
+// FORWARD DECLARATIONS
+
+class CBrowserGotoPane;
+class CBrowserGotoPane;
+class MApiProvider;
+class CBrowserContentView;
+
+/**
+* Container for Browser content view.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserContentViewContainer : public CCoeControl
+ {
+ public: // Constuctors and destructor
+
+ static CBrowserContentViewContainer* NewL( CBrowserContentView* aView,
+ MApiProvider& aApiProvider );
+
+ ~CBrowserContentViewContainer();
+
+ public: // New functions
+
+ /**
+ * Get pointer to Goto pane.
+ * @since Series 60 1.2
+ * @return Pointer to CBrowserGotoPane
+ */
+ CBrowserGotoPane* GotoPane() { return iGotoPane; } ;
+
+ /**
+ * Get pointer to Findkeyword pane.
+ * @since Series 60 3.0
+ * @return Pointer to CBrowserGotoPane
+ */
+ CBrowserGotoPane* FindKeywordPane() { return iFindKeywordPane; } ;
+
+ /*
+ * set the iGotoPane
+ */
+ void SetGotoPane(CBrowserGotoPane* aGotoPane) { iGotoPane = aGotoPane; };
+
+ /*
+ * set the iFindKeywordPane
+ */
+ void SetFindKeywordPane(CBrowserGotoPane* aFindKeywordPane) { iFindKeywordPane = aFindKeywordPane; };
+
+ /**
+ * Shut down Goto URL editor.
+ * @since Series 60 1.2
+ */
+ void ShutDownGotoURLEditorL();
+
+ /**
+ * Shut down Findkeyword pane.
+ * @since Series 60 3.0
+ */
+ void ShutDownFindKeywordEditorL();
+
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CBrowserContentViewContainer( CBrowserContentView* aView,
+ MApiProvider& aApiProvider );
+
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+
+ private: // From CCoeControl
+
+ /*
+ * Handle pointer events
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ /**
+ * Handle key events.
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+ /**
+ * Responds to focus changed.
+ */
+ void FocusChanged(TDrawNow aDrawNow);
+
+ /**
+ * Responds to size changes.
+ */
+ void SizeChanged();
+
+ /**
+ * Gets the number of controls contained in a compound control.
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * Gets the specified component of a compound control.
+ */
+ CCoeControl* ComponentControl(TInt aIndex) const;
+
+ public: // for dynamic layout switch updating from contentview
+
+ void HandleResourceChange( TInt aType );
+
+ private: // New functions
+
+#ifdef __SERIES60_HELP
+
+ /**
+ * Get help context for the control.
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+#endif // __SERIES60_HELP
+
+
+ /**
+ * For Configurable short cut keys: create HashTable to map key to function
+ */
+ void CreateShortCutFuncsHashTable();
+
+ /**
+ * For Configurable short cut keys: insert key/value pair
+ */
+ void InsertFuncToHashTable(HBufC* aKeyStr, TInt aFunc);
+
+ /**
+ * For Configurable short cut keys: convert string to TUint
+ */
+ TUint MyAtoi(TPtrC aData);
+
+ /**
+ * For Configurable short cut keys: invoke short cut function for key pressed
+ */
+ TKeyResponse InvokeFunction(TUint aCode);
+
+
+ private:
+ CBrowserGotoPane* iFindKeywordPane;
+ CBrowserContentView* iView;
+ MApiProvider& iApiProvider;
+ CBrowserGotoPane* iGotoPane;
+
+ TBool iSelectionKeyPressed;
+
+ // True if the key was pressed long, otherwise key was pressed short.
+ TBool iIsKeyLongPressed;
+ // True if the key was pressed, and the key was not consumed by the engine.
+ TBool iIsShortPressAllowed;
+
+
+ // For shout cut functions
+ // True if the hash table for short cut functions has been created; False otherwise.
+ TBool iShortCutFuncsReady;
+
+ // maps iCode to shortcut function
+ typedef RHashMap<TUint, TInt> RShortCutFuncMap;
+ RShortCutFuncMap iShortCutFuncMap;
+
+
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserContentViewToolbar.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class that handles the toolbar
+*
+*
+*/
+
+
+#ifndef BROWSERCONTENTVIEWTOOLBAR_H
+#define BROWSERCONTENTVIEWTOOLBAR_H
+
+// INCLUDES
+#include <e32std.h>
+#include "browser.hrh"
+
+// FORWARD DECLARATIONS
+class CBrowserContentView;
+class CAknToolbar;
+
+
+
+//save and load last state
+
+
+// CLASS DECLARATION
+
+/**
+* Helper class that handles the toolbar
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserContentViewToolbar : public CBase
+ {
+ public : // constructor, destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBrowserContentViewToolbar* NewL(CBrowserContentView* aBrowserContentView);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserContentViewToolbar();
+
+ private : // construction
+
+ /**
+ * Default C++ constructor.
+ * @param aBrowserContentView
+ */
+ CBrowserContentViewToolbar(CBrowserContentView* aBrowserContentView);
+
+ /**
+ * Symbian OS constructor that can leave.
+ */
+ void ConstructL();
+
+ public: // New functions
+
+
+ /**
+ * Enable/disable the toolbar's buttons
+ */
+ void UpdateButtonsStateL();
+
+ private: // data
+
+ CBrowserContentView* iBrowserContentView;
+ };
+
+#endif // BROWSERCONTENTVIEWTOOLBAR_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserContentViewZoomModeTimer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header for zoom mode timer
+*
+*/
+
+
+#ifndef __BROWSERCONTENTVIEWZOOMMODETIMER_H
+#define __BROWSERCONTENTVIEWZOOMMODETIMER_H
+
+// INCLUDES
+#include <e32std.h>
+
+// FORWARD DECLARATIONS
+class CBrowserContentView;
+
+/**
+ * CBrowserContentViewZoomModeTimer.
+ * @lib Browser.app
+ * @since Series 60 5.0
+ */
+class CBrowserContentViewZoomModeTimer : public CTimer
+ {
+ public: //Constructors and destructor
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserContentViewZoomModeTimer();
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBrowserContentViewZoomModeTimer* NewL( CBrowserContentView* aBrowserContentView );
+
+ /**
+ * Two-phased constructor. Cleanupstack used.
+ * @since Series60 5.0
+ */
+ static CBrowserContentViewZoomModeTimer* NewLC( CBrowserContentView* aBrowserContentView );
+
+ public: // New methods
+
+ /**
+ *
+ *
+ */
+ void Start( TTimeIntervalMicroSeconds32 aPeriod );
+
+ /**
+ *
+ *
+ */
+ void Restart( TTimeIntervalMicroSeconds32 aPeriod );
+
+ public: // From CActive
+
+ void RunL();
+
+ private:
+
+ /**
+ * Default constructor.
+ */
+ CBrowserContentViewZoomModeTimer();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( CBrowserContentView* aBrowserContentView );
+
+ private: //data
+
+ CBrowserContentView* iBrowserContentView;
+ };
+
+#endif //__BROWSERCONTENTVIEWZOOMMODETIMER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDialogs.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class that pops up several dialogs.
+*
+*
+*/
+
+
+#ifndef BROWSERDIALOGS_H
+#define BROWSERDIALOGS_H
+
+// INCLUDES
+#include <e32std.h>
+
+// FORWARD DECLARATIONS
+class CAknWaitDialog;
+
+// CLASS DECLARATION
+
+/**
+* TBrowserDialogs, Implements several dialogs used in Browser.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class TBrowserDialogs
+ {
+ public: // New functions
+ /**
+ * Functions from NWSS.
+ */
+
+ /**
+ * Input prompt dialog used by Search and Home page features library
+ * @since Series 60 2.8
+ * @param aMsg prompt message
+ * @param aResp entered text
+ * @param aMaxLength maximum length allowed in editor
+ * @param aIsUrlAddress flag for allowing only latin input for url addresses
+ * @return AVKON error code
+ */
+ static TInt DialogPromptReqL( const TDesC& aMsg,
+ TDes* aResp,
+ TBool aIsUrlAddress,
+ TInt aMaxLength = 0 );
+
+ /**
+ * Confirmation query dialog used by WTAI library
+ * @since Series 60 1.2
+ * @param aMsg confirmation message
+ * @param aYesMessage left softkey text
+ * @param aNoMessage right softkey text
+ * @return AVKON error code
+ */
+ static TInt DialogQueryReqL( const TDesC& aMsg,
+ const TDesC& aYesMessage,
+ const TDesC& aNoMessage);
+
+
+ public: // Confirmation queries.
+
+
+ /**
+ * Display an confirmation query with given dialog resource
+ * @since Series 60 1.2
+ * @param aPrompt resource if of prompt to display.
+ * @param aResId resource id of command set (aResId = 0 means R_AVKON_SOFTKEYS_YES_NO as per default )
+ * @param aAnimation animation overrides default one
+ * @return selected softkey id.
+ * If you give your own aResId you have to check the return value!
+ * In that case return value are commands
+ * as your specified in resource of that CBA.
+ */
+ static TInt ConfirmQueryDialogL( const TInt aPromptResourceId,
+ TInt aResId = 0,
+ TInt aAnimation = 0 );
+
+ /**
+ * Display an confirmation query with given dialog resource
+ * @since Series 60 1.2
+ * @param aPrompt Prompt to display.
+ * @param aResId resource id of dialog
+ * @param aAnimation animation overrides default one
+ * @return selected softkey id.
+ */
+ static TInt ConfirmQueryDialogL( const TDesC& aPrompt,
+ TInt aResId = 0,
+ TInt aAnimation = 0 );
+
+
+ /**
+ * Display an confirmation query with buttons Yes and No.
+ * @since Series 60 1.2
+ * @param aPrompt Prompt to display.
+ * @return ETrue if accepted, EFalse if not.
+ */
+ static TBool ConfirmQueryYesNoL( TDesC& aPrompt );
+
+
+ /**
+ * Display an confirmation query with buttons Yes and No.
+ * @since Series 60 1.2
+ * @param aPromptResourceId Resource id of the prompt (not the
+ * dialog!).
+ * @return ETrue if accepted, EFalse if not.
+ */
+ static TBool ConfirmQueryYesNoL( const TInt aPromptResourceId );
+
+
+ /**
+ * Display an confirmation query with buttons Yes - No.
+ * @since Series 60 1.2
+ * @param aPromptResourceId Resource id of the prompt (not the
+ * dialog!).
+ * @param aString This string will be substituted in place of the first
+ * %U in the format string.
+ * @return ETrue if accepted, EFalse if not.
+ */
+ static TBool ConfirmQueryYesNoL
+ ( const TInt aPromptResourceId, const TDesC& aString );
+
+
+ /**
+ * Display an confirmation query with buttons Yes and No.
+ * @since Series 60 1.2
+ * @param aPromptResourceId Resource id of the prompt (not the
+ * dialog!).
+ * @param aNum This number will be substituted in place of the first
+ * %N in the format string.
+ * @return ETrue if accepted, EFalse if not.
+ */
+ static TBool ConfirmQueryYesNoL
+ ( const TInt aPromptResourceId, const TInt aNum );
+
+
+ public: // Information notes.
+
+ /**
+ * Display an information note with no buttons.
+ * @since Series 60 1.2
+ * @param aDialogResourceId Resource id of note to display.
+ * Available notes: R_WMLBROWSER_OK_NOTE (check mark animation);
+ * R_WMLBROWSER_INFO_NOTE (info mark animation).
+ * @param aPrompt Prompt to display.
+ */
+ static void InfoNoteL( TInt aDialogResourceId, const TDesC& aPrompt );
+
+
+ /**
+ * Display an information note with no buttons.
+ * @since Series 60 1.2
+ * @param aDialogResourceId Resource id of note to display.
+ * Available notes: R_WMLBROWSER_OK_NOTE (check mark animation);
+ * R_WMLBROWSER_INFO_NOTE (info mark animation).
+ * @param aPromptResourceId Resource id of the prompt.
+ */
+ static void InfoNoteL
+ ( TInt aDialogResourceId, const TInt aPromptResourceId );
+
+
+ /**
+ * Display an information note with no buttons.
+ * @since Series 60 1.2
+ * @param aDialogResourceId Resource id of note to display.
+ * Available notes: R_WMLBROWSER_OK_NOTE (check mark animation);
+ * R_WMLBROWSER_INFO_NOTE (info mark animation).
+ * @param aPromptResourceId Resource id of the prompt.
+ * @param aString This string will be substituted in place of the first
+ * %U in the format string.
+ */
+ static void InfoNoteL
+ (
+ TInt aDialogResourceId,
+ const TInt aPromptResourceId,
+ const TDesC& aString
+ );
+
+
+ /**
+ * Display an information note with no buttons.
+ * @since Series 60 1.2
+ * @param aDialogResourceId Resource id of note to display.
+ * Available notes: R_WMLBROWSER_OK_NOTE (check mark animation);
+ * R_WMLBROWSER_INFO_NOTE (info mark animation).
+ * @param aPromptResourceId Resource id of the prompt.
+ * @param aNum This number will be substituted in place of the first
+ * %N in the format string.
+ */
+ static void InfoNoteL
+ (
+ TInt aDialogResourceId,
+ const TInt aPromptResourceId,
+ const TInt aNum
+ );
+
+
+ public: // error note
+
+ /**
+ * Display an error note with buttons Ok - <empty>.
+ * @since Series 60 1.2
+ * @param aPromptResourceId Resource id of the prompt (not the
+ * dialog!).
+ */
+ static void ErrorNoteL( const TInt aPromptResourceId );
+
+ /**
+ * Display an error note with buttons Ok - <empty>.
+ * @since Series 60 1.2
+ * @param aPrompt Prompt to display.
+ */
+ static void ErrorNoteL( const TDesC& aPrompt );
+
+ };
+
+#endif
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDialogsProviderBlocker.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Blocks dialog requests to the BrowserDialogsProvider if a
+* window is in the background. When the window comes to the
+* foreground, it will be displayed.
+*
+*
+*/
+
+#ifndef __BROWSERDIALOGSPROVIDERBLOCKER_H
+#define __BROWSERDIALOGSPROVIDERBLOCKER_H
+
+// INCLUDES
+#include "BrowserDialogsProviderProxy.h"
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CBrowserWindowFocusNotifier;
+
+// CLASS DEFINITION
+class CBrowserDialogsProviderBlocker : public CActive
+ {
+ public: // constructors
+
+ /**
+ * Create a CBrowserDialogsProviderBlocker object. Leaves on failure.
+ * @param aDlg . Not owned.
+ * @return A reference to the created instance of
+ * CBrowserDialogsProviderBlocker
+ */
+ static CBrowserDialogsProviderBlocker* NewLC(
+ CBrowserWindowFocusNotifier& aWinFocusNotifier );
+
+ private: // default c++, and 2nd phase constructor
+
+ /**
+ * Constructs this object
+ * @param aDlg. Not owned.
+ */
+ CBrowserDialogsProviderBlocker(
+ CBrowserWindowFocusNotifier& aWinFocusNotifier );
+
+ /**
+ * Performs second phase construction of this object
+ */
+ void ConstructL();
+
+ public:
+
+ /**
+ * Destroy the object and release all memory objects
+ */
+ ~CBrowserDialogsProviderBlocker();
+
+ /**
+ * Start an asynchronous request.
+ */
+ void Start();
+
+ protected: // from CActive
+
+ /**
+ * Cancel any outstanding requests
+ */
+ void DoCancel();
+
+ /**
+ * Handles object`s request completion event.
+ */
+ void RunL();
+
+ private:
+
+ /**
+ * Indicates the completion status of a request made to a
+ * service provider.
+ */
+ //TRequestStatus iStatus;
+
+ CActiveSchedulerWait iWait; // Asynchronous wait
+
+ CBrowserWindowFocusNotifier& iWinFocusNotifier; // not owned
+ };
+
+#endif // __BROWSERDIALOGSPROVIDERBLOCKER_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDialogsProviderProxy.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Forwards Dialog requests to the BrowserDialogsProvider
+*
+*/
+
+
+
+#ifndef BROWSERDIALOGSPROVIDERPROXY_H
+#define BROWSERDIALOGSPROVIDERPROXY_H
+
+// INCLUDES
+
+// User includes
+
+// System Includes
+#include <brctldialogsprovider.h>
+#include <browserdialogsprovider.h>
+#include <e32std.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CBrCtlDialogsProvider;
+class CBrowserDialogsProviderBlocker;
+class CBrowserWindowFocusNotifier;
+class CBrowserWindow;
+class MBrowserDialogsProviderObserver;
+
+// CLASS DECLARATION
+
+/**
+* Provide dialogs needed for browser operation
+*
+* @since 3.0
+*/
+class CBrowserDialogsProviderProxy : public CBase,
+ public MBrCtlDialogsProvider
+ {
+ // Construction/Destruction
+ public:
+
+ // Two stage constructor
+ static CBrowserDialogsProviderProxy* NewL(
+ CBrowserDialogsProvider& aDialogsProvider,
+ MBrowserDialogsProviderObserver* aDialogsObserver,
+ CBrowserWindow& aBrowserWindow );
+
+ // Destructor
+ virtual ~CBrowserDialogsProviderProxy();
+
+ protected:
+
+ // 1st stage Constructor
+ CBrowserDialogsProviderProxy(
+ CBrowserDialogsProvider& aDialogsProvider,
+ MBrowserDialogsProviderObserver* aDialogsObserver,
+ CBrowserWindow& aBrowserWindow );
+
+
+ // 2nd stage constructor
+ void ConstructL();
+
+ public: // From MBrCtlDialogsProvider
+
+ /**
+ * Notify the user of an error
+ * @since 3.0
+ * @param aErrCode The error that occured
+ * @return void
+ */
+ virtual void DialogNotifyErrorL( TInt aErrCode );
+
+ /**
+ * Notify the user of an http error
+ * @since 3.0
+ * @param aErrCode The error that occured
+ * @param aUri The uri of the request that failed
+ * @return void
+ */
+ virtual void DialogNotifyHttpErrorL( TInt aErrCode,
+ const TDesC& aUri );
+
+ /**
+ * File selection dialog
+ * @since 3.0
+ * @param aStartPath The initial displayed directory
+ * @param aRootPath The top most directory that the user can go up to
+ * @param aSelectedFileName The selected file name.
+ * Returned on cleanup stack. Browser control will free the buffer
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogFileSelectLC( const TDesC& aStartPath,
+ const TDesC& aRootPath,
+ HBufC*& aSelectedFileName);
+
+ /**
+ * List selection dialog
+ * @since 3.0
+ * @param aTitle The title, could be empty
+ * @param aBrowserSelectOptionType The type of the list box
+ * @param aOptions A list of options to display
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogSelectOptionL(
+ const TDesC& aTitle,
+ TBrCtlSelectOptionType aBrowserSelectOptionType,
+ CArrayFix<TBrCtlSelectOptionData>& aOptions );
+
+ /**
+ * User Authentication dialog.
+ * User name and password are returned on cleanup stack
+ * @since 3.0
+ * @param aUrl The url requiring authentication
+ * @param aRealm The realm requiring authentication
+ * @param aDefaultUser/Name The user name that was used before for this
+ * realm and path, if any
+ * @param aReturnedUserName The user name entered by the user
+ * @param aReturnedPasswd The password entered by the user
+ * @param aBasicAuthentication A flag if basic authentication was used
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogUserAuthenticationLC(
+ const TDesC& aUrl,
+ const TDesC& aRealm,
+ const TDesC& aDefaultUserName,
+ HBufC*& aReturnedUserName,
+ HBufC*& aReturnedPasswd,
+ TBool aBasicAuthentication = EFalse);
+
+ /**
+ * Display a note to the user. No softkeys
+ * @since 3.0
+ * @param aMessage The message to display
+ * @return void
+ */
+ virtual void DialogNoteL( const TDesC& aMessage );
+
+ /**
+ * Display a note to the user with ok softkey only
+ * @since 3.0
+ * @param aTitle The title, could be empty
+ * @param aMessage The message to display
+ * @return void
+ */
+ virtual void DialogAlertL( const TDesC& aTitle,
+ const TDesC& aMessage );
+
+ /**
+ * Display confirmation message to the user
+ * @since 3.0
+ * @param aTitle The title, could be empty
+ * @param aMessage The message to display
+ * @param aYesMessage The text to display on left softkey
+ * @param aNoMessage The text to display on right softkey
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogConfirmL( const TDesC& aTitle,
+ const TDesC& aMessage,
+ const TDesC& aYesMessage,
+ const TDesC& aNoMessage);
+
+ /**
+ * Display input dialog to the user
+ * @since 3.0
+ * @param aTitle The title, could be empty
+ * @param aMessage The message to display
+ * @param aDefaultInput The default input if available
+ * @param aReturnedInput The input entered by the user
+ * Returned on the cleanup stack, owned by the calling application
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogPromptLC(const TDesC& aTitle,
+ const TDesC& aMessage,
+ const TDesC& aDefaultInput,
+ HBufC*& aReturnedInput);
+
+ /**
+ * Display object info and ask confirmation before download
+ * @since 3.0
+ * @param aBrCtlObjectInfo The object info
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogDownloadObjectL(
+ CBrCtlObjectInfo* aBrCtlObjectInfo );
+
+ /**
+ * DIsplay the images that appear in the current page
+ * @since 3.0
+ * @param aPageImages The images that appear in this page
+ * @return vois
+ */
+ virtual void DialogDisplayPageImagesL(
+ CArrayFixFlat<TBrCtlImageCarrier>& aPageImages);
+
+ /**
+ * Cancel any dialog that is being displayed due to
+ * e.g. Browser exit or page was destroyed
+ * @since 3.0
+ * @return void
+ */
+ virtual void CancelAll();
+
+ /**
+ * Display search on page dialog
+ * @since 3.0
+ * @return void
+ */
+ virtual void DialogFindL() { /* TODO: implement this body!!! */ } ;
+
+ /**
+ * Mime File selection dialog for specific mime type files
+ * @since 3.2
+ * @param aSelectedFileName The selected file name.
+ * @param aMimeType The accepted mime type
+ * Returned on cleanup stack. Browser control will free the buffer
+ * @return EFalse if the user canceled, ETrue otherwise
+ */
+ virtual TBool DialogMimeFileSelectLC( HBufC*& aSelectedFileName,
+ const TDesC& aMimeType );
+
+
+ public: // New functions
+
+ /**
+ * Display a tooltip (info popup note)
+ * @since 3.0
+ * @return void
+ */
+ void ShowTooltipL( const TDesC& aText, TInt aDuration, TInt aDelay );
+
+ /**
+ * Display a dialog which tracks upload progress
+ * @since 3.0
+ * @param aTotalSize the total size of a file being uploaded
+ * @param aChunkSize the size of the current chunk being uploaded
+ * @param aIsLastChunk boolean value indicating whether the current
+ * @param aObserver an observer for the upload progress dialog
+ * chunk is the last one in the entire download
+ * @return void
+ */
+ void UploadProgressNoteL(
+ TInt32 aTotalSize,
+ TInt32 aChunkSize,
+ TBool aIsLastChunk,
+ MBrowserDialogsProviderObserver* aObserver );
+
+ /**
+ * Callback from Window, indicating that the window is now active
+ * @since 3.0
+ */
+ void WindowActivated();
+
+ // DATA MEMBERS
+ private:
+
+ CBrowserDialogsProvider& iDialogsProvider;
+ MBrowserDialogsProviderObserver* iDialogsObserver;
+ CBrowserWindow& iBrowserWindow;
+
+ // Stores data on blocked dialogs
+ CBrowserWindowFocusNotifier* iWinFocusNotifier; // owned
+
+ TBool iCancelWaitingDialogs; // ETrue means that waiting dialogs should not be displayed when flushed
+
+ };
+
+#endif // BROWSERDIALOGSPROVIDERPROXY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDisplay.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Access to display components
+*
+*
+*/
+
+
+#ifndef BROWSER_DISPLAY_H
+#define BROWSER_DISPLAY_H
+
+// INCLUDE FILES
+#include <bldvariant.hrh>
+#include <aknenv.h>
+#include "Display.h"
+#include "WlanObserver.h"
+
+// FORWARD DECLARATIONS
+
+class MApiProvider;
+class CBrowserProgressIndicator;
+class CAknNavigationDecorator;
+class CAknIndicatorContainer;
+class CBrowserWindow;
+
+// CLASS DECLARATION
+
+class CBrowserDisplay : public CBase, public MDisplay
+ {
+ public : // constructor, destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBrowserDisplay* NewL( MApiProvider& aApiProvider,
+ CBrowserWindow& aWindow );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserDisplay();
+
+ public : // functions from MDisplay
+
+ /**
+ * Return Status Pane. Can be NULL.
+ * @return Status Pane.
+ */
+ virtual CEikStatusPane* StatusPane() const;
+
+ /**
+ * Get Navi Pane; leave on error.
+ * @return Navi Pane. Never NULL.
+ */
+ virtual CAknNavigationControlContainer* NaviPaneL() const;
+
+ /**
+ * Set title pane text.
+ * @param aTitle Title text to be displayed.
+ */
+ virtual void SetTitleL( const TDesC& aTitle );
+
+ /**
+ * Set title pane text from resource.
+ * @param aTitle Resource id of title text to be displayed.
+ */
+ virtual void SetTitleL( TInt aResourceId );
+
+ /**
+ * Starts animation.
+ * @param aBearerType Determines what is to be animated.
+ */
+ virtual void StartProgressAnimationL(/* TApBearerType aBearerType*/ );
+
+ /**
+ * Stops animation.
+ */
+ virtual void StopProgressAnimationL();
+
+ /**
+ * Shows or hides secure indicator depending on aState.
+ * @param aState EAknIndicatorStateOff/EAknIndicatorStateOn.
+ */
+ virtual void UpdateSecureIndicatorL( const TInt aState );
+
+ /**
+ * Adds transaction id to array.
+ * @param aId Transaction id
+ */
+ virtual void AddTransActIdL( TUint16 aId ) const;
+
+ /**
+ * Saves maximum and received data with a transction id.
+ * @since Series60 1.2
+ * @param aId Id of the transaction
+ * @param aRecvdData Amount of data we have received with current transaction Id
+ * @param aMaxData Max size of the transaction
+ */
+ virtual void AddProgressDataL( TUint16 aId, TUint32 aRecvdData, TUint32 aMaxData ) const;
+
+ /**
+ * Marks particular transaction id to complete status
+ * @since Series60 2.0
+ * @param aId Id of the transaction
+ */
+ virtual void TransActIdComplete( TUint16 aId ) const;
+
+ /**
+ * Sets Secure indicator on/off, UpdateFullScreenIndicatorsL() needs to be called after indicators are set
+ * @param aState indicator state on/off
+ */
+ void SetFullScreenSecureIndicatorL(const TBool aState);
+
+ /**
+ * Sets gprs indicator for Full Screen on
+ */
+ virtual void SetGPRSIndicatorOnL();
+
+ /**
+ * Starts the Wlan Indicator observer
+ */
+ virtual void StartWlanObserverL();
+
+ /**
+ * Updates the Wlan Indicator to current value
+ */
+ virtual void UpdateWlanIndicator( const TInt aWlanValue );
+
+ /**
+ * Initialises Full Screen pane indicators
+ */
+ virtual void FSPaneOnL( );
+
+ /**
+ * Updates Full Screen progress indicator
+ */
+ virtual void UpdateFSProgressIndicator(const TInt aMaxData, const TInt aReceivedData);
+
+ /**
+ * Starts Full Screen Wait indicator
+ */
+ virtual void StartFSWaitIndicator();
+
+ /**
+ * Updates 'downloaded data amount' message on Full Screen pane
+ */
+ virtual void UpdateFSProgressDataL(const TDesC16& aReceivedDataText);
+
+ /**
+ * Updates initial download indicator on Full Screen pane
+ */
+ virtual void UpdateFSDownloadInitialIndicator(const TBool aState);
+
+ /**
+ * Initializes Full Screen Indicators
+ */
+ virtual void InitIndicatorsL();
+
+ /**
+ * Clears the Message Info indicator in the navipane
+ */
+ virtual void ClearMessageInfo();
+
+ /**
+ * Sets formerly saved page title. SetTitleL's functionality moved here, because page title restoration is
+ * necessary in Full Screen mode
+ */
+ virtual void RestoreTitleL();
+
+ /**
+ * Notify that new data has arrived to the loaders.
+ * @since Series60_version 2.5
+ * @return none
+ */
+ virtual void NotifyProgress();
+
+ /**
+ * Updates the Multiple Windows Indicator
+ * @param aState Indicator On or Off
+ * @param aWinCount The number of windows open
+ * @since Series60 3.0
+ */
+ virtual void UpdateMultipleWindowsIndicatorL(
+ const TBool aState, const TInt aNumWindows );
+
+ public:
+
+ inline MApiProvider& ApiProvider() { return iApiProvider; }
+
+ private: //for internal use of full screen indicators
+
+ /**
+ * Selects Editor's IndicatorContainer to use.
+ */
+ CAknIndicatorContainer* SelectIndicContainerEditing();
+
+ /**
+ * Selects own IndicatorContainer to use. Editor's or our own.
+ */
+ CAknIndicatorContainer* SelectIndicContainerOwn();
+
+ protected : // construction
+
+ /**
+ * Default C++ constructor.
+ * @param aApiProvider Browser's API provider
+ */
+ CBrowserDisplay( MApiProvider& aApiProvider, CBrowserWindow& aWindow );
+
+ /**
+ * Symbian OS constructor that can leave.
+ */
+ void ConstructL();
+
+ private : // data members
+
+ CBrowserProgressIndicator* iProgressIndicator; ///< animation for CSD,HSCSD,GPRS connections
+
+ MApiProvider& iApiProvider; ///< reference to API provider
+ CBrowserWindow* iWindow; ///< owner window, object not owned
+ CWlanObserver* iWlanObserver; ///< Wlan status observer
+
+ CAknNavigationDecorator* iEditorIndicatorContainer; /// Full Screen Editor indicator container
+
+ HBufC* iTitle; /// Page title, stored because it needs to be restored after downloading in Full Screen mode.
+ };
+
+#endif // WMLBROWSER_DISPLAY_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDownloadIndicatorTimer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+#ifndef __BROWSERDOWNLOADINDICATORTIMER_H
+#define __BROWSERDOWNLOADINDICATORTIMER_H
+
+// INCLUDES
+#include <eikenv.h>
+
+// FORWARD DECLARATIONS
+class MBrowserDownloadIndicatorTimerEvent;
+
+/**
+ * CDownloadIndicator.
+ * @lib Browser.app
+ * @since Series 60 1.2
+ */
+
+class CBrowserDownloadIndicatorTimer : public CTimer
+ {
+ public: //Constructors and destructor
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserDownloadIndicatorTimer();
+
+ public:
+
+ /**
+ * Two-phased constructor.
+ * @param aUi CBrowserDownloadIndicatorTimer (i.e. BrowserAppUi ) pointer
+ */
+ static CBrowserDownloadIndicatorTimer* NewL(
+ MBrowserDownloadIndicatorTimerEvent& aUi );
+
+ /**
+ * Two-phased constructor. Cleanupstack used.
+ * @param aUi CBrowserDownloadIndicatorTimer (i.e. BrowserAppUi ) pointer
+ * @since Series60 1.2
+ */
+ static CBrowserDownloadIndicatorTimer* NewLC(
+ MBrowserDownloadIndicatorTimerEvent& aUi );
+
+ public:
+
+ /**
+ *
+ *
+ */
+ void Start( TTimeIntervalMicroSeconds32 aPeriod );
+
+ public: // From CActive
+
+ void RunL();
+
+ private:
+
+ /**
+ * Default constructor.
+ */
+ CBrowserDownloadIndicatorTimer();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( MBrowserDownloadIndicatorTimerEvent& aUi );
+
+ private: //data
+
+ MBrowserDownloadIndicatorTimerEvent* iProgressIndicator;
+ };
+
+#endif //__BROWSERDOWNLOADINDICATORTIMER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDownloadIndicatorTimerEvent.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+#ifndef __BROWSERDOWNLOADINDICATORTIMEREVENT_H
+#define __BROWSERDOWNLOADINDICATORTIMEREVENT_H
+
+// INCLUDES
+//#include <e32std.h>
+
+// CLASS DECLARATION
+
+/**
+* ?one_line_short_description.
+* ?other_description_lines
+*
+* @lib Browser.app
+* @since 1.2
+*/
+class MBrowserDownloadIndicatorTimerEvent
+ {
+ public: // New functions
+
+ /**
+ * Set initial download animation off.
+ * @since 1.2
+ */
+ virtual void SetBrowserDownloadIndicatorStateOff() = 0;
+
+ };
+#endif //__BROWSERDOWNLOADINDICATORTIMEREVENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserDownloadUtil.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Download handling utilities.
+*
+*/
+
+
+#ifndef BROWSER_DOWNLOAD_UTIL_H
+#define BROWSER_DOWNLOAD_UTIL_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class MApiProvider;
+
+// CLASS DECLARATION
+
+/**
+* Execute the Downloads List in RunL.
+*/
+class CAsyncDownloadsListExecuter : public CActive
+ {
+ public:
+
+ CAsyncDownloadsListExecuter( MApiProvider& aApiProvider );
+ ~CAsyncDownloadsListExecuter();
+
+ public:
+
+ void Start();
+
+ private:
+
+ void DoCancel();
+ void RunL();
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ MApiProvider& iApiProvider;
+ };
+
+#endif // BROWSER_DOWNLOAD_UTIL_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserGotoPane.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,482 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Browser Goto pane.
+*
+*/
+
+
+#ifndef WML_GOTO_PANE_BASE_H
+#define WML_GOTO_PANE_BASE_H
+
+// DEFINES
+#ifndef GOTOPANE_POPUPLIST_DISABLE
+#define GOTOPANE_POPUPLIST_DISABLE EFalse
+#endif
+
+#ifndef GOTOPANE_POPUPLIST_ENABLE
+#define GOTOPANE_POPUPLIST_ENABLE ETrue
+#endif
+
+// INCLUDE FILES
+#include <coecntrl.h>
+#include <eikedwin.h>
+#include <Avkon.mbg>
+
+// FORWARD DECLARATION
+class CAknInputFrame;
+class CBrowserGotoPane;
+class CBrowserAdaptiveListPopup;
+class CBrowserContentView;
+
+// CLASS DECLARATION
+/**
+* Mixin class for handling Goto Pane events.
+*
+* @lib Browser.app
+* @since Series60 1.2
+*/
+class MGotoPaneObserver
+ {
+
+ public: // types
+
+ enum TEvent /// Goto Pane events.
+ {
+ EEventEnterKeyPressed ///< Enter (OK) key pressed.
+ };
+
+ public: // new methods
+
+ /**
+ * Handle Goto Pane event. Derived classes must implement.
+ * @since Series60 1.2
+ * @param aGotoPane The Goto Pane in which the event occurred
+ * @param aEvent Goto Pane event
+ */
+ virtual void HandleGotoPaneEventL( CBrowserGotoPane* aGotoPane, TEvent aEvent ) = 0;
+ };
+
+
+/**
+* Key event handled. Has higher priority than FEP,
+* to be able to catch up/down key event and forward
+* them to goto pane's editor.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserKeyEventHandled : public CCoeControl, public MEikEdwinObserver
+ {
+ public:
+
+ /**
+ * public constructor
+ * @param aGotoPane pointer to goto pane that key events are controled
+ */
+ CBrowserKeyEventHandled( CBrowserGotoPane& aGotoPane );
+
+ /**
+ * Catches key events before FEP could do it.
+ * @since Series60 1.2
+ * @param aKeyEvent
+ * @param aType
+ * @return
+ */
+ virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+ /**
+ * Catches EEventTextUpdate event.
+ * @since Series60 1.2
+ * @param aKeyEvent
+ * @param aType
+ * @return
+ */
+ virtual void HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType);
+
+ /**
+ * Put control to control stack or remove it from there.
+ * @since Series60 1.2
+ * @param aEnable ETrue puts control to the control stack with higher
+ * priority than FEP has. EFalse removes control from the stack.
+ */
+ void EnableL( TBool aEnable );
+
+ /**
+ * Set iFirstKeyEvent to TRUE.
+ * @since Series60 1.2
+ */
+ void Reset();
+
+ /**
+ * Get LeftRightEvent.
+ * @since Series60 1.2
+ */
+
+ TBool IsLeftRightEvent() { return iLeftRightEvent; }
+
+ /**
+ * SetFirstKey.
+ * @since Series60 3.2
+ */
+ void SetFirstKeyEvent(TBool aFirstKeyEvent) {iFirstKeyEvent = aFirstKeyEvent;}
+
+
+ protected:
+
+ // key event catching enable flag
+ TBool iEnabled;
+
+ // only first key event is catched
+ TBool iFirstKeyEvent;
+
+ //
+ TBool iLeftRightEvent;
+
+ // goto pane control of which key events are catched
+ CBrowserGotoPane& iGotoPane;
+ };
+
+/**
+* Goto Pane Base for the WML Browser & Bookmarks.
+* It looks just like a search field.
+*
+* @lib Browser.app
+* @since Series 60 1.2
+*/
+class CBrowserGotoPane:
+ public CCoeControl, public MCoeControlObserver, public MCoeFepObserver
+ {
+ public:
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @since Series60 1.2
+ * @param aParent Parent control
+ * @param aIconBitmapId Id of the icon to display
+ * @param aIconMaskId Id of the icon`s mask
+ * @param aPopupListStatus True if the pane uses popuplist,
+ * otherwise false.
+ * @param aContentView Pointer to content view
+ * @param aFindKeywordMode Set true if the pane is a find keyword pane.
+ * @return The constructed Goto Pane control
+ */
+ static CBrowserGotoPane* NewL
+ (
+ const CCoeControl* aParent,
+ TInt aIconBitmapId = EMbmAvkonQgn_indi_find_goto,
+ TInt aIconMaskId = EMbmAvkonQgn_indi_find_goto_mask,
+ TBool aPopupListStatus = GOTOPANE_POPUPLIST_ENABLE,
+ CBrowserContentView* aContentView = NULL,
+ TBool aFindKeywordMode = EFalse
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserGotoPane();
+
+ /**
+ * Makes goto pane (un)visible.
+ * @since Series60 1.2
+ * @param ETrue to set visible
+ */
+ virtual void MakeVisibleL( TBool aVisible );
+
+ /**
+ * Non-leaving version of MakeVisibleL.
+ * @since Series60 1.2
+ * @param ETrue to set visible
+ */
+ virtual void MakeVisible( TBool aVisible );
+
+ /**
+ * See description in calslbs.h.
+ */
+ void HandleFindSizeChanged();
+
+ /**
+ * Enable key event handler.
+ * @since Series60 1.2
+ * @param aEnable TRUE to enable
+ */
+ void EnableKeyEventHandlerL( TBool aEnable );
+
+ /**
+ * Activate GoTo Pane.
+ */
+ void SetGotoPaneActiveL();
+
+ /**
+ * Activate Search Pane.
+ */
+ void SetSearchPaneActiveL();
+
+ /**
+ * Check if we are in Goto Mode
+ * @return ETrue if we are in Goto Mode; EFalse otherwise.
+ */
+ inline TBool GotoPaneActive() const { return iGotoPaneActive; }
+
+ /**
+ * Check if we are in Search Mode
+ * @return ETrue if we are in Search Mode; EFalse otherwise.
+ */
+ inline TBool SearchPaneActive() const { return iSearchPaneActive; }
+
+ public: // from MCoeControlObserver
+
+ /**
+ * Handle control event.
+ * @since Series60 1.2
+ * @param aControl The control
+ * @param aEventType Event type
+ */
+ void HandleControlEventL
+ ( CCoeControl* aControl, TCoeEvent aEventType );
+
+ public: // from CCoeControl
+
+ /**
+ * Handle key event.
+ * @since Series60 1.2
+ * @param aKeyEvent The key event
+ * @param aType Key event type
+ * @return Response (was the key event consumed?)
+ */
+ virtual TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * HandlePointerEventL
+ * From CCoeControl
+ *
+ */
+ void HandlePointerEventL(const TPointerEvent& /*aPointerEvent*/);
+
+ /**
+ * HandleResourceChange
+ * From CCoeControl
+ */
+ void HandleResourceChange(TInt aType);
+
+
+ public: // from CCoeControl
+
+ /**
+ * Count component controls.
+ * @since Series60 1.2
+ * @return Number of component controls
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Get a component control by index.
+ * @since Series60 1.2
+ * @param aIndex Index of component control to be returned
+ * @return Component control or NULL
+ */
+ virtual CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Sets the OrdinalPosition of GotoPane
+ * @param aPos The OrdinalPosition
+ */
+ void SetOrdinalPosition( TInt aPos );
+
+ public: // Text manipulation
+
+ /**
+ * Length of the Search text in the editor.
+ * @return The text length
+ */
+ TInt SearchTextLength() const;
+
+ /**
+ * Length of the text in the editor.
+ * @since Series60 1.2
+ * @return The text length
+ */
+ TInt TextLength() const;
+
+ /**
+ * Get text from the editor.
+ * @since Series60 1.2
+ * @return text from the editor
+ */
+ HBufC* GetTextL() const;
+
+ /**
+ * Set text.
+ * @since Series60 1.2
+ * @param aTxt Text to set
+ * appended if needed.
+ */
+ virtual void SetTextL( const TDesC& aTxt );
+
+ /**
+ * Set Editor Font Posture to Italic.
+ */
+ void SetTextModeItalicL( );
+
+ /**
+ * Set Search text.
+ * @param aTxt Text to set
+ * appended if needed.
+ */
+ void SetSearchTextL( const TDesC& aTxt );
+
+ /**
+ * Selects all text in the editor.
+ * See CEikEdwin's SelectAllL();
+ * @since Series60 1.2
+ */
+ void SelectAllL();
+
+ /**
+ * Set info text.
+ * @since Series60 1.2
+ * @param aText Text to be displayed as info
+ */
+ void SetInfoTextL( const TDesC& aText );
+
+ /**
+ * Perform clipboard functionality.
+ * @since Series60 1.2
+ * @param aClipboardFunc Function to perform
+ */
+ void ClipboardL( CEikEdwin::TClipboardFunc aClipboardFunc );
+
+ /**
+ * Returns editor control of goto pane.
+ * @since Series60 1.2
+ * @return editor control of goto pane
+ */
+ CEikEdwin* Editor() const;
+
+ void ResetPrevText();
+
+ public: // observer support
+
+ /**
+ * Set observer. Pass NULL pointer to unset. Panics if already set.
+ * @since Series60 1.2
+ */
+ void SetGPObserver( MGotoPaneObserver* aObserver );
+
+ /**
+ * Gives back a pointer to adaptivepopuplist
+ */
+ CBrowserAdaptiveListPopup* PopupList();
+
+ /**
+ * Handles the completion of a FEP transaction
+ */
+ void HandleCompletionOfTransactionL();
+
+ /**
+ * Handles the start of a FEP transaction
+ */
+ void HandleStartOfTransactionL();
+
+ protected: // Construct / destruct
+ /**
+ * Constructor.
+ * @param
+ */
+ CBrowserGotoPane( CBrowserContentView* aContentView, TBool aFindKeywordMode );
+
+ /**
+ * Second-phase constructor. Leaves on failure.
+ * @param aParent Parent control
+ */
+ void ConstructL( const CCoeControl* aParent, TInt aIconBitmapId, TInt aIconMaskId, TBool aPopupListStatus );
+
+ /**
+ * Constructs Search Pane.
+ */
+ void ConstructSearchPaneL();
+
+ protected: // from CCoeControl
+
+ /**
+ * Handle size change, lay out and draw components.
+ */
+ virtual void SizeChanged();
+
+ /**
+ * Handle focus change.
+ * @since Series60 1.2
+ * @param aDrawNow Draw now?
+ */
+ virtual void FocusChanged( TDrawNow aDrawNow );
+
+ private:
+
+ /**
+ * Set the text and redraw.
+ * @since Series60 1.2
+ */
+ void DoSetTextL( const TDesC& aTxt );
+
+ void ActivateVKB();
+
+
+ protected: // data
+
+ CBrowserContentView* iContentView; //Not owned.
+
+ // If the control is in find keyword pane mode.
+ TBool iFindKeywordMode;
+
+ // HandleFEPFind
+ TBool iHandleFEPFind;
+
+ // The previously typed text into iEditor
+ HBufC* iPrevKeyword;
+
+ // Editor. Owned.
+ CEikEdwin* iEditor;
+
+ // Input frame. Owned.
+ CAknInputFrame* iInputFrame;
+
+ // Search Editor. Owned.
+ CEikEdwin* iSearchEditor;
+
+ // Search Input frame. Owned.
+ CAknInputFrame* iSearchInputFrame;
+
+ // Observer (may be NULL). Not owned.
+ MGotoPaneObserver* iGPObserver;
+
+
+ CBrowserKeyEventHandled *iGotoKeyHandled;
+
+ /// adaptive popuplist
+ CBrowserAdaptiveListPopup* iBAdaptiveListPopup;
+
+ // Represents Active Editors
+ TBool iGotoPaneActive;
+ TBool iSearchPaneActive;
+
+ // Default text in Search Editor.Owned.
+ HBufC* iDefaultSearchText;
+
+ // Search Input Frame Icon Id, used for tracking the Search Icon Changes.
+ TInt iSearchIconId;
+
+ // Stores the Search Icon File Path.
+ TFileName iSearchIconFilePath;
+ };
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserInitialContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserInitialContainer.
+*
+*
+*/
+
+
+#ifndef BROWSERINITIALCONTAINER_H
+#define BROWSERINITIALCONTAINER_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <eiklbo.h>
+
+// FORWARD DECLARATIONS
+class CBrowserInitialView;
+class CBrowserGotoPane;
+
+// CLASS DECLARATION
+
+/**
+* CBrowserInitialContainer container control class.
+*/
+class CBrowserInitialContainer : public CCoeControl, MCoeControlObserver
+ {
+ public:
+
+ /**
+ * default constructor.
+ * @param aRect Frame rectangle for container.
+ */
+ void ConstructL(const TRect& aRect);
+
+ /**
+ * Constructor
+ */
+ CBrowserInitialContainer( CBrowserInitialView *aView );
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserInitialContainer();
+
+
+
+ public: // Functions from base classes
+
+ public: // New functions
+
+ /**
+ * Opens the selected listbox item
+ */
+ void OpenSelectedListboxItemL( );
+
+ /**
+ * Access the created goto pane.
+ * @return Handle to web menu`s goto pane.
+ */
+ CBrowserGotoPane* GotoPane() { return iGotoPane; }
+
+ /**
+ * Shuts down goto pane.
+ */
+ void ShutDownGotoURLEditorL();
+
+
+ private: // Functions from base classes
+
+ /**
+ * From CoeControl,SizeChanged.
+ */
+ void SizeChanged();
+
+ /**
+ * From CoeControl,CountComponentControls.
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl,ComponentControl.
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * From CCoeControl,Draw.
+ */
+ void Draw(const TRect& aRect) const;
+
+ /**
+ * From MCoeControlObserver
+ * Acts upon changes in the hosted control's state.
+ *
+ * @param aControl The control changing its state
+ * @param aEventType The type of control event
+ */
+ void HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType );
+
+
+ private: // New functions
+
+ /**
+ * From CCoeControl
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+ /**
+ * Gets the resource id of web menu`s title.
+ */
+ TInt TitleResourceId();
+
+ CBrowserInitialView* iView; // not owned
+
+ private: //data
+ CBrowserGotoPane* iGotoPane; // the gotopane
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserInitialView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserInitialView.
+*
+*
+*/
+
+
+#ifndef BROWSERINITIALVIEW_H
+#define BROWSERINITIALVIEW_H
+
+// INCLUDES
+#include <aknview.h>
+#include "BrowserAppViewBase.h"
+#include "BrowserGotoPane.h"
+
+// FORWARD DECLARATIONS
+class CBrowserInitialContainer;
+class CBrowserBookmarksView;
+
+// CLASS DECLARATION
+
+/**
+* CBrowserInitialView view class.
+*/
+class CBrowserInitialView : public CBrowserViewBase,
+ public MGotoPaneObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure. Places the instance
+ * on the cleanup stack.
+ * @param aApiProvider The API provider.
+ * @return The constructed view.
+ */
+ static CBrowserInitialView* NewLC( MApiProvider& aApiProvider );
+
+ /**
+ * default constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Constructor
+ */
+ CBrowserInitialView( MApiProvider& aApiProvider);
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserInitialView();
+
+ public: // Functions from base classes
+
+ /**
+ * From CAknView returns Uid of View
+ * @return TUid uid of the view
+ */
+ TUid Id() const;
+
+ /**
+ * From MEikMenuObserver delegate commands from the menu
+ * @param aCommand a command emitted by the menu
+ * @return void
+ */
+ void HandleCommandL(TInt aCommand);
+
+ /**
+ * From CBrowserViewBase reaction if size change
+ * @return void
+ */
+ void HandleClientRectChange();
+
+ /**
+ * Return command set id, to be displayed.
+ * @since 1.2
+ * @return The command set's resource id.
+ */
+ virtual TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ public: // Functions from base classes
+
+ private:
+
+ /**
+ * From CAknView activate the view
+ * @param aPrevViewId
+ * @param aCustomMessageId
+ * @param aCustomMessage
+ * @return void
+ */
+ void DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * Launches the goto address editor.
+ */
+ void LaunchGotoAddressEditorL();
+
+ /**
+ * Handles GotoPane events
+ */
+ void HandleGotoPaneEventL( CBrowserGotoPane* aGotoPane, TEvent aEvent );
+
+ /**
+ * Updates GotoPane
+ */
+ void UpdateGotoPaneL();
+
+ /**
+ * Loads the typed url into content view.
+ */
+ void GotoUrlInGotoPaneL();
+
+ /**
+ * Dynamically initialize menu panes.
+ * @param aResourceId ID for the resource to be loaded
+ * @param aMenuPane Menu pane
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * From CAknView deactivate the view (free resources)
+ * @return void
+ */
+ void DoDeactivate();
+
+ public:
+
+ private: // Data
+ CBrowserInitialContainer* iContainer;
+
+ // GotoPane`s text
+ HBufC* iEnteredURL;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserLauncherService.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of BrowserLauncherService
+*
+*
+*/
+
+
+#ifndef BROWSERLAUNCHERSERVICE_H
+#define BROWSERLAUNCHERSERVICE_H
+
+// INCLUDE FILES
+#include "LauncherServerBase.h"
+
+// FORWARD DECLARATIONS
+class TBrowserOverriddenSettings;
+class CAiwGenericParamList;
+
+// CLASS DECLARATION
+class CBrowserLauncherService: public CLauncherServerBase
+{
+public:
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserLauncherService();
+
+private:
+ /**
+ * Process incoming messages syncronously.
+ * @param aEmbeddingApplicationUid Embedding application`s UID
+ * @param aSettings Overridden user preferences.
+ * @param aFolderUid Uid of the folder that the Browser should open.
+ * @param aSeamlessParam
+ * @param aIsContentHandlerRegistered True if a content handler is registered
+ * @return The result of processing. ( same as SendRecieve() )
+ */
+ // from CLauncherServerBase
+ TInt ProcessMessageSyncL( TUid aEmbeddingApplicationUid,
+ TBrowserOverriddenSettings aSettings,
+ TInt aFolderUid,
+ TPtrC aSeamlessParam,
+ TBool aIsContentHandlerRegistered );
+
+ /**
+ * Process incoming messages asyncronously.
+ * @param aEmbeddingApplicationUid Embedding application`s UID
+ * @param aSettings Overridden user preferences.
+ * @param aFolderUid Uid of the folder that the Browser should open.
+ * @param aSeamlessParam
+ * @param aIsContentHandlerRegistered True if a content handler is registered
+ * @param isOverridenSettings True if the client sended an overidden setting
+ */
+ // from CLauncherServerBase
+ void ProcessMessageASyncL( TUid aEmbeddingApplicationUid,
+ TBrowserOverriddenSettings aSettings,
+ TInt aFolderUid,
+ TPtrC aSeamlessParam,
+ TBool aIsContentHandlerRegistered,
+ TBool isOverridenSettings );
+
+ /**
+ * Write iClientBuffer member to client`s address space.
+ * @return The error code of the process.
+ */
+ TInt ProcessMessageSyncBufferL( );
+
+ /**
+ * Process TBool parameters.
+ */
+ void ProcessBoolsL( TBool aClientWantsToContinue, TBool aWasContentHandled );
+
+ /**
+ * Closes the Browser.
+ */
+ void DoBrowserExit( );
+
+public:
+
+ /**
+ * Notifies client about finished download.
+ * @param aReason Result of the downloading
+ */
+ void DownloadFinishedL( TInt aReason, const CAiwGenericParamList& aParamList );
+
+public:
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL();
+};
+
+#endif // CBrowserAppServer_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserLoadObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handle special load events such as network connection,
+* deal with non-http or non-html requests
+*
+*/
+
+
+
+#ifndef BROWSERLOADOBSERVER_H
+#define BROWSERLOADOBSERVER_H
+
+// INCLUDES
+#include <brctlinterface.h>
+#include <browserdialogsproviderobserver.h>
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+class CBrowserContentView;
+class CBrowserWindow;
+
+// define this macro to log event time, temporary
+// #define I__LOG_EVENT_TIME
+
+// CLASS DECLARATION
+
+/**
+* This observer registers for load events
+*/
+class CBrowserLoadObserver : public CBase,
+ public MBrCtlLoadEventObserver,
+ public MBrowserDialogsProviderObserver
+ {
+ public: // Constructors and destructors
+
+ /**
+ * Constructor.
+ */
+ static CBrowserLoadObserver* NewL( MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ CBrowserWindow& aWindow );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserLoadObserver();
+
+ public:
+
+ enum TBrowserLoadState
+ {
+ ELoadStateIdle = 0x01,
+ // ELoadStateContentStart is not used.
+ // If you want to set it from BrowserUi, please note
+ // that it's not guarantued that Kimono will send
+ // any load event in case the content is already moved to
+ // Download Manager!
+ ELoadStateContentStart = 0x02,
+ ELoadStateResponseInProgress = 0x04,
+ ELoadStateLoadDone = 0x08,
+ ELoadStateContentAvailable = 0x10
+ };
+
+ enum TBrowserLoadUrlType
+ {
+ ELoadUrlTypeSavedDeck = 0x01,
+ ELoadUrlTypeStartPage,
+ ELoadUrlTypeEmbeddedBrowserWithUrl,
+ ELoadUrlTypeOther // for example GotoPane's url, Bookmark
+ };
+
+ enum TBrowserLoadStatus
+ {
+ // these flags are the status of loading a page,
+ // can be OR'd for querying, setting
+ ELoadStatusFirstChunkArrived = 0x0001 ,
+ ELoadStatusContentDisplayed = 0x0002 ,
+ ELoadStatusMainError = 0x0004 ,
+ ELoadStatusSubError = 0x0008 ,
+ ELoadStatusError = ELoadStatusMainError | ELoadStatusSubError,
+ // 0x000C , // MainError or SubError
+ ELoadStatusTitleAvailable = 0x0010,
+ ELoadStatusFirstChunkDisplayed = 0x0020,
+ ELoadStatusDone = 0x0040,
+ ELoadStatusSecurePage = 0x0080,
+ ELoadStatusSecureItemNonSecurePage = 0x0100,
+ ELoadStatusAllItemIsSecure = 0x0200, // !SomeItemsNotSecure
+ ELoadStatusSecurePageVisited = 0x0400
+ };
+
+ public: // Functions from MBrCtlLoadEventObserver
+
+ /**
+ * A load events notification
+ * @since 2.8
+ * @param aLoadEvent The load event
+ * @param aSize Size depends on the event
+ * @param aTransactionId The transaction that had this event
+ * @return void
+ */
+ virtual void HandleBrowserLoadEventL(
+ TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+ TUint aSize,
+ TUint16 aTransactionId );
+
+ public: // Functions from MBrowserDialogsProviderObserver
+
+ /**
+ * Callback function for dialog events.
+ */
+ void ReportDialogEventL( TInt aType, TInt aFlags = 0 );
+
+ public: // new functions
+
+ /**
+ * Loading must be started with this function by the owner.
+ * @since 3.0
+ * @param aLoadUrlType What is the url's type?
+ * if url doesn't need to be handled a special way, use ELoadUrlTypeOther
+ * otherwise implement special handling for all the events.
+ * @return void
+ */
+ void DoStartLoad( TBrowserLoadUrlType aLoadUrlType );
+
+ /**
+ * Loading must be terminated with this function by the owner.
+ * @since 3.0
+ * @param aIsCancelled Is user cancelled the fetching operation?
+ */
+ void DoEndLoad( TBool aIsUserInitiated = EFalse );
+
+ /**
+ * Checks loading status against some flags.
+ * @param aFlags
+ * @return ETrue only if ALL the aFlags are set
+ */
+ inline TBool LoadStatus( TUint32 aFlag ) const
+ { return ( ( aFlag ) && (( iStatus & ( aFlag )) == ( aFlag ))); }
+
+ protected: // new functions
+
+ /**
+ * Default C++ constructor.
+ */
+ CBrowserLoadObserver( MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ CBrowserWindow& aWindow );
+
+ /**
+ * 2nd phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ private: // new functions
+
+ void HandleLoadEventOtherL(
+ TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+ TUint aSize,
+ TUint16 aTransactionId );
+
+ inline void SetStatus( TUint32 aFlag ) { iStatus |= aFlag; }
+ inline void ClearStatus( TUint32 aFlag ) { iStatus &= ~aFlag; }
+ inline void ClearStatus( ) { iStatus = 0; }
+
+ void UpdateSecureIndicatorL();
+
+ private:
+ void StateChange( TBrowserLoadState aNextState );
+ void NewTitleAvailableL();
+ TBool InBrowserContentView();
+ void ContentArrivedL();
+ inline void SetRestoreContentFlag( TBool aFlag )
+ { iRestoreContentFlag = aFlag; }
+
+ public:
+ // Get functions
+ TBrowserLoadUrlType LoadUrlType() const;
+ TBrowserLoadState LoadState() const;
+ inline TBool ContentDisplayed(){return iNewContentDisplayed;}
+ void SetContentDisplayed( TBool aValue );
+
+ private: // data members
+ MApiProvider *iApiProvider; // owner app, not owned
+ CBrowserContentView *iContentView; // contentView, not owned
+ CBrowserWindow *iWindow;
+ TBrowserLoadState iLoadState;
+ TBrowserLoadUrlType iLoadUrlType;
+ TUint32 iStatus;
+
+ TBool iRestoreContentFlag;
+ TBool iBrowserInitLoad;
+ TBool iNewContentDisplayed;
+ // Large file upload max content
+ TUint32 iMaxUploadContent;
+
+#ifdef I__LOG_EVENT_TIME
+ TTime iStartDownloadTime;
+ TInt64 iTotalUpdateTime;
+ TInt64 iNumberOfUpdates;
+#endif
+
+ };
+
+#endif // BROWSERLOADOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserPopupEngine.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CBrowserPopupEngine
+*
+*
+*/
+
+
+#ifndef __BROWSERPOPUPENGINE_H
+#define __BROWSERPOPUPENGINE_H
+
+// INCLUDE FILES
+#include <f32file.h>
+#include <e32base.h>
+#include <badesca.h>
+
+// CLASS DECLARATION
+
+/**
+* CBrowserPopupEngine.
+*
+* @lib Browser.app
+* @since Series 60 3.0
+*/
+class CBrowserPopupEngine : public CBase
+{
+ public:// Constructors and destructor
+ /**
+ * Default constructor.
+ */
+ CBrowserPopupEngine();
+ /**
+ * Destructor.
+ */
+ ~CBrowserPopupEngine();
+ static CBrowserPopupEngine* NewLC();
+ static CBrowserPopupEngine* NewL();
+ public:// New functions
+ /**
+ * Adds url to white list
+ * @param aUrl url to ad to white list
+ */
+ void AddUrlToWhiteListL(const TDesC& aUrl);
+ /**
+ * Checks whether the url is on the white list
+ * @param aUrl url to check
+ * @return ETrue if the url is on white list
+ */
+ TBool IsUrlOnWhiteListL(const TDesC& aUrl);
+
+ void RemoveUrlFromWhiteListL(const TDesC& aUrl);
+
+ private:
+ void ConstructL();
+ /**
+ * Checks whether the url is in white cache
+ * @param aUrl url to check
+ * @return ETrue if the url is in white cache
+ */
+ TBool IsUrlInWhiteCacheL(const TDesC& aUrl);
+ /**
+ * Checks whether the url is in the white file
+ * @param aUrl url to check
+ * @return ETrue if the url is in white file
+ */
+ TBool IsUrlInWhiteFileL(const TDesC& aUrl);
+ /**
+ * Checks whether the url is in file
+ * @param aUrl url to check
+ * @return ETrue if the url is in file
+ */
+ TBool IsUrlInFileL(const RFile* aFile, const TDesC& aUrl);
+ /**
+ * Checks whether the url is in the cache
+ * @param aUrl url to check
+ * @return ETrue if the url is in cache
+ */
+ TBool IsUrlInCacheL( const CDesCArrayFlat* aCacheArray, const TDesC& aUrl, const TInt aLoadedurlno );
+ /**
+ * Loads urls to cache
+ * @param aFile file where from the urls will be loaded
+ * @param aCacheArray where to load the urls
+ * @param aLoadedUrlNo number of loaded urls
+ */
+ void LoadUrlsToCacheL(const RFile* aFile, CDesCArrayFlat* aCacheArray, TInt* aLoadedUrlNo);
+ /**
+ * Adds url to cache
+ * @param aCacheArray array where to add the url
+ * @param aUrl url to add to cache
+ */
+ void AddUrlToCacheL( CDesCArrayFlat* aCacheArray, const TDesC& aUrl );
+ /**
+ * Converts TDesc16 to TPtrC8
+ * @param aString string to convert
+ * @return a TPtrC8
+ */
+ TPtrC8 TDesC16ToTPtrC8(const TDesC16 &aString);
+ /**
+ * Converts TDesc8 to TPtrC16
+ * @param aString string to convert
+ * @return a TPtrC16
+ */
+ TPtrC16 TDesC8ToTPtrC16(const TDesC8 &aString);
+ /**
+ * Converts TDesc16 to HBufC8
+ * @param aString string to convert
+ * @return a pointer to HBufC8
+ */
+ HBufC8 *TDesC16ToHBufC8LC(const TDesC16 &string);
+ /**
+ * Converts TDesc8 to HBufC16
+ * @param aString string to convert
+ * @return a pointer to HBufC16
+ */
+ HBufC16 *TDesC8ToHBufC16LC(const TDesC8 &aString);
+ /**
+ * Opens the database
+ * @param aFile pointer to the file handle
+ * @param aIsBlack whether the databas is black
+ * @return
+ */
+ void OpenDatabaseL(RFile* aFile);
+ /**
+ * Handles order changes in the database
+ * @param aFile database file
+ * @param aUrl the url which cause the hange
+ * @param aExists whether the url exists in the database allready
+ * @param aIsBlack whether the database is black
+ * @param aToAdd whether to add the url to the database
+ * @return
+ */
+ void HandleUrlOrderChangeL(RFile* aFile, const TDesC& aUrl, const TBool aExists,const TBool aToAdd );
+ /**
+ * Removes Url from the cache
+ * @param aCacheArray
+ * @param aUrl
+ * @param aCacheNo
+ * @return
+ */
+ void RemoveUrlFromCacheL( CDesCArrayFlat* aCacheArray, const TDesC& aUrl, TInt &aCacheNo );
+ /**
+ * Checks whether the database is valid
+ * @param aFile pointer to the file which will be checked
+ * @return ETrue if the file is OK
+ */
+ TBool CheckDbValidity(RFile* aFile);
+ //member variables
+ RFs iFs;
+ RFile iWhiteListFile;//stores the white urls
+ CDesCArrayFlat* iCachedWhiteUrls;//owned
+ TInt iWhiteCacheNo;//number of white urls loaded to cache
+};
+
+
+
+#endif //__BROWSERPOPUPENGINE_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserPreferences.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1124 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: It manages Browser's preferences.
+*
+*/
+
+
+#ifndef BROWSER_PREFERENCES_H
+#define BROWSER_PREFERENCES_H
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <ActiveApDb.h>
+#include <brctldefs.h>
+#include "Browser.hrh"
+#include "Preferences.h"
+#include <BrowserNG.rsg>
+#include "BrowserUiPrivateCRKeys.h"
+#include <browseruisdkcrkeys.h>
+#include <centralrepository.h>
+#include <bldvariant.hrh>
+
+// CONSTANTS
+
+// FORWARD DECLARATION
+
+class MCommsModel;
+class MApiProvider;
+class CRepository;
+
+// class CBrCtlInterface;
+class TBrowserOverriddenSettings;
+class CApDataHandler;
+class CVpnApItem;
+class CVpnApEngine;
+// CLASS DECLARATION
+
+/**
+* Stores Browser settings.
+*
+* @lib Browser.app
+* @since Series60 1.2
+*/
+class CBrowserPreferences : public CBase,
+ public MPreferences,
+ public MActiveApDbObserver
+ {
+ public: // construction
+
+ /**
+ * Two-phased constructor.
+ * @since Series60 1.2
+ * @param aCommsModel Comms model
+ * @return The constructed preferences object
+ */
+ static CBrowserPreferences* NewLC( MCommsModel& aCommsModel,
+ MApiProvider& aApiProvider,
+ TBrowserOverriddenSettings* aSettings);
+
+ /**
+ * Two-phased constructor.
+ * @since Series60 1.2
+ * @param aCommsModel Comms model
+ * @return The constructed preferences object
+ */
+ static CBrowserPreferences* NewL( MCommsModel& aCommsModel,
+ MApiProvider& aApiProvider ,
+ TBrowserOverriddenSettings* aSettings );
+
+ public: // destruction
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserPreferences();
+
+
+ public: // observation
+
+ /**
+ * Adds an observer to the list of observers to be notified about changes.
+ * @since Series60 1.2
+ * @param anObserver Observer to be notified about events
+ */
+ void AddObserverL( MPreferencesObserver* anObserver );
+
+
+ /**
+ * Removes an observer.
+ * @since Series60 1.2
+ * @param anObserver The observer
+ */
+ void RemoveObserver( MPreferencesObserver* anObserver );
+
+ /**
+ * Notify all observers about change.
+ * @since Series60 1.2 (updated in 3.0)
+ */
+ void NotifyObserversL( TPreferencesEvent aEvent,
+ TBrCtlDefs::TBrCtlSettings aSettingType );
+
+ public: // From MActiveApDbObserver
+
+ /**
+ * Derived classes should implement this method, and act accordingly
+ * to database events.
+ * @since Series60 1.2
+ * @param anEvent Database-related event
+ */
+ void HandleApDbEventL( TEvent anEvent );
+
+ public: // New functions
+
+ /**
+ * Stores preferences into shared data db.
+ * @since Series60 1.2
+ */
+ void StoreSettingsL() const;
+
+ /**
+ * Returns a structure containing all of the settings according to the
+ * central repository values
+ * @since Series60 3.0
+ */
+ const TPreferencesValues& AllPreferencesL();
+
+ /**
+ * To access an int value key in ini file
+ * @param aKey the ini file key to read
+ * @return the value of the given key
+ * @since Series60 2.0
+ */
+ TInt GetIntValue( TUint32 aKey) const;
+
+ /**
+ * To access an string value key in ini file
+ * @param aKey the ini file key to read
+ * @return the value of the given key
+ * @since Series60 2.0
+ */
+ TInt GetStringValueL ( TUint32 aKey, TInt aMaxBufSize, TDes& aBuf ) const;
+
+ private: // New functions
+
+ /**
+ * restores preferences from shared data db. If fails, it uses defaults.
+ * @since Series60 1.2
+ */
+ void RestoreSettingsL();
+
+ private: //Utility functions for accessing shared data
+
+ /**
+ * To set an int value key in ini file
+ * @param aKey the ini file key to write
+ * @param aValue new value for the key
+ * @return ETrue if successful
+ * @since Series60 2.0
+ */
+ TBool SetIntValueL ( TUint32 aKey, const TInt& aValue);
+
+ /**
+ * To access an string value key in ini file
+ * @param aKey the ini file key to read
+ * @return the value of the given key
+ * @since Series60 2.0
+ */
+ HBufC* GetStringValueL ( TUint32 aKey ) const;
+
+ /**
+ * To set an int value key in ini file
+ * @param aKey the ini file key to write
+ * @param aValue new value for the key
+ * @return ETrue if successful
+ * @since Series60 2.0
+ */
+ TBool SetStringValueL( TUint32 aKey, const TDesC& aValue );
+
+ private: // New functions
+
+ /**
+ * Enables access to functions in CBrowserAppUi
+ **/
+ inline MApiProvider& ApiProvider() { return iApiProvider; }
+
+ public: // New functions
+
+ /**
+ * To set overriden values
+ * @param aSettings settings to verride
+ * @return void
+ * @since Series60 2.0
+ */
+ void SetOverriddenSettingsL(TBrowserOverriddenSettings* aSettings);
+
+ /**
+ * To set embedded mode
+ * @param aEmbeddedMode true if embedded mode is on
+ * @return void
+ * @since Series60 2.0
+ */
+ void SetEmbeddedModeL(TBool aEmbeddedMode);
+
+ /**
+ * To get embedded mode
+ * @return TBool
+ * @since Series60 3.0
+ */
+ inline TBool EmbeddedMode() const { return iEmbeddedMode; }
+
+ /**
+ * To access DefaultAccessPoint setting.
+ * @since Series60 1.2
+ * @return UID for default accesspoint
+ */
+ inline TUint DefaultAccessPoint() const;
+
+
+ /**
+ * Get the default snap id
+ * @since Series60 1.2
+ * @return
+ */
+ inline TUint DefaultSnapId() const;
+
+ /**
+ * To access Accossiated VPN if exist setting.
+ * @since Series60 1.2
+ * @return UID for Accossiated VPN or KWmlNoDefaultAccessPoint
+ */
+ inline TUint AssociatedVpn() const;
+
+ /**
+ * To access deafult AP details if exist setting.
+ * @since Series60 1.2
+ * @return CApAccessPointItem* or NULL
+ */
+ inline CApAccessPointItem* DefaultAPDetails();
+
+ /**
+ * To access vpn item if exists.
+ * aDefaultAccessPoint
+ * aVpnItem
+ * @since Series60 1.2
+ * @return TBool - if vpn item is valid
+ */
+ TBool VpnDataL( TUint aDefaultAccessPoint, CVpnApItem& aVpnItem );
+
+ /**
+ * To access AutoLoadContent setting.
+ * @since Series60 1.2
+ * @return Value of setting
+ */
+ inline TInt AutoLoadContent() const;
+
+ /**
+ * To access PageOverview setting.
+ * @return Value of setting
+ */
+ inline TBool PageOverview() const;
+
+ /**
+ * To access BackList setting.
+ * @return Value of setting
+ */
+ inline TBool BackList() const;
+
+ /**
+ * To access AutoRefresh setting.
+ * @return Value of setting
+ */
+ inline TBool AutoRefresh() const;
+
+ /**
+ * Sets the automatic updating access point of Web Feeds
+ */
+ void SetAutomaticUpdatingApL( TUint aAutomaticUpdatingAP );
+
+
+ /**
+ * Sets the automatic updating while roaming of News & Blogs
+ */
+ void SetAutomaticUpdatingWhileRoamingL( TBool aAutoUpdateRoaming ) ;
+
+ /**
+ * To access user-defined URL suffix list (.com, org, .net)
+ */
+ inline HBufC* URLSuffixList( ) const;
+
+ /**
+ * To modify user-defined URL suffix list (.com, .org, .net)
+ */
+ void SetURLSuffixList( HBufC* aValue );
+
+ /**
+ * automatic updating access point of Web Feeds
+ */
+ inline TUint AutomaticUpdatingAP() const;
+
+
+ /**
+ * automatic updating while roaming of News & Blogs
+ */
+ inline TBool AutomaticUpdatingWhileRoaming() const;
+
+ /**
+ * To access TextWrap setting
+ * @since Series60 1.2
+ * @return setting item value
+ */
+ inline TBool TextWrap() const;
+
+ /**
+ * To access FontSize setting
+ * @since Series60 1.2
+ * @return Font size
+ */
+ inline TInt FontSize() const;
+
+ /**
+ * To access Encoding setting
+ * @since Series60 1.2
+ * @return Default Encoding
+ */
+ inline TUint32 Encoding() const;
+
+ /**
+ * To access Adaptive Bookmarks setting
+ * @since Series60 1.2
+ * @return TWmlSettingsAdaptiveBookmarks
+ */
+ inline TWmlSettingsAdaptiveBookmarks AdaptiveBookmarks() const;
+
+ /**
+ * To access FullScreen setting
+ * @since Series60 2.1
+ * @return TWmlSettingsFullScreen
+ */
+ inline TWmlSettingsFullScreen FullScreen() const;
+
+ /**
+ * To access Cookies setting
+ * @since Series60 1.2
+ * @return TWmlSettingsCookies
+ */
+ inline TWmlSettingsCookies Cookies() const;
+
+ /**
+ * To access ECMA setting
+ * @since Series60 2.x
+ * @return TWmlSettingsECMA
+ */
+ inline TWmlSettingsECMA Ecma() const;
+
+ /**
+ * To access SCRIPTLOG setting
+ * @since Series60 3.2
+ * @return TUint32
+ */
+ inline TUint32 ScriptLog() const;
+
+ /**
+ * To access HTTP security warnings setting
+ * @since Series60 1.2S
+ * @return ETrue if security warnings are enabled
+ */
+ inline TBool HttpSecurityWarnings() const;
+
+ /**
+ * To access IMEI notification setting
+ * @since Series60 2.6
+ * @return ETrue if notification is enabled
+ */
+ inline TWmlSettingsIMEI IMEINotification() const;
+
+ /**
+ * Call this to check whether Http
+ */
+ inline TBool HttpSecurityWarningsStatSupressed() const;
+
+ /**
+ * To access Downloads Open setting
+ * @since Series60 3.x
+ * @return TBool
+ */
+ inline TBool DownloadsOpen() const;
+
+ /**
+ * To access user-defined homepage URL setting
+ */
+ TInt HomePageUrlL( TDes& aUrl, TBool aForceLoadFromSD = EFalse ) const;
+
+ /**
+ * Get the home page URL from belongs to the access point.
+ */
+ TInt HomePageFromIapL( TDes& aUrl, TUint aIap ) const;
+
+ /**
+ * To access user-defined search page URL setting
+ */
+ TPtrC SearchPageUrlL();
+
+ /**
+ * To determine that is there an overridden default access point defined or not
+ */
+ TBool CustomAccessPointDefined();
+
+ /**
+ * Shows/Hides the query on exit dialog
+ * 0 = Not show the dialog
+ * 1 = Show the dialog
+ *
+ * @since Series60 2.7
+ * @return ETrue if query on exit is enabled
+ */
+ inline TBool QueryOnExit() const;
+
+ /**
+ * Sends/Don not send the referrer header
+ * 0 = Do not send the referrer header
+ * 1 = Send the referrer header
+ *
+ * @since Series60 2.7
+ * @return ETrue if Send referrer header is enabled
+ */
+ inline TBool SendReferrer() const;
+
+ /**
+ * To access ShowConnectionDialogs setting
+ * @since Series60 2.0
+ * @return value of setting
+ */
+ inline TBool ShowConnectionDialogs() const;
+
+ /**
+ * To check that an engine local feature is supported or not
+ * @since Series60 2.1
+ * @return Returns ETrue if feature is supported
+ * @param aBitmask Feature to check
+ */
+ inline TBool EngineLocalFeatureSupported( const TInt aFeature ) const;
+
+ /**
+ * To check that a ui local feature is supported or not
+ * @since Series60 2.1
+ * @return Returns ETrue if feature is supported
+ * @param aBitmask Feature to check
+ */
+ inline TBool UiLocalFeatureSupported( const TInt aFeature ) const;
+
+ /**
+ * To access MediaVolume setting
+ * @since Series60 2.6
+ * @return TInt
+ */
+ inline TInt MediaVolume() const;
+
+ /**
+ * To access home page's type: AP/user defined.
+ * @since Series60 2.6
+ * @return value of setting
+ */
+ inline TWmlSettingsHomePage HomePageType() const;
+
+ /**
+ * To access Popup Blocking Enabled setting.
+ * @since Series60 3.0
+ * @return value of setting
+ */
+ inline TBool PopupBlocking() const;
+
+ /**
+ * To access Form Data Saving setting.
+ * @since Series60 3.1
+ * @return value of setting
+ */
+ inline TWmlSettingsFormData FormDataSaving() const;
+
+ /**
+ * To access Access Keys setting.
+ * @since Series60 3.2
+ * @return value of setting: 1-Enabled, 0-Disabled
+ */
+ inline TBool AccessKeys() const;
+
+ /**
+ * To modify DefaultAccessPoint setting
+ * @since Series60 1.2
+ * @param aDefaultAccessPoint Id of default accesspoint
+ */
+ void SetDefaultAccessPointL( TUint aDefaultAccessPoint, TUint aAssocVpn = KWmlNoDefaultAccessPoint );
+
+ /**
+ * Set default snapid
+ * @since Series60 1.2
+ * @param
+ */
+ void SetDefaultSnapId (TUint aSnapId);
+
+ /**
+ * To modify AutoLoadContent setting
+ * @since Series60 1.2
+ * @param aAutoLoadContent Change the setting on/off
+ */
+ void SetAutoLoadContentL( TInt aAutoLoadContent );
+
+ /**
+ * To modify PageOverview setting
+ * @param aPageOverview Change the setting on/off
+ */
+ void SetPageOverviewL( TBool aPageOverview );
+
+ /**
+ * To modify BackList setting
+ * @param aBackList Change the setting on/off
+ */
+ void SetBackListL( TBool aBackList );
+
+ /**
+ * To modify AutoRefresh setting
+ * @param aAutoRefresh Change the setting on/off
+ */
+ void SetAutoRefreshL( TBool aAutoRefresh );
+
+ /**
+ * To modify TextWrap setting
+ * @since Series60 1.2
+ * @param aTextWrap Change the setting on/off
+ */
+ void SetTextWrapL( TBool aTextWrap );
+
+ /**
+ * To modify FontSize setting
+ * @since Series60 1.2
+ * @param aFontSize Set new font size
+ */
+ void SetFontSizeL( TInt aFontSize );
+
+ /**
+ * To modify Encoding setting
+ * @since Series60 1.2
+ * @param aEncoding Set new font size
+ */
+ void SetEncodingL( TUint32 aEncoding );
+
+ /**
+ * To modify Adaptive Bookmarks setting
+ * @since Series60 1.2
+ * @param aAdaptiveBookmarks
+ */
+ void SetAdaptiveBookmarksL( TWmlSettingsAdaptiveBookmarks aAdaptiveBookmarks );
+
+ /**
+ * To modify FullScreen setting
+ * @since Series60 2.1
+ * @param aFullScreen
+ */
+ void SetFullScreenL( TWmlSettingsFullScreen aFullScreen );
+
+ /**
+ * To modify Cookies setting
+ * @since Series60 1.2
+ * @param aCookies
+ */
+ void SetCookiesL( TWmlSettingsCookies aCookies );
+
+ /**
+ * To modify ECMA setting
+ * @since Series60 2.x
+ * @param aEcma
+ */
+ void SetEcmaL( TWmlSettingsECMA aEcma );
+
+ /**
+ * To modify ScriptLog setting
+ * @since Series60 3.2
+ * @param aScriptLog
+ */
+ void SetScriptLogL( TUint32 aScriptLog );
+
+ /**
+ * To modify HTTP security warnings setting
+ * @since Series60 1.2S
+ * @param aWarningsOn True to enable security warnings, false to disable
+ */
+ void SetHttpSecurityWarningsL( TBool aWarningsOn );
+
+ /**
+ * To modify IMEI notification setting
+ * @since Series60 2.6
+ * @param aIMEINotification True to enable IMEI notification
+ */
+ void SetIMEINotificationL( TWmlSettingsIMEI aIMEINotification );
+
+ /**
+ * To modify MediaVolume setting
+ * @since Series60 2.6
+ * @param aMediaVolume Change the media volume value
+ */
+ void SetMediaVolumeL( TInt aMediaVolume );
+
+ /**
+ * To modify Downloads Open setting
+ * @since Series60 3.x
+ * @param aOpen True to enable download open
+ */
+ void SetDownloadsOpenL( TBool aOpen );
+
+ /**
+ * To flush all the shared data key settings
+ * @since Series60 2.6
+ */
+ void FlushSD();
+
+ /**
+ * To modify HomePage's type setting
+ * @since Series60 2.6
+ * @param aHomePageType Change the home page type: AP/user defined.
+ */
+ void SetHomePageTypeL( TWmlSettingsHomePage aHomePageType );
+
+ /**
+ * To modify user-defined HomePage.
+ * @since Series60 2.6
+ * @param aHomePageURL Change the home page's url.
+ */
+ void SetHomePageUrlL( const TDesC& aHomePageURL );
+
+ /**
+ * To modify user-defined Search Page URL
+ * @since Series60 2.6
+ * @param aSearchPageURL Change the search page's url.
+ */
+ void SetSearchPageUrlL( const TDesC& aSearchPageURL );
+
+ /**
+ * To modify user-defined Pop-up blocking enabled setting
+ * @since Series60 3.0
+ * @param aPopupBlocking Change setting on/off
+ */
+ void SetPopupBlockingL( TBool aPopupBlocking );
+
+ /**
+ * To modify Form Data Saving setting
+ * @since Series60 3.1
+ * @param aFormDataSaving Change setting off/form data only/ form data plus password
+ */
+ void SetFormDataSavingL( TWmlSettingsFormData aFormDataSaving );
+
+ /**
+ * To access to the list of self download content types.
+ * See CBrCtlInterface::SetSelfDownloadContentTypesL()!
+ */
+ TPtrC SelfDownloadContentTypesL();
+
+ /**
+ * To access Default Access Point selection mode settings.
+ */
+ TCmSettingSelectionMode AccessPointSelectionMode();
+
+ /**
+ * To modify Default Access Point Settings
+ */
+ void SetAccessPointSelectionModeL( TCmSettingSelectionMode aAccessPointSelectionMode );
+
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncHomePg() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncBkMark() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncFindKeyWord() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncPrePage() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncSwitchWin() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncMiniImage() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncFullScreen() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncGoAddr() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncZoomIn() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncZoomOut() const;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ inline HBufC* ShortCutFuncZoomMode() const;
+
+ /**
+ * To access rotate display setting
+ */
+ inline TBool RotateDisplay() const;
+
+ /**
+ * To get Toolbar On/Off value
+ */
+ inline TInt ShowToolbarOnOff() const;
+
+ /**
+ * To get Toolbar Button 1 command value
+ */
+ inline TInt ShowToolbarButton1Cmd() const;
+
+ /**
+ * To set Toolbar On/Off value
+ */
+ void SetToolbarOnOffL(TInt aCommand);
+
+ /**
+ * To set Toolbar Button 1 command value
+ */
+ void SetToolbarButton1CmdL(TInt aCommand);
+
+ /**
+ * To get Toolbar Button 2 command value
+ */
+ inline TInt ShowToolbarButton2Cmd() const;
+
+ /**
+ * To set Toolbar Button 2 command value
+ */
+ void SetToolbarButton2CmdL(TInt aCommand);
+
+ /**
+ * To get Toolbar Button 3 command value
+ */
+ inline TInt ShowToolbarButton3Cmd() const;
+
+ /**
+ * To set Toolbar Button 3 command value
+ */
+ void SetToolbarButton3CmdL(TInt aCommand);
+
+ /**
+ * To get Toolbar Button 4 command value
+ */
+ inline TInt ShowToolbarButton4Cmd() const;
+
+ /**
+ * To set Toolbar Button 4 command value
+ */
+ void SetToolbarButton4CmdL(TInt aCommand);
+
+ /**
+ * To get Toolbar Button 5 command value
+ */
+ inline TInt ShowToolbarButton5Cmd() const;
+
+ /**
+ * To set Toolbar Button 5 command value
+ */
+ void SetToolbarButton5CmdL(TInt aCommand);
+
+ /**
+ * To get Toolbar Button 6 command value
+ */
+ inline TInt ShowToolbarButton6Cmd() const;
+
+ /**
+ * To set Toolbar Button 6 command value
+ */
+ void SetToolbarButton6CmdL(TInt aCommand);
+
+ /**
+ * To get Toolbar Button 7 command value
+ */
+ inline TInt ShowToolbarButton7Cmd() const;
+
+ /**
+ * To set Toolbar Button 7 command value
+ */
+ void SetToolbarButton7CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 1 command value
+ */
+ inline TInt ShortcutKey1Cmd() const;
+
+ /**
+ * To set Shortcut Key 1 command value
+ */
+ void SetShortcutKey1CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 2 command value
+ */
+ inline TInt ShortcutKey2Cmd() const;
+
+ /**
+ * To set Shortcut Key 2 command value
+ */
+ void SetShortcutKey2CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 3 command value
+ */
+ inline TInt ShortcutKey3Cmd() const;
+
+ /**
+ * To set Shortcut Key 3 command value
+ */
+ void SetShortcutKey3CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 4 command value
+ */
+ inline TInt ShortcutKey4Cmd() const;
+
+ /**
+ * To set Shortcut Key 4 command value
+ */
+ void SetShortcutKey4CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 5 command value
+ */
+ inline TInt ShortcutKey5Cmd() const;
+
+ /**
+ * To set Shortcut Key 5 command value
+ */
+ void SetShortcutKey5CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 6 command value
+ */
+ inline TInt ShortcutKey6Cmd() const;
+
+ /**
+ * To set Shortcut Key 6 command value
+ */
+ void SetShortcutKey6CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 7 command value
+ */
+ inline TInt ShortcutKey7Cmd() const;
+
+ /**
+ * To set Shortcut Key 7 command value
+ */
+ void SetShortcutKey7CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 8 command value
+ */
+ inline TInt ShortcutKey8Cmd() const;
+
+ /**
+ * To set Shortcut Key 8 command value
+ */
+ void SetShortcutKey8CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 9 command value
+ */
+ inline TInt ShortcutKey9Cmd() const;
+
+ /**
+ * To set Shortcut Key 9 command value
+ */
+ void SetShortcutKey9CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key 0 command value
+ */
+ inline TInt ShortcutKey0Cmd() const;
+
+ /**
+ * To set Shortcut Key 0 command value
+ */
+ void SetShortcutKey0CmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key Star command value
+ */
+ inline TInt ShortcutKeyStarCmd() const;
+
+ /**
+ * To set Shortcut Key Star command value
+ */
+ void SetShortcutKeyStarCmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key Hash command value
+ */
+ inline TInt ShortcutKeyHashCmd() const;
+
+ /**
+ * To set Shortcut Key Hash command value
+ */
+ void SetShortcutKeyHashCmdL(TInt aCommand);
+
+ /**
+ * To get Shortcut Key for Qwerty command value
+ */
+ inline TInt ShortcutKeysForQwerty() const;
+
+ /**
+ * To get Zoom Level minimum value
+ */
+ inline TUint32 ZoomLevelMinimum() const;
+
+ /**
+ * To get Zoom Level maximum value
+ */
+ inline TUint32 ZoomLevelMaximum() const;
+
+ /**
+ * To get Zoom Level default value
+ */
+ inline TUint32 ZoomLevelDefault() const;
+
+ /**
+ * To get Maximum number of Recent URLs to be displayed in pop up
+ */
+ inline TInt MaxRecentUrls() const;
+
+ /**
+ * To get Search Feature Flag.
+ */
+ inline TInt SearchFeature() const;
+
+ /**
+ * To get Service Feature Flag.
+ */
+ inline TInt ServiceFeature() const;
+
+ /**
+ * To get cursor show mode
+ */
+ inline TBrCtlDefs::TCursorSettings CursorShowMode() const;
+
+ inline TBrCtlDefs::TEnterKeySettings EnterKeyMode() const;
+
+ private:
+
+ /**
+ * Constructor.
+ * @param aCommsModel Comms model.
+ */
+ CBrowserPreferences( MCommsModel& aCommsModel, MApiProvider& aApiProvider );
+
+ /**
+ * By default constructor is private.
+ */
+ void ConstructL( TBrowserOverriddenSettings* aSettings );
+ TInt GetSearchFeatureStatusL( TUint32 aKey, RApaLsSession& aLs );
+ private:
+
+ MApiProvider& iApiProvider; // enables access to CBrowserAppUi
+
+ // Application settings to store in file
+ TUint iCustomAp;
+ public:
+ enum ///< Text font size
+ {
+ EAllSmall,
+ ESmall,
+ ENormal,
+ ELarge,
+ EAllLarge
+ } TFontSize;
+ private:
+ // Observers
+ CArrayPtrFlat< MPreferencesObserver >* iObservers;
+ MCommsModel& iCommsModel;
+
+ CRepository* iRepository;
+ CApDataHandler* iApDH;
+ CVpnApItem* iVpnItem;
+ CVpnApEngine* iVpnEngine;
+
+ // OSS needs a separate repository for non shared settings.
+
+ TInt iEngineLocalFeaturesBitmask; //Engine Local Features Bitmask
+
+ TInt iUiLocalFeaturesBitmask; //Ui Local Features Bitmask
+
+ TBrowserOverriddenSettings* iOverridenSettings;
+
+ TBool iEmbeddedMode; //ETrue = the browser is in embedded mode
+
+ TInt iCdmaUiLocalFeaturesBitmask; // CDMA UI Local Features Bitmask
+
+ TBool iOverriden;//Settings were overriden or not
+
+ HBufC* iSelfDownloadContentTypes; ///< List of such content types. Owned.
+
+ // A buffer struct for holding each setting value
+ TPreferencesValues iAllPreferences;
+ };
+
+#include "BrowserPreferences.inl"
+
+// Toolbar button command translation matrix
+//
+// translates cenrep value to browser command and setting string resource id
+// for each toolbar button
+//
+// NOTE: THIS MUST STAY IN SYNC WITH SAME DEFINITION IN toolbar.h in webengine.
+//
+typedef const TInt TToolbarCommandDecodeEntry[1];
+
+#define KToolbarCommandDecodeMatrixCount 23
+#define KToolbarCommandDecodeMatrixStringId 0 // first entry is the Setting String Id
+
+static const TToolbarCommandDecodeEntry ToolbarCommandDecodeMatrix[] =
+{
+ // Index # Setting String Id
+ // = cenrep value
+ /* 0 */ { R_BROWSER_SETTING_NONE },
+ /* 1 */ { R_BROWSER_SETTING_SHOW_HELP },
+ /* 2 */ { R_BROWSER_SETTING_SWITCH_WINDOW },
+ /* 3 */ { R_BROWSER_SETTING_SAVE_PAGE },
+ /* 4 */ { R_BROWSER_SETTING_VIEW_IMAGES },
+ /* 5 */ { R_BROWSER_SETTING_VISUAL_HISTORY },
+ /* 6 */ { R_BROWSER_SETTING_MANAGE_BOOKMARKS },
+ /* 7 */ { R_BROWSER_SETTING_SUBSCRIBE_TO_FEEDS },
+ /* 8 */ { R_BROWSER_SETTING_ROTATE_SCREEN },
+ /* 9 */ { R_BROWSER_SETTING_SETTINGS },
+ /* 10 */ { R_BROWSER_SETTING_ZOOM_OUT },
+ /* 11 */ { R_BROWSER_SETTING_ZOOM_IN },
+ /* 12 */ { R_BROWSER_SETTING_GO_TO_HOMPAGE },
+ /* 13 */ { R_BROWSER_SETTING_PREVIOUS_PAGE },
+ /* 14 */ { R_BROWSER_SETTING_MINIATURE_SHOW },
+ /* 15 */ { R_BROWSER_SETTING_RELOAD },
+ /* 16 */ { R_BROWSER_SETTING_FIND_KEYWORD },
+ /* 17 */ { R_BROWSER_SETTING_RECENT_URLS }, // toolbar only - recent urls drop down list
+ /* 18 */ { R_BROWSER_SETTING_SAVE_AS_BOOKMARK },
+ /* 19 */ { R_BROWSER_SETTING_LIST_BOOKMARKS }, // toolbar only - bookmarks drop down list
+ /* 20 */ { R_BROWSER_SETTING_GO_TO_WEB_ADDRESS },
+ /* 21 */ { R_BROWSER_SETTING_SHOW_KEYMAP },
+ /* 22 */ { R_BROWSER_SETTING_FULL_SCREEN },
+};
+
+
+// Shortcut Keys command translation matrix
+//
+// translates cenrep value to browser command and setting string resource id
+// for each shortcut key
+//
+//
+typedef const TInt TShortcutsCommandDecodeEntry[2];
+
+#define KShortcutsCommandDecodeMatrixCount 22
+#define KShortcutsCommandDecodeMatrixCmdVal 0 // First entry is the Command Value
+#define KShortcutsCommandDecodeMatrixStringId 1 // Second entry is the Setting String Id
+
+static const TShortcutsCommandDecodeEntry ShortcutsCommandDecodeMatrix[] =
+{
+ // Index # Command Value Setting String Id
+ // = cenrep value
+ /* 0 */ { EWmlNoCmd, R_BROWSER_SETTING_NONE },
+ /* 1 */ { EAknCmdHelp, R_BROWSER_SETTING_SHOW_HELP },
+ /* 2 */ { EWmlCmdSwitchWindow, R_BROWSER_SETTING_SWITCH_WINDOW },
+ /* 3 */ { EWmlCmdSavePage, R_BROWSER_SETTING_SAVE_PAGE },
+ /* 4 */ { EWmlCmdShowImages, R_BROWSER_SETTING_VIEW_IMAGES },
+ /* 5 */ { EWmlCmdHistory, R_BROWSER_SETTING_VISUAL_HISTORY },
+ /* 6 */ { EWmlCmdFavourites, R_BROWSER_SETTING_MANAGE_BOOKMARKS },
+ /* 7 */ { EWmlCmdShowSubscribeList, R_BROWSER_SETTING_SUBSCRIBE_TO_FEEDS },
+ /* 8 */ { EWmlCmdRotateDisplay, R_BROWSER_SETTING_ROTATE_SCREEN },
+ /* 9 */ { EWmlCmdPreferences, R_BROWSER_SETTING_SETTINGS },
+ /* 10 */ { EWmlCmdZoomOut, R_BROWSER_SETTING_ZOOM_OUT },
+ /* 11 */ { EWmlCmdZoomIn, R_BROWSER_SETTING_ZOOM_IN },
+ /* 12 */ { EWmlCmdLaunchHomePage, R_BROWSER_SETTING_GO_TO_HOMPAGE },
+ /* 13 */ { EWmlCmdOneStepBack, R_BROWSER_SETTING_PREVIOUS_PAGE },
+ /* 14 */ { EWmlCmdShowMiniature, R_BROWSER_SETTING_MINIATURE_SHOW },
+ /* 15 */ { EWmlCmdReload, R_BROWSER_SETTING_RELOAD },
+ /* 16 */ { EWmlCmdFindKeyword, R_BROWSER_SETTING_FIND_KEYWORD },
+ /* 17 */ { EWmlCmdSaveAsBookmark, R_BROWSER_SETTING_SAVE_AS_BOOKMARK },
+ /* 18 */ { EWmlCmdGoToAddress, R_BROWSER_SETTING_GO_TO_WEB_ADDRESS },
+ /* 19 */ { EWmlCmdShowToolBar, R_BROWSER_SETTING_SHOW_TOOLBAR },
+ /* 20 */ { EWmlCmdShowShortcutKeymap, R_BROWSER_SETTING_SHOW_KEYMAP },
+ /* 21 */ { EWmlCmdEnterFullScreenBrowsing, R_BROWSER_SETTING_FULL_SCREEN },
+};
+
+#endif //BROWSER_PREFERENCES_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserPreferences.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,695 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CBrowserPreferences.
+*
+*
+*/
+
+
+#ifndef WML_BROWSER_PREFERENCES_INL
+#define WML_BROWSER_PREFERENCES_INL
+
+#include <bldvariant.hrh>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::DefaultSnapId()
+// ---------------------------------------------------------
+//
+
+TUint CBrowserPreferences::DefaultSnapId() const
+ {
+
+ return iAllPreferences.iDefaultSnapId ;
+
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::DefaultAccessPoint
+// ---------------------------------------------------------
+//
+TUint CBrowserPreferences::DefaultAccessPoint() const
+ {
+ if ( ( iOverridenSettings ) && iCustomAp )
+ {
+ return iCustomAp;
+ }
+ else
+ {
+ return iAllPreferences.iDefaultAccessPoint ;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::AssociatedVpn
+// ---------------------------------------------------------
+//
+TUint CBrowserPreferences::AssociatedVpn() const
+ {
+ return iAllPreferences.iAssocVpn;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::DefaultAPDetails
+// ---------------------------------------------------------
+//
+CApAccessPointItem* CBrowserPreferences::DefaultAPDetails()
+ {
+ return iAllPreferences.iDefaultAPDetails;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::AutoLoadContent
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::AutoLoadContent() const
+ {
+ return iAllPreferences.iAutoLoadContent;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::PageOverview
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::PageOverview() const
+ {
+ return iAllPreferences.iPageOverview;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::BackList
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::BackList() const
+ {
+ return iAllPreferences.iBackList;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::AutoRefresh
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::AutoRefresh() const
+ {
+ return iAllPreferences.iAutoRefresh;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::TextWrap
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::TextWrap() const
+ {
+ return iAllPreferences.iTextWrap;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::FontSize
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::FontSize() const
+ {
+ return iAllPreferences.iFontSize;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::Encoding
+// ---------------------------------------------------------
+//
+TUint32 CBrowserPreferences::Encoding() const
+ {
+ return iAllPreferences.iEncoding;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::AdaptiveBookmarks
+// ---------------------------------------------------------
+//
+TWmlSettingsAdaptiveBookmarks CBrowserPreferences::AdaptiveBookmarks() const
+ {
+ return iAllPreferences.iAdaptiveBookmarks;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::FullScreen()
+// ---------------------------------------------------------
+//
+TWmlSettingsFullScreen CBrowserPreferences::FullScreen() const
+ {
+ return iAllPreferences.iFullScreen;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::Cookies
+// ---------------------------------------------------------
+//
+TWmlSettingsCookies CBrowserPreferences::Cookies() const
+ {
+ return iAllPreferences.iCookies;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::Ecma
+// ---------------------------------------------------------
+//
+TWmlSettingsECMA CBrowserPreferences::Ecma() const
+ {
+ return iAllPreferences.iEcma;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ScriptLog
+// ---------------------------------------------------------
+//
+TUint32 CBrowserPreferences::ScriptLog() const
+ {
+ return iAllPreferences.iScriptLog;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::HttpSecurityWarnings
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::HttpSecurityWarnings() const
+ {
+ return iAllPreferences.iHttpSecurityWarnings;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::IMEINotification
+// ---------------------------------------------------------
+//
+TWmlSettingsIMEI CBrowserPreferences::IMEINotification() const
+ {
+ return iAllPreferences.iIMEINotification;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences:::HttpSecurityWarningsStatSupressed
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::HttpSecurityWarningsStatSupressed() const
+ {
+ return iAllPreferences.iHTTPSecuritySupressed;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences:::DownloadsOpen
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::DownloadsOpen() const
+ {
+ return iAllPreferences.iDownloadsOpen;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::QueryOnExit
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::QueryOnExit() const
+ {
+ return iAllPreferences.iQueryOnExit;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SendReferrer
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::SendReferrer() const
+ {
+ return iAllPreferences.iSendReferrer;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowConnectionDialogs()
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::ShowConnectionDialogs() const
+ {
+ return iAllPreferences.iConnDialogs;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::MediaVolume()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::MediaVolume() const
+ {
+ return iAllPreferences.iMediaVolume;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::HomePageType()
+// ---------------------------------------------------------
+//
+TWmlSettingsHomePage CBrowserPreferences::HomePageType() const
+ {
+ return iAllPreferences.iHomePgType;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::PopupBlocking()
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::PopupBlocking() const
+ {
+ return iAllPreferences.iPopupBlocking;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::FormDataSaving()
+// ---------------------------------------------------------
+//
+TWmlSettingsFormData CBrowserPreferences::FormDataSaving() const
+ {
+ return iAllPreferences.iFormDataSaving;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::AccessKeys()
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::AccessKeys() const
+ {
+ return iAllPreferences.iAccessKeys;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::AutomaticUpdatingAP
+// ----------------------------------------------------------------------------
+//
+TUint CBrowserPreferences::AutomaticUpdatingAP() const
+ {
+ return iAllPreferences.iAutomaticUpdatingAP;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::AutomaticUpdatingWhileRoaming
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::AutomaticUpdatingWhileRoaming() const
+ {
+ return iAllPreferences.iAutomaticUpdatingWhileRoaming;
+ }
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncHomePg
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncHomePg() const
+ {
+ return iAllPreferences.iShortCutFuncHomePg;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncBkMark
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncBkMark() const
+ {
+ return iAllPreferences.iShortCutFuncBkMark;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncFindKeyWord
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncFindKeyWord() const
+ {
+ return iAllPreferences.iShortCutFuncFindKeyWord;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncPrePage
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncPrePage() const
+ {
+ return iAllPreferences.iShortCutFuncPrePage;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncSwitchWin
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncSwitchWin() const
+ {
+ return iAllPreferences.iShortCutFuncSwitchWin;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncMiniImage
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncMiniImage() const
+ {
+ return iAllPreferences.iShortCutFuncMiniImage;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncFullScreen
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncFullScreen() const
+ {
+ return iAllPreferences.iShortCutFuncFullScreen;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncGoAddr
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncGoAddr() const
+ {
+ return iAllPreferences.iShortCutFuncGoAddr;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncZoomIn
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncZoomIn() const
+ {
+ return iAllPreferences.iShortCutFuncZoomIn;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncZoomOut
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncZoomOut() const
+ {
+ return iAllPreferences.iShortCutFuncZoomOut;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ShortCutFuncZoomMode
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::ShortCutFuncZoomMode() const
+ {
+ return iAllPreferences.iShortCutFuncZoomMode;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::RotateDisplay()
+// ---------------------------------------------------------
+//
+TBool CBrowserPreferences::RotateDisplay() const
+ {
+ return iAllPreferences.iRotateDisplay;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarOnOff()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarOnOff() const
+ {
+ return iAllPreferences.iToolbarOnOff;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton1Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton1Cmd() const
+ {
+ return iAllPreferences.iToolbarButton1Cmd;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton2Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton2Cmd() const
+ {
+ return iAllPreferences.iToolbarButton2Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton3Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton3Cmd() const
+ {
+ return iAllPreferences.iToolbarButton3Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton4Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton4Cmd() const
+ {
+ return iAllPreferences.iToolbarButton4Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton5Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton5Cmd() const
+ {
+ return iAllPreferences.iToolbarButton5Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton6Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton6Cmd() const
+ {
+ return iAllPreferences.iToolbarButton6Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShowToolbarButton7Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShowToolbarButton7Cmd() const
+ {
+ return iAllPreferences.iToolbarButton7Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey1Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey1Cmd() const
+ {
+ return iAllPreferences.iShortcutKey1Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey2Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey2Cmd() const
+ {
+ return iAllPreferences.iShortcutKey2Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey3Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey3Cmd() const
+ {
+ return iAllPreferences.iShortcutKey3Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey4Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey4Cmd() const
+ {
+ return iAllPreferences.iShortcutKey4Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey5Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey5Cmd() const
+ {
+ return iAllPreferences.iShortcutKey5Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey6Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey6Cmd() const
+ {
+ return iAllPreferences.iShortcutKey6Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey7Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey7Cmd() const
+ {
+ return iAllPreferences.iShortcutKey7Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey8Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey8Cmd() const
+ {
+ return iAllPreferences.iShortcutKey8Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey9Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey9Cmd() const
+ {
+ return iAllPreferences.iShortcutKey9Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKey0Cmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKey0Cmd() const
+ {
+ return iAllPreferences.iShortcutKey0Cmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKeyStarCmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKeyStarCmd() const
+ {
+ return iAllPreferences.iShortcutKeyStarCmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKeyHashCmd()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKeyHashCmd() const
+ {
+ return iAllPreferences.iShortcutKeyHashCmd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ShortcutKeysForQwerty()
+// ---------------------------------------------------------
+//
+TInt CBrowserPreferences::ShortcutKeysForQwerty() const
+ {
+ return iAllPreferences.iShortcutKeysForQwerty;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ZoomLevelMinimum()
+// ---------------------------------------------------------
+//
+TUint32 CBrowserPreferences::ZoomLevelMinimum() const
+ {
+ return iAllPreferences.iZoomLevelMin;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ZoomLevelMaximum()
+// ---------------------------------------------------------
+//
+TUint32 CBrowserPreferences::ZoomLevelMaximum() const
+ {
+ return iAllPreferences.iZoomLevelMax;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::ZoomLevelDefault()
+// ---------------------------------------------------------
+//
+TUint32 CBrowserPreferences::ZoomLevelDefault() const
+ {
+ return iAllPreferences.iZoomLevelDefault;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::CursorShowMode()
+// ---------------------------------------------------------
+//
+TBrCtlDefs::TCursorSettings CBrowserPreferences::CursorShowMode() const
+ {
+ return iAllPreferences.iCursorShowMode;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::URLSuffixList
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::URLSuffixList() const
+ {
+ return iAllPreferences.iUrlSuffixList;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::MaxRecentUrls
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::MaxRecentUrls() const
+ {
+ return iAllPreferences.iMaxRecentUrlsToShow;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SearchFeature
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::SearchFeature() const
+ {
+ return iAllPreferences.iSearch;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ServiceFeature
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::ServiceFeature() const
+ {
+ return iAllPreferences.iService;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::EnterKeyMode()
+// ---------------------------------------------------------
+//
+TBrCtlDefs::TEnterKeySettings CBrowserPreferences::EnterKeyMode() const
+ {
+ return iAllPreferences.iEnterKeyMode;
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserProgressIndicator.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class to put animation and progress indicator to contextPane.
+*
+*
+*/
+
+
+#ifndef BROWSERPROGRESSINDICATOR_H
+#define BROWSERPROGRESSINDICATOR_H
+
+// INCLUDES
+#include <E32BASE.H>
+
+// FORWARD DECLARATIONS
+//class CBrowserAnimation;
+class MApiProvider;
+
+// DATA TYPES
+
+// Progressbar data struct.
+struct TProgressData
+ {
+ TUint16 iId; // Id of the transaction
+ TUint32 iRecvdData; // Amount of received data
+ TUint32 iMaxData; // Max amount of data
+ TBool iComplete; // True if TransAct Id downloaded otherwise False.
+ };
+
+
+// CLASS DECLARATION
+/**
+* Encapsulates the animation feature of the browser.
+*
+* @lib Browser.app
+* @since Series60 1.2
+*/
+class CBrowserProgressIndicator : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aApiProvider Reference to API provider
+ * @return Pointer to instance of CBrowserAnimation
+ */
+ static CBrowserProgressIndicator* CBrowserProgressIndicator::NewL( MApiProvider& aApiProvider );
+ /**
+ * Constructor.
+ * @param aApiProvider Reference to API provider
+ */
+ CBrowserProgressIndicator( MApiProvider& aApiProvider );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserProgressIndicator();
+
+ public: // New functions
+
+ /**
+ * Starts animation and progress bar.
+ * @since Series60 1.2
+ * @param aBearerType
+ */
+ void StartL();
+
+ /**
+ * Stops animation and progress bar.
+ * @since Series60 1.2
+ */
+ void StopL();
+
+ /**
+ * Adds transaction id to array.
+ * @since Series60 1.2
+ * @param aId Id of the transaction
+ */
+ void AddTransActIdL( TUint16 aId );
+
+ /**
+ * Notify that new data has arrived to the loaders.
+ * @since Series60_version 2.5
+ * @return none
+ */
+ void NotifyProgress();
+
+ /**
+ * Saves maximum and received data with a transction id.
+ * @since Series60 1.2
+ * @param aId Id of the transaction
+ * @param aRecvdData Amount of data we have received with current transaction Id
+ * @param aMaxData Max size of the transaction
+ */
+ void AddProgressDataL( TUint16 aId, TUint32 aRecvdData, TUint32 aMaxData );
+
+ /**
+ * Marks particular transaction id to complete status
+ * @since Series60 2.0
+ * @param aId Id of the transaction
+ */
+ void TransActIdCompleteL( TUint16 aId );
+
+ /**
+ * Gives amount of transaction ids.
+ * @since Series60 1.2
+ * @return Amount of transaction ids
+ */
+ TInt TransActIdAmount() const;
+
+ /**
+ * Gives amount of completed transaction ids.
+ * @since Series60 1.2
+ * @return Amount of transaction ids
+ */
+ TInt TransActIdAmountCompleted() const;
+
+ protected:
+ /**
+ * Two-phase constructor.
+ */
+ void ConstructL();
+
+ private:
+ /**
+ * Enquires transaction statuses. Calculates and generates progress
+ * text and progress bar.
+ * @since Series60 1.2
+ * @return None.
+ */
+ void EnquireStatusL();
+
+ /**
+ * Deletes progress data item according to aId .
+ * @since Series60 1.2
+ * @param aId Transaction id
+ */
+ void DeleteProgressDataItem( TUint16 aId );
+
+ /**
+ * Resets all saved transaction ids, maximum data and received data.
+ * @since Series60 1.2
+ */
+ void ResetValues();
+
+ /**
+ * Returns total amount of received data.
+ * @since Series60 1.2
+ * @return Number of received data
+ */
+ TUint32 ReceivedData();
+
+ /**
+ * All transaction ids won't give max data info at the same time.
+ * Calculation is needed to get estimated maxData of page.
+ * @since Series60 1.2
+ * @return Number of maximum data
+ */
+ TUint32 EstimateMaxData();
+
+ /**
+ * Returns transaction id of current index from array.
+ * @since Series60 1.2
+ * @param aIndex Index of array
+ * @return Transaction id
+ */
+ TUint16 TransActId( TInt aIndex );
+
+ private: // Data
+
+ TBool iIsRunning; // Animation is running
+ MApiProvider& iApiProvider; // Api provider
+
+ CArrayFixFlat<TProgressData>* iProgressData;
+ TBool iInitialDownloadIndicatorState; // initial download (globe) animation in Full Screen pane
+ TReal iProgressEstimate;
+
+ /**
+ * Temporary storage for strings. Each must be reseted at
+ * the beginning of EnquireStatusL!
+ */
+ TBuf<20> iPercentText;
+ TBuf<15> iDataText;
+ TBuf<5> iMBvalue;
+
+ const TDesC* iMyKb;
+ const TDesC* iMyMb;
+
+ TInt iLastMaxEstimate;
+ TInt iLastReceivedData;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserPushMtmObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of CBrowserPushMtmObserver
+*
+*/
+
+
+#ifndef BROWSERPUSHMTMOBSERVER_H
+#define BROWSERPUSHMTMOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+
+// CLASS DECLARATION
+
+/**
+*
+* @lib
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CBrowserPushMtmObserver) : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @since 3.0
+ * @param
+ * @param
+ * @return CacheHandler object.
+ */
+ static CBrowserPushMtmObserver* NewL( MApiProvider* aApiProvider );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserPushMtmObserver();
+
+ public: // new functions
+ void StartObserver();
+ HBufC8* ReadMsgFileL();
+
+ public: // from base class CActive
+ void RunL();
+ TInt RunError(TInt aError);
+ void DoCancel();
+
+ private:
+
+ /**
+ * Construct.
+ * @since 3.0
+ * @param
+ * @param
+ * @return PushMtmObserver object.
+ */
+ CBrowserPushMtmObserver( MApiProvider* aApiProvider );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private: // Data
+
+ RFs iFsSession; // not owned
+ MApiProvider* iApiProvider;
+ };
+
+#endif // BROWSERPUSHMTMOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserShortcutKeyMap.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,189 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implements Browser Shortcut Key Map
+*
+*/
+
+
+#ifndef BROWSERSHORTCUTKEYMAP_H
+#define BROWSERSHORTCUTKEYMAP_H
+
+// INCLUDES
+#include <e32base.h>
+
+// MACROS
+
+// FORWARD DECLARATIONS
+class CBrowserContentViewContainer;
+class MApiProvider;
+
+// CLASS DECLARATION
+/**
+* Encapsulate Keymap Cell Info
+* @since 5.0
+*/
+class TKeymapCellData
+ {
+public:
+ // C++ constructor and destructor to initialize/delete pointer data members
+ TKeymapCellData();
+ ~TKeymapCellData();
+
+ // data
+ HBufC* keyText;
+ HBufC* lineText;
+ TInt cmdRscId;
+ CFbsBitmap* keyBitmapImage;
+ CFbsBitmap* keyBitmapMask;
+
+ TRect r; // Main rect for cell
+ TRect rCell; // Cell contents rect (includes margin)
+ TRect rKey; // key indicator rect
+ TRect rLine1; // text line 1 rect
+ TRect rLine2; // text line 2 rect
+ TRect rIcon; // icon rect
+ };
+
+/**
+* Create and manage the keymap sprite
+* @since 5.0
+*/
+
+class CBrowserShortcutKeyMap: public CBase
+ {
+ public: // Constructor and destructor
+ /**
+ * Two-phased constructor.
+ */
+ static CBrowserShortcutKeyMap* NewL( CBrowserContentViewContainer* aContentViewContainer, MApiProvider& aApiProvider );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserShortcutKeyMap();
+
+ private: // Constructors
+ /**
+ * C++ default constructor.
+ */
+ CBrowserShortcutKeyMap( CBrowserContentViewContainer* aContentViewContainer, MApiProvider& aApiProvider );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Initialize Keymap properties
+ */
+ void InitKeymap();
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Initialize Keymap data kept for each cell of the map
+ */
+ void InitCellDataL();
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Create the bitmap and context that will be used for the sprite
+ */
+ void CreateBitmapAndContextL();
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Calculate the layout of the sprite rects for a given cell
+ */
+ void CreateCellLayout(const TInt& aCellIndex, const TPoint& aUpperL, const TSize& aSize);
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Draw the sprite rects to the sprite bitmap
+ */
+ void CreateSpriteCellL(const TInt& aCellIndex);
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Construct the Sprite from the bitmap and context
+ */
+ void ConstructSprite();
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Utility: Get the folder where the canned image is located
+ */
+ HBufC* GetCannedImageDirL();
+
+ /**
+ * @since 5.0
+ * @param
+ * @return
+ * Utility: get the SVG bitmaps, etc, given its filename
+ */
+ void LoadSvg( TInt aImageId, const TDesC& aFileName, CFbsBitmap*& aImage, CFbsBitmap*& aImageMask );
+
+ /**
+ * @since 7.x
+ * @param
+ * @return
+ * Utility: create dimmed versions of bitmaps aImage
+ */
+ void CreateDimBitmapL( CFbsBitmap* aImage,
+ CFbsBitmap* aImageMask,
+ CFbsBitmap*& aDimImage,
+ CFbsBitmap*& aDimImageMask);
+
+
+ private: // Data
+ CBrowserContentViewContainer* iContentViewContainer; // not owned
+ MApiProvider& iApiProvider; // not owned, used to query browser prefs
+
+ TRect iTargetRect; // Main rect of the keymap, sized according to parent container
+
+ const CFont* iKeyFont; // not owned, font used for the key indicator text
+ const CFont* iLineFont; // not owned, font used for the function description
+ RPointerArray<TKeymapCellData> iCellData; // data structure to hold data for each key cell
+
+ HBufC* iSvgMbmFile; // holds icon svg
+
+ /* sprite data */
+ RWsSprite iSprite;
+ CFbsBitmapDevice* iSpriteBitmapDevice; // owned
+ CFbsBitGc* iSpriteBitmapContext; // owned
+ CFbsBitmap* iSpriteBitmap; // owned
+ CFbsBitmapDevice* iSpriteMaskBitmapDevice; // owned
+ CFbsBitGc* iSpriteMaskBitmapContext; // owned
+ CFbsBitmap* iSpriteMaskBitmap; // owned
+ };
+
+#endif // BROWSERSHORTCUTKEYMAP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserSoftkeysObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handle softkeys updates
+*
+*/
+
+
+
+#ifndef BROWSERSOFTKEYSOBSERVER_H
+#define BROWSERSOFTKEYSOBSERVER_H
+
+// INCLUDES
+#include <brctlsoftkeysobserver.h>
+#include "WmlBrowserBuild.h"
+
+class CBrowserWindow;
+
+// CLASS DECLARATION
+
+/**
+* This observer is notified when the browser requests softkeys changes
+*
+* @lib BrowserEngine.lib
+* @since 2.8
+*/
+class CBrowserSoftkeysObserver : public CBase, public MBrCtlSoftkeysObserver
+ {
+ public: // Constructors and destructors
+
+ /**
+ * Constructor.
+ * @since 2.8
+ * @param aView Owner AppUi.
+ */
+ static CBrowserSoftkeysObserver* NewL(
+ CBrowserWindow& aWindow );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserSoftkeysObserver();
+
+ public: // From MBrCtlSoftkeysObserver
+
+ /**
+ * Browser Control requests to update a softkey
+ * @since 2.8
+ * @param aKeySoftkey Update the left softkey or the right softkey
+ * @param aLabel The label associated with the softkey update
+ * @param aCommandId The command to use if the softkey is selected by the user
+ * @param aBrCtlSoftkeyChangeReason The reason for the softkey change
+ * @return void
+ */
+ virtual void UpdateSoftkeyL( TBrCtlKeySoftkey aKeySoftkey,
+ const TDesC& aLabel,
+ TUint32 aCommandId,
+ TBrCtlSoftkeyChangeReason aReason );
+
+ protected: // new functions
+
+ /**
+ * Default C++ constructor.
+ */
+ CBrowserSoftkeysObserver(
+ CBrowserWindow& aWindow );
+
+ /**
+ * 2nd phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ private: // data members
+
+ CBrowserWindow* iWindow; // not owned
+
+ };
+
+#endif // BROWSERSOFTKEYSOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserSpecialLoadObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handle special load events such as network connection,
+* deal with non-http or non-html requests
+*
+*/
+
+
+
+#ifndef BROWSERSPECIALLOADOBSERVER_H
+#define BROWSERSPECIALLOADOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <brctlspecialloadobserver.h>
+#include <apparc.h>
+#include <badesca.h>
+#include <AknServerApp.h>
+
+class MApiProvider;
+class CEikDocument;
+class CSchemeHandler;
+class CDocumentHandler;
+class CBrowserContentView;
+class CAiwGenericParamList;
+class CBrowserWindow;
+
+enum TPopupPreferences
+ {
+ EBlockOnce = 0,
+ EAllowOnce,
+ EBlock,
+ EAllow
+ };
+
+// CLASS DECLARATION
+
+/**
+* This observer handles special load events such as network connection,
+* deal with non-http(s) or non-html requests
+*
+* @lib BrowserEngine.lib
+* @since 2.8
+*/
+class CBrowserSpecialLoadObserver : public CBase,
+ public MBrCtlSpecialLoadObserver,
+ public MAknServerAppExitObserver
+ {
+ public: // Constructors and destructors
+
+ /**
+ * Constructor.
+ */
+ static CBrowserSpecialLoadObserver* NewL(
+ MApiProvider& aApiProvider,
+ CBrowserWindow* aWindow,
+ CEikDocument* aDocument,
+ CBrowserContentView* aContentView );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserSpecialLoadObserver();
+
+ private:
+
+#ifdef __WINS__
+ TInt AskIapIdL( TUint32& aId );
+#endif // __WINS__
+
+ public: // From MBrCtlSpecialLoadObserver
+
+ /**
+ * Request to create a network connection.
+ * @since 2.8
+ * @param aConnectionPtr A pointer to the new connection.
+ * If NULL, the proxy filter will automatically create
+ * a network connection.
+ * @param aSockSvrHandle A handle to the socket server.
+ * @param aNewConn A flag if a new connection was created.
+ * If the connection is not new, proxy filter optimization
+ * will not read the proxy again from CommsBd.
+ * @return void
+ */
+ virtual void NetworkConnectionNeededL( TInt* aConnectionPtr,
+ TInt* aSockSvrHandle,
+ TBool* aNewConn,
+ TApBearerType* aBearerType );
+
+ /**
+ * Request the host applicaion to handle non-http request.
+ * @since 2.8
+ * @param aUrl The non-http(s) or file URL
+ * @param aParamList Parameters to pass to the host application. Contain referer header. It could be NULL
+ * @return ETrue is handled by the host application. EFlase if not
+ */
+ virtual TBool HandleRequestL( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray );
+
+ /**
+ * Request the host applicaion to handle downloads
+ * @since 2.8
+ * @param aTypeArray array of download parameter types
+ * @param aDesArray array of values associated with the types in the type array
+ * @return ETrue is handled by the host application. EFlase if not
+ */
+ virtual TBool HandleDownloadL( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray );
+
+
+ public: // from MAknServerAppExitObserver
+
+ void HandleServerAppExit( TInt aReason );
+
+ protected: // Constructors
+
+ /**
+ * Default C++ constructor.
+ */
+ CBrowserSpecialLoadObserver( MApiProvider& aApiProvider,
+ CBrowserWindow* aWindow,
+ CEikDocument* aDocument,
+ CBrowserContentView* aContentView );
+
+ /**
+ * 2nd phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ public: // New functions
+
+ inline TBool LongZeroStartup()
+ { return iLongZeroStartup; }
+
+ inline void SetLongZeroStartup( TBool aLongZeroStartup )
+ { iLongZeroStartup = aLongZeroStartup; }
+ inline TBool IsConnectionStarted()
+ { return iConnectionStarted; }
+ /**
+ * Request for the connection to be cancelled
+ */
+ inline void CancelConnection() { iConnectionCancelled = ETrue; }
+
+
+ protected: // New functions
+
+#ifdef __RSS_FEEDS
+ /**
+ * Handles the content if it is special Ui content (rss or opml) and returns true, otherwise the method
+ * returns false.
+ * @param aTypeArray array of download parameter types
+ * @param aDesArray array of values associated with the types in the type array
+ * @return ETrue if it handled rss content, EFalse otherwise
+ * @since 3.1
+ */
+ TBool HandleUiContentL(RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray ) const;
+#endif // __RSS_FEEDS
+
+ /**
+ * Make generic parameter list from BrCtl parameter list.
+ * @param aTypeArray array of download parameter types
+ * @param aDesArray array of values associated with the types in the type array
+ * @return The dynamically allocated list.
+ * @since 2.8
+ */
+ CAiwGenericParamList* BrCtlParamList2GenericParamListL(
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray ) const;
+
+ /**
+ * Extract the given BrCtl parameter from the list.
+ * @param aParamTypeToFind Extract this parameter.
+ * @param aTypeArray array of download parameter types.
+ * @param aDesArray array of values associated with the types in the type array.
+ * @param aParamFound Output: ETrue if the parameter was found.
+ * @return A TPtrC pointer for the value.
+ * @since 2.8
+ */
+ TPtrC ExtractBrCtlParam(
+ TUint aParamTypeToFind,
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray,
+ TBool& aParamFound ) const;
+
+ /**
+ * Check if the download's content type is in
+ * KBrowserSelfDownloadContentTypes.
+ * @param aTypeArray array of download parameter types.
+ * @param aDesArray array of values associated with the types in the type array.
+ * @return ETrue, if it is there.
+ * @since 3.0
+ */
+ TBool IsSelfDownloadContentTypeL( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray ) const;
+
+ /**
+ * Open the download embedded with Document Handler.
+ * @param aTypeArray array of download parameter types.
+ * @param aDesArray array of values associated with the types in the type array.
+ * @return None.
+ * @since 3.0
+ */
+ void OpenFileEmbeddedL( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray );
+
+ /**
+ * DoRequest the host applicaion to handle non-http request.
+ * @since 2.8
+ * @param aUrl The non-http(s) or file URL
+ * @param aParamList Parameters to pass to the host application. Contain referer header. It could be NULL
+ * @return ETrue is handled by the host application. EFlase if not
+ */
+ virtual TBool DoHandleRequestL( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray );
+
+ private: // data members
+
+ MApiProvider *iApiProvider; // owner app, not owned
+ CBrowserWindow *iWindow; // owner window, not owned
+ CEikDocument *iDocument; // document, not owned
+ CSchemeHandler *iSchemeHandler; // scheme handler
+ CDocumentHandler *iDocHandler; // Owned.
+ CBrowserContentView* iContentView; // content view, not owned
+ TBool iSchemeProcessing; // scheme processing
+
+ /**
+ * Indicated whether the Browser was started using the long zero
+ * key press. This is ONLY valid at start up.
+ **/
+ TBool iLongZeroStartup;
+
+ /**
+ * Flag to indicate whether the Browser has started the network connection
+ **/
+ TBool iConnectionStarted;
+ TBool iConnectionCancelled;
+ };
+
+#endif // BROWSERSPECIALLOADOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserUIVariant.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This file contains all the declarations to variate locally
+* whole Messaging subsystem
+*
+*
+*/
+
+
+#ifndef BROWSERUIVARIANT_HRH
+#define BROWSERUIVARIANT_HRH
+
+
+/*
+* Comment the meaning of the each setting value here well !!
+* What is the SD file and setting used for values, e.g.
+*/
+
+// BrowserUI related values are in 0x101F861B.ini
+//setting "R-BrUi1"
+
+//
+// Feature to allow Multiple Windows to be available
+//
+#define KBrowserMultipleWindows 0x01
+
+//
+// Feature which allows a URL to be defined for searching the web
+// ON = 1
+//
+#define KBrowserUiSearchWeb 0x02
+
+
+//
+// Feature which determines whether the user can modify the Search URL.
+// Writable = 1
+//
+#define KBrowserUiSearchWebWritable 0x04
+
+
+//
+// Feature to use HomePageSetting in Browser
+//
+#define KBrowserUiHomePageSetting 0x08
+
+//
+// Feature to limit functionality of Multiple Windows for midrange phones
+// 0 = Full functionality, 1 = Minimal functionality
+//
+#define KBrowserMinimalMultipleWindows 0x10
+
+//
+// Feature to enable Page Overview and Graphical History
+// After 9.2 TB, This feature is used only to enable page overview
+//
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ #define KBrowserGraphicalPage 0x00
+#else
+ #define KBrowserGraphicalPage 0x20
+#endif
+//
+// Feature to enable Auto Form Fill and Password Management options
+//
+#define KBrowserAutoFormFill 0x40
+
+//
+// Feature to enable Graphical History
+// (Page Overview must be on for Graphical History to be on)
+//
+#define KBrowserGraphicalHistory 0x80
+
+//
+// Local variation flags for CDMA Browser UI shared data key "R-BrUI2" in 0x101F861B.ini.
+//
+enum TBrUI2LocalVariantFlags
+ {
+ //
+ // Show/hide the Restart feature
+ //
+ EBrowserLVRestart = 0x01,
+
+ //
+ // Disable the connection manager dialogs to use NAI.
+ //
+ EBrowserLVNAIConnection = 0x02,
+
+ //
+ // Show/hide the Query Exit feature
+ //
+ EBrowserLVQueryExit = 0x04,
+ //
+ // Send/Don't send the Referrer Header
+ //
+ EBrowserLVSendReferrerHeader = 0x08,
+
+ //
+ // Show/hide Dynamic Lable feature
+ //
+ EBrowserLVDynamicLabel = 0x10
+ };
+
+// If, for some good reason, you need compile time variation per
+// release use the release flags. This file is the only place to use the
+// release flags ! However, think hard why you can not use SD setting !!!
+//
+#if defined (__SERIES60_20__)
+//const TInt KSomeCompileTimeConstantValue = 1;
+#elif defined (____SERIES60_21__)
+//const TInt KSomeCompileTimeConstantValue = 2;
+#endif
+
+#endif // BROWSERUIVARIANT_HRH
+
+
+//--------------------- in CPP code --------------------------------
+
+/**
+* How to use:
+* TInt featureBitmask = 0;
+* if ( sharedDataClient.Assign( KSDUidBrowserLV ) == KErrNone )
+* {
+* if ( sharedDataClient.GetInt(
+* KBrowserUiLV1, featureBitmask ) != KErrNone )
+* {
+* featureBitmask = 0; // if problems reading shared data, assume everything is off
+* }
+* }
+*
+* //
+* // Get the value once and save it for later use.
+* // No need always to access shared data every time when a value is needed
+*
+* // Use the local feature flags at run-time for different behaviour per release
+* if ( featureBitmask & KBrowserOnScreenScrollBar )
+* {
+* //on screen scrollbar is supported, cache this fact here
+* }
+*/
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserUtil.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Utilities.
+*
+*
+*/
+
+
+#ifndef BROWSER_UTILS_H
+#define BROWSER_UTILS_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CFavouritesItem;
+class TFavouritesWapAp;
+class MApiProvider;
+class CAiwGenericParamList;
+
+// CLASS DECLARATION
+
+/**
+* Static utility and debug support methods. This class cannot be instantiated,
+* hence the name.
+*/
+class Util
+ {
+ public: // types
+
+ /**
+ * Panic reasons.
+ */
+ enum TPanicReason
+ {
+ EInvalidDirection,
+ EInvalidScrollingUnitType,
+ EUninitializedData,
+ EOutOfRange,
+ ENoChildren,
+ EBadPosition,
+ ENullPointer,
+ EInvalidArgument,
+ EUnExpected,
+ ERootLevel,
+ ENoScriptProxy,
+ EMissingFont,
+ /// Attempt to remove a non-existing database observer.
+ EActiveBookmarkDbObserverNotFound,
+ /// Event reported from an unexpected listbox control.
+ EFavouritesBadListbox,
+ /// The database table is not open as it ought to be.
+ EFavouritesDbTableIsNotOpen,
+ /// The database table is not closed as it ought to be.
+ EFavouritesDbTableIsNotClosed,
+ /// Unexpected Uid.
+ EFavouritesBadBookmarkUid,
+ /// The Ap Model already exists.
+ EFavouritesApModelAlreadyExists,
+ /// Bad icon index.
+ EFavouritesBadIconIndex,
+ /// Attempt to create filter twice.
+ EFavouritesFilterAlreadyExists,
+ /// Item array count and icon index array count do not match.
+ EFavouritesBadIconIndexArray,
+ /// Model closed with observers still in.
+ EFavouritesObserversStillActive,
+ /// Attempt to remove an observer which is not added / already removed.
+ EFavouritesObserverNotFound,
+ /// Attempt to set AP Observer over an existing one.
+ EApObserverAlreadySet,
+ /// Attempt to set Goto Pane Observer over an existing one.
+ EGotoPaneObserverAlreadySet,
+ /// Some internal limit doe not match the external dependency.
+ ELimitMismatch,
+ /// Internal error.
+ EFavouritesInternal,
+ /// Undefined AP
+ EUndefinedAccessPoint,
+ /// EUnable to set temporary gateway
+ EUnableToSetTempGw,
+ /// WIM is off but tried to used
+ EUnsupportedFeature,
+ /// Start an incremental operation when another is still running.
+ EIncrementalOperationAlreadyRunning,
+ /// Attempt ot update data which is in use (incremental operations)
+ ECannotUpdateDataInUse,
+ // Size string is not convertable to integer
+ EInvalidSizeValue,
+ /// Descriptor-based downloaded content handler already set.
+ EDownloadedContentHandlerAlreadyInitialized,
+ /// File-based downloaded content handler already set.
+ EFileDownloadedContentHandlerAlreadyInitialized
+ };
+
+ public: // methods
+
+ /**
+ * Panic the current thread.
+ * @param aReason Panic reason.
+ */
+ static void Panic( TPanicReason aReason );
+
+ /**
+ * In debug builds, perform sanity check before application starts and
+ * panic if some check fails. In release builds, do nothing.
+ * Whatever "once-only" sanity checking you have, add that to this
+ * method.
+ */
+ static void SanityCheckL();
+
+ /**
+ * Parses the given URL. Fills username and password fields of the
+ * given item. Fills URL field with the given url excluding the
+ * username and password parts.
+ * @param aUrl URL.
+ * @param aItem Bookmark item.
+ */
+ static void RetreiveUsernameAndPasswordFromUrlL
+ ( const TDesC& aUrl, CFavouritesItem& aItem );
+
+ /**
+ * Returns descriptor to the middle of the url between '//' and '#'.
+ * @param aUrl Original url.
+ * @return Stripped url.
+ */
+ static TPtrC StripUrl( const TDesC& aUrl );
+
+ /**
+ * Create an URL from a file name (file://blabla) and return
+ * it in an allocated buffer. Pushed on cleanup stack; owner is the
+ * caller.
+ * @param aFileName File name.
+ * @return The created URL in a buffer.
+ */
+ static HBufC* UrlFromFileNameLC( const TDesC& aFileName );
+
+ /**
+ * Check if Disk space goes below critical level if allocating
+ * more disk space.
+ * @param aShowErrorNote If ETrue, a warning note is shown.
+ * @param aBytesToWrite Amount of disk space to be allocated (use an
+ * estimate if exact amount is not known).
+ * @return ETrue if allocation would go below critical level.
+ */
+ static TBool FFSSpaceBelowCriticalLevelL
+ ( TBool aShowErrorNote, TInt aBytesToWrite = 0 );
+
+ static TBool CheckBookmarkApL( const MApiProvider& aApiProvider, const TFavouritesWapAp& aItem );
+ static TBool IsValidAPFromParamL( const MApiProvider& aApiProvider, TUint32 aIAPid );
+ static TBool CheckApValidityL( const MApiProvider& aApiProvider, const TUint32 aItem );
+ static TUint32 IapIdFromWapIdL( const MApiProvider& aApiProvider, const TUint32 aItem );
+ static TUint32 WapIdFromIapIdL( const MApiProvider& aApiProvider, const TUint32 aItem );
+ static void EncodeSpaces(HBufC*& aString);
+
+ /**
+ * Allocate a heap buffer for aUrl and make sure the URL is encoded.
+ * If aUrl does not contain a scheme, then a default "http://"
+ * scheme is prepended to aUrl.
+ * @param aUrl The URL to allocate a buffer for.
+ * @return The URL in a buffer.
+ */
+ static HBufC* AllocateUrlWithSchemeL( const TDesC& aUrl );
+ };
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindow.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,417 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* API provider.
+*
+*
+*/
+
+
+#ifndef __MULTIPLE_WINDOWS_WINDOW_H__
+#define __MULTIPLE_WINDOWS_WINDOW_H__
+
+// INCLUDES FILES
+#include "WmlBrowserBuild.h"
+#include <e32base.h>
+#include "ApiProvider.h"
+#include "Preferences.h"
+#include <brctldefs.h>
+#include "BrowserLoadObserver.h"
+#include "BrowserDialogsProviderProxy.h"
+#include <brctlwindowobserver.h>
+
+// FORWARD DECLARATIONS
+class CBrCtlInterface;
+class CBrowserDisplay;
+class CBrowserSpecialLoadObserver;
+class CBrowserSoftkeysObserver;
+class CBrowserWindowManager;
+
+class MDisplay;
+class MConnection;
+class CBrowserDialogsProvider;
+class MBmOTABinSender;
+class CBrowserPopupEngine;
+
+// CLASS DECLARATION
+
+/**
+* Interface to query several API implementations via Window class.
+*
+* @lib Browser.app
+* @since Series 60 3.0
+*/
+class CBrowserWindow : public CBase,
+ public MApiProvider,
+ public MPreferencesObserver,
+ public MBrCtlWindowObserver
+ {
+ public:
+ static CBrowserWindow* NewLC(
+ TInt aWindowId,
+ const TDesC* aTargetName,
+ CBrowserWindowManager* aWindowMgr );
+ static CBrowserWindow* NewL(
+ TInt aWindowId,
+ const TDesC* aTargetName,
+ CBrowserWindowManager* aWindowMgr );
+ ~CBrowserWindow();
+
+ public: // new functions
+
+ /*
+ * Return the window's id.
+ */
+ inline TInt WindowId() const
+ { return iWindowId; }
+
+ /*
+ * Return the window's targetname.
+ */
+ inline const TDesC* TargetName() const
+ { return iTargetName; }
+
+ /*
+ * Return the window's active status.
+ */
+ inline TBool IsWindowActive() const
+ { return iActive; }
+
+ /*
+ * Activates this window, redraw it, updates title, etc.
+ */
+ void ActivateL( TBool aDraw = ETrue );
+
+ /*
+ * Deactivates this window.
+ */
+ void DeactivateL();
+
+ /*
+ * Returns a reference to the DialogsProviderProxy
+ */
+ inline CBrowserDialogsProviderProxy& DialogsProviderProxy() const
+ { return *iDialogsProviderProxy; };
+ /**
+ * To check that Page Overview feature is supported or not
+ * @since Series60 3.0
+ * @return Returns ETrue if feature is supported
+ */
+ TBool IsPageOverviewSupportedL();
+
+ /*
+ * Resets Page Overview setting as defined in Preferences.
+ * @since Series 60 3.0
+ */
+ void ResetPageOverviewLocalSettingL();
+
+ /*
+ * Temporarily changes the Page Overview setting.
+ * This function does not change the Page Overview setting
+ * in Preferences.
+ * @since Series 60 3.0
+ */
+ void FlipPageOverviewLocalSettingL();
+
+ /*
+ * Changes the title pane text until the given interval.
+ * @since Series 60 3.0
+ * @param aTitle The new text of the title pane
+ * @param aInterval The interval while the new text will be shown on title pane
+ */
+ void ChangeTitlePaneTextUntilL( const TDesC& aTitle, TInt aInterval );
+
+ /*
+ * Set if window contains WML page(s).
+ * @since Series 60 3.1
+ * @param aHasWMLContent
+ */
+ void SetHasWMLContent(TBool aHasWMLContent);
+
+ /*
+ * Set if current window contains WML page(s).
+ * @since Series 60 3.1
+ * @param aCurrWinHasWMLContent
+ */
+ void SetCurrWinHasWMLContent(TBool aCurrWinHasWMLContent);
+
+ /*
+ * Returns wml content state for current page only or any page in window history based on param
+ * @since Series 60 3.1
+ * @param aCurrWinOnly - If ETrue, Returns ETrue if current window has WML content.
+ * If EFalse, Returns ETrue if any window in history has WML content.
+ * @return TBool
+ */
+ TBool HasWMLContent (TBool aCurrWinOnly);
+
+ /*
+ * Returns true if current window has Feeds content.
+ * @since Series 60 3.1
+ * @return TBool
+ */
+ TBool HasFeedsContent ()const { return iHasFeedsContent; };
+
+ /*
+ * Set if current page of window contains WML.
+ * @since Series 60 3.1
+ * @param aWMLMode
+ */
+ void SetWMLMode(TBool aWMLMode);
+
+ /*
+ * Set if hisory needs to be cleared after loading next page.
+ * @since Series 60 3.1
+ * @param aFirstPage
+ */
+ void SetFirstPage(TBool aFirstPage);
+
+ /*
+ * Set if current window contains Feeds Full Story.
+ * Used to go back to feeds view when window is closed
+ * @since Series 60 3.1
+ * @param aHasFeedsContent
+ */
+ void SetHasFeedsContent(TBool aHasFeedsContent);
+
+ /*
+ * Returns true if current page has WML content.
+ * @since Series 60 3.1
+ * @return TBool
+ */
+ TBool WMLMode ()const { return iWMLMode; };
+
+ /*
+ * Returns true if current page has images loaded.
+ * @since Series 60 5.0
+ * @return TBool
+ */
+ TBool HasLoadedImages ()const { return iImagesLoaded; };
+
+ /*
+ * Set true if user selects current page to load images. false when page loads
+ * @since Series 60 5.0
+ * @param aImagesLoaded
+ */
+ void SetImagesLoaded (TBool aImagesLoaded) { iImagesLoaded = aImagesLoaded; };
+
+
+ public: // from MApiProvider
+
+ CBrCtlInterface& BrCtlInterface() const ;
+ MDisplay& Display() const ;
+ CBrowserLoadObserver& LoadObserver() const ;
+ CBrowserSoftkeysObserver& SoftkeysObserver() const ;
+ CBrowserSpecialLoadObserver& SpecialLoadObserver() const ;
+ inline CBrowserWindowManager& WindowMgr() const
+ { return *iWindowManager; }
+
+ MConnection& Connection() const;
+ MPreferences& Preferences() const;
+ MCommsModel& CommsModel() const;
+ CBrowserDialogsProvider& DialogsProvider() const;
+ MBmOTABinSender& BmOTABinSenderL();
+ CBrowserPopupEngine& PopupEngine() const;
+
+ void SetViewToBeActivatedIfNeededL( TUid aUid, TInt aMessageId = 0 );
+ TBool IsCancelFetchAllowed() const;
+ TUid LastActiveViewId() const;
+ void SetLastActiveViewId( TUid aUid );
+ TBool ExitInProgress() const;
+ void SetExitInProgress( TBool aValue );
+ TBool IsConnecting() const;
+ void UpdateNaviPaneL( TDesC& aStatusMsg );
+ void SetViewToReturnOnClose( TUid const &aUid );
+ void CloseContentViewL();
+ TBool IsEmbeddedModeOn() const;
+ TBool IsShutdownRequested() const;
+ void ExitBrowser(TBool aUserShutdown);
+ TBool IsAppShutterActive() const;
+ TBool StartPreferencesViewL( TUint aListItems );
+ TBool IsPageLoaded();
+ TBool IsForeGround() const;
+ TBool Fetching() const;
+ TBool ContentDisplayed() const;
+ void SetContentDisplayed( TBool aValue );
+ void FetchBookmarkL( TInt aBookmarkUid );
+ void FetchBookmarkL( const CFavouritesItem& aBookmarkItem );
+ void FetchL(
+ const TDesC& aUrl,
+ const TDesC& aUserName,
+ const TDesC& aPassword,
+ const TFavouritesWapAp& aAccessPoint,
+ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType
+ );
+ void FetchL( const TDesC& aUrl, CBrowserLoadObserver::TBrowserLoadUrlType aUrlType );
+ void CancelFetch( TBool aIsUserInitiated );
+ void SetRequestedAP( TInt aAp );
+ void SetExitFromEmbeddedMode( TBool aFlag );
+ TBool IsProgressShown() const;
+ void SetProgressShown( TBool aProgressShown );
+ TBool StartedUp() const;
+ TUint32 RequestedAp() const;
+ void LogAccessToRecentUrlL( CBrCtlInterface& aBrCtlInterface );
+ void LogRequestedPageToRecentUrlL( const TDesC& aUrl );
+ void StartProgressAnimationL();
+ void StopProgressAnimationL();
+ #ifdef __RSS_FEEDS
+ virtual CFeedsClientUtilities& FeedsClientUtilities() const;
+ #endif // __RSS_FEEDS
+ TUid GetPreviousViewFromViewHistory();
+
+ void SetLastCBAUpdateView( TUid aView );
+ TUid GetLastCBAUpdateView();
+
+ TBool FlashPresent();
+ TBool IsLaunchHomePageDimmedL();
+ void SetCalledFromAnotherApp( TBool aValue );
+ TBool CalledFromAnotherApp();
+ TBool BrowserWasLaunchedIntoFeeds();
+ TBool IsDisplayingMenuOrDialog();
+ TBool CompleteDelayedInit();
+
+ //-------------------------------------------------------------------------
+ // Preferences Handling
+ //-------------------------------------------------------------------------
+
+ public: // from MPreferencesObserver
+
+ /**
+ * Observer for Preference changes
+ * @param aEvent the type of preference event which happened
+ * @param aValues a struct of all settings values
+ * @since Series60 3.0
+ */
+ virtual void HandlePreferencesChangeL(
+ const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType );
+
+ //-------------------------------------------------------------------------
+ // Window Observing
+ //-------------------------------------------------------------------------
+
+ public: // from MBrCtlWindowObserver
+
+ /**
+ * Request the host applicaion to open the URL in a new window
+ * @since 3.0
+ * @param aUrl The Url of the request to be done in the new window
+ * @param aTargetName The name of the new window
+ * @param aUserInitiated ETrue if the new window is initiated by a user event (click)
+ * @param aReserved For future use
+ * @return Return Value is the new browser control associated with the new window
+ */
+ CBrCtlInterface* OpenWindowL( TDesC& aUrl, TDesC* aTargetName, TBool aUserInitiated,
+ TAny* aReserved );
+
+ /**
+ * Find a window by target name
+ * @since 3.0
+ * @param aTargetName name of the window to find
+ * @return Return Value is the browser control associated with the window name
+ */
+ CBrCtlInterface* FindWindowL( const TDesC& aTargetName ) const;
+
+ /**
+ * Handle window events such as close/focus etc
+ * @since 3.0
+ * @param aTargetName name of the window to send the event to
+ * @param aCommand Command to pass to the window
+ * @return void
+ */
+ void HandleWindowCommandL( const TDesC& aTargetName, TBrCtlWindowCommand aCommand );
+
+ //-------------------------------------------------------------------------
+
+ protected:
+
+ /**
+ * Checks for any changes in Global Prefeernces and notifies
+ * Browser Control
+ * @param aSettingType an enum defining a setting
+ * @since Series60 3.0
+ **/
+ void UpdateGlobalPreferencesL( TBrCtlDefs::TBrCtlSettings aSettingType );
+
+ /**
+ * Checks for any changes in Local Preferences and notifies
+ * Browser Control
+ * @param aValues a struct of all settings values
+ * @since Series60 3.0
+ **/
+ void UpdateLocalPreferencesL( TPreferencesValues& aValues );
+
+ /**
+ * Initialises Local Preferences
+ * @since Series60 3.0
+ **/
+ void InitialiseLocalPreferencesL();
+
+ /**
+ * Passes a subset of settings to the Browser Control
+ * @since Series60 3.0
+ */
+ void UpdateBrCtlSettingsL();
+
+ //-------------------------------------------------------------------------
+
+ protected:
+ /**
+ * Default C++ constructor.
+ */
+ CBrowserWindow(
+ TInt aWindowId,
+ const TDesC* aTargetName,
+ CBrowserWindowManager* aWindowMgr );
+
+ /*
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ //-------------------------------------------------------------------------
+
+ private:
+ TBool iClosing;
+ TInt iWindowId;
+ const TDesC* iTargetName; // owned
+ TBool iActive;
+ TBool iHasWMLContent;
+ TBool iCurrWinHasWMLContent;
+ TBool iHasFeedsContent;
+ TBool iWMLMode;
+ TBool iFirstPage;
+ TBool iImagesLoaded;
+
+ CBrCtlInterface* iBrCtlInterface;
+ CBrowserDialogsProviderProxy* iDialogsProviderProxy;
+ CBrowserDisplay* iDisplay;
+ CBrowserLoadObserver* iLoadObserver;
+ CBrowserSoftkeysObserver* iSoftkeysObserver;
+ CBrowserSpecialLoadObserver* iSpecialLoadObserver;
+ CBrowserWindowManager* iWindowManager; // not owned
+
+ private: // Local Settings
+
+ TInt iFontSize;
+ TUint32 iEncoding;
+ TBool iTextWrap;
+ TBool iIsPageOverviewOn;
+ static TBool iIsPageOverviewSupported;
+ static TBool iIsPageOverviewSupportQueried;
+ };
+
+#endif // __MULTIPLE_WINDOWS_WINDOW_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindowFocusNotifier.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef BROWSERWINDOWFOCUSNOTFIER_H
+#define BROWSERWINDOWFOCUSNOTFIER_H
+
+// INCLUDES
+// User includes
+// System Includes
+#include <e32base.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+* Provide dialogs needed for browser operation
+*
+* @since 3.0
+*/
+class CBrowserWindowFocusNotifier : public CBase
+ {
+ friend class CBrowserDialogsProviderProxy;
+
+ // Construction/Destruction
+ public:
+
+ // Two stage constructor
+ static CBrowserWindowFocusNotifier* NewL();
+
+ // Destructor
+ virtual ~CBrowserWindowFocusNotifier();
+
+ protected:
+
+ // 1st stage Constructor
+ CBrowserWindowFocusNotifier();
+
+ // 2nd stage constructor
+ void ConstructL();
+
+ public: // New functions
+
+ TInt Add( TRequestStatus* aStatus );
+ void OnFocusGained();
+
+ protected: // New functions
+
+ void FlushAOStatusArray();
+
+ // DATA MEMBERS
+ private:
+
+ RPointerArray<TRequestStatus> iAOStatusArray;
+ };
+
+#endif // BROWSERWINDOWFOCUSNOTFIER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindowManager.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Multiple Windows' WindowManager.
+*
+*
+*/
+
+
+#ifndef __MULTIPLE_WINDOWS_WINDOWMANAGER_H__
+#define __MULTIPLE_WINDOWS_WINDOWMANAGER_H__
+
+// INCLUDES FILES
+#include "WmlBrowserBuild.h"
+#include "Preferences.h"
+#include <e32base.h>
+#include <brctldefs.h>
+#include "WindowObserver.h"
+
+// FORWARD DECLARATIONS
+class CBrowserWindow;
+class MApiProvider;
+class CBrowserContentView;
+class MWindowInfoProvider;
+class CWindowInfo;
+class CBrowserWindowQue;
+
+// CLASS DECLARATION
+
+/**
+* Interface to query several API implementations via Window class.
+*
+* @lib Browser.app
+* @since Series 60 3.0
+*/
+class CBrowserWindowManager : public CBase,
+ public MPreferencesObserver
+ {
+ public: // constructors / destructor
+
+ static CBrowserWindowManager* NewLC(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ TInt aMaxWindowCount );
+ static CBrowserWindowManager* NewL(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ TInt aMaxWindowCount );
+ ~CBrowserWindowManager();
+
+ public: // accessing windows / window data
+
+ TInt WindowCount() const;
+
+ inline TInt MaxWindowCount() const;
+
+ // @returns window object
+ // possible error codes: KErrNotFound, KErrGeneral
+ // searching for a window identified by an Id
+ TInt Window( TInt aWindowId, CBrowserWindow*& aWindow );
+
+ // @returns window object
+ // possible error codes: KErrNotFound, KErrGeneral
+ // searching for a window identified by an Id
+ CBrowserWindow* FindWindowL(
+ const TDesC& aTargetName );
+
+ CBrowserWindow* CurrentWindow() const;
+
+ CBrowserWindowQue* CurrentWindowQue() const;
+
+ inline MApiProvider* ApiProvider() const;
+
+ inline CBrowserContentView* ContentView() const;
+
+ CArrayFixFlat<CWindowInfo*>* GetWindowInfoL(
+ MWindowInfoProvider* aWindowInfo );
+
+ inline void SetUserExit( TBool aUserExit );
+
+ void SendCommandToAllWindowsL( TInt aCommand );
+
+ /**
+ * Adds an observer which is notified about window events
+ * @param aObserver The observer which will receive window events.
+ * @since series 60 3.1
+ */
+ void AddObserverL( MWindowObserver* aObserver );
+
+ /**
+ * Removes an observer which won`t be notified about window events.
+ * @param aObserver The observer which will not receive
+ * further window events.
+ * @since 3.1
+ */
+ void RemoveObserver( MWindowObserver* aObserver );
+
+ /**
+ * Notifies the observer about an event.
+ * @param aEvent The type of the event.
+ * @since 3.1
+ */
+ void NotifyObserversL( TWindowEvent aEvent, TInt aWindowId = 0 );
+
+ public: // window management
+
+ // possible leave codes: KErrNoMemory
+ // Window specific settings are read from ApiProvider().Preferences()
+ // based on the current state
+ CBrowserWindow* CreateWindowL(
+ TInt aParentId,
+ const TDesC* aTargetName );
+
+ /**
+ * Deletes a window.
+ * @param aWindowId the window to be deleted
+ * @param aUserInitiated: user or script initiated the process
+ * @return the windowId should be activated or 0
+ */
+ TInt DeleteWindowL( TInt aWindowId, TBool aForceDelete = EFalse );
+
+ // possible leave codes: KErrNotFound
+ TInt SwitchWindowL( TInt aWindowId, TBool aDraw = ETrue );
+
+ // is there any content in the window?
+ inline TBool IsContentExist() const;
+
+ // content was shown in the window
+ inline void SetContentExist( TBool aValue );
+
+ // Sets the type of content in the view
+ void SetCurrentWindowViewState(TBrCtlDefs::TBrCtlState aViewState, TInt aValue);
+
+ //Closes all windows except the current one
+ void CloseAllWindowsExceptCurrent();
+
+ public: // from MPreferencesObserver
+
+ /**
+ * Observer for Preference changes
+ */
+ virtual void HandlePreferencesChangeL(
+ const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType );
+
+ protected:
+
+ CBrowserWindowManager(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ TInt aMaxWindowCount );
+ /**
+ * 2nd phase constructor
+ */
+ void ConstructL();
+
+ // searching for a window identified by its Id and TargetName
+ // returns with the Window
+ TInt Window(
+ TInt aParentId,
+ const TDesC* aTargetName,
+ CBrowserWindow*& aWindow,
+ CBrowserWindowQue* aStartingItem ) const;
+
+ // searching for a window identified by its Id
+ // returns with the Queue element of that Window
+ TInt Window(
+ TInt aWindowId,
+ CBrowserWindowQue*& aWindowQue,
+ CBrowserWindowQue* aStartingItem ) const;
+
+ // really delete a window
+ TInt DeleteOneWindowL( TInt aWindowId );
+
+ // removes already deleted (status) windows from the queue
+ void RemoveDeletedWindowsL();
+
+ private:
+ static TInt iWindowIdGenerator; // for generating window's id
+ MApiProvider* iApiProvider; // not owned
+ CBrowserContentView* iContentView; // not owned
+ TInt iMaxWindowCount;
+ TInt iWindowCount;
+ TInt iDeletedWindowCount;
+ CBrowserWindowQue* iWindowQueue; // head of the windows
+ CBrowserWindowQue* iCurrentWindow; // points to the current window
+ TBool iUserExit;
+ TBool iIsContentExist;
+ CArrayPtrFlat< MWindowObserver >* iObservers;
+ };
+
+#include "BrowserWindowManager.inl"
+
+#endif // __MULTIPLE_WINDOWS_WINDOWMANAGER_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindowManager.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CBrowserPreferences.
+*
+*
+*/
+
+
+#ifndef BROWSER_WINDOWMANAGER_INL
+#define BROWSER_WINDOWMANAGER_INL
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::ApiProvider()
+// -----------------------------------------------------------------------------
+//
+MApiProvider* CBrowserWindowManager::ApiProvider() const
+ {
+ return iApiProvider;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::ContentView()
+// -----------------------------------------------------------------------------
+//
+CBrowserContentView* CBrowserWindowManager::ContentView() const
+ {
+ return iContentView;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::SetUserExit()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::SetUserExit( TBool aUserExit )
+ {
+ iUserExit = aUserExit;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::MaxWindowCount()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowManager::MaxWindowCount() const
+ {
+ return iMaxWindowCount;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::IsContentExist()
+// -----------------------------------------------------------------------------
+//
+// is there any content in the window?
+TBool CBrowserWindowManager::IsContentExist() const
+ {
+ return iIsContentExist;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::SetContentExist()
+// -----------------------------------------------------------------------------
+//
+// content was shown in the window
+void CBrowserWindowManager::SetContentExist( TBool aValue )
+ {
+ iIsContentExist = aValue;
+ }
+
+#endif // BROWSER_WINDOWMANAGER_INL
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindowQueue.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Internal class for storing a window.
+*
+*
+*/
+
+
+#ifndef __MULTIPLE_WINDOWS_WINDOWQUEUE_H__
+#define __MULTIPLE_WINDOWS_WINDOWQUEUE_H__
+
+// INCLUDES FILES
+#include "WmlBrowserBuild.h"
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CBrowserWindow;
+
+// CLASS DECLARATION
+
+// multiple linked queue for windows
+// iPrev and iNext for stepping through all the queue
+// iParent points to the window's parent
+class CBrowserWindowQue: public CBase
+ {
+ public: // default constructor to have a valid window
+ CBrowserWindowQue( CBrowserWindow* aWindow ) :
+ iWindow(aWindow), iParent(NULL),
+ iPrev(NULL), iNext(NULL), iStatus( 0 ) {}
+ ~CBrowserWindowQue();
+
+ public:
+ // returns the last item in the queue
+ inline CBrowserWindowQue* LastItem() const ;
+ // appends an iten at the end of the queue
+ void AppendL( CBrowserWindowQue* aItem );
+ // points to the 'next' window which is not deleted
+ CBrowserWindowQue* Next() const;
+ // points to the 'prev' window which is not deleted
+ CBrowserWindowQue* Prev() const;
+
+
+ public:
+ enum TWindowStatus { // bit mask
+ EWindowNone = 0,
+ EWindowDeleted = 1
+ };
+
+ public: // data members
+ CBrowserWindow* iWindow;
+ CBrowserWindowQue* iParent;
+ CBrowserWindowQue* iPrev;
+ CBrowserWindowQue* iNext;
+ TInt iStatus; // bitmask
+ };
+
+
+#endif // __MULTIPLE_WINDOWS_WINDOWQUEUE_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindowSelectionContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserWindowSelectionContainer.
+*
+*
+*/
+
+
+#ifndef BROWSERWINDOWSELECTIONCONTAINER_H
+#define BROWSERWINDOWSELECTIONCONTAINER_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <AknTabObserver.h>
+
+// FORWARD DECLARATIONS
+class CBrowserWindowSelectionView;
+class CAknNavigationControlContainer;
+class CAknNavigationDecorator;
+class CAknTabGroup;
+class CEikImage;
+class CGulIcon;
+
+// CLASS DECLARATION
+
+/**
+* CBrowserWindowSelectionContainer container control class.
+*
+*/
+class CBrowserWindowSelectionContainer : public CCoeControl,
+ MCoeControlObserver, MAknTabObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * default constructor.
+ * @param aRect Frame rectangle for container.
+ */
+ void ConstructL(const TRect& aRect);
+
+ /**
+ * Constructor
+ */
+ CBrowserWindowSelectionContainer( CBrowserWindowSelectionView *aView );
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserWindowSelectionContainer();
+
+ public: // New functions
+
+ /**
+ * Gets a pointer to the tab group on navi pane.
+ * @return Pointer to the tab group.
+ */
+ inline CAknTabGroup* GetTabGroup() { return iTabGroup; }
+
+ /**
+ * Gets a pointer to the decorator on navi pane.
+ * @return Pointer to the decorator.
+ */
+ inline CAknNavigationDecorator* GetNaviDecorator() { return iNaviDecorator; }
+
+ /**
+ * Creates tabs on navipane, from the array of strings.
+ * @param An array containing the name of the windows.
+ * @param The tab index, that will be activated after creation.
+ */
+ void ChangeTabL( CArrayFixFlat<HBufC*>* aTabTexts, TInt aActivateTab );
+
+ /**
+ * The id of the window, which thumbnail to get.
+ * @param aWindowId Window id.
+ */
+ void GetWindowThumbnailL( TInt aWindowId );
+
+ public: // Functions from base classes
+ /**
+ * HandlePointerEventL
+ * From CCoeControl
+ *
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ /**
+ * TabChangedL
+ * From MAknTabObserver
+ *
+ */
+ void TabChangedL(TInt aIndex);
+
+ private: // Functions from base classes
+
+ /**
+ * From CoeControl,SizeChanged.
+ */
+ void SizeChanged();
+
+ /**
+ * From CoeControl,CountComponentControls.
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl,ComponentControl.
+ */
+ CCoeControl* ComponentControl(TInt aIndex) const;
+
+ /**
+ * From CCoeControl,Draw.
+ */
+ void Draw(const TRect& aRect) const;
+
+ /**
+ * From CCoeControl Handles key events
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * From MCoeControlObserver
+ * Acts upon changes in the hosted control's state.
+ *
+ * @param aControl The control changing its state
+ * @param aEventType The type of control event
+ */
+ void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+
+ private: //data
+ CBrowserWindowSelectionView* iView; // not owned
+ CAknNavigationDecorator* iNaviDecorator; // not owned
+ CAknTabGroup* iTabGroup; // not owned
+ CGulIcon* iThumbnail;
+ //test
+ //CFbsBitmap* iThumbnail;
+ //CEikImage* iTabIcon;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/BrowserWindowSelectionView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserWindowSelectionView.
+*
+*
+*/
+
+
+#ifndef BROWSERWINDOWSELECTIONVIEW_H
+#define BROWSERWINDOWSELECTIONVIEW_H
+
+// INCLUDES
+#include <aknview.h>
+#include "BrowserAppViewBase.h"
+#include "WindowInfoProvider.h"
+#include "WindowObserver.h"
+
+// FORWARD DECLARATIONS
+class CBrowserWindowSelectionContainer;
+
+// CLASS DECLARATION
+
+/**
+* CBrowserWindowSelectionView view class.
+*
+*/
+class CBrowserWindowSelectionView : public CBrowserViewBase,
+ MWindowInfoProvider,
+ MWindowObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure. Places the instance
+ * on the cleanup stack.
+ * @param aApiProvider The API provider.
+ * @return The constructed view.
+ */
+ static CBrowserWindowSelectionView* NewLC( MApiProvider& aApiProvider );
+
+ /**
+ * Constructor
+ */
+ CBrowserWindowSelectionView( MApiProvider& aApiProvider );
+
+ /**
+ * default constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserWindowSelectionView();
+
+ public: // Functions from base classes
+
+ /**
+ * From CAknView returns Uid of View
+ * @return TUid uid of the view
+ */
+ TUid Id() const;
+
+ /**
+ * Return command set id, to be displayed.
+ * @since 1.2
+ * @return The command set's resource id.
+ */
+ virtual TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ /**
+ * From MEikMenuObserver delegate commands from the menu
+ * @param aCommand a command emitted by the menu
+ * @return void
+ */
+ void HandleCommandL(TInt aCommand);
+
+ /**
+ * From CAknView reaction if size change
+ * @return void
+ */
+ void HandleClientRectChange();
+
+ /**
+ * Changes the tabs according to available windows, by
+ * recreating all tabs based on WindowManager.
+ */
+ void UpdateTabsL();
+
+ /**
+ *
+ */
+ void UpdateTumbnailL();
+
+ /**
+ * Updates the title of the view according to the highlighted tab.
+ */
+ void UpdateTitleL();
+
+ /**
+ * From MWindowObserver
+ */
+ void WindowEventHandlerL( TWindowEvent aEvent, TInt aWindowId );
+
+ /**
+ * @return Id of the window to activate.
+ */
+ TInt GetWindowIdFromTabIndex( TInt aActiveTabIndex );
+
+ private:
+
+ /**
+ * From CAknView activate the view
+ * @param aPrevViewId
+ * @param aCustomMessageId
+ * @param aCustomMessage
+ * @return void
+ */
+ void DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+ const TDesC8& aCustomMessage);
+
+ /**
+ * From CAknView deactivate the view (free resources)
+ * @return void
+ */
+ void DoDeactivate();
+
+ /**
+ * From MWindowInfoProvider
+ */
+ HBufC* CreateWindowInfoLC( const CBrowserWindow& aWindow );
+
+ /**
+ * @return Pointer to the window`s title text.
+ */
+ HBufC* GetWindowTitleFromTabIndex( TInt aActiveTabIndex );
+
+ private: // Data
+ CBrowserWindowSelectionContainer* iContainer;
+ CArrayFixFlat<CWindowInfo*>* iWindowInfo; // Array of all available windows
+ CArrayFixFlat<TInt>* iWindowIds; // Array of window id`s
+ CArrayFixFlat<HBufC*>* iTitles; // Array of window titles
+ TVwsViewId iLastViewId;
+ TBool iWindowEventsDisabled; // False if the object not handles events.
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/CommonConstants.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Common constants
+*
+*
+*/
+
+
+#ifndef COMMONCONSTANTS_H
+#define COMMONCONSTANTS_H
+
+// INCLUDE FILES
+#include <aknconsts.h>
+
+// CONSTANTS
+
+const TUid KUidBrowserContentViewId = { 75 };
+const TUid KUidBrowserBookmarksViewId = { 79 };
+const TUid KUidBrowserSettingsViewId = { 78 };
+const TUid KUidBrowserStartupViewId = { 81 };
+const TUid KUidBrowserWindowSelectionViewId = { 83 };
+const TUid KUidBrowserInitialViewId = { 84 };
+const TUid KUidBrowserFeedsFolderViewId = { 85 };
+const TUid KUidBrowserFeedsTopicViewId = { 86 };
+const TUid KUidBrowserFeedsFeedViewId = { 87 };
+
+const TUid KUidBrowserNullViewId = { 0 }; ///< null view id used in startup
+
+const TUid KUidCustomMsgDownloadsList = { 0x01 }; ///< jump to download list
+const TUid KUidSettingsGotoToolbarGroup = { 0x02 }; ///< jump to toolbar section of settings view
+const TUid KUidSettingsGotoShortcutsGroup = { 0x03 }; ///< jump to shortcuts section of settings view
+
+// Granualities for dynamic arrays
+const TInt KGranularityLow = 10; ///< minimum granularity
+const TInt KGranularityMedium = 5;
+const TInt KGranularityHigh = 2; ///< maximum gr.
+
+_LIT( KHttpString, "http://" );
+_LIT( KFileString, "file://" );
+_LIT( KWWWString, "http://www." );
+
+
+#define KBrsrMalformedUrl -26018
+#define KBrsrUnknownScheme -26026
+#define KBrsrWmlbrowserCardNotInDeck -26144
+
+_LIT( KWmlValueHttpScheme, "http" );
+
+#define KAvkonMbmPath KAvkonBitmapFile
+
+_LIT( KBrowserDirAndFile,"z:browser.mbm");
+
+_LIT( KWmlValueFile, "file" );
+_LIT( KWmlValueFileSlashSlashSlashStr, "file:///" );
+// _LIT( KWmlDefaultLocation, "c:" );
+// _LIT( KWmlDefaultLocationSlash, "c:/" );
+_LIT( KWmlBackSlash, "\\" );
+
+const TInt KWmlEmptyResourceId = 0;
+
+const TInt KMaxUrlLenghtInOTA = 255;
+const TInt KMaxHomePgUrlLength = 1000;
+const TInt KMaxSearchPgUrlLength = 1000;
+const TInt KAhlePrimaryStorage = 100; //AHLE primary storage, also used
+ //as adaptive bookmarks max list size
+
+// Encodings (character set ids) - no header file is provided with character set
+const TUint KCharacterSetIdentifierWindows1250 = 0x100059D6;
+const TUint KCharacterSetIdentifierWindows1251 = 0x100059D7;
+const TUint KCharacterSetIdentifierWindows1253 = 0x100059D8;
+const TUint KCharacterSetIdentifierWindows1254 = 0x100059D9;
+const TUint KCharacterSetIdentifierWindows1255 = 0x101F8547;
+const TUint KCharacterSetIdentifierWindows1256 = 0x101F8548;
+const TUint KCharacterSetIdentifierWindows1257 = 0x100059DA;
+const TUint KCharacterSetIdentifierWindows1258 = 0x102073B8;
+const TUint KCharacterSetIdentifierTis620 = 0x101f8549;
+const TUint KCharacterSetIdentifierWindows874 = 0x101F854A;
+const TUint KCharacterSetIdentifierKoi8_r = 0x101f8778; // Russian
+const TUint KCharacterSetIdentifierKoi8_u = 0x101f8761; // Ukrainian
+const TUint KCharacterSetIdentifierIscii_temp = 0x1027508E;
+
+const TUint KCharacterSetIdentifierEucKr = 0x2000E526; // Korean
+const TUint KCharacterSetIdentifierKsc5601_temp = 0x200113CD; // Korean
+const TUint KCharacterSetIdentifierAutomatic = 0x00;
+const TUint KCharacterSetIdentifierUCS2 = 0xffffffff; // dummy value this id is never checked
+
+#endif // COMMONCONSTANTS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/CommsModel.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class MCommsModel.
+*
+*
+*/
+
+
+#ifndef MCOMMS_MODEL_H
+#define MCOMMS_MODEL_H
+
+// FORWARD DECLARATION
+
+// class CApListItem;
+class CApListItemList;
+class CActiveApDb;
+class CCommsDatabase;
+
+// CLASS DECLARATION
+
+/**
+* Observer mixin class for Comms Model changes.
+* The main difference between being this observer and MActiveApDbObserver is
+* that when an MActiveApDbObserver is notified, the database can be locked
+* (so the notification is quite useless). An MCommsModelObserver is notified
+* about the change only when the changes are successfully read by
+* MCommsModelObserver - that is, in HandleCommsModelChangeL implementation
+* you can safely read cached AP-s from CommsModel (and never get KErrLocked).
+*/
+class MCommsModelObserver
+ {
+ public: // new methods
+
+ /**
+ * Handle change in comms model (AP-s). Derived classes must provide
+ * this method.
+ */
+ virtual void HandleCommsModelChangeL() = 0;
+
+ };
+
+/**
+* Comms model for the WML Browser.
+* Provides CommsDb / AP database handling.
+*/
+class MCommsModel
+ {
+ public: // new methods
+
+ /**
+ * Get Access Point Engine object.
+ * @return Access Point Engine object.
+ */
+ virtual CActiveApDb& ApDb() const = 0;
+
+ /**
+ * Get CommsDb object.
+ * @return CommsDb object.
+ */
+ virtual CCommsDatabase& CommsDb() const = 0;
+
+ /**
+ * Get a copy of access points in a list.
+ * @return List of access points. The caller is responsible for
+ * destroying the returned list.
+ * @return List of access points.
+ */
+ virtual CApListItemList* CopyAccessPointsL() = 0;
+
+ /**
+ * Get the pointer to model's cached access points.
+ * The owner of the list is the model. List contents may be updated
+ * if database update occurs.
+ * @return List of access points.
+ */
+ virtual const CApListItemList* AccessPointsL() = 0;
+
+ /**
+ * Refresh the cached access points.
+ */
+ virtual void RefreshAccessPointsL() = 0;
+
+ public: // observer support
+
+ /**
+ * Add an observer. Duplicates allowed.
+ * @param aObserver The observer to add.
+ */
+ virtual void AddObserverL( MCommsModelObserver& aObserver ) = 0;
+
+ /**
+ * Remove an observer. Does nothing if not added / already removed.
+ * @param aObserver The observer to remove.
+ */
+ virtual void RemoveObserver( MCommsModelObserver& aObserver ) = 0;
+
+ };
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/Display.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Interface to Status Pane.
+*
+*
+*/
+
+
+#ifndef MDISPLAY_H
+#define MDISPLAY_H
+
+// INCLUDES
+#include <browser_platform_variant.hrh>
+
+// FORWARD DECLARATIONS
+
+class CAknNavigationControlContainer;
+class CEikStatusPane;
+
+// CLASS DECLARATION
+
+/**
+* Interface to GUI components.
+*/
+class MDisplay
+ {
+ public: // Status Pane / NaviPane handling
+
+ /**
+ * Return Status Pane. Can be NULL.
+ * @return Status Pane.
+ */
+ virtual CEikStatusPane* StatusPane() const = 0;
+
+ // VAG 01.Feb.2002.
+ // Please do not add Push/Pop-NaviDecoratorL methods. Ownership of
+ // the decorator becomes problematic. The safe way is:
+ // Create a decorator as an own member, push it to Navi Pane, and
+ // simply delete that decorator in your destructor (deleting it pops
+ // automatically). This cannot go wrong, and does not contain leaving
+ // code in destructors.
+
+ /**
+ * Get Navi Pane; leave on error.
+ * @return Navi Pane. Never NULL.
+ */
+ virtual CAknNavigationControlContainer* NaviPaneL() const = 0;
+
+ public: // TitlePane handling
+
+ /**
+ * Set title pane text.
+ * @param aTitle Title text to be displayed.
+ */
+ virtual void SetTitleL( const TDesC& aTitle ) = 0;
+
+ /**
+ * Set title pane text from resource.
+ * @param aTitle Resource id of title text to be displayed.
+ */
+ virtual void SetTitleL( TInt aResourceId ) = 0;
+
+ public: // Animation in contextpane
+
+ /**
+ * Starts animation and progress indicator.
+ * @param aBearerType Determines what is to be animated.
+ */
+ virtual void StartProgressAnimationL() = 0;
+
+ /**
+ * Stops animation and progress indicator.
+ */
+ virtual void StopProgressAnimationL() = 0;
+
+ /**
+ * Notify that new data has arrived to the loaders.
+ * @since Series60_version 2.5
+ * @return none
+ */
+ virtual void NotifyProgress() = 0;
+
+ public: // Transaction
+
+ /**
+ * Adds transaction id
+ * @param aId Transaction id
+ */
+ virtual void AddTransActIdL( TUint16 aId ) const = 0;
+
+ /**
+ * Saves maximum and received data with a transction id.
+ * @since Series60 1.2
+ * @param aId Id of the transaction
+ * @param aRecvdData Amount of data we have received with current transaction Id
+ * @param aMaxData Max size of the transaction
+ */
+ virtual void AddProgressDataL( TUint16 aId, TUint32 aRecvdData, TUint32 aMaxData ) const = 0;
+
+ /**
+ * Marks particular transaction id to complete status
+ * @since Series60 2.0
+ * @param aId Id of the transaction
+ */
+ virtual void TransActIdComplete( TUint16 aId ) const = 0;
+
+ public: // Secure indicator
+
+ /**
+ * Shows or hides secure indicator depending on aState.
+ * @param aState EAknIndicatorStateOff/EAknIndicatorStateOn.
+ */
+ virtual void UpdateSecureIndicatorL( const TInt aState ) = 0;
+
+ /**
+ * Sets GPRS indicator on for Full Screen Mode
+ */
+ virtual void SetGPRSIndicatorOnL() = 0;
+
+ /**
+ * Starts the Wlan Indicator observer
+ */
+ virtual void StartWlanObserverL() = 0;
+
+ /**
+ * Updates the Wlan Indicator to current value
+ */
+ virtual void UpdateWlanIndicator( const TInt aWlanValue ) = 0;
+
+ /**
+ * Initialises Full Screen pane indicators
+ */
+
+ virtual void FSPaneOnL( ) = 0;
+
+ /**
+ * Updates Full Screen progress indicator
+ */
+
+ virtual void UpdateFSProgressIndicator(const TInt aMaxData, const TInt aReceivedData) = 0;
+
+ /**
+ * Starts Full Screen Wait indicator
+ */
+
+ virtual void StartFSWaitIndicator() = 0;
+
+ /**
+ * Updates 'downloaded data amount' message on Full Screen pane
+ */
+
+ virtual void UpdateFSProgressDataL(const TDesC16& aReceivedDataText) = 0;
+
+ /**
+ * Clears the Message Info indicator in the navipane
+ */
+ virtual void ClearMessageInfo() = 0;
+
+ /**
+ * Sets formerly saved page title. SetTitleL's functionality moved here, because page title restoration is
+ * necessary in Full Screen mode
+ */
+
+ virtual void RestoreTitleL() = 0;
+
+ /**
+ * Updates initial download indicator on Full Screen pane
+ */
+
+ virtual void UpdateFSDownloadInitialIndicator(const TBool aState) = 0;
+
+ /**
+ * Initializes Full Screen Indicators
+ */
+
+ virtual void InitIndicatorsL() = 0;
+
+ /**
+ * Updates the Multiple Windows Indicator
+ * @param aState Indicator On or Off
+ * @param aWinCount The number of windows open
+ * @since Series60 3.0
+ */
+ virtual void UpdateMultipleWindowsIndicatorL(
+ const TBool aState, const TInt aNumWindows ) = 0;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/Logger.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implemented logger functionality of the module
+*
+*/
+
+
+#ifndef BROWSER_LOGGER_H
+#define BROWSER_LOGGER_H
+
+#if defined( I__BROWSER_LOG_ENABLED ) || defined ( I__BROWSER_PERF_LOG_ENABLED )
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <e32std.h>
+#include <e32def.h>
+#include <e32cmn.h>
+#include <flogger.h>
+
+
+// log files are stored to KDebugLogDirFull folder
+_LIT(KDebugLogDependency, "C:\\Logs\\");
+_LIT(KDebugLogDoubleBackSlash, "\\");
+
+_LIT( KDebugLogDir, "Browser");
+_LIT( KDebugLogFile, "Browser.log");
+_LIT( KDebugPerfLogFile, "BrowserPerf.log");
+_LIT( KLogMessageAppBanner, "Browser: module (%d.%d.%d) started" );
+_LIT( KPerLogBanner, "*************Performance Logging *****************");
+// _LIT( KDebugLogTimeFormatString,"%H:%T:%S:%*C3" );
+_LIT( KDebugLogExit, "Browser: module exit" );
+
+#endif
+
+#if defined( I__BROWSER_LOG_ENABLED )
+
+// MACROS
+// indentation is not supported by the hardware at this moment
+#if defined( __WINSCW__ )
+#define I__BROWSER_LOG_INDENT
+#endif
+
+/**
+* Use this macro in order to initialize logger :
+* - create log directory,
+* - write version information into the log file
+*/
+#define LOG_CREATE { TFileName path( KDebugLogDependency ); \
+ path.Append( KDebugLogDir ); \
+ path.Append( KDebugLogDoubleBackSlash ); \
+ RFs& fs = CEikonEnv::Static()->FsSession(); \
+ fs.MkDirAll( path ); \
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile, EFileLoggingModeOverwrite, KLogMessageAppBanner ); \
+ }
+
+/**
+* Use this macro for writing information about exiting.
+*/
+#define LOG_DELETE { RFileLogger::Write( KDebugLogDir, KDebugLogFile, EFileLoggingModeAppend, KDebugLogExit ); }
+
+/**
+* Use this function at any points of a function for writing a hex dump
+* of the specified data to the log.
+* @param p The data the is to be converted to a hex string.
+* @param l How many of the characters in p are to be converted.
+* Conversion always starts from position 0 within p.
+*/
+//#define LOG_WRITE_HEXDUMP( p, l ) { RFileLogger::HexDump( KDebugLogDir, KDebugLogFile, EFileLoggingModeAppend, _S("RLog_Ex"), _S("RL_cont"), p, l ); }
+
+// -------------------------------------------------
+
+class MLoggerProvider
+ {
+ public:
+ virtual TInt* LoggerIndent() = 0;
+ virtual void LoggerIndentIncrement( TInt aValue ) = 0;
+ virtual void LoggerIndentDecrement( TInt aValue ) = 0;
+ };
+
+class CBrowserLogger: public CBase
+ {
+ public:
+ CBrowserLogger( const TDesC& aFunc );
+ ~CBrowserLogger();
+
+ /**
+ * Write formatted log.
+ * @param aFmt Format string.
+ */
+ static void Write( TRefByValue<const TDesC16> aFmt, ... );
+
+ /**
+ * Write formatted log.
+ * @param aFmt Format string.
+ * @param aList Variable argument list.
+ */
+ static void Write( TRefByValue<const TDesC16> aFmt, VA_LIST& aList );
+
+ /**
+ * Write formatted log.
+ * @param aFmt Format string.
+ */
+ static void Write(TRefByValue<const TDesC8> aFmt, ... );
+
+ /**
+ * Write formatted log.
+ * @param aFmt Format string.
+ * @param aList Variable argument list.
+ */
+ static void Write( TRefByValue<const TDesC8> aFmt, VA_LIST& aList );
+
+ protected:
+ TPtrC iFunc;
+ const MLoggerProvider* iOwner;
+ // make the indentation available by 'static' keyword
+#if defined ( I__BROWSER_LOG_INDENT )
+ static
+#endif
+ TInt iIndent;
+ };
+
+// -------------------------------------------------
+// Usage:
+// - call LOG_ENTERFN( "function name" ); at entry point of a function
+// otherwise BROWSER_LOG call won't work
+// - call BROWSER_LOG( ( _L( "log string" ) ) ); OR
+// you can add parameters to this call like this:
+// - BROWSER_LOG( ( _L( "format string: %d" ), value ) );
+// -------------------------------------------------
+// future development if _L() will be removed:
+// #define _BL( a ) TPtrC( _S( a ) )
+// BROWSER_LOG( ( _BL( "format string: %d" ), a ) )
+// -------------------------------------------------
+
+#define LOG_ENTERFN( a ) _LIT( _br_temp_log_string18, a ); \
+ CBrowserLogger _br_entry_exit( _br_temp_log_string18 )
+#define BROWSER_LOG( _params_ ) \
+ _br_entry_exit.Write _params_
+#define LOG_WRITE( _params_ ) \
+ BROWSER_LOG( ( _L( _params_ ) ) )
+#define LOG_WRITE_FORMAT( _format_, _params_ ) \
+ BROWSER_LOG( ( _L( _format_ ), _params_ ) )
+
+#else // I__BROWSER_LOG_ENABLED
+
+// Empty macros
+#define LOG_CREATE
+#define LOG_DELETE
+#define LOG_ENTERFN( a )
+#define LOG_WRITE( a )
+#define LOG_WRITE_FORMAT( a, b )
+#define LOG_WRITE_TIMESTAMP( a )
+#define LOG_WRITE_HEXDUMP( p, l )
+#define BROWSER_LOG( a )
+
+#endif // I__BROWSER_LOG_ENABLED
+
+
+#ifdef I__BROWSER_PERF_LOG_ENABLED
+
+/**
+* Use this macro in order to initialize performance logger:
+* - create log directory,
+*
+*/
+#define PERFLOG_CREATE { TFileName path( KDebugLogDependency ); \
+ path.Append( KDebugLogDir ); \
+ path.Append( KDebugLogDoubleBackSlash ); \
+ RFs& fs = CEikonEnv::Static()->FsSession(); \
+ fs.MkDirAll( path ); \
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugPerfLogFile, EFileLoggingModeOverwrite, KPerLogBanner);\
+ }
+
+#define PERFLOG_LOCAL_INIT \
+ TTime __time1_brbrbr;\
+ TTime __time2_brbrbr;\
+ TTimeIntervalMicroSeconds diff_brbrbr;
+
+
+#define PERFLOG_STOPWATCH_START \
+ __time1_brbrbr.HomeTime();
+
+#define PERFLOG_STOPWATCH_STOP \
+ __time2_brbrbr.HomeTime();\
+ diff_brbrbr = __time2_brbrbr.MicroSecondsFrom( __time1_brbrbr );
+
+#define PERFLOG_WRITE( _param_ ){\
+ _LIT( __perf_temp_1234_, "%S took %Ld ms" );\
+ _LIT(__perf_temp_param, _param_ );\
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugPerfLogFile, EFileLoggingModeAppend, __perf_temp_1234_, &__perf_temp_param(), diff_brbrbr .Int64() );\
+ }
+
+#define PERFLOG_STOP_WRITE( _params_ )\
+ PERFLOG_STOPWATCH_STOP\
+ PERFLOG_WRITE( _params_ )
+
+//It may look ugly in code
+#define PERF( _a, _b ) \
+ {\
+ PERFLOG_LOCAL_INIT\
+ PERFLOG_STOPWATCH_START\
+ _b;\
+ PERFLOG_STOP_WRITE( _a )\
+ }
+
+
+#else
+
+#define PERFLOG_CREATE
+#define PERFLOG_LOCAL_INIT
+#define PERFLOG_STOPWATCH_START
+#define PERFLOG_STOPWATCH_STOP
+#define PERFLOG_WRITE(a)
+#define PERFLOG_STOP_WRITE(a)
+#define PERF( _a, _b ) _b
+#endif
+
+
+
+#endif // BROWSER_LOGGER_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/Preferences.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,872 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Interface for Preferences handling.
+*
+*
+*/
+
+
+#ifndef MPREFERENCES_H
+#define MPREFERENCES_H
+
+// INCLUDES
+#include <e32def.h>
+#include <e32const.h>
+#include <e32std.h>
+
+#include "Browser.hrh"
+#include <bldvariant.hrh>
+
+#include <brctldefs.h>
+#include <ApAccessPointItem.h>
+
+#include <CmApplicationSettingsUi.h>
+
+using namespace CMManager;
+// FORWARD DECLARATIONS
+
+// CONSTS
+
+const TUint KWmlNoDefaultAccessPoint = KMaxTUint;
+const TUint KWmlNoDefaultSnapId = KMaxTUint;
+
+const TInt KShortCutFuncStringLength = 32;
+
+const TInt KUrlSuffixMaxLength = 256;
+
+// CLASS DECLARATION
+class CVpnApItem;
+
+//=============================================================================
+// Observer for the MPreferences Class
+//
+
+/**
+* Helper struct for MPreferencesObserver
+*/
+struct TPreferencesValues
+ {
+ // Setting Values
+ TUint iDefaultAccessPoint;
+ TUint iDefaultSnapId;
+ CApAccessPointItem* iDefaultAPDetails; //cache all data
+ // It is stored because of VPN. Default value = KWmlNoDefaultAccessPoint,
+ // means it is not VPN AP, otherwise iAssocVpn = iDefaultAccessPoint
+ // iDefaultAPDetails always stores real AP specific settings.
+ TUint iAssocVpn;
+ TCmSettingSelectionMode iAccessPointSelectionMode;
+ TInt iAutoLoadContent;
+ TInt iFontSize;
+ TBool iTextWrap;
+ TWmlSettingsCookies iCookies;
+ TBool iPageOverview;
+ TBool iBackList;
+ TBool iAutoRefresh;
+ TWmlSettingsECMA iEcma;
+ TWmlSettingsIMEI iIMEINotification;
+ TUint32 iEncoding;
+ TWmlSettingsFullScreen iFullScreen;
+ TBool iQueryOnExit;
+ TBool iSendReferrer;
+ TWmlSettingsAdaptiveBookmarks iAdaptiveBookmarks;
+ TWmlSettingsHomePage iHomePgType;
+ TBool iHTTPSecuritySupressed;
+ TBool iDownloadsOpen;
+ TBool iConnDialogs;
+ TBool iHttpSecurityWarnings;
+ TInt iMediaVolume;
+ HBufC* iSearchPgURL;
+ HBufC* iHomePgURL;
+ TBool iPopupBlocking;
+ TWmlSettingsFormData iFormDataSaving;
+ TUint iAutomaticUpdatingAP;
+ TBool iAutomaticUpdatingWhileRoaming;
+ TBool iAccessKeys;
+ HBufC* iShortCutFuncHomePg;
+ HBufC* iShortCutFuncBkMark;
+ HBufC* iShortCutFuncFindKeyWord;
+ HBufC* iShortCutFuncPrePage;
+ HBufC* iUrlSuffixList;
+ HBufC* iShortCutFuncSwitchWin;
+ HBufC* iShortCutFuncMiniImage;
+ HBufC* iShortCutFuncFullScreen;
+ HBufC* iShortCutFuncGoAddr;
+ HBufC* iShortCutFuncZoomIn;
+ HBufC* iShortCutFuncZoomOut;
+ HBufC* iShortCutFuncZoomMode;
+ TBool iRotateDisplay;
+ TInt iToolbarOnOff; // Turns Toolbar On or Off ( 0 = Off ; 1 = On)
+ TInt iToolbarButton1Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iToolbarButton2Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iToolbarButton3Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iToolbarButton4Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iToolbarButton5Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iToolbarButton6Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iToolbarButton7Cmd; // see Toolbar Button Command List for cenrep values
+ TInt iShortcutKeysForQwerty;
+ TInt iShortcutKey1Cmd;
+ TInt iShortcutKey2Cmd;
+ TInt iShortcutKey3Cmd;
+ TInt iShortcutKey4Cmd;
+ TInt iShortcutKey5Cmd;
+ TInt iShortcutKey6Cmd;
+ TInt iShortcutKey7Cmd;
+ TInt iShortcutKey8Cmd;
+ TInt iShortcutKey9Cmd;
+ TInt iShortcutKey0Cmd;
+ TInt iShortcutKeyStarCmd;
+ TInt iShortcutKeyHashCmd;
+ TUint32 iScriptLog;
+ // Minimum, Maximum and Default (for new page) Zoom Level settings
+ TUint32 iZoomLevelMin;
+ TUint32 iZoomLevelMax;
+ TUint32 iZoomLevelDefault;
+ TInt iMaxRecentUrlsToShow;
+ TBool iSearch; // Search Feature
+ TBool iService; // Service Feature
+ TBrCtlDefs::TCursorSettings iCursorShowMode;
+ TBrCtlDefs::TEnterKeySettings iEnterKeyMode;
+ };
+
+/**
+* Helper enum for MPreferencesObserver
+*/
+enum TPreferencesEvent
+ {
+ EPreferencesActivate, // Preferences opened
+ EPreferencesDeactivate, // Preferences closed
+ EPreferencesItemChange // Setting change has occurred
+ };
+
+
+/**
+* Mixin class for observing changes in preferences.
+*/
+class MPreferencesObserver
+ {
+ public:
+
+ /**
+ * Derived classes should implement this method, and act accordingly.
+ */
+ virtual void HandlePreferencesChangeL(
+ const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType ) = 0;
+ };
+
+//=============================================================================
+
+/**
+* Interface for Preferences handling.
+*/
+class MPreferences
+ {
+ public: // New functions
+
+ /**
+ * To read all of the preferences in one go
+ */
+ virtual const TPreferencesValues& AllPreferencesL() = 0;
+
+ /**
+ * To access embedded mode
+ */
+ virtual TBool EmbeddedMode() const = 0;
+
+ /**
+ * To access DefaultAccessPoint setting
+ */
+ virtual TUint DefaultAccessPoint() const = 0;
+
+
+ /**
+ * To access DefaultSnapId setting
+ */
+
+ virtual TUint DefaultSnapId() const = 0;
+
+ /**
+ * To access deafult AP details if exist setting.
+ */
+ virtual CApAccessPointItem* DefaultAPDetails() = 0;
+
+ /**
+ * To access Associated VPN Ap if exist
+ */
+ virtual TUint AssociatedVpn() const = 0;
+
+ /**
+ * Get the vpn item if it is vpn
+ */
+ virtual TBool VpnDataL( TUint aDefaultAccessPoint, CVpnApItem& aVpnItem ) = 0;
+
+ /**
+ * To access AutoLoadContent setting
+ */
+ virtual TInt AutoLoadContent() const = 0;
+
+ /**
+ * To access PageOverview setting
+ */
+ virtual TBool PageOverview() const = 0;
+
+ /**
+ * To access BackList setting
+ */
+ virtual TBool BackList() const = 0;
+
+ /**
+ * To access AutoRefresh setting
+ */
+ virtual TBool AutoRefresh() const = 0;
+
+ /*
+ * Sets the automatic updating access point of Web Feeds
+ */
+ virtual void SetAutomaticUpdatingApL( TUint aSetting ) = 0;
+ /*
+ * Sets the automatic updating while roaming of News & Blogs
+ */
+ virtual void SetAutomaticUpdatingWhileRoamingL( TBool aAutoUpdateRoaming ) = 0;
+
+ /**
+ * To modify user-defined URL suffix list (.com, .org, .net)
+ */
+ virtual void SetURLSuffixList( HBufC* aValue ) = 0;
+
+ /**
+ * To access user-defined URL suffix list (.com, org, .net)
+ */
+ virtual HBufC* URLSuffixList( ) const = 0;
+ /**
+ * automatic updating access point of Web Feeds
+ */
+ virtual TUint AutomaticUpdatingAP() const = 0;
+ /**
+ * automatic updating while roaming of News & Blogs
+ */
+ virtual TBool AutomaticUpdatingWhileRoaming() const = 0;
+
+ /**
+ * To access TextWrap setting
+ @ return setting item value
+ */
+ virtual TBool TextWrap() const = 0;
+
+ /**
+ * To access FontSize setting
+ */
+ virtual TInt FontSize() const = 0;
+
+ /**
+ * To access Encoding setting
+ */
+ virtual TUint32 Encoding() const = 0;
+
+ /**
+ * To access Adaptive Bookmarks setting
+ */
+ virtual enum TWmlSettingsAdaptiveBookmarks AdaptiveBookmarks() const = 0;
+
+ /**
+ * To access FullScreen setting
+ */
+ virtual enum TWmlSettingsFullScreen FullScreen() const = 0;
+
+ /**
+ * To access Cookies setting
+ */
+ virtual enum TWmlSettingsCookies Cookies() const = 0;
+
+ /**
+ * To access ECMA setting
+ */
+ virtual enum TWmlSettingsECMA Ecma() const = 0;
+
+ /**
+ * To access ScriptLog setting
+ */
+ virtual TUint32 ScriptLog() const = 0;
+
+ /**
+ * To access HTTP security warning setting
+ */
+ virtual TBool HttpSecurityWarnings() const = 0;
+
+ /**
+ * To access IMEI notification setting
+ */
+ virtual enum TWmlSettingsIMEI IMEINotification() const = 0;
+
+ /**
+ *To access HTTP security warning supression - read only pref.
+ */
+ virtual TBool HttpSecurityWarningsStatSupressed() const = 0;
+
+ /**
+ * To access Downloads Open setting
+ */
+ virtual TBool DownloadsOpen() const = 0;
+
+ /**
+ * To access user-defined homepage URL setting
+ */
+ virtual TInt HomePageUrlL( TDes& aUrl, TBool aForceLoadFromSD = EFalse ) const = 0;
+
+ /**
+ * Get the home page URL from belongs to the access point.
+ */
+ virtual TInt HomePageFromIapL( TDes& aUrl, TUint aIap ) const = 0;
+
+ /**
+ * To access user-defined search page URL setting
+ */
+ virtual TPtrC SearchPageUrlL() = 0;
+
+ /**
+ * To access Query Exit setting
+ */
+ virtual TBool QueryOnExit() const = 0;
+
+ /**
+ * To access Send Referrer setting
+ */
+ virtual TBool SendReferrer() const = 0;
+
+ /**
+ * To access Media Volume setting
+ */
+ virtual TInt MediaVolume() const = 0;
+
+ /**
+ * To access ShowConnectionDialogs setting
+ */
+ virtual TBool ShowConnectionDialogs() const = 0;
+
+ /**
+ * To check that an engine local feature is supported or not
+ */
+
+ virtual TBool EngineLocalFeatureSupported( const TInt aFeature ) const = 0;
+
+ /**
+ * To check that a ui local feature is supported or not
+ */
+
+ virtual TBool UiLocalFeatureSupported( const TInt aFeature ) const = 0;
+
+ /**
+ * To access home page's type: AP/user defined.
+ */
+ virtual enum TWmlSettingsHomePage HomePageType() const = 0;
+
+ /**
+ * To access Popup Blocking Enabled setting#
+ */
+ virtual TBool PopupBlocking() const = 0;
+
+ /**
+ * To access Form Data Saving setting
+ */
+ virtual TWmlSettingsFormData FormDataSaving() const = 0;
+
+ /**
+ * To access Access Keys setting : Enabled/Disabled
+ */
+ virtual TBool AccessKeys() const = 0;
+
+ /**
+ * To modify DefaultAccessPoint setting
+ */
+ virtual void SetDefaultAccessPointL( TUint aDefaultAccessPoint, TUint aAssocVpn = KWmlNoDefaultAccessPoint ) = 0;
+
+ /**
+ * To modify DefaultSnapId setting
+ */
+ virtual void SetDefaultSnapId (TUint aSnapId) = 0;
+
+ /**
+ * To modify AutoLoadContent setting
+ */
+ virtual void SetAutoLoadContentL( TInt aAutoLoadContent ) = 0;
+
+ /**
+ * To modify PageOverview setting
+ */
+ virtual void SetPageOverviewL( TBool aPageOverview ) = 0;
+
+ /**
+ * To modify BackList setting
+ */
+ virtual void SetBackListL( TBool aBackList ) = 0;
+
+ /**
+ * To modify AutoRefresh setting
+ */
+ virtual void SetAutoRefreshL( TBool aAutoRefresh ) = 0;
+
+ /**
+ * To modify TextWrap setting
+ */
+ virtual void SetTextWrapL( TBool aTextWrap ) = 0;
+
+ /**
+ * To modify FontSize setting
+ */
+ virtual void SetFontSizeL( TInt aFontSize ) = 0;
+
+ /**
+ * To modify encoding settings
+ */
+ virtual void SetEncodingL( TUint32 aEncoding ) = 0;
+
+ /**
+ * To modify Adaptive Bookmarks setting
+ */
+ virtual void SetAdaptiveBookmarksL( TWmlSettingsAdaptiveBookmarks aAdaptiveBookmarks ) = 0;
+
+ /**
+ * To modify FullScreen setting
+ */
+ virtual void SetFullScreenL( TWmlSettingsFullScreen aFullScreen ) = 0;
+
+ /**
+ * To modify Cookies setting
+ */
+ virtual void SetCookiesL( TWmlSettingsCookies aCookies ) = 0;
+
+ /**
+ * To modify ECMA setting
+ */
+ virtual void SetEcmaL( TWmlSettingsECMA aEcma ) = 0;
+
+ /**
+ * To modify Script Console setting
+ */
+ virtual void SetScriptLogL( TUint32 aScriptLog ) = 0;
+
+ /**
+ * To modify HTTP security warnings setting
+ */
+ virtual void SetHttpSecurityWarningsL( TBool aWarningsOn ) = 0;
+
+ /**
+ * To modify IMEI notification setting
+ */
+ virtual void SetIMEINotificationL( TWmlSettingsIMEI aIMEINotification ) = 0;
+
+ /**
+ * To modify Downloads Open setting
+ */
+ virtual void SetDownloadsOpenL( TBool aOpen ) = 0;
+
+ /**
+ * To modify Media Volume setting
+ */
+ virtual void SetMediaVolumeL( TInt aMediaVolume ) = 0;
+
+ /**
+ * To modify HomePage's type: AP/user defined.
+ */
+ virtual void SetHomePageTypeL( TWmlSettingsHomePage aHomePageType ) = 0;
+
+ /**
+ * To modify user-defined HomePage.
+ */
+ virtual void SetHomePageUrlL( const TDesC& aHomePageURL ) = 0;
+
+ /**
+ * To modify user-defined Search page URL
+ */
+ virtual void SetSearchPageUrlL( const TDesC& aSearchPageURL ) = 0;
+
+ /**
+ * To determine that is there an overridden default access point defined or not
+ */
+ virtual TBool CustomAccessPointDefined() = 0;
+
+ /**
+ * To access to the list of self download content types.
+ * See CBrCtlInterface::SetSelfDownloadContentTypesL()!
+ */
+ virtual TPtrC SelfDownloadContentTypesL() = 0;
+
+ /**
+ * To access Default Access Point selection mode settings.
+ */
+ virtual TCmSettingSelectionMode AccessPointSelectionMode() = 0;
+
+ /**
+ * To modify Default Access Point Settings
+ */
+ virtual void SetAccessPointSelectionModeL( TCmSettingSelectionMode aAccessPointSelectionMode ) = 0;
+
+ /**
+ * To modify Popup Blocking Enabled settign
+ */
+ virtual void SetPopupBlockingL( TBool aPopupBlocking ) = 0;
+
+ /**
+ * To modify Form Data Saving setting
+ */
+ virtual void SetFormDataSavingL( TWmlSettingsFormData aFormDataSaving ) = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncHomePg() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncBkMark() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncFindKeyWord() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncPrePage() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncSwitchWin() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncMiniImage() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncFullScreen() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncGoAddr() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncZoomIn() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncZoomOut() const = 0;
+
+ /**
+ * To access pre defined short cut keys
+ */
+ virtual HBufC* ShortCutFuncZoomMode() const = 0;
+
+ /**
+ * To get value of Rotate Display setting
+ */
+ virtual TBool RotateDisplay() const = 0;
+
+ /**
+ * To get Toolbar On/Off value
+ */
+ virtual TInt ShowToolbarOnOff() const = 0;
+
+ /**
+ * To set Toolbar On/Off value
+ */
+ virtual void SetToolbarOnOffL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 1 command value
+ */
+ virtual TInt ShowToolbarButton1Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 1 command value
+ */
+ virtual void SetToolbarButton1CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 2 command value
+ */
+ virtual TInt ShowToolbarButton2Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 2 command value
+ */
+ virtual void SetToolbarButton2CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 3 command value
+ */
+ virtual TInt ShowToolbarButton3Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 3 command value
+ */
+ virtual void SetToolbarButton3CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 4 command value
+ */
+ virtual TInt ShowToolbarButton4Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 4 command value
+ */
+ virtual void SetToolbarButton4CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 5 command value
+ */
+ virtual TInt ShowToolbarButton5Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 5 command value
+ */
+ virtual void SetToolbarButton5CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 6 command value
+ */
+ virtual TInt ShowToolbarButton6Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 6 command value
+ */
+ virtual void SetToolbarButton6CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Toolbar Button 7 command value
+ */
+ virtual TInt ShowToolbarButton7Cmd() const = 0;
+
+ /**
+ * To set Toolbar Button 7 command value
+ */
+ virtual void SetToolbarButton7CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 1 command value
+ */
+ virtual TInt ShortcutKey1Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 1 command value
+ */
+ virtual void SetShortcutKey1CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 2 command value
+ */
+ virtual TInt ShortcutKey2Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 2 command value
+ */
+ virtual void SetShortcutKey2CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 3 command value
+ */
+ virtual TInt ShortcutKey3Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 3 command value
+ */
+ virtual void SetShortcutKey3CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 4 command value
+ */
+ virtual TInt ShortcutKey4Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 4 command value
+ */
+ virtual void SetShortcutKey4CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 5 command value
+ */
+ virtual TInt ShortcutKey5Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 5 command value
+ */
+ virtual void SetShortcutKey5CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 6 command value
+ */
+ virtual TInt ShortcutKey6Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 6 command value
+ */
+ virtual void SetShortcutKey6CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 7 command value
+ */
+ virtual TInt ShortcutKey7Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 7 command value
+ */
+ virtual void SetShortcutKey7CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 8 command value
+ */
+ virtual TInt ShortcutKey8Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 8 command value
+ */
+ virtual void SetShortcutKey8CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 9 command value
+ */
+ virtual TInt ShortcutKey9Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 9 command value
+ */
+ virtual void SetShortcutKey9CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key 0 command value
+ */
+ virtual TInt ShortcutKey0Cmd() const = 0;
+
+ /**
+ * To set Shortcut Key 0 command value
+ */
+ virtual void SetShortcutKey0CmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key Star command value
+ */
+ virtual TInt ShortcutKeyStarCmd() const = 0;
+
+ /**
+ * To set Shortcut Key Star command value
+ */
+ virtual void SetShortcutKeyStarCmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key Hash command value
+ */
+ virtual TInt ShortcutKeyHashCmd() const = 0;
+
+ /**
+ * To set Shortcut Key Hash command value
+ */
+ virtual void SetShortcutKeyHashCmdL(TInt aCommand) = 0;
+
+ /**
+ * To get Shortcut Key for Qwerty command value
+ */
+ virtual TInt ShortcutKeysForQwerty() const = 0;
+
+ /**
+ * Zoom Level minimum (percentage) value
+ */
+ virtual inline TUint32 ZoomLevelMinimum() const = 0;
+
+ /**
+ * Zoom Level maximum (percentage) value
+ */
+ virtual inline TUint32 ZoomLevelMaximum() const = 0;
+
+ /**
+ * Zoom Level default (percentage) value
+ */
+ virtual inline TUint32 ZoomLevelDefault() const = 0;
+
+ /**
+ * Maximum Recent URLs to show
+ */
+ virtual TInt MaxRecentUrls() const = 0;
+
+ /**
+ * Search Feature Enabled or Disabled.
+ */
+ virtual inline TBool SearchFeature() const = 0;
+
+ /**
+ * Service Feature Enabled or Disabled.
+ */
+ virtual inline TBool ServiceFeature() const = 0;
+
+ /**
+ * To access an int value key in ini file
+ * @param aKey the ini file key to read
+ * @return the value of the given key
+ */
+ virtual TInt GetIntValue( TUint32 aKey) const = 0;
+
+ /**
+ * To access an string value key in ini file
+ * @param aKey the ini file key to read
+ * @return the value of the given key
+ */
+ virtual TInt GetStringValueL ( TUint32 aKey, TInt aMaxBufSize, TDes& aBuf ) const = 0;
+
+ /**
+ * Cursor show mode
+ */
+ virtual TBrCtlDefs::TCursorSettings CursorShowMode() const = 0;
+
+ /**
+ * Enter key mode
+ */
+ virtual TBrCtlDefs::TEnterKeySettings EnterKeyMode() const = 0;
+
+ public: // observer support
+
+ /**
+ * Adds an observer to be notified about changes. Derived classes MUST
+ * notify all observers when preferences changed!
+ * @param anObserver Observer to be notified about events.
+ */
+ virtual void AddObserverL( MPreferencesObserver* anObserver ) = 0;
+
+ /**
+ * Removes an observer.
+ * @param anObserver The observer.
+ */
+ virtual void RemoveObserver( MPreferencesObserver* anObserver ) = 0;
+
+ /**
+ * To flush share data key settings
+ */
+ virtual void FlushSD() = 0;
+
+ virtual void NotifyObserversL( TPreferencesEvent aEvent,
+ TBrCtlDefs::TBrCtlSettings aSettingType ) = 0;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/SessionAndSecurity.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CSessionAndSecurity
+*
+*
+*/
+
+
+#ifndef SESSION_SECURITY_H
+#define SESSION_SECURITY_H
+
+// INCLUDE FILES
+#include <bldvariant.hrh>
+#include <e32base.h>
+
+
+
+
+// FORWARD DECLARATIONS
+
+class MApiProvider;
+class TCertInfo;
+class TDNInfo;
+
+// CLASS DECLARATION
+
+/**
+* CSessionAndSecurity
+* @lib Browser.app
+* @since Series60 1.2
+*/
+class CSessionAndSecurity : public CBase
+ {
+ public: // Constructors and destructor
+ /**
+ * Destructor.
+ */
+ ~CSessionAndSecurity();
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed CSessionAndSecurity object.
+ */
+ static CSessionAndSecurity* NewL(MApiProvider& aApiProvider);
+ static CSessionAndSecurity* NewLC(MApiProvider& aApiProvider);
+
+ public: // New functions
+ /**
+ * Shows session info dialog
+ */
+ void ShowSessionInfoL();
+
+ /**
+ * Shows security info dialog / certificate details
+ */
+ void ShowSecurityInfoL();
+
+ /**
+ * Shows page info dialog
+ */
+ void ShowPageInfoL();
+
+ private:
+
+ /**
+ * Converts TDesC8 buffer to HBufC16
+ * @since Series60 2.0
+ * @param aSource
+ * @param aDestination ownership passed to caller
+ */
+ void ConvertTDesC8ToHBufC16LC( TDesC8& aSource, HBufC16*& aDestination );
+
+ /**
+ * Adds two distinguished names to security info
+ * (names are: CN, O, OU, L, C)
+ * @since Series60 2.0
+ * @param aDNInfo
+ * @param aBuf
+ */
+ void FillDNinfoL ( TDNInfo aDNInfo, HBufC* aBuf );
+
+ /**
+ * Creates security info message for WPS connection
+ * @since Series60 2.0
+ * @param aCertInfo
+ * @param aMessage
+ */
+ // void WspSecurityInfoL( TCertInfo* aCertInfo, HBufC& aMessage );
+
+ /**
+ * Creates security info message for HTTP connection
+ * @since Series60 2.0
+ * @param aCertInfo
+ * @param aMessage
+ */
+ // TO DO: changed to fit in with BaP
+ void HttpSecurityInfoL( const TCertInfo* aCertInfo, HBufC& aMessage );
+
+ inline MApiProvider& ApiProvider() { return iApiProvider; }
+
+ private:
+ /**
+ * Default constructor.
+ */
+ CSessionAndSecurity(MApiProvider& aApiProvider);
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ private: // Data
+ MApiProvider& iApiProvider;
+
+ };
+
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/WindowApiProvider.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* API provider.
+*
+*
+*/
+
+
+#ifndef __MULTIPLE_WINDOWS_APIPROVIDER_H__
+#define __MULTIPLE_WINDOWS_APIPROVIDER_H__
+
+// INCLUDES FILES
+#include "WmlBrowserBuild.h"
+
+// FORWARD DECLARATIONS
+class CBrCtlInterface;
+//class CBrowserDialogsProvider;
+class CBrowserDisplay;
+class CBrowserLoadObserver;
+class CBrowserSoftkeysObserver;
+class CBrowserSpecialLoadObserver;
+class CBrowserWindowManager;
+
+// CLASS DECLARATION
+
+/**
+* Interface to query several API implementations via Window class.
+*
+* @lib Browser.app
+* @since Series 60 3.0
+*/
+class MWindowApiProvider
+ {
+ public:
+#if 0
+ virtual CBrCtlInterface& BrCtlInterface() const = 0;
+ // virtual CBrowserDialogsProvider& DialogsProvider() const = 0;
+ virtual CBrowserDisplay& Display() const = 0;
+ virtual CBrowserLoadObserver& LoadObserver() const = 0;
+ virtual CBrowserSoftkeysObserver& SoftkeysObserver() const = 0;
+ virtual CBrowserSpecialLoadObserver& SpecialLoadObserver() const = 0;
+ virtual CBrowserWindowManager& WindowMgr() const = 0;
+#endif
+ virtual TBool IsWindowActive() const = 0;
+ virtual TInt WindowId() const = 0;
+ virtual const TDesC* TargetName() const = 0;
+ };
+
+#endif // __MULTIPLE_WINDOWS_APIPROVIDER_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/WindowInfoProvider.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser content view
+*
+*
+*/
+
+
+#ifndef __MULTIPLE_WINDOWS_INFOPROVIDER_H__
+#define __MULTIPLE_WINDOWS_INFOPROVIDER_H__
+
+// INCLUDE FILES
+#include <e32std.h>
+
+// FORWARD DECLARATIONS
+class CBrowserWindow;
+
+class CWindowInfo: public CBase
+ {
+ public:
+ CWindowInfo( HBufC* aText, TInt aWindowId, TBool aCurrent ) :
+ iWindowText( aText ),
+ iWindowId( aWindowId ),
+ iCurrent( aCurrent ) { }
+ ~CWindowInfo()
+ { delete iWindowText; }
+ public: // data members
+ const HBufC* iWindowText;
+ TInt iWindowId;
+ TBool iCurrent;
+ };
+
+class MWindowInfoProvider
+ {
+ public:
+ virtual HBufC* CreateWindowInfoLC( const CBrowserWindow& aWindow ) = 0;
+ };
+
+#endif // __MULTIPLE_WINDOWS_INFOPROVIDER_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/WindowObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserWebMenuView.
+* Observes browser window events.
+*
+*
+*/
+
+
+#ifndef __WINDOWOBSERVER_H__
+#define __WINDOWOBSERVER_H__
+
+// Events sent to observer
+enum TWindowEvent
+ {
+ EWindowClose,
+ EWindowOpen,
+ EWindowActivate,
+ EWindowLoadStart,
+ EWindowLoadStop,
+ EWindowCntDisplayed
+ };
+
+
+class MWindowObserver
+ {
+ public:
+ // Called on window events.
+ virtual void WindowEventHandlerL( TWindowEvent aEvent, TInt aWindowId ) = 0;
+ };
+
+#endif // __WINDOWOBSERVER_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/WlanObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef WLANOBSERVER_H
+#define WLANOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+
+
+// CONSTANTS
+
+// State enum and member variable
+
+// CLASS DECLARATIONS
+/**
+* CWlanObserver.
+* Observer class for handling wlan status requests
+* @since S60 v5.0
+*/
+class CWlanObserver : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ * @param aApiProvider Reference to API provider
+ */
+ CWlanObserver(MApiProvider& aApiProvider);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CWlanObserver();
+
+ /**
+ * Retrieves current state of wireless lan connection
+ * @param aWlanStateValue reference to current Wlan state value which is updated here
+ * @return: EFalse if error condition (ignore aWlanStateValue in this case)
+ * Etrue if no error (get updated value from aWlanStateValue)
+ */
+ TBool GetCurrentState(TInt &aWlanStateValue);
+
+ protected: // CActive
+
+ /**
+ * Implements cancellation of an outstanding request.
+ * @param none
+ * @return void
+ */
+ void DoCancel();
+
+ /**
+ * Handles an active object’s request completion event.
+ * @param none
+ * @return void
+ */
+ void RunL();
+
+ /**
+ * Handles an active object’s error
+ * @param error
+ * @return void
+ */
+ TInt RunError(TInt aError);
+
+ private: // new methods
+
+ MApiProvider& iApiProvider; // Api provider
+
+ RProperty iWlanProperty;
+
+
+ };
+
+#endif // WLANOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppInc/WmlBrowserBuild.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Defines whether WIM is part of WmlBrowser or not
+*
+*
+*/
+
+
+// INCLUDES
+#if !defined(__WMLBROWSERBUILD_H__)
+#define __WMLBROWSERBUILD_H__
+
+#include <bldvariant.hrh>
+
+// Use this flag to send bookmark as plaing ascii text
+// instead of binary OTA.
+#define _BOOKMARK_SENT_ASCII
+
+#define CHANGECONN_ALWAYSASK_FEATURE ( FeatureManager::FeatureSupported( KFeatureIdProtocolWlan ) )
+
+#define HELP ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+
+#define ADAPTIVEBOOKMARKS (FeatureManager::FeatureSupported( KFeatureIdBrowserAdaptiveBookm ))
+
+// #define WSP ( FeatureManager::FeatureSupported( KFeatureIdWsp ) )
+
+//browser autocomplete
+#define AUTOCOMP ( FeatureManager::FeatureSupported( KFeatureIdBrowserUrlCompletion ) )
+
+#define AVKONELAF ( FeatureManager::FeatureSupported( KFeatureIdAvkonELaf ) )
+#define AVKONAPAC ( FeatureManager::FeatureSupported( KFeatureIdAvkonApac ) )
+#define CHINESE ( FeatureManager::FeatureSupported( KFeatureIdChinese ) )
+
+#define IMEI_NOTIFICATION ( FeatureManager::FeatureSupported( KFeatureIdBrowserIMEINotification ) )
+
+#define HAS_SIDE_VOLUME_KEYS ( FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys ) )
+
+#define PROGRESSIVE_DOWNLOAD ( FeatureManager::FeatureSupported( KFeatureIdBrowserProgressiveDownload ) )
+
+#endif // __WMLBROWSERBUILD_H__
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/AHLEInterface.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,409 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: AHLE client interface API definition.
+ *
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include "AHLEInterface.h"
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+CAHLEInterface* CAHLEInterface::NewL( TAHLENewType aNewType,
+ const TDesC& aDatabase,
+ TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed )
+{
+ CAHLEInterface* apiObject = new (ELeave) CAHLEInterface;
+ CleanupStack::PushL( apiObject );
+ apiObject->ConstructL( aNewType, aDatabase, aPrimarySize, aSecondarySize, aAdaptationSpeed );
+ CleanupStack::Pop();
+ return apiObject;
+}
+
+EXPORT_C CAHLEInterface* CAHLEInterface::NewL( const TDesC& aDatabase,
+ TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed ){
+ return NewL( EAHLENewAllArgs, aDatabase, aPrimarySize, aSecondarySize, aAdaptationSpeed );
+}
+
+EXPORT_C CAHLEInterface* CAHLEInterface::NewL( const TDesC& aDatabase ){
+ return NewL( EAHLENewDbOnlyArgs, aDatabase, 0, 0, 0);
+}
+
+EXPORT_C CAHLEInterface* CAHLEInterface::NewL(){
+ return NewL( EAHLENewNoArgs, KAHLEInterfaceDummyFile, 0, 0, 0);
+}
+
+EXPORT_C CAHLEInterface* CAHLEInterface::NewL( TUint aPrimarySize ){
+ return NewL( EAHLENewPrimarySizeOnlyArgs, KAHLEInterfaceDummyFile, aPrimarySize, 0, 0);
+}
+
+
+// -----------------------------------------------------------------------------
+// CAHLEInterface::InitializeAHLE
+// Creates the AHLE client if needed.
+// Throws exception on failure. This is where the AHLE client finally gets created.
+// We defer it as long as possible.
+// -----------------------------------------------------------------------------
+void CAHLEInterface::InitializeAHLEL()
+{
+ //If already done return quickly.
+ if (iAHLE) return;
+
+ TUint aPrimarySize = 0;
+ TUint aSecondarySize = 0;
+ TAHLEScore aAdaptationSpeed = 0;
+
+ //Fire the correct contructor. It should map to the CAHLEInterface contructor.
+ switch (iNewType)
+ {
+ case EAHLENewNoArgs:
+ iAHLE = CAHLE::NewL();
+ break;
+
+ case EAHLENewAllArgs:
+ iAHLE = CAHLE::NewL( *iDatabase, iPrimarySize, iSecondarySize, iAdaptationSpeed);
+ break;
+
+ case EAHLENewDbOnlyArgs:
+ iAHLE = CAHLE::NewL( *iDatabase );
+ break;
+
+ case EAHLENewPrimarySizeOnlyArgs:
+ //The actual value will be added by the initialization later. We
+ //can't change the AHLE constructors.
+ iDeferPrimarySize = iPrimarySize;
+ iAHLE = CAHLE::NewL();
+ break;
+
+ default:
+ iAHLE = CAHLE::NewL();
+ }
+
+ //Do the deferred reconfigure. It was not done earlier, the values
+ //were cached for now. Note that the values could have been set in the
+ //constructor as well as here. The trick is to keep track of which
+ //ones to set here. If the deferred one was set use it. Otherwise use
+ //the one just read in with GetConfiguration()
+
+ iAHLE->GetConfigurationL( aPrimarySize, aSecondarySize, aAdaptationSpeed );
+ iAHLE->ReconfigureL( iDeferPrimarySize ? iDeferPrimarySize : aPrimarySize,
+ iDeferSecondarySize ? iDeferSecondarySize : aSecondarySize,
+ iDeferAdaptationSpeed ? iDeferAdaptationSpeed: aAdaptationSpeed );
+}
+
+// -----------------------------------------------------------------------------
+// Idle Callback Function
+// Called when the thread is not busy. The code will be initialized
+// now. If it was initialized explicitly bu other code than this call
+// won't do very much. In any case this will always return false. It
+// doesn't need to run a second time since it will run to completion.
+// -----------------------------------------------------------------------------
+TInt CAHLEInterface::AHLEInitializationCB(TAny* thisObj)
+{
+ ((CAHLEInterface*)thisObj)->InitializeAHLEL();
+ return EFalse;
+}
+
+
+
+// -----------------------------------------------------------------------------
+// CAHLEInterface::CAHLEInterface
+// -----------------------------------------------------------------------------
+CAHLEInterface::CAHLEInterface()
+{
+ iAHLE = NULL;
+ iDatabase = NULL;
+
+ iPrimarySize = 0;
+ iSecondarySize = 0;
+ iAdaptationSpeed = 0;
+
+ iDeferPrimarySize = 0;
+ iDeferSecondarySize = 0;
+ iDeferAdaptationSpeed = 0;
+}
+
+
+// -----------------------------------------------------------------------------
+// CAHLEInterface::~CAHLEInterface
+// C++ destructor
+// -----------------------------------------------------------------------------
+CAHLEInterface::~CAHLEInterface()
+{
+if(iIdle != NULL)
+ {
+ iIdle->Cancel();
+ }
+ delete iIdle;
+ delete iAHLE;
+ delete iDatabase;
+}
+
+
+// -----------------------------------------------------------------------------
+// CAHLEInterface::IsConnected
+// Check if the client has been connected to the server. Note that if the actual
+// AHLE client has not been created yet we ARE considered connected. Otherwise we
+// would need to connect almost immediately.
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CAHLEInterface::IsConnected()
+ {
+ return (iAHLE ? iAHLE->IsConnected(): ETrue);
+ }
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::ConstructL
+// Light weight constructor. Real work is deferred until later.
+// An active idle object is created to do the construction when
+// things are not busy. If it is done by a task that explicitly
+// requires the AHLE client it will not need to run.
+// ---------------------------------------------------------
+void CAHLEInterface::ConstructL( TAHLENewType aNewType,
+ const TDesC& aDatabase,
+ TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed )
+{
+ iAHLE = NULL;
+ iPrimarySize = aPrimarySize;
+ iSecondarySize = aSecondarySize;
+ iAdaptationSpeed = aAdaptationSpeed;
+ iDatabase = aDatabase.Alloc();
+ iNewType = aNewType;
+ iIdle = CIdle::NewL(CActive::EPriorityIdle);
+ iIdle->Start(TCallBack(AHLEInitializationCB, this));
+}
+
+
+// -----------------------------------------------------------------------------
+// CAHLEInterface::SetObserverL
+// -----------------------------------------------------------------------------
+EXPORT_C void CAHLEInterface::SetObserverL( const MAHLEClientObserver* aClientObs )
+{
+ InitializeAHLEL();
+ iAHLE->SetObserverL(aClientObs);
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::Reconfigure
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::ReconfigureL( TUint aPrimarySize,
+ TUint aSecondarySize,
+ TAHLEScore aAdaptationSpeed )
+{
+ InitializeAHLEL();
+ return iAHLE->ReconfigureL(aPrimarySize, aSecondarySize, aAdaptationSpeed );
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::GetConfiguration
+// ---------------------------------------------------------
+EXPORT_C void CAHLEInterface::GetConfigurationL( TUint& aPrimarySize,
+ TUint& aSecondarySize,
+ TAHLEScore& aAdaptationSpeed )
+{
+ InitializeAHLEL();
+ iAHLE->GetConfigurationL(aPrimarySize, aSecondarySize, aAdaptationSpeed );
+}
+
+
+// ----------------------------------------------------------------
+// CAHLEInterface::GetParameters
+// ----------------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::GetParameters( TAHLESortOrder& /* aOrder */ ) const
+{
+ return KErrNotSupported;
+}
+
+
+// ----------------------------------------------------------------
+// CAHLEInterface::GetParameters
+// ----------------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::GetParameters( TAHLESortOrder& /* aOrder */,
+ TAny* /* aReserved */ ) const
+{
+ return KErrNotSupported;
+}
+
+
+// ----------------------------------------------------------------
+// CAHLEInterface::SetParameters
+// ----------------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::SetParameters( TAHLESortOrder /* aOrder */ )
+{
+ return KErrNotSupported;
+}
+
+EXPORT_C TInt CAHLEInterface::SetParameters( TAHLESortOrder /* aOrder */,
+ TAny* /* aReserved */ )
+{
+ return KErrNotSupported;
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::NewAccessL
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::NewAccessL( const TDesC& aItem,
+ const TDesC& aItemName )
+{
+ InitializeAHLEL();
+ return (iAHLE->NewAccessL(aItem, aItemName));
+}
+
+
+EXPORT_C void CAHLEInterface::NewAccessL( TRequestStatus& aStatus,
+ const TDesC& aItem,
+ const TDesC& aItemName )
+{
+ InitializeAHLEL();
+ iAHLE->NewAccessL(aStatus, aItem, aItemName);
+}
+
+
+// ----------------------------------------------------------------
+// CAHLEInterface::AdaptiveListL
+// ----------------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::AdaptiveListL( CDesCArray& aItems,
+ CDesCArray& aItemNames,
+ const TInt aSize,
+ const TDesC& aMatch,
+ const TAHLEState aState )
+{
+ InitializeAHLEL();
+ return (iAHLE->AdaptiveListL( aItems, aItemNames, aSize, aMatch, aState ));
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::OrderByScoreL
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CAHLEInterface::OrderByScoreL( CDesCArray& aItems,
+ CDesCArray& aItemsSorted )
+{
+ InitializeAHLEL();
+ return (iAHLE->OrderByScoreL( aItems, aItemsSorted ));
+}
+
+EXPORT_C TInt CAHLEInterface::OrderByScoreL( CDesCArray& /* aItems */,
+ RArray<TInt>& /* aSortOrder */ )
+{
+ return KErrNotSupported;
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::RemoveL
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::RemoveL( const TDesC& aItem )
+{
+ InitializeAHLEL();
+ return (iAHLE->RemoveL( aItem ));
+}
+
+EXPORT_C void CAHLEInterface::RemoveL( const TDesC& aItem,
+ TRequestStatus& aStatus )
+{
+ InitializeAHLEL();
+ iAHLE->RemoveL( aItem, aStatus );
+}
+
+EXPORT_C void CAHLEInterface::RemoveL( const CDesCArray& aItems,
+ TRequestStatus &aStatus)
+{
+ InitializeAHLEL();
+ iAHLE->RemoveL( aItems, aStatus );
+}
+
+EXPORT_C TInt CAHLEInterface::RemoveL(const CDesCArray& aItems )
+{
+ InitializeAHLEL();
+ return (iAHLE->RemoveL( aItems ));
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::RemoveMatching
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::RemoveMatchingL( const TDesC& aMatch )
+{
+ InitializeAHLEL();
+ return (iAHLE->RemoveMatchingL( aMatch ));
+}
+
+EXPORT_C void CAHLEInterface::RemoveMatchingL( const TDesC& aMatch,
+ TRequestStatus& aStatus )
+{
+ InitializeAHLEL();
+ iAHLE->RemoveMatchingL( aMatch, aStatus);
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::Rename
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::RenameL( const TDesC& aItem,
+ const TDesC& aNewName )
+{
+ InitializeAHLEL();
+ return (iAHLE->RenameL( aItem, aNewName ));
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::GetName
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CAHLEInterface::GetNameL( const TDesC& /* aItem */,
+ TDesC& /* aName */ )
+{
+ return KErrNotSupported;
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::Clear
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::Clear()
+{
+ //Exception may be thrown but is not expected. Return something
+ //harmless in that case.
+ TRAPD( error, InitializeAHLEL());
+ return (error ? 0 : iAHLE->Clear());
+}
+
+
+// ---------------------------------------------------------
+// CAHLEInterface::Flush
+// ---------------------------------------------------------
+EXPORT_C TInt CAHLEInterface::Flush()
+{
+ //Exception may be thrown but is not expected. Return something
+ //harmless in that case.
+ TRAPD( error, InitializeAHLEL());
+ return (error ? 0 : iAHLE->Flush());
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAnimation.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class to put animation to contextPane.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BrowserAnimation.h"
+#include "logger.h"
+
+#include <aknappui.h>
+#include <eikspane.h>
+#include <akncontext.h>
+#include <AknBitmapAnimation.h>
+#include <barsread.h> // for TResourceReader
+#include <AknsUtils.h> // for TAknsItemID
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserAnimation::NewL()
+// ---------------------------------------------------------
+//
+CBrowserAnimation* CBrowserAnimation::NewL( TInt aResourceId )
+ {
+LOG_ENTERFN("Anim::NewL");
+ CBrowserAnimation* self = new( ELeave )CBrowserAnimation;
+ CleanupStack::PushL( self );
+ self->ConstructL( aResourceId );
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAnimation::~CBrowserAnimation()
+// ---------------------------------------------------------
+//
+CBrowserAnimation::~CBrowserAnimation()
+ {
+ delete iAnimation;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAnimation::StartL()
+// ---------------------------------------------------------
+//
+void CBrowserAnimation::StartL()
+ {
+LOG_ENTERFN("Anim::StartL");
+ if ( iAnimation && !iIsRunning )
+ {
+ // Getting status pane control
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )
+ ->StatusPane();
+
+ // Fetch pointer to contextpane
+ CAknContextPane* contextPane = STATIC_CAST( CAknContextPane*,
+ sp->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) );
+
+ //this sets an empty bitmap to the contextpanes background to
+ //avoid to have the original one in the back of the animation
+ //the ownership is taken by the contextpane
+ CFbsBitmap *emptyFbsBitmap = new (ELeave) CFbsBitmap();
+
+ CleanupStack::PushL( emptyFbsBitmap );
+ emptyFbsBitmap->Create( TSize(1, 1), ENone);
+ CEikImage * emptyEikImage = new (ELeave) CEikImage( );
+ emptyEikImage->SetBitmap( emptyFbsBitmap );
+ contextPane->SetPicture( emptyEikImage );
+ CleanupStack::Pop();//emptyFbsBitmap ownership is taken
+
+ iAnimation->StartAnimationL(); // displays the animation
+ iIsRunning = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAnimation::StopL()
+// ---------------------------------------------------------
+//
+void CBrowserAnimation::StopL()
+ {
+LOG_ENTERFN("Anim::StopL");
+ if ( iAnimation && iIsRunning ) // Is the animation running?
+ {
+ iAnimation->CancelAnimation(); // ends the animation
+ iIsRunning = EFalse;
+
+ // Getting status pane control
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )->StatusPane();
+
+ // Fetch pointer to contextpane
+ CAknContextPane* contextPane = NULL;
+ TRAP_IGNORE( contextPane = STATIC_CAST( CAknContextPane*, sp->ControlL
+ ( TUid::Uid( EEikStatusPaneUidContext ) ) ) );
+
+ if ( contextPane )
+ {
+ contextPane->SetPictureToDefaultL();
+ contextPane->DrawNow(); // draw original icon
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAnimation::ConstructL()
+// ---------------------------------------------------------
+//
+void CBrowserAnimation::ConstructL( TInt aResourceId )
+ {
+LOG_ENTERFN("Anim::ConstructL");
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ // Getting status pane control
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() ) ->StatusPane();
+
+ if ((sp && sp->PaneCapabilities(
+ TUid::Uid(EEikStatusPaneUidContext)).IsInCurrentLayout()))
+ {
+ // Fetch pointer to contextpane
+ CAknContextPane* contextPane =
+ STATIC_CAST( CAknContextPane*,
+ sp->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) );
+
+ iAnimation = CAknBitmapAnimation::NewL();
+ iAnimation->SetContainerWindowL( *contextPane );
+
+ TResourceReader rr;
+ TAknsItemID animationSkinID;
+ animationSkinID.Set( EAknsMajorAvkon, aResourceId );
+
+ if( !iAnimation->ConstructFromSkinL( animationSkinID ) )
+ {
+ iAnimation->ControlEnv()->CreateResourceReaderLC( rr, aResourceId );
+ iAnimation->ConstructFromResourceL( rr ); // read from resource
+ CleanupStack::PopAndDestroy(); // rr
+ }
+
+ iAnimation->SetRect(contextPane->Rect());
+PERFLOG_STOP_WRITE("Animation ConstructL phase 1")
+#if 0
+ // Start and stop animation out of the screen.
+ // This way it saves context pane's content as background frame.
+ const TInt KWmlAnimationDummyPos = 1000;
+ iAnimation->SetPosition( TPoint( KWmlAnimationDummyPos,
+ KWmlAnimationDummyPos ) );
+ iAnimation->SetRect(contextPane->Rect());
+PERFLOG_STOPWATCH_START
+ StartL();
+ StopL();
+ iAnimation->SetPosition( TPoint( 0, 0 ) );
+PERFLOG_STOP_WRITE("Animation ConstructL phase 2")
+#endif
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAppDocument.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser app document
+*
+*
+*/
+
+#include "BrowserAppDocument.h"
+#include "BrowserAppUi.h"
+#include <favouritesitem.h>
+#include <brctlinterface.h>
+#include "CommonConstants.h"
+
+CBrowserAppDocument::CBrowserAppDocument(CEikApplication& aApp): CAknDocument(aApp)
+{
+ iFolderToOpen = KFavouritesRootUid;
+}
+
+CBrowserAppDocument::~CBrowserAppDocument()
+{
+ if ( iUrlToOpen )
+ {
+ delete iUrlToOpen;
+ iUrlToOpen = NULL;
+ }
+}
+
+CEikAppUi* CBrowserAppDocument::CreateAppUiL()
+{
+ return new (ELeave) CBrowserAppUi;
+}
+
+TInt CBrowserAppDocument::GetFolderToOpen() const
+{
+ return iFolderToOpen;
+}
+
+HBufC* CBrowserAppDocument::GetUrlToOpen() const
+{
+ return iUrlToOpen;
+}
+
+MDownloadedContentHandler *CBrowserAppDocument::GetDownloadedContentHandler() const
+{
+ return iDownloadedContentHandler;
+}
+
+CFileStore* CBrowserAppDocument::OpenFileL(TBool /*aDoOpen*/, const TDesC& aFileName, RFs& /*aFs*/)
+{
+ TInt len = aFileName.Length();
+ delete iUrlToOpen;
+ iUrlToOpen = NULL;
+ iUrlToOpen = HBufC::NewL(len);
+ *iUrlToOpen = aFileName;
+ HBufC8 *url8 = HBufC8::NewL(len);
+
+ url8->Des().Copy( aFileName );
+ //STATIC_CAST(CBrowserAppUi*, iAppUi)->FetchL(*iUrlToOpen);
+ STATIC_CAST(CBrowserAppUi*, iAppUi)->ParseAndProcessParametersL( url8->Des() );
+ delete url8;
+ return NULL;
+}
+
+// From CAknDocument
+void CBrowserAppDocument::OpenFileL( CFileStore*& aFileStore, RFile& aFile )
+ {
+ CBrowserAppUi* appUi = STATIC_CAST(CBrowserAppUi*, iAppUi);
+ appUi->InitBrowserL();
+
+ TBuf<KMaxDataTypeLength> dataTypeDes;
+
+ // See if Browser UI should handle this open file or not
+ if(appUi->RecognizeUiFileL(aFile, dataTypeDes))
+ {
+ // confirm the filehandling with the user,
+ // retrieving filename from the RFILE
+ TFileName fileName;
+ User::LeaveIfError(aFile.Name(fileName));
+ if(appUi->ConfirmUiHandlingL(fileName, dataTypeDes))
+ {
+ // need to copy file to a temp file, then pass off to Feeds
+ // prepend the path to the fileName
+ TFileName filePath = _L("c:\\system\\temp\\");
+ filePath.Append(fileName);
+ appUi->CopyUiRFileToFileL(aFile,filePath);
+
+ // Pass off to appUi to set up views, etc.
+ appUi->HandleUiFileL(filePath, dataTypeDes);
+ }
+ else
+ {
+ appUi->HandleCommandL( EWmlCmdCloseBrowser );
+ }
+ }
+ else
+ {
+ // send to content view
+ appUi->WaitCVInit();
+ appUi->SetLastActiveViewId( KUidBrowserContentViewId );
+ // view activation and bringing the browser to foreground are two
+ // distinct actions.
+ appUi->ActivateLocalViewL( KUidBrowserContentViewId );
+ appUi->HandleForegroundEventL( ETrue );
+
+ TFileName fileName;
+ User::LeaveIfError( aFile.FullName( fileName ) );
+ if ( fileName.Find( KMailerStoreUid ) != KErrNotFound )
+ {
+ appUi->CopyUiRFileToFileL( aFile,KAttachment() );
+ appUi->BrCtlInterface().LoadFileL( KAttachment() );
+ }
+ else
+ {
+ appUi->BrCtlInterface().LoadFileL( aFile );
+ }
+
+ }
+ aFileStore = 0;
+ aFile.Close();
+ }
+
+TBrowserOverriddenSettings* CBrowserAppDocument::GetOverriddenSettings()
+ {
+ return iOverriddenSettings;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAppEntryPoint.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser App Entry point
+*
+*
+*/
+
+
+#include "BrowserApplication.h"
+#include <e32std.h>
+#include <u32std.h>
+#include <eikapp.h>
+#include <eikstart.h>
+#include <MemoryManager.h>
+#include <avkon.rsg>
+#include <BrowserNG.rsg>
+#include <bautils.h>
+#include <f32file.h>
+#include <data_caging_path_literals.hrh>
+#include <hal.h>
+#include <barsc.h>
+
+_LIT(KBrowserResourceFile, "BrowserNG.rsc");
+
+
+const int KFreeMemoryTarget = 6000000;
+
+
+LOCAL_C CApaApplication* NewApplication( )
+ {
+ return new CBrowserApplication;
+ }
+
+// -----------------------------------------------------------------------------
+// SetupThreadHeap - Called for heap creation of thread in this process.
+// This approach used to keep correct heap for pointers held in static data objects
+// when they are destructed after E32Main() by OS.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt UserHeap::SetupThreadHeap(TBool aSubThread, SStdEpocThreadCreateInfo& aInfo)
+ {
+ TInt r = KErrNone;
+ if (!aInfo.iAllocator && aInfo.iHeapInitialSize>0)
+ {
+ // new heap required
+ RHeap* pH = NULL;
+ r = CreateThreadHeap(aInfo, pH);
+ if (r == KErrNone && !aSubThread)
+ {
+ // main thread - new allocator created and set as default heap
+ MemoryManager::CreateFastAllocator();
+ }
+ }
+ else if (aInfo.iAllocator)
+ {
+ // sharing a heap
+ RAllocator* pA = aInfo.iAllocator;
+ pA->Open();
+ User::SwitchAllocator(pA);
+ }
+
+ return r;
+ }
+
+
+// ---------------------------------------------------------------------------
+// GetUiUtilitiesResourceFilenameL
+// ---------------------------------------------------------------------------
+//
+TInt GetCorrectResourceFilenameL(TFileName& aResourceFileName)
+ {
+
+ TParse parse;
+ parse.Set(KBrowserResourceFile, &KDC_APP_RESOURCE_DIR, NULL);
+ aResourceFileName.Copy(parse.FullName());
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL( fs );
+
+ // Resource File Name on C:
+ aResourceFileName.Insert( 0, TDriveUnit( EDriveC).Name() );
+ // try to locate the localised resource
+ BaflUtils::NearestLanguageFile( fs, aResourceFileName );
+
+ // if the localised resource is found, the file name is changed to the localised name (z:\resources\webkit.r001)
+ if( !BaflUtils::FileExists( fs, aResourceFileName ) ) {
+
+ aResourceFileName.Replace( 0, KMaxDriveName, TDriveUnit( EDriveZ ).Name() );
+ // not found on c drive, try z try to locate the localised resource again
+ BaflUtils::NearestLanguageFile( fs, aResourceFileName );
+
+ // if file was not found this time, there is no localised resource with the name
+ if (!BaflUtils::FileExists( fs, aResourceFileName ) ) {
+ User::Leave(KErrNotFound);
+ }
+ }
+ CleanupStack::PopAndDestroy( &fs );
+ return KErrNone;
+ }
+
+void ShowOOMDialogWithNotifierL()
+ {
+
+ TFileName resourceFileName;
+ User::LeaveIfError(GetCorrectResourceFilenameL(resourceFileName));
+
+ RFs fsSession;
+ User::LeaveIfError(fsSession.Connect());
+ CleanupClosePushL(fsSession);
+
+ RResourceFile resFile;
+ resFile.OpenL(fsSession,resourceFileName );
+ resFile.ConfirmSignatureL(0);
+
+ HBufC8* dataOkButtonBuffer = resFile.AllocReadLC(R_QTN_OK_BUTTON);
+ HBufC8* dataOOMMessageBuffer = resFile.AllocReadLC(R_QTN_BROWSER_DIALOG_OOM);
+
+ TPtrC16 OkButtonBuffer( ( TUint16* ) dataOkButtonBuffer->Ptr(),dataOkButtonBuffer->Length() / 2 );
+ TPtrC16 OOMMessageBuffer( ( TUint16* ) dataOOMMessageBuffer->Ptr(),dataOOMMessageBuffer->Length() / 2 );
+
+ _LIT(KTxtEmptyLine," ");
+ _LIT(KTxtEmptyButton,"");
+
+ RNotifier notifier;
+ TInt err = notifier.Connect();
+ if(err == KErrNone) {
+ TInt whichbutton(-1);
+ TRequestStatus stat;
+ notifier.Notify(OOMMessageBuffer,KTxtEmptyLine,OkButtonBuffer,KTxtEmptyButton,whichbutton,stat);
+ User::WaitForRequest(stat);
+ }
+
+ notifier.Close();
+
+ //this will clear OkButtonBuffer and OOMMessageBuffer
+ CleanupStack::PopAndDestroy(2);
+ resFile.Close();
+ CleanupStack::PopAndDestroy(&fsSession);
+
+ }
+
+// -----------------------------------------------------------------------------
+// E32Main
+// -----------------------------------------------------------------------------
+GLDEF_C TInt E32Main()
+ {
+ //Initilize memory manager...
+ MemoryManager::InitFastAllocator();
+
+ TInt freeRAM = 0;
+ TInt r = HAL::Get(HAL::EMemoryRAMFree, freeRAM);
+
+ if ((r != KErrNone) || freeRAM < KFreeMemoryTarget)
+ {
+ // create clean-up stack as none is created
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ // Show OOM message through RNotifier ...
+ TRAP_IGNORE(ShowOOMDialogWithNotifierL());
+
+ // destroy clean-up stack
+ delete cleanup;
+ return KErrNoMemory;
+ }
+
+ // Run application event loop
+ return EikStart::RunApplication(NewApplication);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAppServer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserAppServer
+*
+*
+*/
+
+
+// INCLUDES
+#include <e32std.h>
+#include "BrowserAppServer.h"
+#include "BrowserLauncherService.h"
+
+// -----------------------------------------------------------------------------
+// CBrowserAppServer::CreateServiceL()
+// -----------------------------------------------------------------------------
+//
+CApaAppServiceBase* CBrowserAppServer::CreateServiceL( TUid aServiceType ) const
+ {
+
+ // Create the requested service object.
+ if ( aServiceType == TUid::Uid( 0x01010101 ) )
+ {
+ CBrowserLauncherService* service = new( ELeave ) CBrowserLauncherService;
+ CleanupStack::PushL( service );
+ service->ConstructL( );
+ CleanupStack::Pop( service );
+ return service;
+ }
+ else
+ {
+ return CAknAppServer::CreateServiceL( aServiceType );
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppServer::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppServer::ConstructL( const TDesC& aFixedServerName )
+ {
+ CAknAppServer::ConstructL( aFixedServerName );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppServer::CustomSecurityCheckL()
+// -----------------------------------------------------------------------------
+//
+CPolicyServer::TCustomResult CBrowserAppServer::CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing )
+ {/*
+ switch (aMsg.Function())
+ {
+ case RLauncherClientService::EMessageId:
+ return aMsg.HasCapability(iClientReqs) ? CPolicyServer::EPass : CPolicyServer::EFail;
+ break;
+
+ default:
+ return CApaAppServer::CustomSecurityCheckL (aMsg, aAction, aMissing);
+ break;
+ }*/
+ return CApaAppServer::CustomSecurityCheckL (aMsg, aAction, aMissing);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppServer::CustomFailureActionL()
+// -----------------------------------------------------------------------------
+//
+CPolicyServer::TCustomResult CBrowserAppServer::CustomFailureActionL(const RMessage2& aMsg, TInt /*aAction*/, const TSecurityInfo& /*aMissing*/)
+ {/*
+ switch (aMsg.Function())
+ {
+ case RLauncherClient::EMessageId:
+ return aMsg.HasCapability(iClientReqs) ? CPolicyServer::EPass : CPolicyServer::EFail;
+ break;
+
+ default:
+ return CApaAppServiceBase::CustomFailureActionL (aMsg, aAction, aMissing);
+ break;
+ }*/
+ //Dummy return, because CustomFailureActionL is not implemented.
+ return aMsg.HasCapability(iClientReqs) ? CPolicyServer::EPass : CPolicyServer::EFail;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAppUi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,4753 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserAppUi
+*
+*
+*/
+
+// INCLUDES
+#include <browser_platform_variant.hrh>
+#include <BrowserNG.rsg>
+#include <uri16.h>
+#include <uri8.h>
+#include <uriutils.h>
+#include <ApUtils.h>
+#include <StringLoader.h>
+#include <e32def.h>
+#include <aplistitemlist.h>
+#include <aplistitem.h>
+#include <apparc.h>
+#include <favouritesfile.h>
+#include <aknmessagequerydialog.h>
+#include <FeatMgr.h>
+#include <internetconnectionmanager.h>
+#include <APSettingsHandlerUi.h>
+#include <UriUtilsCommon.h>
+#include <aknnavi.h>
+#include <AiwGenericParam.h>
+#include <AknDef.h>
+#include <DocumentHandler.h>
+#include <SysUtil.h>
+
+#ifdef BRDO_APP_GALLERY_SUPPORTED_FF
+#include <MGXFileManagerFactory.h>
+#include <CMGXFileManager.h>
+#endif
+
+#include <browserplugininterface.h>
+#include <oommonitorplugin.h>
+
+#include <browseroverriddensettings.h>
+#include "BrowserLauncherService.h"
+
+#include "cookiemanagerclient.h"
+
+#ifdef __SERIES60_HELP
+#include <hlplch.h>
+#endif //__SERIES60_HELP
+
+#include "BrowserAppDocument.h"
+#include <downloadedcontenthandler.h>
+#include "BrowserBmOTABinSender.h"
+#include "BrowserCommandLineParser.h"
+#include "BrowserApplication.h"
+#include "BrowserContentView.h"
+#include "BrowserContentViewContainer.h"
+#include "BrowserContentViewToolbar.h"
+#include "BrowserBookmarksView.h"
+#include "SettingsView.h"
+#include "BrowserWindowSelectionView.h"
+#include "BrowserInitialView.h"
+#include "CommonConstants.h"
+#include "BrowserDialogs.h"
+#include "BrowserDisplay.h"
+#include "BrowserCommsModel.h"
+#include "BrowserUtil.h"
+#include "BrowserPreferences.h"
+#include "SessionAndSecurity.h"
+#include "BrowserUIVariant.hrh"
+#include "BrowserWindowQueue.h"
+#include "Logger.h"
+#include <data_caging_path_literals.hrh>
+
+#include <brctldefs.h>
+#include <browserdialogsprovider.h>
+#include "BrowserSoftkeysObserver.h"
+#include "BrowserLoadObserver.h"
+#include "BrowserSpecialLoadObserver.h"
+#include "BrowserAsyncExit.h"
+#include "CommonConstants.h"
+
+
+// Dialogs Provider
+#include <browserdialogsproviderobserver.h>
+#include <brctlinterface.h>
+#include <browserdialogsprovider.h>
+
+// Multiple Windows
+#include "BrowserPopupEngine.h"
+#include "BrowserDialogsProviderProxy.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "AknInfoPopupNoteController.h"
+
+#include "BrowserAppUi.h"
+
+#include "BrowserPushMtmObserver.h"
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+#include <iaupdate.h>
+#include <iaupdateparameters.h>
+#include <iaupdateresult.h>
+#endif
+
+//CONSTANTS
+const TUint KBookmarkId = 1;
+const TUint KUrlId = 4;
+_LIT8 ( KLongZeroIdString, "5" );
+const TUint KFolderId = 6;
+const TUint KLaunchFeeds = 7;
+
+const TInt KMaxNumOfOpenedWindows = 5;
+const TInt KMinNumOfOpenedWindows = 2; // must allow at least 2 windows for most use cases
+
+const TUint KDot('.');
+const TUint KSlash('/');
+_LIT( KDefaultSchema, "http://" );
+const TInt KDefaultSchemaLength = 7;
+
+const TInt KMinimumCDriveDiskSpace = 512 * 1024;
+
+const TInt KRetryConnectivityTimeout( 2*1000*1000 ); // 2 seconds
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+const TUint KBrowser8xUID = 0x200267CC;
+_LIT( KUpdateFileName, "lastupdatechecked.txt" );
+const TInt64 KMaxTimeToPostponeUpdate = 604800000000;
+#endif
+
+//Following array stores Uids for external applications.
+//This can be appended. This is used in HandleMessageL to enable Single Window browsing.
+static TInt mArrayOfExternalAppUid[] = { 0x2001f3a9, 0x200159D0};
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CBrowserAppUi()
+// -----------------------------------------------------------------------------
+//
+CBrowserAppUi::CBrowserAppUi():
+iCalledFromAnotherApp( EFalse ),
+iIsForeground( EFalse ),
+iLastViewId( KUidBrowserNullViewId ),
+iExitInProgress( EFalse ),
+iShutdownRequested( EFalse ),
+iParametrizedLaunchInProgress( 0 ),
+iExitFromEmbeddedMode( EFalse ),
+iLongZeroPressed( EFalse ),
+iStartedUp( EFalse ),
+iFeatureManager( EFalse ),
+iUserExit( EFalse ),
+iPgNotFound( EFalse ),
+iOverriddenLaunchContextId( EBrowserContextIdNormal ),
+iBrowserAlreadyRunning (EFalse),
+iSameWinApp( EFalse ),
+iFeedsClientUtilities( 0 )
+ {
+ iViewToBeActivatedIfNeeded.iUid = 0;
+ iViewToReturnOnClose.iUid = 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::~CBrowserAppUi()
+// -----------------------------------------------------------------------------
+//
+CBrowserAppUi::~CBrowserAppUi()
+ {
+ LOG_ENTERFN("CBrowserAppUi::~CBrowserAppUi");
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ delete iDelayedUpdate;
+ iFs.Close();
+#endif
+
+ SetExitInProgress( ETrue );
+ if(iBrowserAsyncExit)
+ {
+ iBrowserAsyncExit->Cancel();
+ }
+ if(iIdle)
+ {
+ iIdle->Cancel();
+ }
+
+
+ if( iFeatureManager )
+ {
+ FeatureManager::UnInitializeLib();
+ iFeatureManager = EFalse;
+ }
+
+ //
+ delete iPushMtmObserver;
+
+#ifdef __RSS_FEEDS
+ delete iFeedsClientUtilities;
+ LOG_WRITE( "iFeedsClientUtilities deleted" );
+#endif //__RSS_FEEDS
+
+ delete iPopupEngine;
+ LOG_WRITE(" iPopupEngine deleted.");
+
+ // set user exit for 'save launch param' command handling
+ if ( iWindowManager )
+ {
+ iWindowManager->SetUserExit( iUserExit );
+ }
+ delete iWindowManager;
+ LOG_WRITE( " iWindowManager deleted" );
+
+#ifdef BRDO_OCC_ENABLED_FF
+ if(iRetryConnectivity)
+ iRetryConnectivity->Cancel();
+
+ delete iRetryConnectivity;
+ iRetryConnectivity = NULL;
+#endif
+
+ // Delete the inetconman after deleting window manager
+ CInternetConnectionManager* inetconman = (CInternetConnectionManager*)iConnection;
+ delete inetconman;
+ LOG_WRITE( " inetconman deleted" );
+ delete iConnStageNotifier;
+ LOG_WRITE( " iConnStageNotifier deleted" );
+
+ delete iPreferences;
+ LOG_WRITE( " iPreferences deleted" );
+ delete iCommsModel;
+ LOG_WRITE( " iCommsModel deleted" );
+
+ delete iLateSendUi;
+ LOG_WRITE( " iLateSendUi deleted" );
+
+ delete iSender;
+ LOG_WRITE( " iSender deleted" );
+
+ delete iIdle;
+ LOG_WRITE( " iIdle deleted" );
+
+ delete iRecentUrlStore;
+ LOG_WRITE( " iRecentUrlStore deleted" );
+
+ if ( iDoorObserver )
+ {
+ iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::ENoChanges);
+ LOG_WRITE( " NotifyExit deleted" );
+ }
+ delete iDialogsProvider;
+ LOG_WRITE( " iDialogsProvider deleted" );
+
+ TBool isStandAlone = !IsEmbeddedModeOn();
+ LOG_WRITE_FORMAT( " isStandAlone: %d", isStandAlone );
+
+ delete iBrowserAsyncExit;
+ LOG_WRITE( " iBrowserAsyncExit deleted" );
+
+ iFavouritesSess.Close();
+ LOG_WRITE( " iFavouritesSess.Close() deleted" );
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ CleanUpdateParams();
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ConstructL()
+ {
+ LOG_CREATE;
+ LOG_ENTERFN( "CBrowserAppUi::ConstructL" );
+PERFLOG_CREATE;
+PERFLOG_LOCAL_INIT;
+PERFLOG_STOPWATCH_START;
+
+
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible);
+#else
+ BaseConstructL( EAknEnableSkin | EAknEnableMSK );
+#endif
+
+
+ if ( !IsEmbeddedModeOn( ) )
+ {
+ // This is for handling low phone memory (c:) condition. Just leave in case phone memory is not sufficient.
+ TBool lowdisk = SysUtil::DiskSpaceBelowCriticalLevelL(&(CCoeEnv::Static()->FsSession()), KMinimumCDriveDiskSpace, EDriveC );
+ if (lowdisk) User::Leave(KErrDiskFull);
+
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ InitBookmarksL();
+#else
+ InitBrowserL();
+#endif
+ LOG_WRITE( "Browser started standalone" );
+ }
+ else
+ {
+ iStartedUp = EFalse;
+ LOG_WRITE( "Browser started embedded" );
+ }
+PERFLOG_STOP_WRITE("BrowserUI::ConstructL");
+
+ }
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+// ---------------------------------------------------------
+// CBrowserAppUi::CheckUpdatesL
+// ---------------------------------------------------------
+void CBrowserAppUi::CheckUpdatesL()
+ {
+ LOG_ENTERFN("CBrowserAppUi::CheckUpdatesL");
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() entering" );
+ User::LeaveIfError(iFs.Connect());
+ if ( FeatureManager::FeatureSupported( KFeatureIdIAUpdate ) )
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() IAD Update supported" );
+ TRAP_IGNORE( iUpdate = CIAUpdate::NewL( *this ) );
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() IAD Update Client Created" );
+ if ( iUpdate )
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() creating IAD Update paramentes" );
+ iParameters = CIAUpdateParameters::NewL();
+ // Search for updates using SIS package UID
+ iParameters->SetUid( TUid::Uid( KBrowser8xUID ) );
+ //check the updates
+ iUpdate->CheckUpdates( *iParameters );
+ }
+ }
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() exiting" );
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::CheckUpdatesComplete
+// rest of the details commented in the header
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::CheckUpdatesComplete( TInt aErrorCode, TInt aAvailableUpdates )
+ {
+ LOG_ENTERFN("CBrowserAppUi::CheckUpdatesComplete");
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - Entry" );
+
+ TBool result = EFalse;
+ TBool showDialog = EFalse;
+
+ if ( aErrorCode == KErrNone )
+ {
+ if ( aAvailableUpdates > 0 )
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update available" );
+ //Check if the file is available in folder or not
+ if(CheckUpdateFileAvailable())
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update file available" );
+ TTime timenow;
+ timenow.HomeTime();
+ TInt64 time = timenow.Int64();
+ TInt64 dataValue = ReadUpdateFile();
+ //If the diference of the current time and the Previous Check time is more than 1 Week
+ //then show the dialog
+ if((time - dataValue)>KMaxTimeToPostponeUpdate)
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - diference of the current time and the time available in th file is more than 7 days" );
+ showDialog = ETrue;
+ }
+ }
+ else
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update file is not available" );
+ showDialog = ETrue;
+ }
+
+ if(showDialog)
+ {
+ HBufC* message = StringLoader::LoadLC(R_INSTALL_ADDON_BROWSER);
+ HBufC* lsc_now = StringLoader::LoadLC(R_INSTALL_BROWSER_NOW);
+ HBufC* rsc_later = StringLoader::LoadLC(R_INSTALL_BROWSER_LATER);
+
+ TRAPD(err, result = iDialogsProvider->DialogConfirmL(_L(""),
+ *message,
+ *lsc_now,
+ *rsc_later));
+
+ CleanupStack::PopAndDestroy(3); //message, lsc_now, rsc_later
+
+ if (err != KErrNone)
+ {
+ return ;
+ }
+ if ( result ) // user selected NOW
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - if file exists, just delete it." );
+ // if file exists, just delete it.
+ DeleteUpdateFile();
+ iUpdate->ShowUpdates( *iParameters );
+ }
+ if ( !result ) // user selected LATER
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - create the file and store the current time." );
+ //create the file and store the current time.
+ WriteUpdateFile();
+ }
+ }
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update available" );
+ }
+ else
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - no update available" );
+ // The answer was 'Later'. CIAUpdate object could be deleted
+ CleanUpdateParams();
+ }
+ }
+ LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CleanUpdateParams
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::CleanUpdateParams()
+ {
+ LOG_ENTERFN("CBrowserAppUi::CleanUpdateParams");
+ LOG_WRITE( "CBrowserAppUi::CleanUpdateParams() entering" );
+ if(iUpdate)
+ {
+ delete iUpdate;
+ iUpdate = NULL;
+ }
+ if(iParameters)
+ {
+ delete iParameters;
+ iParameters = NULL;
+ }
+ LOG_WRITE( "CBrowserAppUi::CleanUpdateParams() exiting" );
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::UpdateComplete
+// rest of the details commented in the header
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::UpdateComplete( TInt aErrorCode, CIAUpdateResult* aResult )
+ {
+ LOG_ENTERFN("CBrowserAppUi::UpdateComplete");
+ LOG_WRITE( "CBrowserAppUi::UpdateComplete - Entry" );
+ delete aResult; // Ownership was transferred, so this must be deleted by the client
+ CleanUpdateParams();
+ LOG_WRITE( "CBrowserAppUi::UpdateComplete - Exit" );
+ }
+#endif
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::InitBookmarksL()
+// Initialize only bookmarks view related dependencies here.
+// Note - Do not add unnecessary code here, it increases startup time for bookmarks view.
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::InitBookmarksL()
+ {
+ //New constructor that just replaces the default primary storage size with this one.
+ iRecentUrlStore = CRecentUrlStore::NewL();
+
+ // Init CommsModel
+ iCommsModel = CBrowserCommsModel::NewL();
+
+ // check if it can be delayed ??
+#ifdef BRDO_OCC_ENABLED_FF
+ iConnection = CInternetConnectionManager::NewL( &iCommsModel->CommsDb(), ETrue );
+#else
+ iConnection = CInternetConnectionManager::NewL( &iCommsModel->CommsDb(), EFalse );
+#endif
+
+ // Creating object to hold application settings
+ CBrowserAppDocument* doc = STATIC_CAST(CBrowserAppDocument*, Document());
+ iPreferences = CBrowserPreferences::NewL( *iCommsModel, *this, doc->GetOverriddenSettings());
+
+ // Create bookmarkview
+ CBrowserBookmarksView* bookmarksView = NULL;
+ TInt folderUid = doc->GetFolderToOpen();
+ if ( IsEmbeddedModeOn() && folderUid!= KFavouritesRootUid)
+ {
+ bookmarksView = CBrowserBookmarksView::NewLC( *this, *iRecentUrlStore, folderUid );
+ }
+ else
+ {
+ bookmarksView = CBrowserBookmarksView::NewLC( *this, *iRecentUrlStore );
+ }
+
+ iBookmarksView = bookmarksView;
+ AddViewL( bookmarksView ); // transfer ownership to CAknViewAppUi
+ CleanupStack::Pop(); // bookmarksView
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CompleteDelayedInit()
+// Delayed (async) init callback. This method can be invoked explicitly in case
+// some early startup cases fail if Browser has not initialized fully. No harm
+// if called multiple times since there is check in the beginning of thsi function.
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::CompleteDelayedInit()
+ {
+ // Should not be called for other that 9.2 onward devices
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ if ( iStartedUp )
+ return EFalse; // no need to re-invoke automatically
+ // complete initialization
+ TRAP_IGNORE(DelayedInitL());
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ // complete the IAD check asynchronously
+ iDelayedUpdate = CIdle::NewL( CActive::EPriorityIdle );
+ iDelayedUpdate->Start(TCallBack( CompleteIADUpdateCallback, this ));
+#endif
+#endif
+
+ return EFalse; // no need to re-invoke automatically
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::DelayedInitL()
+// Delayed (Async) initialization - whatever remains after InitBookmarksL(), do it here.
+// Note: - Do not add unnecessary code here, it increases startup time for contenview.
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::DelayedInitL()
+ {
+ LOG_ENTERFN("CBrowserAppUi::DelayedInitL");
+
+ // Create Favengine session
+ User::LeaveIfError( iFavouritesSess.Connect() );
+
+ // Init FeatureManager
+ FeatureManager::InitializeLibL();
+ iFeatureManager = ETrue;
+
+ // check flash present
+ iFlashPresent = CheckFlashPresent();
+
+ // this is required, browser's connection oberver should be hit first.
+ // (incase of netscape plgins, transactions will be closed.)
+ iConnStageNotifier = CConnectionStageNotifierWCB::NewL();
+ iConnStageNotifier->SetPriority(CActive::EPriorityHigh);
+
+ // Starts a background processing, so it must be started early, to get
+ // finished before the first send operation! Or it must be synchronized!
+ iLateSendUi = CIdle::NewL( CActive::EPriorityIdle );
+ iLateSendUi ->Start( TCallBack( DelayedSendUiConstructL, this ) );
+
+ iHTTPSecurityIndicatorSupressed = iPreferences->HttpSecurityWarningsStatSupressed();
+
+ // set AP to be a default one (for Push messages)
+ SetRequestedAP( Preferences().DefaultAccessPoint() );
+
+ // Create ContentView
+ TRect rect = ClientRect();
+ CBrowserContentView* contentView = CBrowserContentView::NewLC( *this, rect );
+ AddViewL( contentView ); // transfer ownership to CAknViewAppUi
+ CleanupStack::Pop(); // contentView
+
+ // proxy will handle dialog events through load observer
+ iDialogsProvider = CBrowserDialogsProvider::NewL( NULL);
+
+#ifdef __RSS_FEEDS
+ iFeedsClientUtilities = CFeedsClientUtilities::NewL( *this, *this );
+ BROWSER_LOG( ( _L("Feeds up.") ) );
+#endif //__RSS_FEEDS
+
+ // Is Multiple Window feature suported?
+ if ( Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) )
+ {
+ if (Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))//midrange
+ {
+ iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, KMinNumOfOpenedWindows );
+ }
+ else
+ {
+ iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, KMaxNumOfOpenedWindows );
+ }
+ LOG_WRITE_FORMAT("WindowManager Up. Max windows number. %d", KMaxNumOfOpenedWindows );
+ }
+ else
+ {
+ iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, KMinNumOfOpenedWindows );
+ BROWSER_LOG( ( _L( "WindowManager Up. MWs not supported." ) ) );
+ }
+
+ contentView->SetZoomLevelL();
+ BrCtlInterface().AddLoadEventObserverL(iBookmarksView);
+
+ // create settings view
+ CBrowserSettingsView* settingsView = CBrowserSettingsView::NewLC( *this );
+ AddViewL( settingsView ); // transfer ownership to CAknViewAppUi
+ CleanupStack::Pop(); // settingsView
+ BROWSER_LOG( ( _L( "SettingsView up" ) ) );
+
+ // window selection view
+ CBrowserWindowSelectionView* windowSelectionView = CBrowserWindowSelectionView::NewLC( *this );
+ AddViewL( windowSelectionView ); // transfer ownership to CAknViewAppUi
+ CleanupStack::Pop(); // windowSelectionView
+ BROWSER_LOG( ( _L( "windowSelectionView up" ) ) );
+
+ // Create asyncronous object to call when exit requires it.
+ iBrowserAsyncExit = CBrowserAsyncExit::NewL( this );
+ iIdle = CIdle::NewL( CActive::EPriorityIdle );
+
+ iPushMtmObserver = CBrowserPushMtmObserver::NewL( this );
+ iPushMtmObserver->StartObserver();
+
+#ifdef BRDO_OCC_ENABLED_FF
+ iRetryConnectivity = CPeriodic::NewL(CActive::EPriorityStandard);
+#endif
+
+ // Create two Panes of CBrowserContentViewContainer
+ CBrowserGotoPane* gotoPane = CBrowserGotoPane::NewL( contentView->Container(),
+ EMbmAvkonQgn_indi_find_goto,
+ EMbmAvkonQgn_indi_find_goto_mask,
+ ETrue,
+ contentView );
+
+ // Create the find pane with magnifier glass icon, and
+ // without adaptive popup list...
+ CBrowserGotoPane* findKeywordPane = CBrowserGotoPane::NewL( contentView->Container(),
+ EMbmAvkonQgn_indi_find_glass,
+ EMbmAvkonQgn_indi_find_glass_mask,
+ EFalse,
+ contentView,
+ ETrue );
+ contentView->Container()->SetGotoPane(gotoPane);
+ contentView->Container()->SetFindKeywordPane(findKeywordPane);
+ //contentView->Container()->SetRect( rect ); // causes suncRepaint
+ contentView->Container()->GotoPane()->SetGPObserver(contentView);
+ contentView->Container()->FindKeywordPane()->SetGPObserver(contentView);
+ contentView->Container()->FindKeywordPane()->SetOrdinalPosition( 0 );
+ contentView->Container()->GotoPane()->SetOrdinalPosition( 0 );
+
+ iStartedUp = ETrue;
+ iSecureSiteVisited = EFalse;
+
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ if(LastActiveViewId() == KUidBrowserBookmarksViewId)
+ {
+ iBookmarksView->CheckForDownloads();
+ iBookmarksView->UpdateFavIconsL();
+ }
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::InitBrowserL() - THIS METHOD IS NOT USED FOR NORMAL STARTUP
+// This method is just for supporting Browser initialization if launched in Embedded mode
+// Normal initialization if split in BookmarksInit() and DelayedInit(). iStartedUp is FALSE
+// if BRowser has not initialized or partially initialized.
+// NOTE: DO NOT ADD ANY CODE HERE. IT IS JUST A WRAPPER.
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::InitBrowserL()
+ {
+ // Bookmarks initialization
+ InitBookmarksL();
+
+ // 2nd part of initialization
+ DelayedInitL();
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+ // complete the IAD check asynchronously
+ if(!IsEmbeddedModeOn())
+ {
+ iDelayedUpdate = CIdle::NewL( CActive::EPriorityIdle );
+ iDelayedUpdate->Start(TCallBack( CompleteIADUpdateCallback, this ));
+ }
+#endif
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ProcessCommandL(TInt aCommand)
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ProcessCommandL(TInt aCommand)
+ {
+ MEikAppUiFactory* appUiFactory = (iEikonEnv)->AppUiFactory();
+ if (appUiFactory->MenuBar())
+ {
+ StopDisplayingMenuBar();
+ }
+ CAknViewAppUi::ProcessCommandL(aCommand);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::HandleCommandL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::HandleCommandL(TInt aCommand)
+ {
+ // Default handling for all the thingies.
+ switch (aCommand)
+ {
+ case EEikCmdExit:
+ {
+ ExitBrowser ( IsAppShutterActive() );
+ break;
+ }
+ case EAknSoftkeyExit:// closes the whole application chain if embedded browser
+ case EAknCmdExit:
+ {
+ if ( IsEmbeddedModeOn() )
+ {
+ CAknEnv::RunAppShutter();
+ break;
+ }
+ else
+ {
+ ExitBrowser ( ETrue ) ;
+ break;
+ }
+ }
+ //Fix for TSW error ICHV-75UFKZ
+ case EWmlCmdUserExit://closes the current browser instance only
+ case EWmlCmdCloseBrowser:
+ {
+ ExitBrowser ( ETrue );
+ break;
+ }
+ case EWmlCmdChangeConnection :
+ {
+ ChangeConnectionL();
+ break;
+ }
+ case EWmlCmdPreferences:
+ {
+ SetViewToBeActivatedIfNeededL( KUidBrowserSettingsViewId );
+ break;
+ }
+ case EWmlCmdPreferencesToolbar:
+ {
+ SetViewToBeActivatedIfNeededL( KUidBrowserSettingsViewId, KUidSettingsGotoToolbarGroup.iUid );
+ break;
+ }
+ case EWmlCmdFavourites:
+ {
+ SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ break;
+ }
+ case EWmlCmdSearchWeb:
+ {
+ LoadSearchPageL();
+ break;
+ }
+ case EWmlCmdReload:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandReload +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+ }
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ case EWmlCmdSetAsHomePage:
+ {
+ ContentView()->HandleCommandL(EWmlCmdSetAsHomePage);
+ break;
+ }
+#endif
+ case EAknSoftkeyBack:
+ case EWmlCmdBack:
+ {
+ HistoryLoadPrevious();
+ break;
+ }
+ case EWmlCmdBackToFeedsView:
+ {
+ //Note: iPreviousView in this case will always be one of the Feeds view.
+ //In general iPreviousView holds the UID of the previous view.
+ SetViewToBeActivatedIfNeededL( iPreviousView );
+ break;
+ }
+ case EWmlCmdClearTheCache:
+ {
+ ClearTheCacheL(ETrue, ETrue);
+ break;
+ }
+ case EWmlCmdDeleteCookies:
+ {
+ DeleteCookiesL();
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_OK_NOTE, R_QTN_BROWSER_NOTE_COOKIES_DELETED );
+ break;
+ }
+
+ case EWmlCmdClearAllPrivacy:
+ {
+ ClearAllPrivacyL();
+ break;
+ }
+
+ case EWmlCmdClearHistory:
+ {
+ ClearHistoryWithPromptL();
+ break;
+ }
+
+ case EWmlCmdClearFormAndPasswd:
+ {
+ ClearFormAndPasswdDataL(ETrue);
+ break;
+ }
+
+ case EWmlCmdLaunchHomePage:
+ {
+ if (!IsLaunchHomePageDimmedL())
+ {
+ LaunchHomePageL( /* EFalse */ );
+ }
+ break;
+ }
+ case EWmlCmdDisconnect :
+ {
+ DisconnectL();
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_INFO_NOTE, R_WML_DISCONNECT );
+ break;
+ }
+ case EWmlCmdCancelFetch:
+ {
+ if (SpecialLoadObserver().IsConnectionStarted()) // If Connection request is in processing
+ { // try to Cancel.
+ SpecialLoadObserver().CancelConnection();
+ Connection().Disconnect();
+ }
+ else
+ {
+ CancelFetch( ETrue );
+ }
+ break;
+ }
+ case EWmlCmdPageInfo:
+ {
+ CSessionAndSecurity* security = CSessionAndSecurity::NewLC(*this);
+ security->ShowPageInfoL();
+ CleanupStack::PopAndDestroy(); // security
+ break;
+ }
+ case EWmlCmdInfoSession:
+ {
+ CSessionAndSecurity* session = CSessionAndSecurity::NewLC(*this);
+ session->ShowSessionInfoL();
+ CleanupStack::PopAndDestroy(); // session
+ break;
+ }
+ case EWmlCmdInfoSecurity:
+ {
+ CSessionAndSecurity* security = CSessionAndSecurity::NewLC(*this);
+ security->ShowSecurityInfoL();
+ CleanupStack::PopAndDestroy(); // security
+ break;
+ }
+ // browser engine specific command
+#ifdef __SERIES60_HELP
+
+ case EAknCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL
+ ( iEikonEnv->WsSession(), AppHelpContextL() );
+ break;
+ }
+
+#endif //__SERIES60_HELP
+
+ case EWmlCmdForward:
+ {
+ HistoryLoadNext();
+ break;
+ }
+
+ case EWmlCmdRotateDisplay:
+ {
+ if ( Orientation() == EAppUiOrientationPortrait )
+ {
+ SetOrientationL(EAppUiOrientationLandscape);
+ }
+ else if (Orientation() == EAppUiOrientationLandscape)
+ {
+ SetOrientationL(EAppUiOrientationPortrait);
+ }
+ else // EAppUiOrientationUnspecified
+ {
+ TRect rect = ApplicationRect();
+ TInt width = rect.Width();
+ TInt height = rect.Height();
+
+ if (width > height)
+ {
+ SetOrientationL(EAppUiOrientationPortrait);
+ }
+ else
+ {
+ SetOrientationL(EAppUiOrientationLandscape);
+ }
+ }
+ if(ContentView()->KeymapIsUp())
+ {
+ ContentView()->RedrawKeymap();
+ }
+ break;
+ }
+
+ case EWmlCmdAboutProduct:
+ {
+ // get version info from browser control and display it
+ ShowNameAndVersionL();
+ break;
+ }
+ case EWmlCmdProductUpdate:
+ {
+ /*if(!iAppUpdate)
+ {
+ iAppUpdate = CBrowserAppUpdate::NewL();
+ }
+ iAppUpdate->CheckUpdates();*/
+ break;
+ }
+
+ //=====================================================================
+ // Multiple Windows Support
+ //
+ case EWmlCmdSwitchWindow:
+ {
+ if(WindowMgr().WindowCount() > 1)
+ {
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ // use switch window tab view if pageoverview bitmaps are available
+ if (Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage )
+ || Preferences().UiLocalFeatureSupported( KBrowserGraphicalHistory ))
+#else
+ // use switch window tab view if pageoverview bitmaps are available
+ if (Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ))
+#endif
+ {
+ SetViewToBeActivatedIfNeededL( KUidBrowserWindowSelectionViewId );
+ }
+ else
+ {
+ SwitchWindowL();
+ }
+ }
+ break;
+ }
+ case EWmlCmdCloseWindow:
+ {
+ if ( IsEmbeddedInOperatorMenu() )
+ {
+ ExitBrowser( ETrue );
+ }
+ else
+ {
+ CloseWindowL();
+ }
+ break;
+ }
+ case EWmlCmdAllowPopups:
+ {
+ // Add url to whitelist
+ HBufC* url( WindowMgr().CurrentWindow()->BrCtlInterface().
+ PageInfoLC( TBrCtlDefs::EPageInfoUrl ) );
+ PopupEngine().AddUrlToWhiteListL( *url );
+ CleanupStack::PopAndDestroy( url );
+ break;
+ }
+ case EWmlCmdBlockPopups:
+ {
+ // Remove from whitelist
+ HBufC* url( WindowMgr().CurrentWindow()->BrCtlInterface().
+ PageInfoLC( TBrCtlDefs::EPageInfoUrl ) );
+ PopupEngine().RemoveUrlFromWhiteListL( *url );
+ CleanupStack::PopAndDestroy( url );
+ break;
+ }
+ case EWmlCmdShowAnchorHref:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandShowAnchorHref );
+ break;
+ }
+ case EWmlCmdSaveToGallery:
+ {
+ SaveFocusedImageToGalleryL();
+ break;
+ }
+ case EWmlCmdOpenToViewer:
+ {
+ TBrCtlImageCarrier* imageCarrier = BrCtlInterface().FocusedImageLC();
+ if (imageCarrier)
+ {
+ CArrayFixFlat<TBrCtlImageCarrier>* imageArray = new( ELeave ) CArrayFixFlat<TBrCtlImageCarrier>(1);
+ CleanupStack::PushL(imageArray);
+ imageArray->AppendL(*imageCarrier);
+ iDialogsProvider->DialogDisplayPageImagesL( *imageArray );
+ CleanupStack::PopAndDestroy(2); // imageArray, imageCarrier
+ }
+ break;
+ }
+ case EWmlCmdSaveUrlAsBookmark:
+ {
+ HBufC* url = BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoFocusedNodeUrl);
+ ContentView()->AddNewBookmarkL(EFalse, url);
+ CleanupStack::PopAndDestroy(); // url
+ break;
+ }
+ case EWmlCmdSmartLinkMakeCall:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandSmartLinkMakeCall );
+ break;
+ }
+ case EWmlCmdSmartLinkSendEmail:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandSmartLinkSendEmail );
+ break;
+ }
+ case EWmlCmdSmartLinkSendSms:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandSmartLinkSendMessage );
+ break;
+ }
+ case EWmlCmdSmartLinkAddToContacts:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandSmartLinkAddToPhoneBook );
+ break;
+ }
+ case EWmlCmdLoadFocusedImage:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandLoadFocusedImage );
+ break;
+ }
+ case EWmlCmdLoadImagesOnly:
+ {
+ iPreferences->SetAutoLoadContentL(EWmlSettingsAutoloadImagesNoFlash);
+ break;
+ }
+ case EWmlCmdLoadImagesAndFlash:
+ {
+ iPreferences->SetAutoLoadContentL(EWmlSettingsAutoloadAll);
+ break;
+ }
+ case EWmlCmdOneStepBack:
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandOneStepBack );
+ break;
+ }
+ case EEikCmdEditPaste:
+ {
+ TKeyEvent keyEvent;
+ keyEvent.iCode = EKeyF18; //member of TKeyCode
+ keyEvent.iScanCode = EEikCmdEditPaste;
+ keyEvent.iModifiers = EModifierCtrl;
+ keyEvent.iRepeats = 0;
+ TRAP_IGNORE( BrCtlInterface().OfferKeyEventL(keyEvent, EEventKey));
+ }
+ break;
+ //=====================================================================
+ default:
+ {
+ if( iStartedUp )
+ {
+ // pass to Browser Control
+ BrCtlInterface().HandleCommandL( aCommand );
+ }
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ActiveView()
+// -----------------------------------------------------------------------------
+//
+CBrowserViewBase* CBrowserAppUi::ActiveView()
+ {
+ TVwsViewId activeViewId;
+ TInt err = GetActiveViewId( activeViewId );
+
+ if ( !err )
+ {
+ return STATIC_CAST( CBrowserViewBase*, View(activeViewId.iViewUid) );
+ }
+ else
+ {
+ //We should not panic
+ //On 3.0 wk40 it was observed that GetActiveViewId returned with KErrNotFound
+ //in case Browser was in the background
+ //Symbian error?
+ return NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SetRequestedAP()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetRequestedAP( TInt aAp )
+ {
+ iRequestedAp = aAp;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::IsPageLoaded()
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsPageLoaded()
+ {
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ if(!iStartedUp) // ContentView/WindowMgr is not yet up => no page loaded
+ return EFalse;
+#endif
+
+ TBool ret( EFalse );
+ TInt winCount( WindowMgr().WindowCount() );
+
+ // at least 2 window -> there is a page loaded
+ if( winCount > 1 )
+ {
+ ret = ETrue;
+ }
+ // 1 window with a loaded content
+ else if( winCount == 1 )
+ {
+ // This checks to see if a dialog is launched and if that is the case, then
+ // the current window is being used, hence returning true.
+ if( iDialogsProvider->IsDialogLaunched() )
+ {
+ ret = ETrue;
+ }
+ else
+ {
+ ret = WindowMgr().IsContentExist();
+ }
+ }
+ // else (winCount == 0), no content view -> no page loaded
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::Fetching()
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::Fetching() const
+ {
+ // TO DO:
+ // use load obs., remove ifetchstate from this class and use from loadobs.
+ // iLoadState
+ //return ( iFetchState == MFetchObserver::ELoadStart );
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ if (!iStartedUp) // ContentView is not yet started up, so we are not fetching
+ return EFalse;
+ else
+#endif
+ return ( LoadObserver().LoadState() != CBrowserLoadObserver::ELoadStateIdle );
+ }
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ContentDisplayed()
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::ContentDisplayed() const
+ {
+ return ( LoadObserver().ContentDisplayed() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SetContentDisplayed()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetContentDisplayed(TBool aValue)
+ {
+ LoadObserver().SetContentDisplayed( aValue );
+ }
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::FetchBookmarkL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::FetchBookmarkL( TInt aBookmarkUid )
+ {
+ // complete initialization if not done yet, can happen if user selects
+ // a bookmark quickly after launch (within 1 second)
+ if ( !iStartedUp )
+ CompleteDelayedInit();
+
+ SetViewToReturnOnClose( KUidBrowserBookmarksViewId );
+ if ( aBookmarkUid == KFavouritesStartPageUid )
+ {
+ TUint defaultAp = Preferences().DefaultAccessPoint();
+ if ( defaultAp != KWmlNoDefaultAccessPoint ) // There is no access point defined
+ {
+ CApAccessPointItem* apItem = Preferences().AllPreferencesL().iDefaultAPDetails;
+ if ( apItem )
+ {
+ const HBufC* currentHP = apItem->ReadConstLongTextL( EApWapStartPage );
+ //TPtrC currentHP(apItem->StartPage()); // Get the start page of the access point.
+ TFavouritesWapAp accessPoint;
+
+ FetchL( *currentHP, KNullDesC, KNullDesC, accessPoint,
+ CBrowserLoadObserver::ELoadUrlTypeStartPage ); // Fetch the start page.
+ }
+ }
+ }
+ else
+ {
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open( iFavouritesSess, KBrowserBookmarks ) );
+ CleanupClosePushL<RFavouritesDb>( db );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ User::LeaveIfError( db.Get( aBookmarkUid, *item ) );
+
+ FetchBookmarkL( *item );
+ CleanupStack::PopAndDestroy( 2 ); // item, db
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::FetchBookmarkL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::FetchBookmarkL( const CFavouritesItem& aBookmarkItem )
+ {
+ // complete initialization if not done yet, can happen if user selects
+ // a bookmark quickly after launch (within 1 second)
+ if ( !iStartedUp )
+ CompleteDelayedInit();
+
+ SetViewToReturnOnClose( KUidBrowserBookmarksViewId );
+ if ( Util::CheckBookmarkApL( *this, aBookmarkItem.WapAp()) )
+ FetchL
+ (
+ aBookmarkItem.Url() ,
+ aBookmarkItem.UserName(),
+ aBookmarkItem.Password(),
+ aBookmarkItem.WapAp(),
+ CBrowserLoadObserver::ELoadUrlTypeOther
+ );
+ else
+ TBrowserDialogs::ErrorNoteL( R_WML_INVALID_AP );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SetViewToBeActivatedIfNeededL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetViewToBeActivatedIfNeededL( TUid aUid, TInt aMessageId )
+ {
+ CBrowserAppDocument* doc = STATIC_CAST(CBrowserAppDocument*, Document());
+
+ if((iCurrentView != aUid) && (aUid != KUidBrowserSettingsViewId))
+ {
+ iPreviousView = iCurrentView;
+ iCurrentView = aUid;
+ }
+
+ //Check view id validity first
+ if ( aUid == KUidBrowserNullViewId )
+ {
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ return;
+ }
+
+ if ( ( aUid != KUidBrowserContentViewId ) &&
+ ( LastActiveViewId() == KUidBrowserContentViewId ) )
+ {
+ ContentView()->SetFullScreenOffL();
+ }
+
+ if ( iWindowManager && iWindowManager->ContentView()->FullScreenMode() )
+ {
+ if ( aUid == KUidBrowserFeedsFeedViewId )
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase +
+ (TInt)TBrCtlDefs::ECommandLeaveFullscreenBrowsing );
+ }
+
+ else if ( aUid != KUidBrowserFeedsTopicViewId &&
+ aUid != KUidBrowserFeedsFolderViewId &&
+ aUid != KUidBrowserBookmarksViewId )
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase +
+ (TInt)TBrCtlDefs::ECommandEnterFullscreenBrowsing );
+ }
+ }
+
+
+ if ( iIsForeground )
+ {
+ if ( aUid == KUidBrowserSettingsViewId )
+ {
+ //complete initialisation
+ if( !iStartedUp )
+ CompleteDelayedInit();
+
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )
+ ->StatusPane();
+ sp->DrawNow();
+ }
+
+ ActivateLocalViewL( aUid, TUid::Uid( aMessageId ), KNullDesC8 );
+ }
+ else
+ {
+ iViewToBeActivatedIfNeeded = aUid;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::LastActiveViewId
+// -----------------------------------------------------------------------------
+//
+TUid CBrowserAppUi::LastActiveViewId() const
+ {
+ return iLastViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SetLastActiveViewId
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetLastActiveViewId( TUid aUid )
+ {
+LOG_ENTERFN("CBrowserAppUi::SetLastActiveViewId");
+ LOG_WRITE_FORMAT(" SetLastActiveViewId: %d", aUid);
+ iLastViewId = aUid;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ExitInProgress
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::ExitInProgress() const
+ {
+ return iExitInProgress;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ExitInProgress
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetExitInProgress( TBool aValue )
+ {
+ iExitInProgress = aValue;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::IsConnecting
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsConnecting() const
+ {
+ return ( LoadObserver().LoadState() != CBrowserLoadObserver::ELoadStateIdle );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::HandleForegroundEventL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::HandleForegroundEventL( TBool aForeground )
+ {
+ // Handle this event only if the browser is started up
+ iIsForeground = IsForeground();
+ if (!iStartedUp)
+ return;
+
+ if( iIsForeground )
+ {
+ if (iViewToBeActivatedIfNeeded.iUid)
+ {
+ ActivateLocalViewL( iViewToBeActivatedIfNeeded );
+ }
+ else
+ {
+ TVwsViewId activeViewId;
+ if( ( GetActiveViewId( activeViewId ) == KErrNone ) &&
+ ( LastActiveViewId() != activeViewId.iViewUid ) )
+ {
+ // LastActiveViewId() might return with 0!
+ TRAP_IGNORE( ActivateLocalViewL( LastActiveViewId() ) );
+ }
+ }
+ }
+ iViewToBeActivatedIfNeeded.iUid = 0;
+ CAknViewAppUi::HandleForegroundEventL( aForeground );
+
+ if( iIsForeground )
+ {
+ if ( Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen )
+ {
+ ContentView()->UpdateFullScreenL();
+ }
+
+ if( !Fetching() )
+ {
+ Display().StopProgressAnimationL();
+ }
+ }
+
+ if (iWindowManager)
+ {
+ iWindowManager->SendCommandToAllWindowsL( iIsForeground
+ ? (TInt)TBrCtlDefs::ECommandAppForeground + (TInt)TBrCtlDefs::ECommandIdBase
+ : (TInt)TBrCtlDefs::ECommandAppBackground + (TInt)TBrCtlDefs::ECommandIdBase);
+ }
+
+ // if browser comes to foreground and exit is requested,
+ // asyncronous exit is started
+ if( iIsForeground && iExitFromEmbeddedMode && !IsEmbeddedInOperatorMenu() )
+ {
+ iBrowserAsyncExit->Start();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::FetchL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::FetchL(
+ const TDesC& aUrl,
+ const TDesC& aUsername,
+ const TDesC& aPassword,
+ const TFavouritesWapAp& aAccessPoint,
+ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType )
+ {
+LOG_ENTERFN("CBrowserAppUi::FetchL");
+
+ // complete the initialization if not done yet
+ if(!iStartedUp)
+ CompleteDelayedInit();
+
+ // Let's cancel the previous fetch if any
+ if ( Fetching() )
+ {
+ CancelFetch();
+ }
+#ifndef __WINS__
+//Fix for bookmark specific access point
+ if( iConnection && iConnection->Connected() )
+ {
+ TUint32 passedIap( 0 );
+ if ( aAccessPoint.ApId() != KWmlNoDefaultAccessPoint )
+ {
+ passedIap = Util::IapIdFromWapIdL( *this, aAccessPoint.ApId());
+ BROWSER_LOG((_L("CBrowserAppUi::FetchL Passed Iap: %d"), passedIap));
+ TUint32 connectedAp = iConnection->CurrentAPId();
+ BROWSER_LOG((_L("CBrowserAppUi::FetchL Existing connected Iap: %d"), connectedAp));
+ if(passedIap != connectedAp)
+ {
+ StopConnectionObserving();
+ BROWSER_LOG((_L("CBrowserAppUi::FetchL Stopped the connection observation.")));
+ DisconnectL();
+ BROWSER_LOG((_L("CBrowserAppUi::FetchL Given iap and Connected iap are not same. Disconnected the existing connection.")));
+ }
+ }
+
+ }
+#endif // __WINS__
+ // iDoNotRestoreContentFlag = EFalse;
+
+ TInt toPop = 0;
+ TUriParser uriParser;
+ TInt err = uriParser.Parse(aUrl);
+ if ( !err && aUrl.Length() )
+ {
+ // check url for missing scheme and add default scheme if needed
+ HBufC* url = NULL;
+ HBufC* resultUrlBuf = NULL;
+ //find ://
+ TPtrC scheme = uriParser.Extract( EUriScheme );
+ // add http:// scheme as default if it is missing
+ if( scheme.Length() == 0 )
+ {
+ //put the "http://" schema before the string
+ url = HBufC::NewLC( aUrl.Length() + KDefaultSchemaLength );
+ url->Des().Copy( KDefaultSchema );
+ url->Des().Append( aUrl );
+ ++toPop; // url
+ resultUrlBuf = CreateFullUrlLC( url->Des(), aUsername, aPassword );
+ LogRequestedPageToRecentUrlL( url->Des() );
+ }
+ else
+ {
+ resultUrlBuf = CreateFullUrlLC( aUrl, aUsername, aPassword );
+ LogRequestedPageToRecentUrlL( aUrl );
+ }
+ ++toPop; // resultUrlBuf
+
+
+ if ( aAccessPoint.IsNull() || aAccessPoint.IsDefault() || (!Util::IsValidAPFromParamL( *this, aAccessPoint.ApId() )) )
+ {
+ if ( (Preferences().AccessPointSelectionMode() == EConnectionMethod) ||
+ (Preferences().AccessPointSelectionMode() == EAlwaysAsk) )
+ {
+ iRequestedAp = Preferences().DefaultAccessPoint();
+ }
+ else if ( Preferences().AccessPointSelectionMode() == EDestination )
+ {
+ // for bug fix MLAN-7EKFV4
+ iRequestedAp = KWmlNoDefaultAccessPoint;
+ }
+ }
+ else
+ {
+ iRequestedAp = aAccessPoint.ApId();
+ }
+#ifndef __WINSCW__ //On WINS we don't want this dlg to come up
+ //as the ConnMan will present us with a selection
+ BROWSER_LOG( ( _L( "requestedAp: %d" ), iRequestedAp ) );
+ // it's ok to assign in the case of EDest, since CBrCtl doesn't use the apId passed in LoadUrlL()
+ TUint32 IAPid = iRequestedAp;
+ TUint32 defaultSnap = iPreferences->DefaultSnapId();
+#ifndef BRDO_OCC_ENABLED_FF
+ // if no AP or SNAP is defined, define it
+ if( (iRequestedAp == KWmlNoDefaultAccessPoint && iPreferences->AccessPointSelectionMode() == EConnectionMethod) ||
+ (defaultSnap == KWmlNoDefaultSnapId && iPreferences->AccessPointSelectionMode() == EDestination) )
+ {
+ StartPreferencesViewL( EShowAlwaysAsk | EShowDestinations | EShowConnectionMethods );
+ }
+ //Check AP and snap if it is still not defined, set always ask mode this case
+ if ( (iRequestedAp == KWmlNoDefaultAccessPoint && iPreferences->AccessPointSelectionMode() == EConnectionMethod) ||
+ (defaultSnap == KWmlNoDefaultSnapId && iPreferences->AccessPointSelectionMode() == EDestination) )
+ {
+ BROWSER_LOG( ( _L( "AP or SNAP was not added set to Always ask mode" ) ) );
+ iPreferences->SetAccessPointSelectionModeL(EAlwaysAsk );
+ }
+ if ( iRequestedAp != KWmlNoDefaultAccessPoint )
+ {
+ BROWSER_LOG( ( _L( "AP added" ) ) );
+ IAPid = Util::IapIdFromWapIdL( *this, iRequestedAp ); // Get currently active ap
+ BROWSER_LOG( ( _L( "Access point: %d" ), IAPid ) );
+ }
+
+#endif // BRDO_OCC_ENABLED_FF
+#else //we can use any numbers here
+ // alr: snap on emulator should not exist; use cm mode instead?
+ iRequestedAp = 2;
+ TUint32 IAPid = 2;
+#endif //__WINSCW__
+
+ err = KErrNone;
+ BROWSER_LOG( ( _L( "Load the URL" ) ) );
+
+ if ( iPreferences->SearchFeature() || iPreferences->ServiceFeature())
+ {
+ iSpecialSchemeinAddress = EFalse;
+
+ HBufC* searchScheme = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr searchSchemePtr( searchScheme->Des() );
+ ++toPop;
+
+ HBufC* serviceScheme = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr serviceSchemePtr( serviceScheme->Des() );
+ ++toPop;
+
+ iPreferences->GetStringValueL( KBrowserSearchProviderUrl, KMaxHomePgUrlLength, searchSchemePtr );
+ iPreferences->GetStringValueL( KBrowserServiceUrl, KMaxHomePgUrlLength, serviceSchemePtr );
+
+ TInt err = uriParser.Parse(searchSchemePtr);
+ if (!err)
+ searchSchemePtr = uriParser.Extract( EUriScheme );
+
+ err = uriParser.Parse(serviceSchemePtr);
+ if (!err)
+ serviceSchemePtr = uriParser.Extract( EUriScheme );
+
+
+ if( scheme.Length() != 0 && (!scheme.Compare(serviceSchemePtr) || !scheme.Compare(searchSchemePtr)) )
+ {
+ iSpecialSchemeinAddress = ETrue;
+ TRAP( err, BrCtlInterface().LoadUrlL( resultUrlBuf->Des(), IAPid ) );
+ }
+ else
+ {
+ LoadObserver().DoStartLoad( aUrlType );
+ TRAP( err, BrCtlInterface().LoadUrlL( resultUrlBuf->Des(), IAPid ) );
+ }
+ }
+ else
+ {
+ LoadObserver().DoStartLoad( aUrlType );
+ BROWSER_LOG( ( _L( "PASSED IAP: %d" ), IAPid ) );
+ TRAP( err, BrCtlInterface().LoadUrlL( resultUrlBuf->Des(), IAPid ) );
+ }
+
+ CleanupStack::PopAndDestroy(toPop); //resultUrlBuf and url if needed
+ BROWSER_LOG( ( _L( "No AP 4 %d" ), err ) );
+ if ( err != KErrNone )
+ {
+ CancelFetch();
+ }
+ }
+
+ BROWSER_LOG( ( _L( "Check the result" ) ) );
+ switch ( err )
+ {
+ case KErrNotFound:
+ {
+ (*(CBrowserBookmarksView*)View( KUidBrowserBookmarksViewId )).UpdateGotoPaneL();
+ iCoeEnv->HandleError( KBrsrMalformedUrl );
+ BROWSER_LOG( ( _L( "KErrNotFound" ) ) );
+ break;
+ }
+ case KUriUtilsErrInvalidUri: // return value of TUriParser::Parse
+ {
+ (*(CBrowserBookmarksView*)View( KUidBrowserBookmarksViewId )).UpdateGotoPaneL();
+ iCoeEnv->HandleError( KBrsrUnknownScheme );
+ BROWSER_LOG( ( _L( "KUriUtilsErrInvalidUri" ) ) );
+ break;
+ }
+ case KErrNone:
+ {
+ BROWSER_LOG( ( _L( "KErrNone" ) ) );
+ ContentView()->ResetPreviousViewFlag();
+ break;
+ }
+ case KErrCancel:
+ {
+ BROWSER_LOG( ( _L( "KErrCancel" ) ) );
+ // do nothing, it is already cancelled by CancelFetch().
+ break;
+ }
+ default:
+ {
+ BROWSER_LOG( ( _L( "default" ) ) );
+ User::Leave( err ); // pass error code to caller
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ExitBrowser()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ExitBrowser( TBool aUserInitiated )
+ {
+ LOG_ENTERFN("CBrowserAppUi::ExitBrowser");
+
+ TInt err( KErrNone );
+ TBool isStandAlone = !IsEmbeddedModeOn();
+ BROWSER_LOG( ( _L( " isStandAlone: %d" ), isStandAlone ) );
+
+ if(isStandAlone && aUserInitiated )
+ {
+ if( iStartedUp && !BrCtlInterface().OkToExit() )
+ {
+ return;
+ }
+ }
+
+ //If launch with parameters is in progress, do not exit now
+ //as it can lead to synchronisation problems in embedded mode
+ if ( iParametrizedLaunchInProgress == 1 )
+ {
+ BROWSER_LOG( ( _L( " iParametrizedLaunchInProgress" ) ) );
+ return;
+ }
+
+ // Operator feature - Display confirmation note on exit only if exit is initiated by user.
+ // Skip displaying exit confirmation if exit is initiated from fast swap window.
+ BROWSER_LOG( ( _L( " iPreferences: %d" ), iPreferences ) );
+ if ( iPreferences->QueryOnExit() && aUserInitiated )
+ {
+ BROWSER_LOG( ( _L( " iPreferences->QueryOnExit()" ) ) );
+ TBool confirmdialog( EFalse );
+ TRAP( err, confirmdialog = TBrowserDialogs::ConfirmQueryYesNoL( R_TEXT_WML_EXIT_CONFIRM ) );
+ if ( !confirmdialog )
+ {
+ return;
+ }
+ }
+
+ //delete attacment from mailer if existing
+ CCoeEnv::Static()->FsSession().Delete( KAttachment() );
+
+ BROWSER_LOG( ( _L(" iConnection: %d"), iConnection ) );
+ BROWSER_LOG( ( _L(" iExitFromEmbeddedMode: %d"), iExitFromEmbeddedMode ) );
+ // if browser is embedded, should not call Exit(),
+ // just delete the object, otherwise leave occurs.
+ if( ( IsEmbeddedInOperatorMenu() || IsEmbeddedModeOn() ) &&
+ !ExitInProgress() && iStartedUp &&
+ ((LoadObserver().LoadUrlType() == CBrowserLoadObserver::ELoadUrlTypeEmbeddedBrowserWithUrl) ||
+ (LoadObserver().LoadUrlType() == CBrowserLoadObserver::ELoadUrlTypeOther) ) )
+ // ELoadUrlTypeEmbeddedBrowserWithUrl is typical for load via Phonebook, MMS, OperatorMenu
+ // ELoadUrlTypeOther is typical via Media download since those are via GotoPane entered urls
+ {
+ // Simulate an escape key event in order to close any open resources (for example an open dialog)
+ TKeyEvent keyEvent;
+ keyEvent.iModifiers = 0;
+ keyEvent.iRepeats = 0;
+ keyEvent.iCode = EKeyEscape;
+ keyEvent.iScanCode = EStdKeyEscape;
+ TRAP_IGNORE(iCoeEnv->SimulateKeyEventL( keyEvent, EEventKey ));
+
+ // force not to load Exit() when next time call this function,
+ // just delete the object
+ SetExitFromEmbeddedMode( ETrue );
+ SetExitInProgress( ETrue );
+ BROWSER_LOG( ( _L( " iBrowserAsyncExit->Start()" ) ) );
+ iBrowserAsyncExit->Start();
+ }
+ else if( iExitFromEmbeddedMode )
+ {
+ BROWSER_LOG( ( _L( " delete this;" ) ) );
+ if ( iConnection )
+ {
+ TRAP_IGNORE( SendDisconnectEventL() );
+ iConnection->Disconnect();
+#ifdef __RSS_FEEDS
+ BROWSER_LOG( ( _L( " iFeedsClientUtilities->DisconnectFeedsViewL()" ) ) );
+ if ( iFeedsClientUtilities )
+ {
+ TRAP_IGNORE( iFeedsClientUtilities->DisconnectFeedsViewL() );
+ //notify feeds engine to close the connection
+ TRAP_IGNORE( iFeedsClientUtilities->DisconnectManualUpdateConnectionL() );
+ }
+#endif
+ }
+ if (iStartedUp && SpecialLoadObserver().IsConnectionStarted())
+ {
+ BROWSER_LOG( ( _L( " iWindowManager->SetUserExit( iUserExit )" ) ) );
+ iWindowManager->SetUserExit( iUserExit );
+ delete iWindowManager;
+ BROWSER_LOG( ( _L( " User::Exit(KErrNone)" ) ) );
+ User::Exit(KErrNone);
+ }
+ else
+ {
+ PrepareToExit();
+ Exit();
+ }
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( " Exit()" ) ) );
+ if ( iConnection )
+ {
+ TRAP_IGNORE( SendDisconnectEventL() );
+ iConnection->Disconnect();
+#ifdef __RSS_FEEDS
+ if ( iFeedsClientUtilities )
+ {
+ BROWSER_LOG( ( _L( " iFeedsClientUtilities->DisconnectFeedsViewL()" ) ) );
+ TRAP_IGNORE( iFeedsClientUtilities->DisconnectFeedsViewL() );
+ //notify feeds engine to close the connection
+ TRAP_IGNORE( iFeedsClientUtilities->DisconnectManualUpdateConnectionL() );
+ }
+#endif
+ }
+ if (iStartedUp && SpecialLoadObserver().IsConnectionStarted()) // If Connection request is in processing calling CAknAppUI::Exit() causes crash (JSAA-84RG9R)
+ {
+ //ensure that the params are saved in BrCtl
+ if ( iWindowManager )
+ {
+ BROWSER_LOG( ( _L( " iWindowManager->SetUserExit( iUserExit )" ) ) );
+ iWindowManager->SetUserExit( iUserExit );
+ }
+ delete iWindowManager;
+ BROWSER_LOG( ( _L( " User::Exit(KErrNone)" ) ) );
+ User::Exit(KErrNone);
+ }
+ else
+ {
+ // normal exit
+ Exit();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::Display
+// -----------------------------------------------------------------------------
+//
+MDisplay& CBrowserAppUi::Display() const
+ {
+ CBrowserWindow *window = iWindowManager->CurrentWindow();
+ __ASSERT_DEBUG( window, Util::Panic( Util::EUninitializedData ) );
+ return window->Display();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SoftkeysObserver()
+// -----------------------------------------------------------------------------
+//
+CBrowserSoftkeysObserver& CBrowserAppUi::SoftkeysObserver() const
+ {
+ CBrowserWindow *window = iWindowManager->CurrentWindow();
+ __ASSERT_DEBUG( window, Util::Panic( Util::EUninitializedData ) );
+ return window->SoftkeysObserver();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CommsModel
+// -----------------------------------------------------------------------------
+//
+MCommsModel& CBrowserAppUi::CommsModel() const
+ {
+ __ASSERT_DEBUG( iCommsModel,
+ Util::Panic( Util::EUninitializedData ) );
+ return *iCommsModel;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::Preferences
+// -----------------------------------------------------------------------------
+//
+MPreferences& CBrowserAppUi::Preferences() const
+ {
+ __ASSERT_DEBUG( iPreferences,
+ Util::Panic( Util::EUninitializedData ) );
+ return *iPreferences;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::Connection
+// -----------------------------------------------------------------------------
+//
+MConnection& CBrowserAppUi::Connection() const
+ {
+ __ASSERT_DEBUG( iConnection,
+ Util::Panic( Util::EUninitializedData ) );
+ return *iConnection;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::BrCtlInterface
+// -----------------------------------------------------------------------------
+CBrCtlInterface& CBrowserAppUi::BrCtlInterface() const
+ {
+ CBrowserWindow *window = iWindowManager->CurrentWindow();
+ __ASSERT_DEBUG( window, Util::Panic( Util::EUninitializedData ) );
+ return window->BrCtlInterface();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::LoadObserver
+// -----------------------------------------------------------------------------
+//
+CBrowserLoadObserver& CBrowserAppUi::LoadObserver() const
+ {
+ CBrowserWindow *window = iWindowManager->CurrentWindow();
+ __ASSERT_DEBUG( window, Util::Panic( Util::EUninitializedData ) );
+ return window->LoadObserver();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SpecialLoadObserver
+// -----------------------------------------------------------------------------
+//
+CBrowserSpecialLoadObserver& CBrowserAppUi::SpecialLoadObserver() const
+ {
+ CBrowserWindow *window = iWindowManager->CurrentWindow();
+ __ASSERT_DEBUG( window, Util::Panic( Util::EUninitializedData ) );
+ return window->SpecialLoadObserver();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::DialogsProvider
+// -----------------------------------------------------------------------------
+//
+CBrowserDialogsProvider& CBrowserAppUi::DialogsProvider() const
+ {
+ return *iDialogsProvider;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::PopupEngine
+// -----------------------------------------------------------------------------
+//
+CBrowserPopupEngine& CBrowserAppUi::PopupEngine() const
+ {
+ LOG_ENTERFN("CBrowserAppUi::PopupEngine");
+ if(!iPopupEngine)
+ {
+ if ( Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) )
+ {
+ iPopupEngine = CBrowserPopupEngine::NewL();
+ BROWSER_LOG( ( _L( "PopupEngine up" ) ) );
+ }
+ }
+ return *iPopupEngine;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::WindowMgr()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowManager& CBrowserAppUi::WindowMgr() const
+ {
+ return *iWindowManager;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::IsCancelFetchAllowed
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsCancelFetchAllowed() const
+ {
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::UpdateCbaL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::UpdateCbaL()
+ {
+ if( ActiveView() )
+ {
+ ActiveView()->UpdateCbaL();
+ }
+ }
+
+void CBrowserAppUi::LogAccessToRecentUrlL( CBrCtlInterface& aBrCtlInterface )
+ {
+ if ((ADAPTIVEBOOKMARKS)&&(!(Preferences().AdaptiveBookmarks()==EWmlSettingsAdaptiveBookmarksOff )))
+ {
+ HBufC* url = aBrCtlInterface.PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ HBufC* name = aBrCtlInterface.PageInfoLC( TBrCtlDefs::EPageInfoTitle );
+ if( url && url->Length() )
+ {
+ // If url is same as the one in the store delete it because the url will be rewritten
+ // along with the name
+ iRecentUrlStore->DeleteData(*url);
+
+ TInt index;
+ index = url->Des().LocateReverse(KSlash);
+ // If the only difference between the url in the store and the one we are writing is a "/"
+ // at the end of the url, delete the one in the store because it will be rewritten along
+ // with the name
+ if (index == url->Length()-1)
+ {
+ HBufC* urlwoslash = HBufC::NewLC( url->Length() );
+ urlwoslash->Des().Copy( *url );
+ urlwoslash->Des().Delete(url->Length() -1, 2);
+
+ iRecentUrlStore->DeleteData(*urlwoslash);
+
+ CleanupStack::PopAndDestroy(); //urlwoslash
+ }
+
+ if (name && name->Length())
+ {
+ iRecentUrlStore->SaveDataL(*url,*name);
+ }
+ else
+ {
+ if (url->Length() > KFavouritesMaxName)
+ {
+ // name will be the url but it needs to be compressed to fit max name length
+ HBufC* cname = HBufC::NewLC(KFavouritesMaxName);
+ TInt edgeStringLen = ((KFavouritesMaxName / 2) - 3);
+ TPtrC cnameRight( url->Right( edgeStringLen ) );
+ TPtrC cnameLeft( url->Left( edgeStringLen ));
+ TPtr cnameDes = cname->Des();
+
+ cnameDes.Append( cnameLeft );
+ cnameDes.AppendFill( TChar(KDot),5 ); // '.....'
+ cnameDes.Append( cnameRight );
+ iRecentUrlStore->SaveDataL(*url,*cname);
+ CleanupStack::PopAndDestroy();//cname
+ }
+ else
+ {
+ iRecentUrlStore->SaveDataL(*url,*url);
+ }
+ }
+ }
+ CleanupStack().PopAndDestroy(2); // url, name
+ }
+ }
+
+void CBrowserAppUi::LogRequestedPageToRecentUrlL( const TDesC& aUrl )
+ {
+ if ((ADAPTIVEBOOKMARKS)&&(!(Preferences().AdaptiveBookmarks()==EWmlSettingsAdaptiveBookmarksOff )))
+ {
+ HBufC *url = HBufC::NewLC( aUrl.Length() );
+ url->Des().Copy( aUrl );
+
+ if( url && url->Length() )
+ {
+ if (url->Length() > KFavouritesMaxName)
+ {
+ // name will be the url but it needs to be compressed to fit max name length
+ HBufC* cname = HBufC::NewLC(KFavouritesMaxName);
+ TInt edgeStringLen = ((KFavouritesMaxName / 2) - 3);
+ TPtrC cnameRight( url->Right( edgeStringLen ) );
+ TPtrC cnameLeft( url->Left( edgeStringLen ));
+ TPtr cnameDes = cname->Des();
+
+ cnameDes.Append( cnameLeft );
+ cnameDes.AppendFill( TChar(KDot),5 ); // '.....'
+ cnameDes.Append( cnameRight );
+ iRecentUrlStore->SaveDataL(*url,*cname);
+ CleanupStack::PopAndDestroy();//cname
+ }
+ else
+ {
+ iRecentUrlStore->SaveDataL(*url,*url);
+ }
+ }
+ CleanupStack().PopAndDestroy(); // url
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SwitchWindowL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SwitchWindowL()
+ {
+LOG_ENTERFN("CBrowserAppUi::SwitchWindowL");
+ CArrayFixFlat<CWindowInfo*>* windowBuf = iWindowManager->GetWindowInfoL( this );
+ CleanupStack::PushL( windowBuf );
+
+ // Open 'Switch Window' selection dialog
+ HBufC* title = StringLoader::LoadLC( R_BROWSER_SWITCH_WINDOW_HEADER );
+
+ CArrayFixFlat<TBrCtlSelectOptionData>* optDataArray = new ( ELeave )
+ CArrayFixFlat<TBrCtlSelectOptionData>( KGranularityMedium );
+ CleanupStack::PushL( optDataArray );
+
+ TInt i( 0 );
+ TInt numWindows = windowBuf->Count();
+
+LOG_WRITE_FORMAT("Window's count: %d", numWindows );
+ for ( i = 0; i < numWindows; ++i )
+ {
+ TBrCtlSelectOptionData optData( *((*windowBuf)[i]->iWindowText),
+ (*windowBuf)[i]->iCurrent,
+ EFalse,
+ EFalse );
+ optDataArray->AppendL( optData );
+ }
+
+ TBool ret = DialogsProvider().DialogSelectOptionL( *title,
+ ESelectTypeSingle,
+ *optDataArray );
+ if ( ret )
+ {
+ for( i = 0; i < numWindows; ++i)
+ {
+ if( (*optDataArray)[i].IsSelected() )
+ {
+ LOG_WRITE_FORMAT("Selected window: %d", (*windowBuf)[i]->iWindowId );
+ iWindowManager->SwitchWindowL( (*windowBuf)[i]->iWindowId );
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( 3 ); // optDataArray, title, windowBuf
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SetCalledFromAnotherApp
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetCalledFromAnotherApp( TBool aValue )
+ {
+ iCalledFromAnotherApp = aValue;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CalledFromAnotherApp
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::CalledFromAnotherApp()
+ {
+ return iCalledFromAnotherApp;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::NoHomePageToBeLaunchedL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::NoHomePageToBeLaunchedL()
+ {
+ LOG_ENTERFN("CBrowserAppUi::NoHomePageToBeLaunchedL");
+ TWmlSettingsHomePage pgtype = iPreferences->HomePageType();
+ TBool alwaysAskCase = (( Preferences().AccessPointSelectionMode() == EAlwaysAsk ) &&
+ ( EWmlSettingsHomePageAccessPoint == pgtype ));
+ BROWSER_LOG( ( _L( "pgtype: %d, alwaysAsk: %d" ), pgtype, alwaysAskCase ) );
+
+ if( ( pgtype == EWmlSettingsHomePageBookmarks ) || alwaysAskCase )
+ { // Can't load home page since set to Bookmarks or (AlwaysAsk AP and homepage set to AP homepage)
+ return ETrue;
+ }
+ else
+ {
+ // now check for other cases where homepage string might be defined and will be used
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr ptr( buf->Des() );
+ TInt pgFound = Preferences().HomePageUrlL( ptr );
+ CleanupStack::PopAndDestroy( buf );
+ if (pgFound != KErrNone)
+ { // no homepage string found
+ return ETrue;
+ }
+ else
+ { // homepage string was found
+ return EFalse;
+ }
+ }
+ }
+
+// CBrowserAppUi::ProcessCommandParametersL()
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::ProcessCommandParametersL( TApaCommand aCommand,
+ TFileName& /*aDocumentName*/ ,
+ const TDesC8& /*aTail*/ )
+ {
+ LOG_ENTERFN("CBrowserAppUi::ProcessCommandParametersL");
+ LOG_WRITE_FORMAT(" aCommand: %d", aCommand);
+
+ // The browser is in embedded mode and it is not initialized yet
+ if ( IsEmbeddedModeOn() && !iStartedUp)
+ {
+ EnableLocalScreenClearer( EFalse );
+ return EFalse;
+ }
+
+ if ( aCommand == EApaCommandOpen )
+ {
+ //Startup parameters are given to browser at CBrowserAppDocument::OpenFileL().
+ //- a part of shell starting (ConstructAppFromCommandLineL calls OpenFileL)
+ }
+
+ else if ( aCommand == EApaCommandRun )
+ {
+
+ if ( LastActiveViewId() == KUidBrowserNullViewId )
+ {
+ TBool specialSchemeInHomePageAddress = EFalse;
+
+ if (NoHomePageToBeLaunchedL())
+ {
+ // No homepage to be launched so start browser in bookmarks view
+ SetLastActiveViewId(KUidBrowserBookmarksViewId);
+ }
+ else if ( iPreferences->SearchFeature() || iPreferences->ServiceFeature())
+ {
+
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr ptr( buf->Des() );
+ TInt pgFound( KErrNotFound );
+ pgFound = Preferences().HomePageUrlL( ptr );
+ HBufC* searchScheme = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr searchSchemePtr( searchScheme->Des() );
+
+ HBufC* serviceScheme = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr serviceSchemePtr( serviceScheme->Des() );
+
+ iPreferences->GetStringValueL( KBrowserSearchProviderUrl, KMaxHomePgUrlLength, searchSchemePtr );
+ iPreferences->GetStringValueL( KBrowserServiceUrl, KMaxHomePgUrlLength, serviceSchemePtr );
+
+
+ if( !ptr.Compare(serviceSchemePtr) || !ptr.Compare(searchSchemePtr) )
+ {
+ specialSchemeInHomePageAddress = ETrue;
+ SetLastActiveViewId(KUidBrowserBookmarksViewId);
+ SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId, 0);
+ TRAPD( err, FetchL( ptr, CBrowserLoadObserver::ELoadUrlTypeOther ) );
+ }
+ else
+ {
+ SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId, 0);
+ StartFetchHomePageL();
+ }
+ CleanupStack::PopAndDestroy( 3,buf );
+ }
+ else
+ {
+ SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId, 0);
+ StartFetchHomePageL();
+ }
+
+ if( !specialSchemeInHomePageAddress )
+ {
+ if( iCurrentView != iLastViewId )
+ ActivateLocalViewL( LastActiveViewId() );
+ }
+ }
+ }
+ else if ( aCommand == EApaCommandViewActivate )
+ // Get when activated from soft notification (Downloads List).
+ // Must behave as in case of EApaCommandOpen, but no OpenFileL() is called.
+ {
+ ParseAndProcessParametersL( KNullDesC8 );
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::Static()
+// -----------------------------------------------------------------------------
+//
+CBrowserAppUi* CBrowserAppUi::Static()
+ {
+ return REINTERPRET_CAST( CBrowserAppUi*, CEikonEnv::Static()->EikAppUi() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ParseAndProcessParametersL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ParseAndProcessParametersL( const TDesC8& aDocumentName, TBool aDoFetch )
+ {
+ LOG_ENTERFN("CBrowserAppUi::ParseAndProcessParametersL");
+ TInt err = KErrNone;
+
+ TUid ViewToActivate = { 0 };
+
+ HBufC8* params = NULL;
+ TLex8 parameter(aDocumentName);
+
+ // Here we check if the url contains control characters.
+ TBool urlError( EFalse ); // If there is a Control caracter in the url.
+ parameter.Mark(); // Save the start position in the string.
+ while ( !parameter.Eos() && !urlError )
+ {
+ if ( parameter.Get().IsControl() )
+ {
+ urlError = ETrue;
+ }
+ }
+ parameter.UnGetToMark(); // Now go back to the beginning of the string.
+
+ //Check for parameter validity
+ if( !parameter.Peek().IsDigit() || urlError ) //First char of aDocumentName is NOT a digit
+ {
+ if( ( aDocumentName.Locate( ':' ) > 0) && (!urlError) ) //There is a ":" character in aDocumentName (->probably a valid url)
+ {
+ //Add "4" + <space> before the given parameter to make the parameter legal for url launch
+ _LIT8(KUrlId, "4 ");
+ params = HBufC8::NewL(aDocumentName.Length() + 2 + 1);
+ params->Des().Copy( KUrlId );
+ params->Des().Append(aDocumentName);
+ params->Des().ZeroTerminate();
+ ViewToActivate = KUidBrowserContentViewId;
+ }
+ else
+ {
+ //Activate bookmarks view if parameters are invalid and browser is not embedded.
+ // In embedded mode bookmarks are not shown, so if there is an
+ // error in the url, we make the browser to pop up a
+ // "Page not found" note, by defining a not existing url.
+ if ( IsEmbeddedModeOn() )
+ {
+ params = HBufC8::NewL( 10 );
+ params->Des().Copy(_L8("4 http://") );
+ }
+ else
+ {
+ params = HBufC8::NewL(aDocumentName.Length() + 1 );
+ params->Des().Copy(aDocumentName);
+ }
+ params->Des().ZeroTerminate();
+ ViewToActivate = KUidBrowserBookmarksViewId;
+ }
+ }
+ else
+ {
+ params = HBufC8::NewL(aDocumentName.Length() + 1);
+ params->Des().Copy(aDocumentName);
+ params->Des().ZeroTerminate();
+ ViewToActivate = KUidBrowserContentViewId;
+ }
+ CleanupStack::PushL( params );
+
+ //Set view to activate if no view yet activated
+ if ( LastActiveViewId() == KUidBrowserNullViewId )
+ {
+ SetLastActiveViewId(ViewToActivate);
+ }
+
+ CBrowserCommandLineParser8* command = CBrowserCommandLineParser8::NewL( *params );
+ CleanupStack::PopAndDestroy( params );
+ CleanupStack::PushL( command );
+
+
+ // complete the delayed initialization if bookmarks view is not the first view
+ if(ViewToActivate != KUidBrowserBookmarksViewId && !iStartedUp)
+ CompleteDelayedInit();
+
+ //wait a while, contentview initializing itself
+ WaitCVInit();
+ switch ( command->Count() )
+ {
+ case 0:
+ {
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ break;
+ }
+ case 1:
+ {
+ if ( !aDocumentName.Compare( KLongZeroIdString ) )
+ {
+ // Long 0 is pressed and Browser is started up for the first time...
+ // if no AP or SNAP is defined, define it
+ TUint32 defaultAp = iPreferences->DefaultAccessPoint();
+ TUint32 defaultSnap = iPreferences->DefaultSnapId();
+ // AP or SNAP is not defined
+ if( (defaultAp == KWmlNoDefaultAccessPoint && iPreferences->AccessPointSelectionMode() == EConnectionMethod) ||
+ (defaultSnap == KWmlNoDefaultSnapId && iPreferences->AccessPointSelectionMode() == EDestination) )
+ {
+ StartPreferencesViewL( EShowAlwaysAsk | EShowDestinations | EShowConnectionMethods );
+ }
+ // If there is a homepage url then try to fetch it
+ if ( !NoHomePageToBeLaunchedL() )
+ {
+ iLongZeroPressed = ETrue;
+ FetchHomePageL();
+ }
+ else
+ {
+ if (iStartedUp)
+ ContentView()->SetFullScreenOffL();
+
+ if ( !IsEmbeddedModeOn() )
+ {
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ }
+ }
+ }
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ break;
+ }
+ case 2:
+ case 3:
+ {
+ // UID and wml adress and optional access point UID
+
+ TUint typeId;
+ TInt dataId;
+ TLex8 param0( command->Param( 0 ) );
+ TLex8 param1( command->Param( 1 ) );
+ err = param0.Val( typeId );
+ if ( !err )
+ {
+ BROWSER_LOG( ( _L( " typeId: %d" ), typeId ) );
+
+ if ( typeId == KUrlId )
+ { // FIX THIS!
+ TUriParser8 uri8;
+ err = uri8.Parse(command->Param(1)); // what if parsing fails?
+ User::LeaveIfError(err);
+ // Url decoding section was removed from here.
+ HBufC* url = HBufC::NewL(command->Param(1).Length()+1);
+ url->Des().Copy( command->Param(1) );
+ CleanupStack::PushL(url);
+ BROWSER_LOG( ( _L( " url: %S" ), url ) );
+
+ TFavouritesWapAp accessPoint; // Initially "default".
+ BROWSER_LOG( ( _L( " Count: %d" ), command->Count() ) );
+ if ( command->Count() == 3 )
+ {
+ // URL Typeid, url, ap
+ TUint ap;
+ TLex8 param2( command->Param( 2 ) );
+ err = param2.Val( ap );
+ if ( !err )
+ {
+ BROWSER_LOG( ( _L( " ap: %d" ), ap ) );
+ if (iSuppressAlwaysAsk)
+ {
+ // Always ask was temporarily disabled, enable it again
+ iPreferences->SetAccessPointSelectionModeL(EAlwaysAsk);
+
+ iSuppressAlwaysAsk = EFalse;
+ }
+
+ // Note: OTA Provisioning application requires the
+ // KBrowserAccessPointSelectionMode key value to be
+ // read directly from cenrep, rather than use the
+ // cached cenrep value taken at browser initialization
+ // time.
+ TInt selectionMode;
+
+ CRepository* repository = CRepository::NewLC( KCRUidBrowser );
+ User::LeaveIfError( repository->Get( KBrowserAccessPointSelectionMode, selectionMode ) );
+ CleanupStack::PopAndDestroy( repository );
+
+ // If selectionMode cenrep value is always ask, then
+ // temporarily change selection mode
+ if ( EBrowserCenRepApSelModeAlwaysAsk == selectionMode )
+ {
+ iSuppressAlwaysAsk = ETrue;
+ iPreferences->SetAccessPointSelectionModeL(EConnectionMethod);
+ }
+ accessPoint.SetApId( ap );
+ SetCalledFromAnotherApp( ETrue );
+ CBrowserLoadObserver::TBrowserLoadUrlType urlType =
+ IsEmbeddedModeOn() ?
+ CBrowserLoadObserver::ELoadUrlTypeEmbeddedBrowserWithUrl :
+ CBrowserLoadObserver::ELoadUrlTypeOther;
+ if( IsPageLoaded() &&
+ !(WindowMgr().CurrentWindow()->HasWMLContent(EFalse)) &&
+ Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ !Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))
+ {
+ // Cancel history view, mini map, toolbar or any other active control on the current window
+ BrCtlInterface().HandleCommandL( TBrCtlDefs::ECommandCancel + TBrCtlDefs::ECommandIdBase );
+ // there is already a window, so create a new one
+ CBrowserWindow *win = WindowMgr().CreateWindowL( 0, &KNullDesC );
+ if (win != NULL)
+ {
+
+ CleanupStack::PushL( win );
+ WindowMgr().SwitchWindowL( win->WindowId() );
+ TRAP( err, FetchL( *url,
+ KNullDesC,
+ KNullDesC,
+ accessPoint,
+ urlType ) );
+ CleanupStack::Pop(); // win
+ SetLastActiveViewId( KUidBrowserContentViewId );
+ }
+ }
+ else
+ {
+ // Cancel history view, mini map, toolbar or any other active control on the current window
+ if (iStartedUp)
+ BrCtlInterface().HandleCommandL( TBrCtlDefs::ECommandCancel + TBrCtlDefs::ECommandIdBase );
+ TRAP( err, FetchL( *url,
+ KNullDesC,
+ KNullDesC,
+ accessPoint,
+ urlType ) );
+ SetLastActiveViewId( KUidBrowserContentViewId );
+ }
+ }
+ }
+ else
+ {
+ // URL Typeid, url
+ SetCalledFromAnotherApp( ETrue );
+
+ if ( aDoFetch )
+ {
+ CBrowserLoadObserver::TBrowserLoadUrlType urlType =
+ IsEmbeddedModeOn() ?
+ CBrowserLoadObserver::ELoadUrlTypeEmbeddedBrowserWithUrl :
+ CBrowserLoadObserver::ELoadUrlTypeOther;
+ if( IsPageLoaded() &&
+ !(WindowMgr().CurrentWindow()->HasWMLContent(EFalse)) &&
+ Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ !Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))
+ {
+ // Cancel history view, mini map, toolbar or any other active control on the current window
+ BrCtlInterface().HandleCommandL( TBrCtlDefs::ECommandCancel + TBrCtlDefs::ECommandIdBase );
+ // there is already a window, so create a new one
+ CBrowserWindow *win = NULL;
+ if(WindowMgr().CurrentWindow())
+ {
+ if(iSameWinApp)
+ {
+ //We will be using same/already opened window if call is from external
+ //application. So no new windows will be opened.
+ win = WindowMgr().CurrentWindow();
+ iWindowIdFromFromExternApp = win->WindowId();
+ }
+ if(!win)
+ {
+ //If not called from external app, then create window.
+ win = WindowMgr().CreateWindowL( (WindowMgr().CurrentWindow()->WindowId()) ? WindowMgr().CurrentWindow()->WindowId() : 0, &KNullDesC );
+ }
+ }
+ else
+ win = WindowMgr().CreateWindowL( 0, &KNullDesC );
+ if (win != NULL)
+ {
+
+ CleanupStack::PushL( win );
+ WindowMgr().SwitchWindowL( win->WindowId() );
+ TRAP( err, FetchL( *url,
+ KNullDesC,
+ KNullDesC,
+ accessPoint,
+ urlType ) );
+ CleanupStack::Pop(); // win
+ }
+ }
+ else
+ {
+ // Cancel history view, mini map, toolbar or any other active control on the current window
+ if (iStartedUp)
+ BrCtlInterface().HandleCommandL( TBrCtlDefs::ECommandCancel + TBrCtlDefs::ECommandIdBase );
+ TRAP( err, FetchL( *url,
+ KNullDesC,
+ KNullDesC,
+ accessPoint,
+ urlType ) );
+ }
+ }
+ if (err==KErrNone)
+ {
+ SetLastActiveViewId(ViewToActivate);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // url
+ }
+ else if( typeId == KLaunchFeeds )
+ {
+ // Special facility to launch non-embedded into the feeds view
+ if( !iBrowserAlreadyRunning )
+ {
+ SetOverriddenLaunchContextId(EBrowserContextIdFeeds);
+ SetLastActiveViewId( KUidBrowserFeedsFolderViewId );
+ }
+ LaunchIntoFeedsL();
+ }
+ else
+ {
+ err = param1.Val( dataId );
+ if ( !err )
+ {
+ switch ( typeId )
+ {
+ case KBookmarkId:
+ {
+ // Bookmark typeid, uid
+ SetCalledFromAnotherApp( ETrue );
+
+ if( IsPageLoaded() &&
+ !(WindowMgr().CurrentWindow()->HasWMLContent(EFalse)) &&
+ Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ !Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))
+ {
+ // Cancel history view, mini map, toolbar or any other active control on the current window
+ BrCtlInterface().HandleCommandL( TBrCtlDefs::ECommandCancel + TBrCtlDefs::ECommandIdBase );
+ // there is already a window, so create a new one
+ CBrowserWindow *win = WindowMgr().CreateWindowL( 0, &KNullDesC );
+ if (win != NULL)
+ {
+ CleanupStack::PushL( win );
+ WindowMgr().SwitchWindowL( win->WindowId() );
+ TRAP( err, FetchBookmarkL( dataId ) );
+ CleanupStack::Pop(); // win
+ }
+ }
+ else
+ {
+ // Cancel history view, mini map, toolbar or any other active control on the current window
+ if (iStartedUp)
+ BrCtlInterface().HandleCommandL( TBrCtlDefs::ECommandCancel + TBrCtlDefs::ECommandIdBase );
+ TRAP( err, FetchBookmarkL( dataId ) );
+ }
+
+ if ( err )
+ {
+ // Unable to fetch bookmark
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_INFO_NOTE, R_WML_UNABLE_TO_FETCH_BOOKMARK );
+ }
+ if (err==KErrNone)
+ {
+ SetLastActiveViewId(ViewToActivate);
+ }
+
+ break;
+ }
+ case KFolderId:
+ {
+ SetCalledFromAnotherApp( EFalse );
+ iIsForeground = IsForeground();
+ CloseContentViewL();
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ break;
+ }
+ default:
+ {
+ // Typeid was not readable
+ // TBD: error message!
+ break;
+ }
+ }
+ }
+ else
+ {
+ // Dataid was not readable
+ User::Leave( err );
+ }
+ }
+ }
+ else
+ {
+ // Sender Uid was not readable
+ User::Leave( err );
+ }
+ if( !iSpecialSchemeinAddress )
+ {
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ }
+ break;
+ }
+
+ default:
+ {
+ SendBrowserToBackground();
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // command
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::WaitCVInit
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::WaitCVInit()
+ {
+ if( iParametrizedLaunchInProgress == 0 && iStartedUp)
+ {
+ iParametrizedLaunchInProgress = 1;
+ iIdle->Cancel();
+ iIdle->Start( TCallBack( StopDelay, this ) );
+ iWait.Start();
+ iParametrizedLaunchInProgress = 2;
+ }
+ }
+void CBrowserAppUi::StopConnectionObserving()
+ {
+ LOG_ENTERFN("CBrowserAppUi::StopConnectionObserving");
+ if ( iConnStageNotifier && iConnStageNotifier->IsActive() )
+ {
+ BROWSER_LOG( ( _L( " CBrowserAppUi::StopConnectionObserving Cancelling Observer" ) ) );
+ iConnStageNotifier->Cancel();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ConnNeededStatusL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ConnNeededStatusL( TInt aErr )
+ {
+ LOG_ENTERFN("CBrowserAppUi::ConnNeededStatusL");
+ UpdateSoftKeys();
+ if (iSuppressAlwaysAsk)
+ {
+ // Always ask was temporarily disabled, after creating the network connection, enable it again
+ iPreferences->SetAccessPointSelectionModeL(EAlwaysAsk);
+ iSuppressAlwaysAsk = EFalse;
+ }
+ if ( aErr != KErrNone )
+ {
+ if( iCalledFromAnotherApp )
+ {
+ // This function call should be replaced by ExitBrowser(ETrue)
+ // so that the blank content view is not displayed.
+ // SendBrowserToBackground();
+ }
+ // if any error, return Cancel to Kimono.
+ return;
+ }
+
+ BROWSER_LOG( ( _L( " CBrowserAppUi::ConnNeededStatusL First Stop Connection Observer" ) ) );
+ StopConnectionObserving(); //Need to stop the connection observer first
+
+
+ if ( !iConnStageNotifier->IsActive() )
+ {
+ BROWSER_LOG( ( _L( " CBrowserAppUi::ConnNeededStatusL Starting Connection Observer" ) ) );
+ TName* connectionName = Connection().ConnectionNameL();
+ CleanupStack::PushL( connectionName );
+
+ iConnStageNotifier->StartNotificationL(connectionName, KLinkLayerClosed, this);
+
+ CleanupStack::PopAndDestroy(); //connectionName
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SendBrowserToBackground
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SendBrowserToBackground()
+ {
+ TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+
+ // Browser might be embedded.
+ TUid appUid;
+ if ( iEmbeddingApplicationUid != KNullUid )
+ {
+ appUid = iEmbeddingApplicationUid;
+ }
+ else
+ {
+ appUid = KUidBrowserApplication;
+ }
+ TApaTask task = taskList.FindApp( appUid );
+ task.SendToBackground();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CreateWindowInfoLC()
+// -----------------------------------------------------------------------------
+//
+HBufC* CBrowserAppUi::CreateWindowInfoLC( const CBrowserWindow& aWindow )
+ {
+ HBufC* buf = aWindow.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoTitle );
+ if( !buf || !buf->Length() )
+ {
+ CleanupStack::PopAndDestroy( buf );
+ buf = aWindow.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( !buf )
+ {
+
+ CleanupStack::PopAndDestroy( buf );
+ buf = KNullDesC().AllocLC();
+ }
+ }
+ return buf;
+ }
+
+#ifdef BRDO_OCC_ENABLED_FF
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SetRetryFlag
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetRetryFlag(TBool flag)
+ {
+ LOG_ENTERFN("CBrowserAppUi::SetRetryFlag");
+ BROWSER_LOG( ( _L(" CBrowserAppUi::SetRetryFlag flag: %d"), flag ) );
+ reConnectivityFlag = flag;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::GetRetryFlag
+// -----------------------------------------------------------------------------
+//
+ TBool CBrowserAppUi::GetRetryFlag()
+ {
+ LOG_ENTERFN("CBrowserAppUi::GetRetryFlag");
+ BROWSER_LOG( ( _L(" CBrowserAppUi::GetRetryFlag flag: %d"), reConnectivityFlag ) );
+ return reConnectivityFlag;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::RetryConnectivity
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserAppUi::RetryConnectivity(TAny* aCBrowserAppUi)
+ {
+ LOG_ENTERFN("CBrowserAppUi::RetryConnectivity");
+ __ASSERT_DEBUG(aCBrowserAppUi, Util::Panic( Util::EUninitializedData ));
+
+ TInt err = ((CBrowserAppUi*)aCBrowserAppUi)->RetryInternetConnection();
+
+ BROWSER_LOG( ( _L(" CBrowserAppUi::RetryConnectivity Error: %d"), err ) );
+ return err;
+ }
+
+TInt CBrowserAppUi::RetryInternetConnection()
+ {
+ LOG_ENTERFN("CBrowserAppUi::RetryInternetConnection");
+ //First cancel the timer
+ if ( iRetryConnectivity && iRetryConnectivity->IsActive() )
+ {
+ iRetryConnectivity->Cancel();
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection Timer Cancelled successfully " ) ) );
+ }
+ TInt err = KErrNone;
+ if ( !iConnection->Connected() )
+ {
+ TRAP_IGNORE( err = iConnection->StartConnectionL( ETrue ) );
+ }
+ if( err == KErrNone )
+ {
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection Connection restablished successfully " ) ) );
+
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection UNSET retry flags " ) ) );
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandUnSetRetryConnectivityFlag + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ SetRetryFlag(EFalse);
+
+ TRAP_IGNORE(ConnNeededStatusL(err)); //Start the observer again
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandRetryTransactions + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ //Let download manager knows about this new connection
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandConnToDownloadManager + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection Connection failed " ) ) );
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection unset retry flags " ) ) );
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandUnSetRetryConnectivityFlag + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ SetRetryFlag(EFalse);
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection clear queued transactions " ) ) );
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandClearQuedTransactions + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ Display().StopProgressAnimationL(); //Stop Progress animation
+ if ( Fetching() )
+ {
+ BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection cancel fetch " ) ) );
+ CancelFetch();
+ }
+ iDialogsProvider->UploadProgressNoteL(0, 0, ETrue, (MBrowserDialogsProviderObserver *)this ); //Close the uploading dialog.
+ iDialogsProvider->CancelAll(); //connection has been lost, so cancel the authentication dialog.
+ }
+
+ return err;
+ }
+
+void CBrowserAppUi::CheckOccConnectionStage()
+ {
+ LOG_ENTERFN("CBrowserAppUi::CheckOccConnectionStage");
+
+ //Disconnect first
+ BROWSER_LOG( ( _L( "CBrowserAppUi::CheckOccConnectionStage Disconnecting..." ) ) );
+ iConnection->Disconnect();
+
+ TNifProgressBuf buf = iConnStageNotifier->GetProgressBuffer();
+ if( buf().iError == KErrDisconnected )
+ {
+ BROWSER_LOG( ( _L("CBrowserAppUi::CheckOccConnectionStage This is OCC roaming error : %d"), buf().iError ) );
+ BROWSER_LOG( ( _L( "CBrowserAppUi::CheckOccConnectionStage Set retry flags " ) ) );
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandSetRetryConnectivityFlag + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ SetRetryFlag(ETrue);
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelQueuedTransactions + (TInt)TBrCtlDefs::ECommandIdBase ) );
+
+ if( iRetryConnectivity && iRetryConnectivity->IsActive())
+ {
+ iRetryConnectivity->Cancel();
+ }
+ iRetryConnectivity->Start(KRetryConnectivityTimeout, 0,TCallBack(RetryConnectivity,this));
+ }
+ else
+ {
+ BROWSER_LOG( ( _L("CBrowserAppUi::CheckOccConnectionStage This is NOT OCC roaming error : %d"), buf().iError ) );
+ Display().StopProgressAnimationL();
+ if ( Fetching() )
+ {
+ CancelFetch();
+ }
+ iDialogsProvider->UploadProgressNoteL(0, 0, ETrue, (MBrowserDialogsProviderObserver *)this );
+ iDialogsProvider->CancelAll();
+ }
+ }
+#endif
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ConnectionStageAchievedL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ConnectionStageAchievedL()
+ {
+#ifdef BRDO_OCC_ENABLED_FF
+ LOG_ENTERFN("CBrowserAppUi::ConnectionStageAchievedL");
+ CheckOccConnectionStage();
+#else
+ // this function is called only when network is lost
+ // because we set notifier for KAgentUnconnected only
+ Display().StopProgressAnimationL();
+ if ( Fetching() )
+ {
+ CancelFetch();
+ }
+ //Close the uploading dialog.
+ iDialogsProvider->UploadProgressNoteL(
+ 0, 0, ETrue, (MBrowserDialogsProviderObserver *)this );
+ //connection has been lost, so cancel the authentication dialog.
+ iDialogsProvider->CancelAll();
+ // SendDisconnectEventL();
+ // not needed as by that point HTTPSession was already shutdown by executing disconnect menu option
+ // will cause a crash when user tries to quickly reconnect right after disconnecting, as HTTP session
+ // is starting to initialize, while this call is trying to close it.
+#endif
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::UpdateSoftKeys
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::UpdateSoftKeys()
+ {
+ TRAP_IGNORE( UpdateCbaL() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::DeleteCookiesL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::DeleteCookiesL()
+ {
+ // stringPool is not needed to initialize
+ RStringPool stringPool;
+ RCookieManager cookieManager( stringPool );
+ TInt num(0);
+
+ User::LeaveIfError( cookieManager.Connect() );
+ CleanupClosePushL( cookieManager );
+ User::LeaveIfError( cookieManager.ClearCookies( num ) );
+ CleanupStack::PopAndDestroy( &cookieManager );
+
+ stringPool.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::LaunchHomePageL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::LaunchHomePageL()
+ {
+ LOG_ENTERFN( "CBrowserAppUi::LaunchHomePageL" );
+ TWmlSettingsHomePage pgtype = iPreferences->HomePageType();
+ TBool alwaysAskCase = (( Preferences().AccessPointSelectionMode() == EAlwaysAsk ) &&
+ ( EWmlSettingsHomePageAccessPoint == pgtype ));
+ BROWSER_LOG( ( _L( "pgtype: %d, alwaysAsk: %d" ), pgtype, alwaysAskCase ) );
+
+ if( ( pgtype == EWmlSettingsHomePageBookmarks ) || alwaysAskCase )
+ // Bookmarks is selected as HomePage
+ // has effect only for startup, otherwise 'Home' command is not shown
+ {
+ ContentView()->SetFullScreenOffL();
+ // view change will be done somewhere else
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ return;
+ }
+
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr ptr( buf->Des() );
+ TInt pgFound( KErrNotFound );
+
+ pgFound = Preferences().HomePageUrlL( ptr );
+ BROWSER_LOG( ( _L( "pgFound 1: %d" ), pgFound ) );
+
+
+ if( pgFound == KErrNone ) // Home page url found, fetch the url
+ {
+ SetLastActiveViewId( KUidBrowserContentViewId );
+ FetchL( ptr );
+ }
+ else // Home page not found, or not defined, go to BookMarksView
+ {
+ TVwsViewId activeViewId;
+ if( ( GetActiveViewId( activeViewId ) != KErrNone ) ||
+ ( activeViewId.iViewUid == KUidBrowserContentViewId ) )
+ {
+ ContentView()->SetFullScreenOffL();
+ }
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ }
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ClearTheCacheL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::ClearTheCacheL(TBool afterQuery, TBool aShowDoneNote)
+ {
+ TUint32 totalBytesFlushed = BrCtlInterface().ClearCache();
+ if(afterQuery || totalBytesFlushed)
+ {
+
+ HBufC* resultText = NULL;
+ HBufC* tempText = NULL;
+ TBuf<12> totalText;
+
+ totalText.Num ((TInt)totalBytesFlushed);
+
+ resultText = StringLoader::LoadLC( R_TEXT_WML_CACHE_EMPTIED_NOTE);
+ //CleanupStack::PushL(resultText);
+ tempText = HBufC::NewLC( resultText->Length() + totalText.Length() );
+ //CleanupStack::PushL(tempText);
+
+ tempText->Des().AppendFormat( resultText->Des(), totalBytesFlushed );
+
+
+
+ if(aShowDoneNote)
+ {
+ TBrowserDialogs::InfoNoteL ( R_BROWSER_OK_NOTE, tempText->Des() );
+ }
+ CleanupStack::PopAndDestroy(2); //resultText, tempText
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ClearFormAndPasswdDataL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::ClearFormAndPasswdDataL(TBool aShowPromptAndComplete)
+ {
+ if (aShowPromptAndComplete)
+ {
+ CAknQueryDialog* query = CAknQueryDialog::NewL();
+ if ( query->ExecuteLD( R_BROWSER_CLEARFORMPASSWDDATA_QUERY ) )
+ {
+ // call brctl to clear form and password data
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandClearAutoFormFillData +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandClearAutoFormFillPasswordData +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_OK_NOTE, R_QTN_BROWSER_NOTE_FORM_AND_PASSWD_DATA_CLEARED );
+ }
+
+ }
+ else
+ {
+ // call brctl to clear form and password data
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandClearAutoFormFillData +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandClearAutoFormFillPasswordData +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ClearHistoryWithPromptL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::ClearHistoryWithPromptL()
+ {
+ CAknQueryDialog* query = CAknQueryDialog::NewL();
+
+ if ( query->ExecuteLD( R_BROWSER_CLEARHISTORYDATA_QUERY ) )
+ {
+ ClearHistoryL();
+ TBrowserDialogs::InfoNoteL( R_BROWSER_OK_NOTE,
+ R_QTN_BROWSER_NOTE_HISTORY_CLEARED );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ClearHistoryL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::ClearHistoryL()
+ {
+ if (iWindowManager)
+ {
+ iWindowManager->SendCommandToAllWindowsL(
+ (TInt)TBrCtlDefs::ECommandClearHistory + (TInt)TBrCtlDefs::ECommandIdBase);
+ }
+
+ if (!(Preferences().AdaptiveBookmarks()==EWmlSettingsAdaptiveBookmarksOff ))
+ {
+ // This call will ensure that the bookmarks are cleared when we are
+ // outside the bookmarksview since the next call doesn't do anything in
+ // that case due to the unset Container pointer.
+ iRecentUrlStore->ClearData();
+
+ // Below will serve for when we are called from BookmarksView to ensure
+ // thorough clearing and view refresh after clearing adapt bookmarks
+ iBookmarksView->HandleCommandL(EWmlCmdClearAdaptiveBookmarksNoPrompt);
+ }
+
+ UpdateCbaL();
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ClearAllPrivacyL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::ClearAllPrivacyL()
+ {
+
+ CAknQueryDialog* query = CAknQueryDialog::NewL();
+ if ( query->ExecuteLD( R_BROWSER_CLEARPRIVACYDATA_QUERY ) )
+ {
+ ClearTheCacheL(EFalse, EFalse); // false -> no prompt or info note after op
+ DeleteCookiesL();
+ ClearHistoryL();
+ ClearFormAndPasswdDataL(EFalse); // no prompt or completed info note
+
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_OK_NOTE, R_QTN_BROWSER_NOTE_CLEAR_ALL_PRIVACY_DONE );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::DisconnectL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::DisconnectL()
+ {
+//#pragma message("TODO: inform LoadObserver?")
+ SendDisconnectEventL();
+ Connection().Disconnect();
+
+#ifdef __RSS_FEEDS
+ iFeedsClientUtilities->DisconnectFeedsViewL();
+ //notify feeds engine to close the connection
+ iFeedsClientUtilities->DisconnectManualUpdateConnectionL();
+#endif
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::BmOTABinSenderL()
+// -----------------------------------------------------------------------------
+//
+MBmOTABinSender& CBrowserAppUi::BmOTABinSenderL()
+ {
+ if (!iSender)
+ {
+ iLateSendUi->Cancel();
+ DoConstructSendUiL();
+ }
+ return *iSender;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::ContentView()
+// -----------------------------------------------------------------------------
+//
+CBrowserContentView* CBrowserAppUi::ContentView() const
+ {
+ return (CBrowserContentView*)View( KUidBrowserContentViewId );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::FetchL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::FetchL( const TDesC& aUrl, CBrowserLoadObserver::TBrowserLoadUrlType aUrlType )
+ {
+ TFavouritesWapAp ap;
+ ap.SetDefault();
+ FetchL( aUrl, KNullDesC, KNullDesC, ap, aUrlType );
+ }
+
+// TO DO: done by BaP
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::CancelFetch
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::CancelFetch( TBool aIsUserInitiated /*= EFalse*/ )
+ {
+ LoadObserver().DoEndLoad( aIsUserInitiated );
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ SetContentDisplayed(ETrue);
+ }
+
+
+// ----------------------------------------------------------------------------------------
+// CBrowserAppUi::HandleMessageL
+//
+// Changes the URL to another if WAP is running before Wap Url
+// is started from Desk
+// ----------------------------------------------------------------------------------------
+//
+MCoeMessageObserver::TMessageResponse CBrowserAppUi::HandleMessageL(
+ TUint32 aClientHandleOfTargetWindowGroup,
+ TUid aMessageUid,
+ const TDesC8& aMessageParameters )
+ {
+ iBrowserAlreadyRunning = ETrue;
+ TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+ TUid wapUid = KUidBrowserApplication;
+ TApaTask task = taskList.FindApp( wapUid );
+ task.BringToForeground();
+ //Check for aMessageUid. If it is in array then set iSameWinApp = ETrue
+ iSameWinApp = IsSameWinApp(aMessageUid);
+ if ( aMessageParameters.Compare( KLongZeroIdString ) )
+ {
+ ParseAndProcessParametersL( aMessageParameters );
+ }
+ return CAknViewAppUi::HandleMessageL(
+ aClientHandleOfTargetWindowGroup,
+ aMessageUid,
+ aMessageParameters);
+ }
+
+// ----------------------------------------------------------------------------------
+// CBrowserAppUi::UpdateNaviPaneL
+// ----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::UpdateNaviPaneL( TDesC& aStatusMsg )
+ {
+ ContentView()->UpdateNaviPaneL( aStatusMsg );
+ }
+
+// ----------------------------------------------------------------------------------
+// CBrowserAppUi::StopDelay
+// ----------------------------------------------------------------------------------
+//
+TInt CBrowserAppUi::StopDelay( TAny* aCBrowserAppUi )
+ {
+ __ASSERT_DEBUG(aCBrowserAppUi, Util::Panic( Util::EUninitializedData ));
+
+ ((CBrowserAppUi*)aCBrowserAppUi)->DoStopDelay();
+ return 0;
+ }
+
+
+// ----------------------------------------------------------------------------------
+// CBrowserAppUi::DoStopDelay
+// ----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::DoStopDelay()
+ {
+ iWait.AsyncStop();
+ }
+
+// ----------------------------------------------------------------------------------
+// CBrowserAppUi::DelayedSendUiConstructL
+// ----------------------------------------------------------------------------------
+//
+/*static*/ TInt CBrowserAppUi::DelayedSendUiConstructL( TAny* aCBrowserAppUi )
+ {
+ __ASSERT_DEBUG(aCBrowserAppUi, Util::Panic( Util::EUninitializedData ));
+ TRAP_IGNORE(
+ ((CBrowserAppUi*)aCBrowserAppUi)->DoConstructSendUiL();
+ );
+ return KErrNone;
+ }
+
+
+// ----------------------------------------------------------------------------------
+// CBrowserAppUi::DoConstructSendUiL
+// ----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::DoConstructSendUiL()
+ {
+ __ASSERT_DEBUG(!iSender, Util::Panic( Util::EUnExpected ));
+ iSender = CWmlBrowserBmOTABinSender::NewL();
+ }
+
+// -----------------------------------------------------------------------------------
+// CBrowserAppUi::SetViewToReturnOnClose
+// -----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::SetViewToReturnOnClose( TUid const &aUid )
+ {
+ iViewToReturnOnClose.iUid = aUid.iUid;
+ }
+
+// -----------------------------------------------------------------------------------
+// CBrowserAppUi::CloseContentViewL
+// -----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::CloseContentViewL()
+ {
+LOG_ENTERFN("CBrowserAppUi::CloseContentViewL");
+ CBrowserAppDocument* doc = STATIC_CAST(CBrowserAppDocument*, Document());
+
+ // Close should Exit asynchronously if called from another application
+ // & if not in feeds view
+#ifdef __RSS_FEEDS
+ if(CalledFromAnotherApp() && (!IsEmbeddedModeOn())
+ && (GetPreviousViewFromViewHistory() != KUidBrowserFeedsFolderViewId)
+ && (GetPreviousViewFromViewHistory() != KUidBrowserFeedsTopicViewId)
+ && (GetPreviousViewFromViewHistory() != KUidBrowserFeedsFeedViewId ))
+ {
+ SetExitInProgress( ETrue );
+ BROWSER_LOG( ( _L( " iBrowserAsyncExit->Start()" ) ) );
+ iBrowserAsyncExit->Start();
+ }
+#else
+ if(CalledFromAnotherApp() && !IsEmbeddedModeOn())
+ {
+ SetExitInProgress( ETrue );
+ BROWSER_LOG( ( _L( " iBrowserAsyncExit->Start()" ) ) );
+ iBrowserAsyncExit->Start();
+ }
+#endif // __RSS_FEEDS
+
+ else
+ {
+ if ( IsEmbeddedModeOn() &&
+ doc->GetFolderToOpen() == KFavouritesRootUid )
+ {
+ ExitBrowser(ETrue);
+ }
+ else
+ {
+ if ( iStartedUp && ContentView()->GetPreviousViewID() == KUidBrowserBookmarksViewId )
+ {
+ if ( GetBookmarksView()->GetAdaptiveBookmarksFolderWasActive() )
+ {
+ GetBookmarksView()->OpenAdaptiveBookmarksWhenActivated();
+ }
+ SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ }
+ else if ( IsEmbeddedModeOn())
+ {
+ if( !iExitInProgress )
+ {
+ ExitBrowser( ETrue );
+ }
+ }
+ else
+ {
+ if(CalledFromAnotherApp() && (!IsEmbeddedModeOn()))
+ {
+ SetViewToBeActivatedIfNeededL( GetPreviousViewFromViewHistory());
+ SetCalledFromAnotherApp(EFalse);
+ SendBrowserToBackground();
+ }
+ else
+ {
+ SetViewToBeActivatedIfNeededL( iViewToReturnOnClose );
+ }
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------------
+// CBrowserAppUi::IsEmbeddedModeOn
+// -----------------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsEmbeddedModeOn() const
+ {
+ return iEikonEnv->StartedAsServerApp();
+ }
+
+// -----------------------------------------------------------------------------------
+// CBrowserAppUi::HistoryLoadPrevious
+// -----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::HistoryLoadPrevious()
+ {
+ if( BrCtlInterface().NavigationAvailable( TBrCtlDefs::ENavigationBack ) )
+ {
+ TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandBack +
+ (TInt)TBrCtlDefs::ECommandIdBase ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------------
+// CBrowserAppUi::HistoryLoadNext
+// -----------------------------------------------------------------------------------
+//
+void CBrowserAppUi::HistoryLoadNext()
+ {
+ if( BrCtlInterface().NavigationAvailable( TBrCtlDefs::ENavigationForward ) )
+ {
+ LoadObserver().DoStartLoad( CBrowserLoadObserver::ELoadUrlTypeOther );
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandForward +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::IsShutdownRequested
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsShutdownRequested() const
+ {
+ return iShutdownRequested;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::IsEmbeddedInOperatorMenu
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsEmbeddedInOperatorMenu() const
+ {
+ const TUid KUidOperatorMenuApp = { 0x10008D5E };
+ const TUid KUidVideoServicesApp = { 0x10281893 };
+
+ // If the embedding application is the Operator Menu or Video Services
+ if ( iEmbeddingApplicationUid == KUidOperatorMenuApp || iEmbeddingApplicationUid == KUidVideoServicesApp )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::IsAppShutterActive
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::IsAppShutterActive() const
+ {
+ CAknAppUi* shuttingApp = CAknEnv::AppWithShutterRunning();
+
+ if ( shuttingApp )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::FetchHomePage
+// --------------------------------------------------------------------------
+//
+void CBrowserAppUi::FetchHomePageL()
+ {
+LOG_ENTERFN( "CBrowserAppUi::FetchHomePageL" );
+ if(!iStartedUp) // just in case, not done
+ CompleteDelayedInit();
+
+ if ( !Fetching() )
+ {
+ UpdateSoftKeys();
+
+ // If the last active view is content view, return to the bookmark view on close.
+ // Otherwise if the last active view is bookmark view and we return to the appropriate view on close.
+ TUid lastViewId = LastActiveViewId();
+ if( lastViewId == KUidBrowserContentViewId ||
+ lastViewId == KUidBrowserNullViewId )
+ {
+ lastViewId = KUidBrowserBookmarksViewId;
+ }
+ SetViewToReturnOnClose( lastViewId );
+
+ if( iLongZeroPressed )
+ {
+ BROWSER_LOG( ( _L( " LongZeroPressed." ) ) );
+
+ // There should only be one special load observer at startup
+ SpecialLoadObserver().SetLongZeroStartup( iLongZeroPressed );
+ iLongZeroPressed = EFalse;
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength );
+ TPtr ptr( buf->Des() );
+ TBool homePgFound( KErrNotFound );
+
+ // try to read Access Points homepage
+ TUint defaultAp( KWmlNoDefaultAccessPoint );
+ // 'always ask' feature doesn't let to read the AP
+ if( Preferences().AccessPointSelectionMode() == EConnectionMethod )
+ {
+ defaultAp = Preferences().DefaultAccessPoint();
+ }
+ if ( defaultAp != KWmlNoDefaultAccessPoint ) // There is an access point defined
+ {
+ CApAccessPointItem* apItem = Preferences().AllPreferencesL().iDefaultAPDetails;
+ if ( apItem )
+ {
+ const HBufC* defaultHP = apItem->ReadConstLongTextL( EApWapStartPage );
+ if ( defaultHP->Length() )
+ {
+ ptr.Zero();
+ ptr.Append( *defaultHP );
+ homePgFound = KErrNone;
+ }
+ }
+ }
+ // in case of error, read user defined home page from SD
+ TInt err( KErrNone );
+ if( homePgFound == KErrNotFound )
+ {
+ // do not let leaving
+ if ((Preferences().HomePageType() == EWmlSettingsHomePageAddress)
+ ||(Preferences().HomePageType() == EWmlSettingsHomePageUseCurrent))
+ {
+ TRAP( err, homePgFound = Preferences().HomePageUrlL( ptr, ETrue ) );
+ }
+ }
+ // we have a url to load
+ if( err == KErrNone &&
+ homePgFound == KErrNone &&
+ ptr.Length() > 0 )
+ {
+ TRAP( err, FetchL( ptr, CBrowserLoadObserver::ELoadUrlTypeOther ) );
+ // in case of any error switch back to BookmarksView
+ if( err != KErrNone )
+ {
+ ContentView()->SetFullScreenOffL();
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ }
+ }
+ else
+ {
+ // we already switched to ContentView, so change the layout back
+ ContentView()->SetFullScreenOffL();
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ }
+ CleanupStack::PopAndDestroy( buf );
+ }
+ else
+ {
+ // it checks HomePageSettings
+ LaunchHomePageL( /* EFalse */ );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::StartPreferencesViewL
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::StartPreferencesViewL( TUint aListItems )
+ {
+ TBool retVal( EFalse );
+ TInt retUi( KErrNone );
+ TInt err(KErrNone);
+
+ //start the connection dialog
+ CCmApplicationSettingsUi* settings = CCmApplicationSettingsUi::NewL();
+ CleanupStack::PushL( settings );
+ TCmSettingSelection selection;
+ // empty filter array because no filtering is wanted
+ TBearerFilterArray filterArray;
+ TRAP ( err, retUi = settings->RunApplicationSettingsL( selection, aListItems, filterArray ) );
+ CleanupStack::PopAndDestroy(); // settings
+
+ //if something has been selected
+ if (retUi)
+ {
+ //set the selection mode
+ iPreferences->SetAccessPointSelectionModeL(
+ STATIC_CAST( TCmSettingSelectionMode, selection.iResult ) );
+
+ //based on the chosen connection type, store the connection identifier(iapid, snap id, always ask)
+ //in the preferences list
+ switch ( iPreferences->AccessPointSelectionMode() )
+ {
+ case EConnectionMethod:
+ {
+ TUint32 id = iPreferences->DefaultAccessPoint();
+ // CMManager gives us IAPid, need to translate to WAPid
+ if (selection.iId != 0)
+ {
+ id = Util::WapIdFromIapIdL( *this, selection.iId );
+ }
+ iPreferences->SetDefaultAccessPointL( id );
+ // Requested AP is preset for PushMtm
+ id = iPreferences->DefaultAccessPoint();
+ if( id != KWmlNoDefaultAccessPoint )
+ {
+ SetRequestedAP( id );
+ retVal = ETrue;
+ }
+ break;
+ }
+
+ case EDestination:
+ {
+ TUint32 snapId = iPreferences->DefaultSnapId();
+ if (selection.iId != 0)
+ {
+ snapId = selection.iId;
+ }
+ iPreferences->SetDefaultSnapId( snapId );
+ if( snapId != KWmlNoDefaultSnapId )
+ {
+ retVal = ETrue;
+ }
+ break;
+ }
+
+ case EAlwaysAsk:
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ // alr: is return val needed? should it be true or false in EAA and default? check how it's used
+ return retVal;
+ }
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::AhleConnection
+// ---------------------------------------------------------------------------
+//
+CRecentUrlStore* CBrowserAppUi::RecentUrlStore()
+ {
+ return iRecentUrlStore;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAppUi::SomeItemsNotSecure
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserAppUi::SomeItemsNotSecure() const
+ {
+ return !( LoadObserver().LoadStatus( CBrowserLoadObserver::ELoadStatusAllItemIsSecure ) );
+ }
+
+// ----------------------------------------------------
+// CBrowserAppUi::IsProgressShown
+// ----------------------------------------------------
+//
+TBool CBrowserAppUi::IsProgressShown() const
+ {
+ return iShowProgress;
+ }
+
+// ----------------------------------------------------
+// CBrowserAppUi::SetProgressShown
+// ----------------------------------------------------
+//
+void CBrowserAppUi::SetProgressShown( TBool aProgressShown )
+ {
+ iShowProgress = aProgressShown;
+ }
+
+// ----------------------------------------------------
+// CBrowserAppUi::RecognizeUiFileL
+// ----------------------------------------------------
+//
+TBool CBrowserAppUi::RecognizeUiFileL( RFile& aFile, TBuf<KMaxDataTypeLength>& aDataTypeDes )
+ {
+ TBool recognized = EFalse;
+ HBufC8* buffer = NULL;
+
+ TFileName fileName;
+ User::LeaveIfError(aFile.FullName(fileName));
+
+ TInt fileSize;
+
+ // Read the file from the beginning into a buffer
+ User::LeaveIfError(aFile.Size(fileSize));
+ buffer = HBufC8::NewLC(fileSize);
+ TPtr8 bufferPtr(buffer->Des());
+ TInt startPos = 0;
+ User::LeaveIfError(aFile.Read(startPos, bufferPtr, fileSize));
+ // move the seek position back to start
+ User::LeaveIfError(aFile.Seek(ESeekStart, startPos));
+
+ _LIT( KDotOPML, ".opml");
+ _LIT( KDotXML, ".xml");
+
+ // First try the name extension
+ if ( fileName.Length() >= 3 )
+ {
+ TInt dotPos = fileName.LocateReverse( '.' );
+ if ( dotPos != KErrNotFound )
+ {
+ TInt extLength = fileName.Length() - dotPos;
+ HBufC* ext = fileName.Right( extLength ).AllocL();
+ CleanupStack::PushL( ext );
+
+ // if .opml return true
+ if ( ext->CompareF( KDotOPML ) == 0)
+ {
+ aDataTypeDes = KOPMLMimeType;
+ recognized = ETrue;
+ }
+ else if (ext->CompareF( KDotXML ) == 0 )
+ {
+ _LIT8( dtd, "<opml" );
+ if( bufferPtr.FindF( dtd ) != KErrNotFound )
+ {
+ aDataTypeDes = KOPMLMimeType;
+ recognized = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // ext
+ }
+ }
+
+ if (!recognized)
+ {
+ // just check content of buffer
+ _LIT8( dtd, "<opml" );
+ if( (bufferPtr.Length() > 5) &&
+ (bufferPtr.FindF( dtd ) != KErrNotFound ))
+ {
+ aDataTypeDes = KOPMLMimeType;
+ recognized = ETrue;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); //buffer
+
+ return recognized;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ConfirmUiHandlingL
+// ---------------------------------------------------------
+//
+TBool CBrowserAppUi::ConfirmUiHandlingL( TFileName& aFilename, TBuf<KMaxDataTypeLength>& aDataTypeDes )
+ {
+ // switch on data type desc and handle file accordingly
+ if(aDataTypeDes.Compare( KOPMLMimeType ) == 0)
+ {
+ // Display confirmation dialog before activating feeds view
+ HBufC* message = StringLoader::LoadLC(R_FEEDS_QUERY_IMPORT_NOW, aFilename);
+ HBufC* lsc_yes = StringLoader::LoadLC(R_FEEDS_IMPORT_NOW_YES);
+ HBufC* rsc_no = StringLoader::LoadLC(R_FEEDS_IMPORT_NOW_NO);
+
+ TBool ret(iDialogsProvider->DialogConfirmL( _L(""), *message, *lsc_yes, *rsc_no ));
+
+ CleanupStack::PopAndDestroy(3); //message, lsc_yes, rsc_no
+
+ if(ret)
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::CopyUiRFileToFileL
+// ---------------------------------------------------------
+//
+
+void CBrowserAppUi::CopyUiRFileToFileL( RFile& aFile, const TDesC& aFilepath )
+ {
+ //
+ // copy r-file to a temporary file
+ //
+ RFs tempRFs;
+ RFile tempRFile;
+ TInt fileSize;
+ HBufC8* buffer = NULL;
+
+ // Connect to file server
+ User::LeaveIfError(tempRFs.Connect());
+ CleanupClosePushL(tempRFs);
+
+ // Create the filepath to copy to
+ // Replace the file if it already exists
+ User::LeaveIfError(tempRFile.Replace(tempRFs, aFilepath, EFileWrite));
+ CleanupClosePushL(tempRFile);
+
+ // Copy the file
+ User::LeaveIfError(aFile.Size(fileSize));
+ buffer = HBufC8::NewLC(fileSize);
+ TPtr8 bufferPtr(buffer->Des());
+
+ // Read from the start of the file
+ User::LeaveIfError(aFile.Read(0, bufferPtr, fileSize));
+ User::LeaveIfError(tempRFile.Write(bufferPtr, fileSize));
+
+ tempRFile.Close();
+ tempRFs.Close();
+
+ // Cleanup Buffer and file copy stuff
+ CleanupStack::PopAndDestroy(3); //buffer, tempRFile, tempRFs
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::HandleUiFileL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::HandleUiFileL( TFileName& aFilepath, TBuf<KMaxDataTypeLength>& aDataTypeDes )
+ {
+ // switch on data type desc and handle file accordingly
+ if(aDataTypeDes.Compare(KOPMLMimeType) == 0)
+ {
+ // Activate Content view first in order to
+ // get it's BrowserControl instance ready to go
+ // (as opposed to Feeds' BC instance) to be used to render
+ // feeds content in case the user wants to read
+ // the feed in-page.
+ SetLastActiveViewId( KUidBrowserContentViewId );
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ ActivateLocalViewL( LastActiveViewId() );
+
+ // Now activate bookmarks view
+ SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ SetViewToBeActivatedIfNeededL( LastActiveViewId() );
+ ActivateLocalViewL( LastActiveViewId() );
+ HandleForegroundEventL( ETrue );
+
+ // wait until the content view is completely ready
+ WaitCVInit();
+
+ // begin import, pass to feeds view
+ iFeedsClientUtilities->BeginImportOPMLFeedsFileL(aFilepath);
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::HandleUiDownloadL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::HandleUiDownloadL( TFileName& aFilepath, TBuf<KMaxDataTypeLength>& aDataTypeDes )
+ {
+ // switch on data type desc and handle file accordingly
+ if(aDataTypeDes.Compare(KOPMLMimeType) == 0)
+ {
+ SetLastActiveViewId( KUidBrowserFeedsFolderViewId );
+ // begin import
+ iFeedsClientUtilities->BeginImportOPMLFeedsFileL(aFilepath);
+ // switch back to FeedsView, so change layout
+ ContentView()->SetFullScreenOffL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::LaunchIntoFeedsL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::LaunchIntoFeedsL()
+{
+ if(iBrowserAlreadyRunning && (LastActiveViewId() == KUidBrowserContentViewId))
+ {
+ iFeedsClientUtilities->ShowFolderViewL(KUidBrowserContentViewId);
+ }
+ else
+ {
+ iFeedsClientUtilities->ShowFolderViewL();
+ }
+}
+
+// ----------------------------------------------------
+// CBrowserAppUi::CreateFullUrlLC
+// ----------------------------------------------------
+//
+HBufC* CBrowserAppUi::CreateFullUrlLC(
+ const TDesC& aUrl,
+ const TDesC& aUsername,
+ const TDesC& aPassword )
+ {
+ // username[:password]@server/document
+ TInt lPw = aPassword.Length();
+ TInt lUn = aUsername.Length();
+ _LIT( KBrowserScheme, "://" );
+ TInt index = aUrl.Find( KBrowserScheme );
+ if( index == KErrNotFound )
+ {
+ index = 0; // insert at first position
+ }
+ else
+ {
+ index += 3; // insert after scheme
+ }
+
+ HBufC *fullUrl = HBufC::NewLC( aUrl.Length() + lUn + lPw + 3 );
+ fullUrl->Des().Copy( aUrl );
+ if( lPw + lUn )
+ {
+ fullUrl->Des().Insert( index, _L( "@" ) );
+ }
+ if( lPw )
+ {
+ fullUrl->Des().Insert( index, aPassword );
+ fullUrl->Des().Insert( index, _L( ":" ) );
+ }
+ if( lUn )
+ {
+ fullUrl->Des().Insert( index, aUsername );
+ }
+ // insert scheme???
+ fullUrl->Des().ZeroTerminate();
+
+ return fullUrl;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::HandleResourceChangeL( TInt aType )
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::HandleResourceChangeL( TInt aType )
+ {
+ LOG_ENTERFN("CBrowserAppUi::HandleResourceChangeL");
+ LOG_WRITE_FORMAT(" aType: %d", aType);
+ if( iExitInProgress )
+ {
+ BROWSER_LOG( ( _L(" iExitInProgress ETrue ") ) );
+ return;
+ }
+
+ CAknViewAppUi::HandleResourceChangeL( aType );
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ CBrowserViewBase* activeView = ActiveView( );
+ if( activeView != NULL )
+ {
+ activeView->HandleClientRectChange();
+ if ( ContentView() && (activeView != ContentView()) )
+ {
+ ContentView()->HandleClientRectChange();
+ }
+ }
+ }
+ if (aType == KEikMessageFadeAllWindows)
+ {
+ if (ContentView() && ContentView()->PenEnabled())
+ {
+ if (iCurrentView == KUidBrowserContentViewId)
+ {
+ ContentView()->Toolbar()->DisableToolbarL(ETrue);
+ }
+ }
+ }
+
+ if (aType == KEikMessageUnfadeWindows)
+ {
+ if (ContentView()&& ContentView()->PenEnabled() && !ExitInProgress())
+ {
+ if (iCurrentView == KUidBrowserContentViewId)
+ {
+ ContentView()->MakeZoomSliderVisibleL(EFalse);
+ ContentView()->Toolbar()->DisableToolbarL(EFalse);
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ChangeConnectionL()
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::ChangeConnectionL()
+ {
+ TConManChangeConn change;
+ // This will contain the new IAP as well, but it needs to pass the old one
+ TUint32 newAp = Util::IapIdFromWapIdL( *this, RequestedAp() );
+ iConnection->ChangeIapL( change, newAp );
+ if( EConManDoNothing == change )
+ {
+ // Do nothing
+ }
+ else
+ {
+ //cancel transaction
+ SendDisconnectEventL();
+ /* start all */
+ if( EConManCloseAndStart == change )
+ {
+ //close connection
+ iConnection->Disconnect();
+
+#ifdef __RSS_FEEDS
+ //notify feeds engine to close the connection
+ iFeedsClientUtilities->DisconnectManualUpdateConnectionL();
+#endif
+ }
+ iConnection->SetRequestedAP( newAp );
+ TInt err = iConnection->StartConnectionL( ETrue );
+ if( err == KErrNone )
+ {
+ iConnection->ShowConnectionChangedDlg();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::HandleContentL()
+// ---------------------------------------------------------
+//
+TBool CBrowserAppUi::HandleContentL( const TDesC& aFileName,
+ const CAiwGenericParamList& aParamList,
+ TBool& aContinue )
+ {
+ // Put the file name to the generic parameter list, if it is not there yet
+ TInt index(0);
+ aParamList.FindFirst( index, EGenericParamFile, EVariantTypeDesC );
+ if ( index == KErrNotFound )
+ {
+ TAiwVariant paramVariant( aFileName );
+ TAiwGenericParam genericParam( EGenericParamFile, paramVariant );
+ CAiwGenericParamList* paramList = (CAiwGenericParamList*)&aParamList;
+ paramList->AppendL( genericParam );
+ }
+
+ // Set EGenericParamAllowMove - we allow handlers to apply move instead
+ // of copy for the file.
+ aParamList.FindFirst( index, EGenericParamAllowMove, EVariantTypeAny );
+ if ( index == KErrNotFound )
+ {
+ TBool allowMove( ETrue );
+ TAiwVariant allowMoveVariant( allowMove );
+ TAiwGenericParam genericParamAllowMove( EGenericParamAllowMove, allowMoveVariant );
+ CAiwGenericParamList* paramList = (CAiwGenericParamList*)&aParamList;
+ paramList->AppendL( genericParamAllowMove );
+ }
+
+ BrowserLauncherService()->DownloadFinishedL( KErrNone, aParamList );
+
+ // Wait until the client sends two TBools (contentHandled & continueBrowsing).
+ iClientWantsToContinue = EFalse;
+ iWasContentHandled = EFalse;
+
+ iLauncherServiceWait.Start();
+
+ // iClientWantsToContinue and iWasContentHandled contains the results
+ aContinue = iClientWantsToContinue;
+ return iWasContentHandled;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::DownloadedContentHandlerReserved1()
+// ---------------------------------------------------------
+//
+TAny* CBrowserAppUi::DownloadedContentHandlerReserved1( TAny* /*aAnyParam*/ )
+ {
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::SetContentHandlingResult()
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::SetContentHandlingResult
+ ( TBool aClientWantsToContinue, TBool aWasContentHandled )
+ {
+ iClientWantsToContinue = aClientWantsToContinue;
+ iWasContentHandled = aWasContentHandled;
+
+ // continue handling the content
+ iLauncherServiceWait.AsyncStop();
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::LoadSearchPageL()
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::LoadSearchPageL()
+ {
+ TPtrC url = iPreferences->SearchPageUrlL();
+
+ // url undefined
+ if ( !url.Length() )
+ {
+ HBufC* query = StringLoader::LoadLC(
+ R_BROWSER_QUERY_DEF_SEARCHPAGE );
+ // Ask if user want to define the search web setting now
+ if (
+ TBrowserDialogs::DialogQueryReqL( query->Des(),
+ KNullDesC,
+ KNullDesC )
+ )
+ {
+ HBufC* prompt = StringLoader::LoadLC(
+ R_BROWSER_PROMPT_SEARCH_URL );
+ HBufC* retBuf = HBufC::NewLC( KMaxSearchPgUrlLength );
+ TPtr retString = retBuf->Des();
+ retString.Copy( KNullDesC );
+
+ TInt result = TBrowserDialogs::DialogPromptReqL(
+ prompt->Des(),
+ &retString,
+ ETrue,
+ KMaxSearchPgUrlLength
+ );
+
+ if( result ) // URL was accepted
+ {
+ Preferences().SetSearchPageUrlL( retString );
+ url.Set( iPreferences->SearchPageUrlL() );
+ }
+ CleanupStack::PopAndDestroy( 2 ); // retBuf, prompt
+ }
+ CleanupStack::PopAndDestroy( query );
+ }
+
+ FetchL( url );
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::CloseWindowL()
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::CloseWindowL( TInt aWindowId )
+ {
+LOG_ENTERFN("AppUi::CloseWindowL");
+
+ //There are only two cases for closing window. One is user initialized and the
+ //other is script initialized. For both cases, the window should be deleted.
+ TBool forceDelete( ETrue );
+ // this variable is useful to know if the window has a parent window which needs to be activated on closing current window
+ TBool parentPresent(EFalse);
+ if ( WindowMgr().CurrentWindowQue() && WindowMgr().CurrentWindowQue()->iParent )
+ {
+ parentPresent = ETrue;
+ }
+ // delete the current window by default
+ if( aWindowId == 0 )
+ {
+ aWindowId = WindowMgr().CurrentWindow()->WindowId();
+ // scripts directly pass a real windowId,
+ // so if user initiated the process, we really delete the window
+ forceDelete = ETrue;
+ }
+ //If this window has been created from Search app
+ if(aWindowId == iWindowIdFromFromExternApp)
+ {
+ //Make it false as window is going to close down
+ iSameWinApp = EFalse;
+ }
+#ifdef __RSS_FEEDS
+ // If we are closing a Feeds Full Story then go back to feeds
+ TBool feedsWindow(EFalse);
+ CBrowserWindow* win;
+ TInt err = WindowMgr().Window(aWindowId, win);
+ if (err == KErrNone)
+ {
+ feedsWindow = win->HasFeedsContent();
+ win->SetHasFeedsContent(EFalse);
+ }
+#endif
+
+ TInt winId = WindowMgr().DeleteWindowL( aWindowId, forceDelete );
+
+#ifdef __RSS_FEEDS
+ if (feedsWindow)
+ {
+ SetViewToBeActivatedIfNeededL( KUidBrowserFeedsFeedViewId );
+ return;
+ }
+#endif
+
+ if( winId > 0 ) // still remain a window to be activated
+ {
+ WindowMgr().SwitchWindowL( winId );
+ if(CalledFromAnotherApp() && (!IsEmbeddedModeOn()) && !parentPresent)
+ {
+ SetCalledFromAnotherApp(EFalse);
+ SendBrowserToBackground();
+ }
+ }
+ else if( winId == 0) // last window was closed
+ {
+ if(CalledFromAnotherApp() && (!IsEmbeddedModeOn()))
+ {
+#ifdef __RSS_FEEDS
+ if ((GetPreviousViewFromViewHistory() == KUidBrowserFeedsFolderViewId) ||
+ (GetPreviousViewFromViewHistory() == KUidBrowserFeedsTopicViewId) ||
+ (GetPreviousViewFromViewHistory() == KUidBrowserFeedsFeedViewId))
+ {
+ SetViewToBeActivatedIfNeededL( GetPreviousViewFromViewHistory() );
+ SetCalledFromAnotherApp(EFalse);
+ SendBrowserToBackground();
+ }
+ else
+ {
+ ExitBrowser(ETrue);
+ }
+#else
+ ExitBrowser(ETrue);
+#endif // __RSS_FEEDS
+ }
+ else
+ {
+ ExitBrowser(ETrue);
+ }
+ }
+ // else a background window was closed
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::StartProgressAnimationL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::StartProgressAnimationL()
+ {
+LOG_ENTERFN("AppUi::StartProgressAnimationL");
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::StopProgressAnimationL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::StopProgressAnimationL()
+ {
+LOG_ENTERFN("AppUi::StopProgressAnimationL");
+ }
+
+#ifdef __RSS_FEEDS
+// ---------------------------------------------------------
+// CBrowserAppUi::FeedsClientUtilities
+// ---------------------------------------------------------
+//
+CFeedsClientUtilities& CBrowserAppUi::FeedsClientUtilities() const
+ {
+ return *iFeedsClientUtilities;
+ }
+#endif // __RSS_FEEDS
+
+// ---------------------------------------------------------
+// CBrowserAppUi::OpenLinkInNewWindowL()
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::OpenLinkInNewWindowL( const CFavouritesItem& aBookmarkItem )
+ {
+ if( ( aBookmarkItem.IsItem() ) &&
+ ( aBookmarkItem.Uid() != KFavouritesRSSItemUid ) )
+ {
+ // Check if we should/can create a new window
+ // In most cases when the feature is not allowed option menu items have been dimmed.
+ // In the case where a long key press on a bookmark happens we fall through to this function
+ // and check the feature here. If a new window is not allowed we can open in the current window
+ if( IsPageLoaded() &&
+ Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ !Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))
+ {
+ // there is already a window, so create a new one
+ CBrowserWindow *win = WindowMgr().CreateWindowL( 0, &KNullDesC );
+ if (win != NULL)
+ {
+ CleanupStack::PushL( win );
+ WindowMgr().SwitchWindowL( win->WindowId() );
+ FetchBookmarkL( aBookmarkItem );
+ CleanupStack::Pop(); // win
+ }
+ }
+ else
+ {
+ // no page is loaded yet, so do not create new window
+ FetchBookmarkL( aBookmarkItem );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::SendDisconnectEventL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::SendDisconnectEventL()
+ {
+ LOG_ENTERFN("CBrowserAppUi::SendDisconnectEventL");
+
+ if(!iStartedUp)
+ return;
+
+ SpecialLoadObserver().CancelConnection();
+ CArrayFixFlat<CWindowInfo*>* windows = iWindowManager->GetWindowInfoL( this );
+ if( windows )
+ {
+ TInt i;
+
+ for ( i = 0; i < windows->Count(); i++ )
+ {
+ CBrowserWindow* window = NULL;
+ iWindowManager->Window( windows->At( i )->iWindowId, window );
+ if( window )
+ {
+ TInt err;
+ // BROWSER_LOG( ( _L( " iConnection Connected" ) ) );
+ TRAP( err, window->BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ // BROWSER_LOG( ( _L( " HandleCommandL: %d"), err ) );
+ }
+ }
+
+ CBrowserWindow* window = NULL;
+ iWindowManager->Window( windows->At( 0 )->iWindowId, window );
+
+ // delete the window items before deleting the array
+ for( i=0; i<windows->Count(); ++i )
+ delete windows->At( i );
+
+ delete windows;
+ }
+ }
+ /*
+
+// ----------------------------------------------------
+// CBrowserAppUi::IsPgNotFound
+// ----------------------------------------------------
+//
+TBool CBrowserAppUi::IsPgNotFound() const
+ {
+ return iPgNotFound;
+ }
+*/
+// ----------------------------------------------------
+// CBrowserAppUi::HandleApplicationSpecificEventL
+// ----------------------------------------------------
+//
+void CBrowserAppUi::HandleApplicationSpecificEventL(TInt aEventType, const TWsEvent& aWsEvent)
+ {
+ CAknAppUi::HandleApplicationSpecificEventL(aEventType, aWsEvent);
+
+ /*
+ * Note: Even though we get these memory events from the system for handling OOM, and we pass them off
+ * to the command handler, there is no code further down the line that actually handles them (it would
+ * normally be in BrCtl). We totally ignore these events. This is because the system has too high of an OOM threshold.
+ * I.e. the system may only have 6m left and think it's out of memory, however, the browser can still render
+ * many pages in only 6m. So, these system events are ignored and the browser handles OOM with its own mechanism.
+ * (See OOMStopper and OOMHandler)
+ */
+ if(aEventType == KAppOomMonitor_FreeRam )
+ {
+ iWindowManager->CloseAllWindowsExceptCurrent();
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandFreeMemory + (TInt)TBrCtlDefs::ECommandIdBase);
+ }
+ else if(aEventType == KAppOomMonitor_MemoryGood)
+ {
+ BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandMemoryGood + (TInt)TBrCtlDefs::ECommandIdBase);
+ }
+ else if ( KAknFullOrPartialForegroundGained == aEventType )
+ {
+ if ( iViewToBeActivatedIfNeeded.iUid )
+ {
+ ActivateLocalViewL( iViewToBeActivatedIfNeeded );
+ }
+ else
+ {
+ // LastActiveViewId() might return with 0!
+ TRAP_IGNORE( ActivateLocalViewL( LastActiveViewId() ) );
+ }
+ iViewToBeActivatedIfNeeded.iUid = 0;
+ }
+ }
+
+// ----------------------------------------------------
+// CBrowserAppUi::OfferApplicationSpecificKeyEventL
+//
+// Use this function to handle key events that are application wide and not specific to any view
+// All views (containers) call this first and should return if key was consumed
+// As a note for future reference the red end key shows up as iCode = EKeyNo...though you would
+// think it would be EKeyEnd...
+// ----------------------------------------------------
+//
+TKeyResponse CBrowserAppUi::OfferApplicationSpecificKeyEventL(const TKeyEvent& /*aKeyEvent*/,
+ TEventCode /*aType*/)
+ {
+ TKeyResponse result( EKeyWasNotConsumed );
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::GetPreviousViewFromViewHistory
+// -----------------------------------------------------------------------------
+//
+TUid CBrowserAppUi::GetPreviousViewFromViewHistory()
+{
+ return iPreviousView;
+}
+
+// -----------------------------------------------------------------------------
+// CBrowserAppUi::SaveFocusedImageToGalleryL
+// -----------------------------------------------------------------------------
+//
+void CBrowserAppUi::SaveFocusedImageToGalleryL()
+ {
+ TBrCtlImageCarrier* imageCarrier = BrCtlInterface().FocusedImageLC();
+ CDocumentHandler* docHandler = CDocumentHandler::NewLC();
+ TUriParser uriParser;
+ User::LeaveIfError(uriParser.Parse(imageCarrier->Url()));
+ TPtrC path;
+ path.Set( uriParser.Extract( EUriPath ) );
+ HBufC* fileName = NULL;
+ if( path.Length() )
+ {
+ TInt slash = path.LocateReverse( '/' );
+ if( slash != KErrNotFound && slash != path.Length() )
+ {
+ TPtrC temp( path.Right( path.Length() - slash - 1 ) );
+ if( temp.Length() )
+ {
+ fileName = HBufC::NewLC(temp.Length() + 4); // leave room for edding extenstion if needed
+ fileName->Des().Copy(temp);
+ }
+ }
+ }
+ HBufC8* dataType8 = NULL;
+ dataType8 = HBufC8::NewLC(imageCarrier->ContentType().Length());
+ dataType8->Des().Copy(imageCarrier->ContentType());
+ TDataType dataType(*dataType8);
+ if (fileName)
+ {
+ TPtr fileNamePtr(fileName->Des());
+ docHandler->CheckFileNameExtension(fileNamePtr, dataType);
+ docHandler->SaveL(imageCarrier->RawData(), dataType, *fileName, KEntryAttNormal);
+ }
+ else
+ {
+ docHandler->SaveL(imageCarrier->RawData(), dataType, KEntryAttNormal);
+ }
+ if (fileName)
+ {
+ CleanupStack::PopAndDestroy(2); // fileName, dataType8
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(dataType8); // dataType8
+ }
+
+ TFileName fName;
+ User::LeaveIfError(docHandler->GetPath(fName));
+
+ #ifdef BRDO_APP_GALLERY_SUPPORTED_FF
+
+ CMGXFileManager* mgFileManager = MGXFileManagerFactory::NewFileManagerL(CEikonEnv::Static()->FsSession());
+ CleanupStack::PushL(mgFileManager);
+ if( fName.Length() > 0 )
+ {
+ TRAP_IGNORE( mgFileManager->UpdateL( fName ) );
+ }
+ else
+ {
+ TRAP_IGNORE( mgFileManager->UpdateL() );
+ }
+ CleanupStack::PopAndDestroy(1); // mgFileManager
+
+ #endif
+
+ CleanupStack::PopAndDestroy(1); // imageCarrier
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::CheckFlashPresent
+// ---------------------------------------------------------
+//
+TBool CBrowserAppUi::CheckFlashPresent()
+ {
+ RImplInfoPtrArray animPluginList;
+
+ TRAP_IGNORE( REComSession::ListImplementationsL( KBrowserPluginInterfaceUid,
+ animPluginList ) );
+
+
+ _LIT8(KFlashMimeType, "application/x-shockwave-flash");
+
+ const TInt count = animPluginList.Count();
+ TBool found = EFalse;
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CImplementationInformation* implInfo = animPluginList[i];
+ if (( implInfo->DataType( ) ).Find( KFlashMimeType) != KErrNotFound)
+ {
+ found = ETrue; //flash plugin is present
+ break;
+ }
+ }
+ animPluginList.ResetAndDestroy();
+
+ return found;
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::FlashPresent
+// ---------------------------------------------------------
+//
+TBool CBrowserAppUi::FlashPresent()
+ {
+ return iFlashPresent;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ShowNameAndVersionL
+// ---------------------------------------------------------
+//
+void CBrowserAppUi::ShowNameAndVersionL()
+{
+ HBufC* header = StringLoader::LoadLC( R_BROWSER_QUERY_BROWSER_VERSION );
+ HBufC* browserVersion = BrCtlInterface().VersionInfoLC(TBrCtlDefs::EBrowserVersion);
+
+ // output browser version to dialog
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *browserVersion );
+ CleanupStack::PushL(dlg);
+ dlg->PrepareLC( R_BROWSER_PAGE_VERSION );
+ CleanupStack::Pop(dlg);
+ CAknPopupHeadingPane* hPane = dlg->QueryHeading();
+ if ( hPane )
+ {
+ CleanupStack::PushL(hPane);
+ hPane->SetTextL( *header );
+ CleanupStack::Pop(hPane);
+ }
+ dlg->RunLD();
+ CleanupStack::PopAndDestroy(2); // browserVersion, header
+}
+
+
+// ---------------------------------------------------------
+// CBrowserAppUi::IsLaunchHomePageDimmedL
+// ---------------------------------------------------------
+//
+TBool CBrowserAppUi::IsLaunchHomePageDimmedL()
+{
+
+ // Set dimmed flag if shortcut key for launch home page is dimmed and was selected
+ TBool dimmed = EFalse;
+ TBool homepage = Preferences().UiLocalFeatureSupported( KBrowserUiHomePageSetting );
+ if( homepage )
+ {
+ TWmlSettingsHomePage pgtype = Preferences().HomePageType();
+ TBool alwaysAskCase = ((Preferences().AccessPointSelectionMode() == EAlwaysAsk ) &&
+ ( EWmlSettingsHomePageAccessPoint == pgtype ));
+
+ if (alwaysAskCase || (pgtype == EWmlSettingsHomePageBookmarks))
+ {
+ dimmed = ETrue;
+ }
+ else if (pgtype == EWmlSettingsHomePageAccessPoint)
+ {
+ // check to see if no home page defined on the access point
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr ptr( buf->Des() );
+ TInt pgFound = Preferences().HomePageUrlL( ptr );
+ if( pgFound != KErrNone )
+ {
+ dimmed = ETrue;
+ }
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ else
+ {
+ dimmed = ETrue;
+ }
+
+ return(dimmed);
+}
+
+// ---------------------------------------------------------
+// CBrowserAppUi::IsDisplayingMenuOrDialog
+// ---------------------------------------------------------
+//
+TBool CBrowserAppUi::IsDisplayingMenuOrDialog()
+{
+ return CCoeAppUi::IsDisplayingMenuOrDialog();
+}
+// ---------------------------------------------------------
+// CBrowserAppUi::HandleWsEventL
+// ---------------------------------------------------------
+void CBrowserAppUi::HandleWsEventL(const TWsEvent& aEvent,
+ CCoeControl* aDestination)
+{
+ /**
+ * We need a special handling for pointer events to handle the situation
+ * when the pointer is crossing the boundaries of plugin window. Browser
+ * scrolling id done using PointerMove events not a Drag.
+ * When PointerMoveBuffer is ready HandlePointerBufferReadyL() is called by
+ * Symbian framework. By default if Pointer Down event wasn't issued on the
+ * current CoeControl Pointer Move events are not sent to this control.
+ * The code below makes sure that when we entering the Content View window
+ * from pluging window we are still getting move events.
+ * When we are leaving Content window we are generating fake Pointer Up
+ * event in order to on-demand scrollbars disapear properly. The later is a
+ * hack and needs to be re-designed in such way that pluging will pass
+ * pointer event back to the browser.
+ */
+ if (aDestination != NULL)
+ {
+ TInt type=aEvent.Type();
+
+ switch (type)
+ {
+ case EEventPointerExit:
+ {
+
+ break;
+ }
+
+ case EEventPointerEnter:
+ {
+ if (iCurrentView == KUidBrowserContentViewId)
+ {
+ CCoeControl* ctrl = &(BrCtlInterface());
+ ctrl->DrawableWindow()->DiscardPointerMoveBuffer();
+ const TInt count = ctrl->CountComponentControls();
+ for (TInt i = 0; i < count; i++)
+ {
+ CCoeControl* c = ctrl->ComponentControl(i);
+ if (c)
+ {
+ c->ClaimPointerGrab(EFalse);
+ }
+ }
+ ctrl->ClaimPointerGrab(EFalse);
+ }
+ break;
+ }
+
+ }
+ }
+ CAknViewAppUi::HandleWsEventL(aEvent, aDestination);
+}
+
+// ---------------------------------------------------------
+// CBrowserAppUi::HandleSystemEventL
+// ---------------------------------------------------------
+#if defined(__S60_50__)
+void CBrowserAppUi::HandleSystemEventL(const TWsEvent& aEvent)
+ {
+
+ /**
+ * We need a special handling for System events to handle the situation
+ * like when the shut down is done while download is going on.
+ */
+
+ switch (*(TApaSystemEvent*)(aEvent.EventData()))
+ {
+ case EApaSystemEventShutdown:
+ // do things here
+ ExitBrowser ( IsAppShutterActive() );
+ break;
+ default:
+ break;
+ }
+ // call base class implementation
+ CAknAppUi::HandleSystemEventL(aEvent);
+ }
+#endif
+// ---------------------------------------------------------
+// CBrowserAppUi::StartFetchHomePageL
+// ---------------------------------------------------------
+void CBrowserAppUi::StartFetchHomePageL(void)
+ {
+ if(!iStartedUp)
+ CompleteDelayedInit();
+
+ // There's a homepage to be launched so start in content view
+ SetLastActiveViewId(KUidBrowserContentViewId);
+ //wait for contentview to initialize itself
+ WaitCVInit();
+
+ TInt error( KErrNone );
+ TRAP( error, FetchHomePageL() );
+ if( error != KErrNone )
+ {
+ CloseContentViewL();
+ }
+ }
+
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+// ---------------------------------------------------------
+// CBrowserAppUi::CompleteIADUpdateCallback
+// ---------------------------------------------------------
+TInt CBrowserAppUi::CompleteIADUpdateCallback( TAny* aBrowserAppUi )
+ {
+ TRAP_IGNORE( ((CBrowserAppUi*)aBrowserAppUi)->CheckUpdatesL() )
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserAppUi::CheckUpdateFileAvailable
+// ---------------------------------------------------------
+TBool CBrowserAppUi::CheckUpdateFileAvailable()
+ {
+ LOG_ENTERFN("CBrowserAppUi::CheckUpdateFileAvailable");
+ TBuf<KMaxFileName> privatePath;
+ TBuf<KMaxFileName> updateFileName;
+ iFs.PrivatePath( privatePath );
+ updateFileName.Copy( privatePath );
+ updateFileName.Append( KUpdateFileName );
+ RFile updatefile;
+ TInt err = updatefile.Open( iFs, updateFileName, EFileRead );
+ if ( err == KErrNotFound )
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdateFileAvailable - update file not available" );
+ return EFalse;
+ }
+ else
+ {
+ LOG_WRITE( "CBrowserAppUi::CheckUpdateFileAvailable - update file available" );
+ updatefile.Close();
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::WriteUpdateFile
+// ---------------------------------------------------------
+void CBrowserAppUi::WriteUpdateFile()
+ {
+ LOG_ENTERFN("CBrowserAppUi::WriteUpdateFile");
+ TBuf<KMaxFileName> privatePath;
+ TBuf<KMaxFileName> updateFileName;
+ iFs.PrivatePath( privatePath );
+ updateFileName.Copy( privatePath );
+ updateFileName.Append( KUpdateFileName );
+ RFile updatefile;
+ TInt err = updatefile.Open( iFs, updateFileName, EFileWrite | EFileShareExclusive );
+ if(err == KErrNotFound)
+ {
+ LOG_WRITE( "CBrowserAppUi::WriteUpdateFile - update file not available so create it" );
+ err = updatefile.Create( iFs, updateFileName, EFileWrite | EFileShareExclusive );
+ }
+ //Get the current time
+ TTime timenow;
+ timenow.HomeTime();
+ TInt64 time = timenow.Int64();
+ TBuf8<50> data;
+ data.AppendNum(time);
+ LOG_WRITE( "CBrowserAppUi::WriteUpdateFile - write the current time in update file" );
+ updatefile.Write(data);
+ updatefile.Close();
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::DeleteUpdateFile
+// ---------------------------------------------------------
+void CBrowserAppUi::DeleteUpdateFile()
+ {
+ TBuf<KMaxFileName> privatePath;
+ TBuf<KMaxFileName> updateFileName;
+ iFs.PrivatePath( privatePath );
+ updateFileName.Copy( privatePath );
+ updateFileName.Append( KUpdateFileName );
+ iFs.Delete(updateFileName);
+ }
+
+// ---------------------------------------------------------
+// CBrowserAppUi::ReadUpdateFile
+// ---------------------------------------------------------
+TInt64 CBrowserAppUi::ReadUpdateFile()
+ {
+ TBuf<KMaxFileName> privatePath;
+ TBuf<KMaxFileName> updateFileName;
+ //Get the private path then append the filename
+ iFs.PrivatePath( privatePath );
+ updateFileName.Copy( privatePath );
+ updateFileName.Append( KUpdateFileName );
+ RFile updatefile;
+ TInt err = updatefile.Open( iFs, updateFileName, EFileRead );
+ TInt64 dataValue = 0;
+ //If file is found
+ if ( err != KErrNotFound )
+ {
+ TBuf8<50> readBuf;
+ err = updatefile.Read(readBuf);
+ updatefile.Close();
+ if((err == KErrNone) && (readBuf.Length()>NULL))
+ {
+ //Convert from TBuf8 to TInt64
+ TLex8 lex(readBuf);
+ lex.Val(dataValue);
+ }
+ }
+ return dataValue;
+ }
+#endif
+
+TBool CBrowserAppUi::IsSameWinApp(TUid aMessageUid)
+{
+ TInt nElements = sizeof(mArrayOfExternalAppUid)/sizeof(TInt);
+ for(TInt nIndex = 0;nIndex < nElements; nIndex++)
+ {
+ if(aMessageUid == TUid::Uid(mArrayOfExternalAppUid[nIndex]))
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+}
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAppViewBase.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,321 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserAppViewBase.
+*
+*
+*/
+
+
+#include "BrowserAppViewBase.h"
+#include "BrowserAppUi.h"
+#include "ApiProvider.h"
+#include <BrowserNG.rsg>
+#include "CommonConstants.h"
+#include <aknviewappui.h>
+#include <eikbtgpc.h>
+#include <avkon.rsg>
+#include <LayoutMetaData.cdl.h> // check landscape/portrait modes
+#include <aknenv.h>
+#include <AknSgcc.h>
+#include <StringLoader.h>
+#include "BrowserUtil.h"
+#include <browseruisdkcrkeys.h>
+#include <UTF.h>
+#include <charconv.h>
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TSKPair::TSKPair
+// ---------------------------------------------------------
+//
+TSKPair::TSKPair():
+ iCmdId(EWmlNoCmd),iQtnRsc(R_BROWSER_DYN_SK_NULL)
+{
+}
+
+// ---------------------------------------------------------
+// TSKPair::TSKPair
+// ---------------------------------------------------------
+//
+TSKPair::TSKPair(TInt aId,TInt aRsc):
+ iCmdId(aId),iQtnRsc(aRsc)
+{
+}
+
+// ---------------------------------------------------------
+// TSKPair::IsNotDefault
+// ---------------------------------------------------------
+//
+TBool TSKPair::IsAssigned()
+{
+ return ( (iCmdId != EWmlNoCmd) && (iQtnRsc != R_BROWSER_DYN_SK_NULL) );
+}
+
+// ---------------------------------------------------------
+// TSKPair::operator==
+// ---------------------------------------------------------
+//
+TBool TSKPair::operator==(TSKPair aSkPair)
+{
+ return( (iCmdId == aSkPair.id()) && (iQtnRsc == aSkPair.qtn()) );
+}
+
+// ---------------------------------------------------------
+// TSKPair::operator=
+// ---------------------------------------------------------
+//
+void TSKPair::operator=(TSKPair aSKPair)
+{
+ iCmdId = aSKPair.id();
+ iQtnRsc = aSKPair.qtn();
+}
+
+// ---------------------------------------------------------
+// TSKPair::set
+// ---------------------------------------------------------
+//
+void TSKPair::setPair(TInt aId, TInt aRsc)
+{
+ iCmdId = aId;
+ iQtnRsc = aRsc;
+}
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserViewBase::CBrowserViewBase
+// ---------------------------------------------------------
+//
+CBrowserViewBase::CBrowserViewBase( MApiProvider& aApiProvider ):
+ iApiProvider( aApiProvider ),
+ iLastCommandSet( R_BROWSER_BUTTONS_CBA_NULL )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::ApiProvider
+// ---------------------------------------------------------
+//
+MApiProvider& CBrowserViewBase::ApiProvider()
+ {
+ return iApiProvider;
+ }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::UpdateCbaL
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::UpdateCbaL()
+{
+ if ( !iApiProvider.ExitInProgress() )
+ {
+ TInt commandSet = CommandSetResourceIdL();
+ TUid currViewId = Id();
+
+ // Ask BrowserAppUi which view we were in when we last updated the CBA
+ // this will help decide if we should do it again
+ TUid previousCBAUpdateViewId = iApiProvider.GetLastCBAUpdateView();
+
+ if ( commandSet )
+ {
+ // Don't perform updates to the CBA when
+ //
+ // - We're still in the same view we were just in AND
+ // - We're not dynamically setting CBA (do more checking below) AND
+ // - The command set is the same as the one we just set last time
+ // this was called
+ // - We're currently in the content view (the update-cba is more complex here
+ // and we should just do it when asked by ContentView class)
+ //
+ // NOTE that we rely on CommandSetResource to set the commandSet to
+ // R_BROWSER_BUTTONS_CBA_DYNAMIC to signal a desire to update the keys
+ // dynamically.
+ if( currViewId == iPreviousViewID &&
+ commandSet != R_BROWSER_BUTTONS_CBA_DYNAMIC &&
+ currViewId == previousCBAUpdateViewId &&
+ currViewId != KUidBrowserContentViewId)
+ {
+ return;
+ }
+
+ // If command set is our special dynamic cba set,
+ // now ask derived class for the resources dynamically.
+ if(commandSet == R_BROWSER_BUTTONS_CBA_DYNAMIC)
+ {
+ TSKPair lsk,rsk,msk;
+ CommandSetResourceDynL(lsk,rsk,msk);
+
+ // Similar exclusion as above:
+ // Don't update the LSK, RSK, MSK dynamic assignments if:
+ //
+ // - We're still in the same view we were just in
+ // - The lsk, rsk, msk are all the same settings we set last time
+ if(currViewId == previousCBAUpdateViewId &&
+ lsk == iLastLSK &&
+ rsk == iLastRSK &&
+ msk == iLastMSK)
+ {
+ return;
+ }
+
+ // Save the settings
+ iLastLSK = lsk;
+ iLastRSK = rsk;
+ iLastMSK = msk;
+
+ //
+ // Update each softkey in turn
+ //
+ // If the CommandSetResourceDynL command assigned something to the key
+ // (in other words, it changed the key assignment from its default - it does have the option not to do so),
+ //
+ // Update each key now.
+ //
+ // Each derived-class view should update them as a general rule, even if it is to some default value
+ //
+ if( lsk.IsAssigned() )
+ {
+ HBufC* txt = StringLoader::LoadLC( lsk.qtn() );
+ Cba()->SetCommandL(CEikButtonGroupContainer::ELeftSoftkeyPosition, lsk.id(), *txt);
+ CleanupStack::PopAndDestroy(); // txt
+ }
+ if( rsk.IsAssigned() )
+ {
+ HBufC* txt = StringLoader::LoadLC( rsk.qtn() );
+ Cba()->SetCommandL(CEikButtonGroupContainer::ERightSoftkeyPosition, rsk.id(), *txt);
+ CleanupStack::PopAndDestroy(); // txt
+ }
+ if( msk.IsAssigned() )
+ {
+ HBufC* txt = StringLoader::LoadLC( msk.qtn() );
+ Cba()->SetCommandL(CEikButtonGroupContainer::EMiddleSoftkeyPosition, msk.id(), *txt);
+ CleanupStack::PopAndDestroy(); // txt
+ }
+ }
+ else // Else - the exisiting case: set the softkeys as a block by assigning a pre-defined resource id
+ {
+ // The usual case is to set the command set to
+ // whatever CommandSetResourceIdL has said
+ Cba()->SetCommandSetL( commandSet );
+ }
+
+ // Save the last command set and set view id
+ iLastCommandSet = commandSet;
+ iApiProvider.SetLastCBAUpdateView(currViewId);
+
+ // DrawNow() doesn't refresh MSK properly
+ Cba()->DrawDeferred();
+ }
+ }
+}
+
+
+
+
+
+
+
+
+// ---------------------------------------------------------
+// CBrowserViewBase::MakeCbaVisible
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::MakeCbaVisible(TBool aVisible)
+ {
+ // don't turn off the cba in landscape mode since it will still be visible and
+ // calling MakeVisible(EFalse) will just make it not update correctly
+
+ TBool vis = aVisible;
+ if (!vis)
+ {
+ CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+ TInt currentStatusPaneLayoutResId = 0;
+ if (statusPane)
+ {
+ currentStatusPaneLayoutResId = statusPane->CurrentLayoutResId();
+ }
+ else
+ {
+ // If this CBA:s owner does not have statuspane, then we ask the layout from AknCapServer.
+ currentStatusPaneLayoutResId = AVKONENV->StatusPaneResIdForCurrentLayout(CAknSgcClient::CurrentStatuspaneResource());
+ }
+
+ TBool staconPane = ((currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT) ||
+ (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_LEFT) ||
+ (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_RIGHT) ||
+ (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_LEFT) ||
+ (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_RIGHT) ||
+ (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_LEFT));
+ vis = staconPane;
+ }
+ Cba()->MakeVisible( vis );
+ }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::UpdateGotoPaneL
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::UpdateGotoPaneL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::ClearCbaL
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::ClearCbaL()
+ {
+ TInt commandSet = R_AVKON_SOFTKEYS_EMPTY;
+ Cba()->SetCommandSetL( commandSet );
+ Cba()->DrawNow();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::LaunchSearchApplicationL
+// -----------------------------------------------------------------------------
+//
+void CBrowserViewBase::LaunchSearchApplicationL( const TDesC& aSearchString )
+ {
+ TInt id = iApiProvider.Preferences().GetIntValue( KBrowserSearchAppUid );
+ TUid searchAppId( TUid::Uid( id ) );
+ TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+ TApaTask task = taskList.FindApp( searchAppId );
+ HBufC8* searchParam8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aSearchString );
+ CleanupStack::PushL( searchParam8 );
+ if ( task.Exists() )
+ {
+ User::LeaveIfError( task.SendMessage( TUid::Uid( 0 ), *searchParam8 ) );
+ }
+ else
+ {
+ RApaLsSession appArcSession;
+ TApaAppInfo appInfo;
+ User::LeaveIfError(appArcSession.Connect());
+ CleanupClosePushL( appArcSession );
+ TInt err = appArcSession.GetAppInfo( appInfo, searchAppId );
+ if( err == KErrNone )
+ {
+ CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+ cmdLine->SetExecutableNameL( appInfo.iFullName );
+ cmdLine->SetTailEndL( *searchParam8 );
+ User::LeaveIfError( appArcSession.StartApp( *cmdLine ));
+ CleanupStack::PopAndDestroy( cmdLine );
+ }
+ CleanupStack::PopAndDestroy( &appArcSession );
+ }
+ CleanupStack::PopAndDestroy( searchParam8 );
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserApplication.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser application class
+*
+*
+*/
+
+
+#include "BrowserApplication.h"
+#include "BrowserAppDocument.h"
+#include "BrowserAppServer.h"
+
+
+TUid CBrowserApplication::AppDllUid() const
+{
+ return KUidBrowserApplication;
+}
+
+CApaDocument* CBrowserApplication::CreateDocumentL()
+{
+ return new (ELeave) CBrowserAppDocument(*this);
+}
+
+void CBrowserApplication::NewAppServerL(CApaAppServer*& aAppServer)
+ {
+ aAppServer = new(ELeave) CBrowserAppServer;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAsyncExit.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* CBrowserAsyncExit class can exit the Browser in async mode. It calls the CBrowserAppUi`s
+* ExitBrowser() method, when the object completes the request.
+* The class helps avoiding to send event.iCode EKeyApplication1; event
+* to the embedded browser to exit.
+*
+*
+*/
+
+
+#include "BrowserAsyncExit.h"
+#include "ApiProvider.h"
+#include "Logger.h"
+
+
+// ---------------------------------------------------------------------------
+// staticCBrowserAsyncExit* CBrowserAsyncExit::NewL( )
+// Create a CBrowserAsyncExit object. Leaves on failure.
+// ---------------------------------------------------------------------------
+//
+CBrowserAsyncExit* CBrowserAsyncExit::NewL( MApiProvider* aApiProvider )
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::NewL");
+ CBrowserAsyncExit* self = NewLC( aApiProvider );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// static CBrowserAsyncExit* CBrowserAsyncExit::NewLC( )
+// Create a CBrowserAsyncExit object. Leaves on failure.
+// ---------------------------------------------------------------------------
+//
+CBrowserAsyncExit* CBrowserAsyncExit::NewLC( MApiProvider* aApiProvider )
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::NewLC");
+ CBrowserAsyncExit* self = new (ELeave) CBrowserAsyncExit( aApiProvider );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAsyncExit::CBrowserAsyncExit( ):CActive(CActive::EPriorityStandard)
+// Constructs this object
+// ---------------------------------------------------------------------------
+//
+CBrowserAsyncExit::CBrowserAsyncExit( MApiProvider* aApiProvider ):CActive(CActive::EPriorityStandard)
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::CBrowserAsyncExit");
+ CActiveScheduler::Add( this );
+ iApiProvider = aApiProvider;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserAsyncExit::~CBrowserAsyncExit()
+// Destroy the object and release all memory objects
+// ---------------------------------------------------------------------------
+//
+CBrowserAsyncExit::~CBrowserAsyncExit()
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::~CBrowserAsyncExit");
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserAsyncExit::ConstructL()
+// Two-pase constructor
+// ---------------------------------------------------------------------------
+//
+void CBrowserAsyncExit::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserAsyncExit::Start()
+// Complete an asynchronous request.
+// ---------------------------------------------------------------------------
+//
+void CBrowserAsyncExit::Start()
+ {
+ if ( !IsActive() )
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::Start");
+ TRequestStatus* status = &iStatus;
+ SetActive();
+ User::RequestComplete( status, KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserAsyncExit::DoCancel()
+// Cancel any outstanding requests.
+// ---------------------------------------------------------------------------
+//
+void CBrowserAsyncExit::DoCancel()
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::DoCancel");
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserAsyncExit::RunL()
+// Handles object`s request completion event.
+// ---------------------------------------------------------------------------
+//
+void CBrowserAsyncExit::RunL()
+ {
+ LOG_ENTERFN("CBrowserAsyncExit::RunL");
+ iApiProvider->ExitBrowser( EFalse ); // Exit the browser.
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserBmOTABinSender.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*/
+
+
+// INCLUDE FILES
+ // System includes
+#include <eikdef.h>
+#include <eikenv.h>
+#include <sendui.h>
+#include <CMessageData.h>
+#include <TSendingCapabilities.h>
+#include <SenduiMtmUids.h>
+#include <msgbiouids.h>
+#include <txtrich.h>
+#include <smut.h>
+
+ // User includes
+#include "BrowserAppUi.h"
+#include "BrowserUtil.h"
+#include "BrowserDialogs.h"
+#include "BrowserBmOTABinSender.h"
+
+
+// MACROS
+
+#ifndef _BOOKMARK_SENT_ASCII
+// Calculates the byte size of 16bits (a)
+#define TUINT16_LEN(a) ( sizeof(a) / sizeof(TUint16) )
+#endif
+
+// ================= LOCAL CONSTANTS =======================
+
+/// Granularity of the bookmark list.
+LOCAL_C const TInt KGranularity = 1;
+
+/// Attachment file name.
+_LIT( KAttachmentFilename, "c:\\system\\temp\\Bookmark.txt");
+
+#ifndef _BOOKMARK_SENT_ASCII
+// Binary encoded BM data. See OTA spec
+static const TUint16 Kch_lstart[] = { 0x00, 0x01, 0x00, 0x45 };
+static const TUint16 Kch_lend[] = { 0x01 };
+static const TUint16 Kch_start[] = { 0xC6,0x7F,0x01,0x87,0x15,0x11,0x03 };
+static const TUint16 Kch_mid[] = { 0x00,0x01,0x87,0x17,0x11,0x03 };
+static const TUint16 Kch_end[] = { 0x00,0x01,0x01 };
+#endif // _BOOKMARK_SENT_ASCII
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CBookmarkOTAItem::CBookmarkOTAItem
+// ---------------------------------------------------------------------------
+//
+CBookmarkOTAItem::CBookmarkOTAItem()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBookmarkOTAItem::~CBookmarkOTAItem
+// ---------------------------------------------------------------------------
+//
+CBookmarkOTAItem::~CBookmarkOTAItem()
+ {
+ delete iBookmark;
+ }
+
+// ---------------------------------------------------------------------------
+// CBookmarkOTAItem::NewL
+// ---------------------------------------------------------------------------
+//
+CBookmarkOTAItem* CBookmarkOTAItem::NewL( const TDesC& aUrl, const TDesC& aTitle )
+ {
+ CBookmarkOTAItem *item = new (ELeave) CBookmarkOTAItem();
+ CleanupStack::PushL( item );
+
+ item->ConstructL( aUrl, aTitle );
+
+ CleanupStack::Pop(); // item
+
+ return item;
+ }
+
+// ---------------------------------------------------------------------------
+// CBookmarkOTAItem::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CBookmarkOTAItem::ConstructL( const TDesC& aUrl,
+#ifdef _BOOKMARK_SENT_ASCII
+ const TDesC& /*aTitle*/ )
+#else // _BOOKMARK_SENT_ASCII
+ const TDesC& aTitle )
+#endif // _BOOKMARK_SENT_ASCII
+
+ {
+#ifdef _BOOKMARK_SENT_ASCII
+ iBookmark = aUrl.AllocL();
+#else // _BOOKMARK_SENT_ASCII
+ TInt length = TUINT16_LEN( Kch_start ) +
+ TUINT16_LEN( Kch_mid ) +
+ TUINT16_LEN( Kch_end );
+
+ // calculate full length of BOOKMARK
+ length += aTitle.Length() + aUrl.Length();
+
+ iBookmark = HBufC::NewL( length );
+
+ TPtrC start( Kch_start, TUINT16_LEN(Kch_start) );
+ TPtrC mid( Kch_mid, TUINT16_LEN(Kch_mid) );
+ TPtrC end( Kch_end, TUINT16_LEN(Kch_end) );
+
+ iBookmark->Des().Append( start );
+ iBookmark->Des().Append( aTitle );
+ iBookmark->Des().Append( mid );
+ iBookmark->Des().Append( aUrl );
+ iBookmark->Des().Append( end );
+
+#endif // _BOOKMARK_SENT_ASCII
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::NewL
+// ---------------------------------------------------------------------------
+//
+CWmlBrowserBmOTABinSender* CWmlBrowserBmOTABinSender::NewL()
+ {
+ CWmlBrowserBmOTABinSender* sender = new (ELeave)
+ CWmlBrowserBmOTABinSender();
+ CleanupStack::PushL( sender );
+
+ sender->ConstructL();
+
+ CleanupStack::Pop(); // sender
+
+ return sender;
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::~CWmlBrowserBmOTABinSender
+// ---------------------------------------------------------------------------
+//
+CWmlBrowserBmOTABinSender::~CWmlBrowserBmOTABinSender()
+ {
+ ResetAndDestroy();
+ delete iSendUi;
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::ResetAndDestroy
+// ---------------------------------------------------------------------------
+//
+void CWmlBrowserBmOTABinSender::ResetAndDestroy()
+ {
+ iBookmarks.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::AppendL
+// ---------------------------------------------------------------------------
+//
+void CWmlBrowserBmOTABinSender::AppendL( const TText *aUrl,
+ const TText *aTitle )
+ {
+ __ASSERT_DEBUG( (aUrl != NULL), Util::Panic( Util::EUninitializedData ) );
+ TPtrC tempUrl( aUrl );
+ CBookmarkOTAItem *item = NULL;
+
+ if( !aTitle )
+ {
+ _LIT( KEmptyText, "" );
+
+ item = CBookmarkOTAItem::NewL( tempUrl, (TDesC&)KEmptyText );
+ }
+ else
+ {
+ TPtrC tempTitle( aTitle );
+
+ item = CBookmarkOTAItem::NewL( tempUrl, tempTitle );
+ }
+
+ CleanupStack::PushL( item );
+
+ iBookmarks.AppendL( item );
+
+ CleanupStack::Pop(); // item
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::AppendL
+// ---------------------------------------------------------------------------
+//
+void CWmlBrowserBmOTABinSender::AppendL( const TDesC& aUrl, const TDesC& aTitle )
+ {
+ CBookmarkOTAItem *item = CBookmarkOTAItem::NewL( aUrl, aTitle );
+ CleanupStack::PushL( item );
+
+ iBookmarks.AppendL( item );
+
+ CleanupStack::Pop(); // item
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::SendAddressL
+// ---------------------------------------------------------------------------
+//
+void CWmlBrowserBmOTABinSender::SendAddressL( )
+ {
+ CMessageData* msgData = CMessageData::NewLC();//Cl St: 1
+ __ASSERT_DEBUG( iBookmarks.Length(),
+ Util::Panic( Util::EUninitializedData ) );
+
+ // sending error indicator
+ // used with CreateAndSendMessageL()
+ // to free up allocated memory
+ // and than leave at the and of
+ // this function
+ TInt error = KErrNone;
+
+ // calculate full length of OTA message
+ TInt length = 0;
+
+ TSendingCapabilities capa;
+ CArrayFixFlat<TUid>* servicesToDim = new(ELeave) CArrayFixFlat<TUid>( 2 );
+ CleanupStack::PushL( servicesToDim );
+ servicesToDim->AppendL( KSenduiMtmAudioMessageUid );
+ // service: audio message to dim
+ servicesToDim->AppendL( KSenduiMtmPostcardUid );
+ // service: postcard to dim
+ TUid service = iSendUi->ShowSendQueryL(NULL, capa, servicesToDim, KNullDesC);
+ iSendUi->ServiceCapabilitiesL( service, capa );
+
+ CleanupStack::PopAndDestroy(); // destroy serviceToDim
+
+#ifndef _BOOKMARK_SENT_ASCII
+ length += TUINT16_LEN( Kch_lstart ) + TUINT16_LEN( Kch_lend );
+#endif // _BOOKMARK_SENT_ASCII
+
+ for( TInt index = 0; index < iBookmarks.Count(); ++index )
+ {
+ length += iBookmarks[index]->iBookmark->Length();
+ }
+
+#ifdef _BOOKMARK_SENT_ASCII
+ // +1 '\n' per bookmarks
+ // no need '\n' after the last one
+ length += iBookmarks.Count() - 1;
+#endif // _BOOKMARK_SENT_ASCII
+
+ // body contains the binary sequence
+ HBufC* body = HBufC::NewLC( length );
+
+#ifndef _BOOKMARK_SENT_ASCII
+ TPtrC lstart( Kch_lstart, TUINT16_LEN( Kch_lstart ) );
+ TPtrC lend( Kch_lend, TUINT16_LEN( Kch_lend ) );
+ // body starts with CHARACTERISTIC-LIST
+ body->Des().Append( lstart );
+#endif // _BOOKMARK_SENT_ASCII
+
+ for( TInt index2 = 0; index2 < iBookmarks.Count(); ++index2 )
+ {
+ // Append CHARACTERISTIC to CHARACTERISTIC-LIST
+ body->Des().Append( iBookmarks[index2]->iBookmark->Des().Ptr(),
+ iBookmarks[index2]->iBookmark->Length() );
+
+#ifdef _BOOKMARK_SENT_ASCII
+ // append '\n' after ever bookmark except the last one
+ if( index2 < iBookmarks.Count() - 1 )
+ {
+ _LIT( KNewLine, "\n" );
+ body->Des().Append( KNewLine );
+ }
+#endif // _BOOKMARK_SENT_ASCII
+ }
+
+#ifndef _BOOKMARK_SENT_ASCII
+ // CHARACTERISTIC-LIST termination
+ body->Des().Append( lend );
+#endif // _BOOKMARK_SENT_ASCII
+
+ // The issue is because of the deletion of the temp file .
+ // As we are sending address only , we can just create a buffer & send it in message
+ // body.
+
+ if ( capa.iFlags & (TSendingCapabilities::ESupportsBodyText || TSendingCapabilities::ESupportsAttachments))
+ {
+ CRichText* text =
+ CRichText::NewL(CEikonEnv::Static()->SystemParaFormatLayerL(),
+ CEikonEnv::Static()->SystemCharFormatLayerL());
+ CleanupStack::PushL(text);
+ text->InsertL(0, *body);
+ msgData->SetBodyTextL( text );
+ CleanupStack::PopAndDestroy(text );
+
+#ifdef _BOOKMARK_SENT_ASCII
+ TRAP( error, iSendUi->CreateAndSendMessageL( service, msgData ) );
+#else
+ TRAP( error, iSendUi->CreateAndSendMessageL( service,
+ msgData,
+ KMsgBioUidWmlBrSettings ) );
+#endif // _BOOKMARK_SENT_ASCII
+ }
+
+ ResetAndDestroy();
+
+ CleanupStack::PopAndDestroy( 2 ); // body, msgData
+
+ // if any error occured during sending process
+ User::LeaveIfError( error );
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::SendOPMLFileL
+// ---------------------------------------------------------------------------
+//
+void CWmlBrowserBmOTABinSender::SendOPMLFileL(const TDesC& aOPMLFileName)
+ {
+ CMessageData* msgData = CMessageData::NewLC();
+
+ // sending error indicator
+ // used with CreateAndSendMessageL()
+ // to free up allocated memory
+ // and than leave at the and of
+ // this function
+ TInt error = KErrNone;
+
+ TSendingCapabilities capa;
+
+ CArrayFixFlat<TUid>* servicesToDim = new(ELeave) CArrayFixFlat<TUid>( 2 );
+ CleanupStack::PushL( servicesToDim );
+ servicesToDim->AppendL( KSenduiMtmAudioMessageUid );
+ // service: audio message to dim
+ servicesToDim->AppendL( KSenduiMtmPostcardUid );
+ // service: postcard to dim
+ TUid service = iSendUi->ShowSendQueryL(NULL, capa, servicesToDim, KNullDesC);
+ iSendUi->ServiceCapabilitiesL( service, capa );
+
+ CleanupStack::PopAndDestroy(); // destroy serviceToDim
+
+ // body contains the binary sequence
+ //HBufC* body = HBufC::NewLC( aOPMLFileName.Length() );
+ //body->Des().Copy( aOPMLFileName );
+
+ if ( capa.iFlags & TSendingCapabilities::ESupportsAttachments )
+ {
+ // connect to file session
+ RFs fsSession;
+ User::LeaveIfError( fsSession.Connect() );
+ CleanupClosePushL<RFs>( fsSession );
+ CFileMan* fman = CFileMan::NewL( fsSession );
+ CleanupStack::PushL( fman );
+
+ // between WriteMessageBodyIntoFile()
+ // and CreateAndSendMessageL, or
+ // you have to take care of deleting
+ // temporary file
+ //error = WriteMessageBodyIntoFileL( fsSession, *body );
+
+ // send attachment
+ // this function has to be trapped
+ // because I have to be sure that the
+ // temproray file is removed!
+ msgData->AppendAttachmentL( aOPMLFileName );
+ TRAP( error, iSendUi->CreateAndSendMessageL( service,
+ msgData ) );
+ // delete temporary file
+ fman->Delete( aOPMLFileName );
+ // close file session
+ fsSession.Close();
+
+ CleanupStack::PopAndDestroy( 2 ); // fsSession, fman
+ }
+
+ CleanupStack::PopAndDestroy( 1 ); // msgData
+
+ // if any error occured during sending process
+ User::LeaveIfError( error );
+ }
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CWmlBrowserBmOTABinSender::ConstructL()
+ {
+ iSendUi = CSendUi::NewL();
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::CWmlBrowserBmOTABinSender
+// ---------------------------------------------------------------------------
+//
+CWmlBrowserBmOTABinSender::CWmlBrowserBmOTABinSender()
+: iBookmarks( KGranularity )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CWmlBrowserBmOTABinSender::WriteMessageBodyIntoFileL
+//
+// This function leaves only if the file creating failed.
+// Do not need to be trapped to delete file.
+// ---------------------------------------------------------------------------
+//
+TInt CWmlBrowserBmOTABinSender::WriteMessageBodyIntoFileL( RFs &fs,
+ TDesC& aBody )
+ {
+ TInt result;
+ RFile otaFile;
+ TFileName filename( KAttachmentFilename );
+
+ if( (result = otaFile.Replace( fs, filename, EFileShareExclusive)) ==
+ KErrNone )
+ {
+
+#ifdef _BOOKMARK_SENT_ASCII
+ HBufC8 *tempBody = HBufC8::NewL( aBody.Length() );
+ // convert 16bits -> 8bits
+ tempBody->Des().Copy( aBody );
+
+ // write message into file
+ result = otaFile.Write( *tempBody );
+#else // _BOOKMARK_SENT_ASCII
+ // put 16bits binary data to 8bits (double byte -> two byte)
+ TPtrC8 tempBody( (TUint8*)aBody.Ptr(), aBody.Length() * 2 );
+
+ // write message into file
+ result = otaFile.Write( tempBody );
+#endif // _BOOKMARK_SENT_ASCII
+
+ otaFile.Close();
+ }
+
+ return result;
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserCommandLineParser.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* parsing command lines could be used in view activation
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "BrowserCommandLineParser.h"
+#include "Logger.h"
+
+LOCAL_D const TInt KParamsArrayGranularity = 8;
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::CBrowserCommandLineParser8()
+// ---------------------------------------------------------------------------
+CBrowserCommandLineParser8::CBrowserCommandLineParser8()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::~CBrowserCommandLineParser8
+// ---------------------------------------------------------------------------
+CBrowserCommandLineParser8::~CBrowserCommandLineParser8()
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::~CBrowserCommandLineParser8");
+ delete ( iParamString );
+ delete ( iParams );
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::NewL
+// ---------------------------------------------------------------------------
+CBrowserCommandLineParser8* CBrowserCommandLineParser8::NewL(
+ const TDesC8& aParamString )
+ {
+ CBrowserCommandLineParser8* self =
+ CBrowserCommandLineParser8::NewLC( aParamString );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::NewLC
+// ---------------------------------------------------------------------------
+CBrowserCommandLineParser8* CBrowserCommandLineParser8::NewLC(
+ const TDesC8& aParamString )
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::NewLC");
+ CBrowserCommandLineParser8* self =
+ new ( ELeave ) CBrowserCommandLineParser8 ( );
+ CleanupStack::PushL( self );
+ self->ConstructL( aParamString );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::ConstructL
+// ---------------------------------------------------------------------------
+void CBrowserCommandLineParser8::ConstructL( const TDesC8& aParamString )
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::ConstructL");
+ TInt length = aParamString.Length();
+ iParamString = HBufC8::NewL( length );//the maxlength of buf = the length of the param
+ *iParamString = aParamString;
+ iParams = new( ELeave ) CArrayFixFlat<TPtrC8>( KParamsArrayGranularity );
+ FillUpParamsL();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::Count
+// ---------------------------------------------------------------------------
+TUint CBrowserCommandLineParser8::Count() const
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::Count");
+ return iParams->Count();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::SetL
+// ---------------------------------------------------------------------------
+void CBrowserCommandLineParser8::SetL( const TDesC8& aParamString )
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::SetL");
+ iParamString->ReAllocL( aParamString.Length() );
+ *iParamString = aParamString;
+ iParams->Reset();
+ FillUpParamsL();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::Param
+// ---------------------------------------------------------------------------
+TPtrC8 CBrowserCommandLineParser8::Param( TUint aIndex )
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::Param");
+ TPtrC8 retVal;
+ ( aIndex < Count( ) )? ( retVal.Set( iParams->At( aIndex ) ) ) :
+ ( retVal.Set( KNullDesC8 ) );
+ return retVal;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::IntegerParam
+// ---------------------------------------------------------------------------
+TBool CBrowserCommandLineParser8::IntegerParam( TUint aIndex )
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::IntegerParam");
+ if ( aIndex >= Count () )
+ {
+ return EFalse;
+ }
+ TLex8 lex( iParams->At ( aIndex ) );
+ TInt a;
+ if ( lex.Val( a ) == KErrNone )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::ParamToInteger
+// ---------------------------------------------------------------------------
+TInt CBrowserCommandLineParser8::ParamToInteger( TUint aIndex )
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::ParamToInteger");
+ TInt retInt = KMaxTInt;
+ if ( aIndex < Count () )
+ {
+ TLex8 lex ( iParams -> At( aIndex ));
+ lex.Val( retInt );
+ }
+ return retInt;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserCommandLineParser8::FillUpParamsL
+// ---------------------------------------------------------------------------
+void CBrowserCommandLineParser8::FillUpParamsL()
+ {
+ LOG_ENTERFN("CBrowserCommandLineParser8::FillUpParamsL");
+ TLex8 lex( *iParamString );
+ while ( !lex.Eos() )
+ {
+ TPtrC8 token = lex.NextToken();
+ iParams->AppendL( token );
+ }
+ }
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserCommsModel.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserCommsModel.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <ActiveApDb.h>
+#include <ApUtils.h>
+#include <ApSelect.h>
+#include <ApListItemList.h>
+#include <ApListItem.h>
+#include <BrowserNG.rsg>
+#include "BrowserCommsModel.h"
+#include "BrowserDialogs.h"
+#include "Browser.hrh"
+
+// CONSTANTS
+
+/// Granularity of observer list.
+LOCAL_D const TInt KObserverListGranularity = 4;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::NewL
+// ---------------------------------------------------------
+//
+CBrowserCommsModel* CBrowserCommsModel::NewL()
+ {
+ CBrowserCommsModel* model = new (ELeave) CBrowserCommsModel();
+ CleanupStack::PushL( model );
+ model->ConstructL();
+ CleanupStack::Pop(); // model
+ return model;
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::~CBrowserCommsModel
+// ---------------------------------------------------------
+//
+CBrowserCommsModel::~CBrowserCommsModel()
+ {
+ delete iObservers;
+ if ( iDb )
+ {
+ iDb->RemoveObserver( this );
+ }
+ delete iCachedApList;
+ delete iDb;
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::CBrowserCommsModel
+// ---------------------------------------------------------
+//
+CBrowserCommsModel::CBrowserCommsModel(): iUpdatePending( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::ConstructL()
+ {
+ iDb = CActiveApDb::NewL( EDatabaseTypeIAP );
+ iDb->AddObserverL( this );
+ iCachedApList = new (ELeave) CApListItemList();
+ iObservers = new (ELeave) CArrayPtrFlat<MCommsModelObserver>
+ ( KObserverListGranularity );
+ iDelayedRefresh = ETrue;
+ //GetAccessPointsL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::HandleApDbEventL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::HandleApDbEventL
+( MActiveApDbObserver::TEvent aEvent )
+ {
+ // We try to refresh AP list in two cases:
+ // 1. Database changed;
+ // 2. Database unlocked and we have a pending update (previous update was
+ // unsuccessful).
+ if ( aEvent == MActiveApDbObserver::EDbChanged ||
+ ( aEvent == MActiveApDbObserver::EDbAvailable && iUpdatePending ) )
+ {
+ // Try to refresh cached AP list.
+ iDelayedRefresh = ETrue;
+ //GetAccessPointsL();
+ NotifyObserversL();
+ }
+ // MActiveApDbObserver::EDbClosing:
+ // MActiveApDbObserver::EDbAvailable:
+ // These events will never come. Commdb cannot be closed
+ // with a notifier still on it. (It must be deleted to close.)
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::ApDb
+// ---------------------------------------------------------
+//
+CActiveApDb& CBrowserCommsModel::ApDb() const
+ {
+ return *iDb;
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::CommsDb
+// ---------------------------------------------------------
+//
+CCommsDatabase& CBrowserCommsModel::CommsDb() const
+ {
+ return *(iDb->Database());
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::CopyAccessPointsL
+// ---------------------------------------------------------
+//
+CApListItemList* CBrowserCommsModel::CopyAccessPointsL()
+ {
+ if ( iDelayedRefresh )
+ {
+ GetAccessPointsL();
+ iDelayedRefresh = EFalse;
+ }
+ CApListItemList* accessPoints = new (ELeave) CApListItemList();
+ CleanupStack::PushL( accessPoints );
+ CApListItem* ap;
+ TInt i;
+ TInt count = iCachedApList->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ ap = CApListItem::NewLC( iCachedApList->At( i ) );
+ accessPoints->AppendL( ap );
+ CleanupStack::Pop(); // ap; owner is now the list.
+ }
+ CleanupStack::Pop(); // accessPoints
+ return accessPoints;
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::AccessPoints
+// ---------------------------------------------------------
+//
+const CApListItemList* CBrowserCommsModel::AccessPointsL()
+ {
+ if ( iDelayedRefresh )
+ {
+ GetAccessPointsL();
+ iDelayedRefresh = EFalse;
+ }
+ return iCachedApList;
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::RefreshAccessPointsL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::RefreshAccessPointsL()
+ {
+ iDelayedRefresh = ETrue;
+ //GetAccessPointsL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::AddObserverL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::AddObserverL( MCommsModelObserver& aObserver )
+ {
+ iObservers->AppendL( &aObserver );
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::RemoveObserver
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::RemoveObserver( MCommsModelObserver& aObserver )
+ {
+ TInt i;
+ TInt count = iObservers->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iObservers->At( i ) == &aObserver )
+ {
+ iObservers->Delete( i );
+ break;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::GetAccessPointsL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::GetAccessPointsL()
+ {
+ CApListItemList* apList = new (ELeave) CApListItemList();
+ CleanupStack::PushL( apList );
+ TRAPD( err, DoGetAccessPointsL( *apList ) );
+ switch ( err )
+ {
+ case KErrNone:
+ {
+ // Got new data.
+ delete iCachedApList;
+ CleanupStack::Pop(); // apList: now member.
+ iCachedApList = apList;
+ iUpdatePending = EFalse;
+ //NotifyObserversL();
+ break;
+ }
+
+ case KErrLocked:
+ case KErrAccessDenied:
+ case KErrPermissionDenied:
+ {
+ // Could not access database. Update now pending, old data remains.
+ CleanupStack::PopAndDestroy(); // apList
+ iUpdatePending = ETrue;
+ break;
+ }
+
+ default:
+ {
+ // Other error. Propagate.
+ User::Leave( err );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::DoGetAccessPointsL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::DoGetAccessPointsL( CApListItemList& aList ) const
+ {
+ CApSelect* apSelect = CApSelect::NewLC
+ (
+ *(iDb->Database()),
+ KEApIspTypeAll,
+// KEApIspTypeAll | KEApIspTypeWAPMandatory,
+ EApBearerTypeAll,
+ KEApSortNameAscending,
+ EIPv4 | EIPv6,
+ EVpnFilterBoth, //For VPNs
+ ETrue //Easy Wlan ap
+ );
+ (void)apSelect->AllListItemDataL( aList );
+ CleanupStack::PopAndDestroy(); // apSelect
+ }
+
+// ---------------------------------------------------------
+// CBrowserCommsModel::NotifyObserversL
+// ---------------------------------------------------------
+//
+void CBrowserCommsModel::NotifyObserversL()
+ {
+ if ( iObservers )
+ {
+ TInt i;
+ TInt count = iObservers->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ iObservers->At( i )->HandleCommsModelChangeL();
+ }
+ }
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserContentView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,3467 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser content view
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <cdownloadmgruidownloadslist.h>
+#include <cdownloadmgruidownloadmenu.h>
+#include <FeatMgr.h>
+#include <irmsgtypeuid.h>
+#include <SenduiMtmUids.h>
+#include <IrcMTM.h>
+#include <EikMenuP.h>
+#include <internetconnectionmanager.h>
+#include <DocumentHandler.h>
+#include <apmstd.h>
+#include <aknnavi.h>
+#include <EIKSPANE.H>
+#include <aknnavide.h>
+#include <bldvariant.hrh>
+#include <LayoutMetaData.cdl.h> // For Layout_Meta_Data landscape/portrait status
+
+#include <BrowserNG.rsg>
+#include <StringLoader.h>
+
+#include <aknviewappui.h>
+#include <aknlists.h>
+#include <akntitle.h>
+#include <aknPopup.h>
+#include <StringLoader.h>
+#include <uri16.h>
+#include <ApUtils.h>
+#include <btmsgtypeuid.h>
+#include "CommsModel.h"
+#include <AknNaviLabel.h>
+#include <FindItemMenu.h>
+#include <EIKMENUB.H>
+#include <avkon.hrh>
+
+#include <AknInfoPopupNoteController.h>
+#include <aknutils.h>
+#include <AknStylusPopUpMenu.h>
+
+#include <s32mem.h>
+#include <Uri16.h>
+
+#include "Browser.hrh"
+#include "BrowserContentView.h"
+#include "BrowserContentViewToolbar.h"
+#include "BrowserContentViewContainer.h"
+#include "BrowserContentViewZoomModeTimer.h"
+#include "BrowserBookmarksView.h"
+#include "CommonConstants.h"
+#include "BrowserAppUi.h"
+#include "BrowserGotoPane.h"
+#include "Preferences.h"
+#include "BrowserPreferences.h"
+#include "Display.h"
+#include <favouriteswapap.h>
+#include "BrowserBookmarksModel.h"
+#include "BrowserDialogs.h"
+#include "BrowserUtil.h"
+#include "BrowserBmOTABinSender.h"
+#include <FINDITEMMENU.RSG>
+#include "BrowserUiVariant.hrh"
+#include "BrowserAdaptiveListPopup.h"
+#include "BrowserApplication.h"
+#include "logger.h"
+#include <favouritesfile.h>
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include "BrowserPopupEngine.h"
+
+#include <brctldialogsprovider.h>
+#include <browserdialogsprovider.h>
+#include <brctldefs.h>
+#include <akntoolbar.h>
+#ifdef RD_SCALABLE_UI_V2
+#include <akntoolbarextension.h>
+#endif
+#include <akntouchpane.h>
+
+#include "BrowserShortcutKeyMap.h"
+_LIT( KSchemaIdentifier, "://" );
+const TInt KSchemaIdentifierLength = 3;
+
+// Time interval in milliseconds that status pane stays visible after download in fullscreen mode
+const TInt KFullScreenStatusPaneTimeout( 3 * 1000000 ); // 3 seconds
+
+const TInt KAutoFullScreenTimeout( 5 * 1000000 ); // 5 seconds
+
+const TInt KAutoFullScreenIdleTimeout( 10 * 1000000 ); // 10 seconds
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::NewLC
+// -----------------------------------------------------------------------------
+//
+CBrowserContentView* CBrowserContentView::NewLC( MApiProvider& aApiProvider,
+ TRect& aRect )
+ {
+ CBrowserContentView* view =
+ new (ELeave) CBrowserContentView( aApiProvider );
+ CleanupStack::PushL(view);
+ view->ConstructL( aRect );
+
+ return view;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::CBrowserContentView
+// -----------------------------------------------------------------------------
+//
+// Scroll indicators may become deprecated
+CBrowserContentView::CBrowserContentView( MApiProvider& aApiProvider ) :
+ CBrowserViewBase( aApiProvider ),
+ iZoomMode(EFalse),
+ iContentFullScreenMode( EFalse ),
+ iIsPluginFullScreenMode( EFalse),
+ iWasContentFullScreenMode( EFalse ),
+ iTitle( NULL )
+ {
+ iFindItemIsInProgress = EFalse;
+ iWasInFeedsView = EFalse;
+ iPenEnabled = AknLayoutUtils::PenEnabled();
+ iFullScreenBeforeEditModeEntry = EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::Id
+// -----------------------------------------------------------------------------
+//
+TUid CBrowserContentView::Id() const
+ {
+ return KUidBrowserContentViewId;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::~CBrowserContentView
+// -----------------------------------------------------------------------------
+//
+CBrowserContentView::~CBrowserContentView()
+ {
+ delete iBrowserContentViewToolbar;
+ delete iNaviDecorator;
+ delete iBookmarksModel;
+ delete iContainer;
+ delete iEnteredKeyword;
+ delete iTextZoomLevelArray;
+ delete iFontSizeArray;
+ delete iZoomModeTimer;
+ iNaviPane = NULL;
+ if ( iToolBarInfoNote )
+ {
+ iToolBarInfoNote->HideInfoPopupNote();
+ }
+ delete iToolBarInfoNote;
+ delete iStylusPopupMenu;
+ delete iPeriodic;
+ delete iAutoFSPeriodic;
+ delete iIdlePeriodic;
+ delete iTitle;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::ConstructL( TRect& aRect )
+ {
+
+ BaseConstructL( R_BROWSER_CONTENT_VIEW );
+
+ ConstructMenuAndCbaEarlyL();
+
+ iContainer = CBrowserContentViewContainer::NewL( this, ApiProvider() );
+
+ iEnteredKeyword = NULL;
+
+ // get the StatusPane pointer
+ if ( !iNaviPane )
+ {
+ CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane();
+ // Fetch pointer to the default navi pane control
+ iNaviPane =
+ (CAknNavigationControlContainer*)sp->ControlL(
+ TUid::Uid(EEikStatusPaneUidNavi) );
+ }
+
+ // Array for zoom levels (..., 70%, 80%, 90%, 100%,... )
+ iTextZoomLevelArray = new( ELeave )CArrayFixFlat<TInt> ( 1 );
+ // Array for zoom font sizes ( 1, 2, ... )
+ iFontSizeArray = new( ELeave )CArrayFixFlat<TInt> ( 1 );
+
+ // Get the possibile zoom levels
+ GetTextZoomLevelsL();
+ iZoomModeTimer = CBrowserContentViewZoomModeTimer::NewL( this );
+
+ iToolBarInfoNote = CAknInfoPopupNoteController::NewL();
+ HBufC* str = StringLoader::LoadLC(R_BROWSER_TOOLTIP_TOOLBAR);
+ iToolBarInfoNote->SetTextL(*str);
+ CleanupStack::PopAndDestroy();
+ iBrowserContentViewToolbar = CBrowserContentViewToolbar::NewL(this);
+ if (iPenEnabled)
+ {
+ Toolbar()->SetToolbarObserver(this);
+ Toolbar()->SetFocusing(EFalse);
+ ShowToolbarOnViewActivation(ETrue);
+ }
+ iShortcutKeyMap = NULL;
+ iHistoryAtBeginning = EFalse;
+ iHistoryAtEnd = EFalse;
+ iZoomSliderVisible = EFalse;
+ iPeriodic = CPeriodic::NewL(CActive::EPriorityIdle);
+ iAutoFSPeriodic = CPeriodic::NewL(CActive::EPriorityIdle);
+ iIdlePeriodic = CPeriodic::NewL(CActive::EPriorityIdle);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::HandleCommandL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleCommandL( TInt aCommand )
+ {
+ // Disabling FullScreen for non-touch devices, before processing some dialog-based shortcut and toolbar actions
+ if ( !iPenEnabled && iContentFullScreenMode && ( ( aCommand == EWmlCmdFindKeyword ) ||
+ ( aCommand == EWmlCmdHistory ) ||
+ ( aCommand == EWmlCmdGoToAddress ) ||
+ ( aCommand == EWmlCmdShowShortcutKeymap ) ||
+ ( aCommand == EWmlCmdShowMiniature )||
+ ( aCommand == EWmlCmdShowToolBar)) )
+ {
+ iWasContentFullScreenMode = iContentFullScreenMode;
+ EnableFullScreenModeL( EFalse );
+ }
+
+ // resume js timers
+ ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandResumeScriptTimers );
+
+#ifdef RD_SCALABLE_UI_V2
+ // Close the extended toolbar whenever any item on it is selected
+ if ( iPenEnabled && Toolbar()->ToolbarExtension()->IsShown() )
+ {
+ Toolbar()->ToolbarExtension()->SetShown( EFalse );
+ StartAutoFullScreenTimer();
+ }
+#endif
+
+#ifdef __RSS_FEEDS
+ // Handle the subscribe to submenu.
+ TInt cmd = aCommand - TBrCtlDefs::ECommandIdBase;
+
+ if ((cmd >= TBrCtlDefs::ECommandIdSubscribeToBase) &&
+ (cmd < TBrCtlDefs::ECommandIdPluginBase))
+ {
+ HandleSubscribeToL(cmd);
+ return;
+ }
+#endif // __RSS_FEEDS
+
+ if ( ( aCommand != EWmlCmdZoomSliderShow ) && ZoomSliderVisible() )
+ {
+ MakeZoomSliderVisibleL( EFalse );
+ }
+ switch ( aCommand )
+ {
+ case EWmlCmdSetAsHomePage:
+ {
+ HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoUrl);
+ if ( url && url->Length() && TBrowserDialogs::ConfirmQueryYesNoL(R_BROWSER_QUERY_SET_AS_HOME_PAGE))
+ {
+ ApiProvider().Preferences().SetHomePageUrlL(url->Des());
+ ApiProvider().Preferences().SetHomePageTypeL( EWmlSettingsHomePageAddress );
+ }
+ CleanupStack::PopAndDestroy(); // url
+ break;
+ }
+ case EWmlCmdFavourites:
+ {
+ ApiProvider().SetViewToBeActivatedIfNeededL(
+ KUidBrowserBookmarksViewId );
+ break;
+ }
+
+ case EWmlCmdHistory:
+ {
+ ViewHistoryL();
+ break;
+ }
+
+ case EWmlCmdHistoryBack:
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandHistoryNavigateBack +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ UpdateTitleL( iApiProvider );
+ break;
+ }
+ case EWmlCmdHistoryForward:
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandHistoryNavigateForward +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ UpdateTitleL( iApiProvider );
+ break;
+ }
+ // Set search pane active and then launch editor.
+ case EIsCmdSearchWeb:
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ CEikButtonGroupContainer* cba = Cba()->Current();
+ CEikCba* eikCba = static_cast<CEikCba*>( cba->ButtonGroup() );
+ if( eikCba )
+ {
+ eikCba->EnableItemSpecificSoftkey( EFalse );
+ }
+#endif
+ iContainer->GotoPane()->SetSearchPaneActiveL();
+ LaunchGotoAddressEditorL();
+ break;
+ }
+ case EWmlCmdGoToAddress:
+ case EWmlCmdGoToAddressAndSearch:
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ CEikButtonGroupContainer* cba = Cba()->Current();
+ CEikCba* eikCba = static_cast<CEikCba*>( cba->ButtonGroup() );
+ if( eikCba )
+ {
+ eikCba->EnableItemSpecificSoftkey( EFalse );
+ }
+#endif
+ iContainer->GotoPane()->SetGotoPaneActiveL();
+ LaunchGotoAddressEditorL();
+
+ // pause js timer to allow quicke vkb response
+ ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandPauseScriptTimers );
+ break;
+ }
+
+ case EWmlCmdGotoPaneCancel:
+ {
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() );
+ // Cancel editing and sets Goto Pane text back.
+ if (iContainer->GotoPane()->PopupList() != NULL)
+ {
+ iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ iContainer->GotoPane()->PopupList()->HidePopupL();
+ }
+ iContainer->ShutDownGotoURLEditorL();
+ UpdateCbaL();
+ if (iPenEnabled)
+ {
+ Toolbar()->SetDimmed(EFalse);
+ Toolbar()->DrawNow();
+ iBrowserContentViewToolbar->UpdateButtonsStateL();
+ }
+ if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen )
+ {
+ MakeCbaVisible( EFalse );
+ }
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ break;
+ }
+
+ case EWmlCmdGotoPaneGoTo:
+ {
+ HBufC* input = iContainer->GotoPane()->GetTextL();
+ CleanupStack::PushL( input );
+ if( iContainer->GotoPane()->GotoPaneActive() )
+ {
+ if ((input) && (input->CompareF(KWWWString)) && input->Length() )
+ {
+ if (iPenEnabled)
+ {
+ Toolbar()->SetDimmed(EFalse);
+ Toolbar()->DrawNow();
+ }
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() );
+ // Cancel editing and sets Goto Pane text back.
+ if (iContainer->GotoPane()->PopupList() != NULL)
+ {
+ iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ iContainer->GotoPane()->PopupList()->HidePopupL();
+ }
+ GotoUrlInGotoPaneL();
+ if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen )
+ {
+ MakeCbaVisible( EFalse );
+ }
+ }
+ }
+ else
+ {
+ // Search Editor was active, So launch Search application with
+ // search parameters and cancel editing of search and goto.
+ if ( (input) && input->Length() )
+ {
+ if (iPenEnabled)
+ {
+ Toolbar()->SetDimmed(EFalse);
+ Toolbar()->DrawNow();
+ }
+
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() );
+ if ( iContainer->GotoPane() )
+ {
+ iContainer->ShutDownGotoURLEditorL();
+ LaunchSearchApplicationL( *input );
+ }
+ UpdateCbaL();
+ UpdateFullScreenL();
+ }
+ }
+ CleanupStack::PopAndDestroy( input );
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ break;
+ }
+
+ case EWmlCmdGotoPaneSelect:
+ {
+ // Cancel editing and sets Goto Pane text back.
+ if (iContainer->GotoPane()->PopupList() != NULL)
+ {
+ iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ iContainer->GotoPane()->PopupList()->HidePopupL();
+ }
+ // set LSK to GOTO now
+ UpdateCbaL();
+ break;
+ }
+
+ //adaptive popuplist
+ case EWmlCmdOpenFolder:
+ {
+ if (iContainer->GotoPane()->PopupList() != NULL)
+ {
+ iContainer->GotoPane()->PopupList()->SetDirectoryModeL( EFalse );
+ }
+ break;
+ }
+
+ case EAknSoftkeyCancel:
+ {
+ if ( isZoomMode() )
+ {
+ SaveCurrentZoomLevel(EFalse);
+ //reset the zooming to the original settings
+ SetZoomModeL( EFalse );
+ //Exit in zooming, enable the cursor
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomSliderHide +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+
+ if (iSynchRequestViewIsUp)
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ else
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancel + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ break;
+ }
+
+ case EWmlCmdSaveAsBookmark:
+ {
+ AddNewBookmarkL(EFalse);
+ break;
+ }
+
+ // UI notifies the BrCtl which calls the DialogsProvider with a list of images
+ case EWmlCmdShowImages:
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowImages +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+ }
+
+ case EWmlCmdShowMiniature:
+ {
+ if (ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) &&
+ !ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(ETrue))
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowThumbnailView + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ break;
+ }
+
+ // Download Manager UI Library shows a list of ongoing downloads
+ case EWmlCmdDownloads:
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowDownloads +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+ }
+
+ // Loads images on a page
+ case EWmlCmdLoadImages:
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandLoadImages +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ ApiProvider().WindowMgr().CurrentWindow()->SetImagesLoaded(ETrue);
+ break;
+ }
+
+ // UI notifies the BrCtl which calls the DialogsProvider to show the toolbar
+ case EWmlCmdShowToolBar:
+ {
+ if ( !PenEnabled() && iApiProvider.Preferences().ShowToolbarOnOff() &&
+ !iApiProvider.WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ iToolBarInfoNote->ShowInfoPopupNote();
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowToolBar +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+
+ break;
+ }
+ //zoom in and set the cursor's position for non-touch
+ case EWmlCmdZoomIn:
+ {
+ if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomIn +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ ZoomImagesInL();
+ }
+ break;
+ }
+
+ //zoom out and set the cursor's position for non-touch
+ case EWmlCmdZoomOut:
+ {
+ if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomOut +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ ZoomImagesOutL();
+ }
+ break;
+ }
+
+ /* Zoom Mode currently disabled
+ case EWmlCmdZoomMode:
+ {
+ // Disable the cursor: by using the zoom slider show cmd (temp)
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomSliderShow +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ // Disable any activated objects (i.e. plugins, input boxes)
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandCancel +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ // Display softkeys if in full screen mode. i.e. go to normal screen
+ if ( !iPenEnabled && iContentFullScreenMode )
+ {
+ iWasContentFullScreenMode = iContentFullScreenMode;
+ EnableFullScreenModeL( EFalse );
+ }
+
+ // Enter zoom mode
+ ZoomModeImagesL();
+ break;
+ }
+ */
+
+ case EWmlCmdZoomSliderShow:
+ {
+ // Toggle displaying the zoom slider, when the zoom button
+ // on toolbar is selected
+ MakeZoomSliderVisibleL( !iZoomSliderVisible );
+ break;
+ }
+ case EWmlCmdZoomSliderHide:
+ {
+ // Currently not used
+ MakeZoomSliderVisibleL( EFalse );
+ break;
+ }
+
+ // Find keyword commands
+ case EWmlCmdFindKeyword:
+ {
+ LaunchFindKeywordEditorL();
+ break;
+ }
+
+ case EWmlCmdFindKeywordPaneFind :
+ {
+ break;
+ }
+
+ case EWmlCmdFindKeywordPaneClose :
+ {
+ iContainer->FindKeywordPane()->ResetPrevText();
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->FindKeywordPane() );
+ // Cancel editing and sets Goto Pane text back.
+ iContainer->ShutDownFindKeywordEditorL();
+ UpdateCbaL();
+ if (iPenEnabled)
+ {
+ iBrowserContentViewToolbar->UpdateButtonsStateL();
+ }
+
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandClearFind +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+
+ if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen )
+ {
+ MakeCbaVisible( EFalse );
+ }
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ break;
+ }
+
+ case EWmlCmdFindNext :
+ {
+ // Find next keyword
+ FindKeywordL( NULL, ETrue );
+ break;
+ }
+ case EWmlCmdFindPrevious :
+ {
+ // Find previous keyword
+ FindKeywordL( NULL, EFalse );
+ break;
+ }
+
+ case EAknSoftkeySelect:
+ {
+ if( iHistoryViewIsUp )
+ {
+ if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode )
+ {
+ EnableFullScreenModeL( ETrue );
+ iWasContentFullScreenMode = EFalse;
+ }
+
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandOpen + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+
+ // Save zoom factor and quit the zoom mode
+ if ( isZoomMode() )
+ {
+ SaveCurrentZoomLevel(ETrue);
+ // Disable the zoom mode
+ SetZoomModeL( EFalse );
+ // Return to full screen, if we were in full screen before
+ if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode )
+ {
+ EnableFullScreenModeL( ETrue );
+ iWasContentFullScreenMode = EFalse;
+ }
+ // Exiting zoom mode, enable the cursor
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomSliderHide +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ break;
+ }
+ case EAknSoftkeyOk:
+ {
+ if( iThumbnailViewIsUp )
+ {
+ if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode )
+ {
+ EnableFullScreenModeL( ETrue );
+ iWasContentFullScreenMode = EFalse;
+ }
+
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandOpen + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ break;
+ }
+
+ case EAknSoftkeyClose:
+ {
+ if( iWasInFeedsView)
+ {
+ // FeedsView library
+
+ }
+ else
+ {
+ if ( isZoomMode() )
+ {
+ SetZoomModeL( EFalse );
+ }
+ AppUi()->HandleCommandL( EWmlCmdCloseWindow );
+ }
+ break;
+ }
+
+ case EWmlCmdSendAddressViaUnifiedMessage:
+ {
+ SendAddressL( );
+ }
+ break;
+
+ case EWmlCmdBack:
+ {
+ if( iWasInFeedsView)
+ {
+ // FeedsView library
+
+ }
+ else if( iImageMapActive )
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandBack +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ else if( ApiProvider().BrCtlInterface().NavigationAvailable(
+ TBrCtlDefs::ENavigationBack ) )
+ {
+ AppUi()->HandleCommandL( aCommand );
+ }
+ else
+ {
+ AppUi()->HandleCommandL( EWmlCmdCloseWindow );
+ }
+ break;
+ }
+
+ case EWmlCmdOneStepBack:
+ {
+ if( ApiProvider().BrCtlInterface().NavigationAvailable(TBrCtlDefs::ENavigationBack ) )
+ {
+ AppUi()->HandleCommandL( aCommand );
+ }
+ break;
+ }
+
+ case EAknCmdHelp:
+ {
+ if ( HELP )
+ {
+ AppUi()->HandleCommandL( EAknCmdHelp );
+ }
+ break;
+ }
+
+ case EWmlCmdCancelFetch:
+ {
+ // give it to AppUi
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+
+ case EWmlCmdOpenLinkInNewWindow:
+ {
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandOpenNewWindow + (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+ }
+
+ case EWmlCmdOpenLink:
+ {
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandOpen + (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+ }
+
+ case EWmlCmdShowSubscribeList:
+ {
+ const RPointerArray<TBrCtlSubscribeTo>& subscribeToList = iApiProvider.BrCtlInterface().SubscribeToMenuItemsL();
+ TInt len(subscribeToList.Count());
+ if (len > 0)
+ {
+ CArrayFixFlat<TBrCtlSelectOptionData>* optList = new( ELeave ) CArrayFixFlat<TBrCtlSelectOptionData>(10);
+ CleanupStack::PushL( optList );
+ HBufC* title = StringLoader::LoadLC(R_BROWSER_SUBSCRIBE_LIST);
+ TInt i;
+ for(i = 0; i < len; i++)
+ {
+ if(subscribeToList[i]->Title().Length())
+ {
+ TBrCtlSelectOptionData t(subscribeToList[i]->Title(), EFalse, EFalse, EFalse);
+ optList->AppendL(t);
+ }
+ else
+ {
+ TBrCtlSelectOptionData t(subscribeToList[i]->Url(), EFalse, EFalse, EFalse);
+ optList->AppendL(t);
+ }
+ }
+ TBool ret(ApiProvider().DialogsProvider().DialogSelectOptionL( *title, ESelectTypeNone, *optList));
+ if( ret )
+ {
+ TInt i;
+ for (i = 0; i < optList->Count(); i++)
+ {
+ if ((*optList)[i].IsSelected())
+ {
+ HandleSubscribeToL(subscribeToList[i]->CommandID() - TBrCtlDefs::ECommandIdBase);
+ break;
+ }
+ }
+ }
+ optList->Reset();
+ CleanupStack::PopAndDestroy( 2 ); // optList, title
+ }
+ break;
+ }
+
+ case EWmlCmdHome:
+ if (ApiProvider().Preferences().HomePageType() == EWmlSettingsHomePageAddress )
+ {
+ HBufC* url = HBufC::NewLC( KMaxHomePgUrlLength );
+ TPtr ptr( url->Des() );
+ User::LeaveIfError(ApiProvider().Preferences().HomePageUrlL( ptr ));
+ ApiProvider().FetchL( ptr );
+ CleanupStack::PopAndDestroy(); // url
+ }
+ else
+ {
+ HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoUrl);
+ if ( url && url->Length() && TBrowserDialogs::ConfirmQueryYesNoL(R_BROWSER_QUERY_SET_AS_HOME_PAGE))
+ {
+ ApiProvider().Preferences().SetHomePageUrlL(url->Des());
+ ApiProvider().Preferences().SetHomePageTypeL( EWmlSettingsHomePageAddress );
+ }
+ CleanupStack::PopAndDestroy(); // url
+ }
+ break;
+
+ case EWmlCmdGo:
+ break;
+
+ case EWmlCmdConfigureShortcutKeymap:
+ {
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserSettingsViewId, KUidSettingsGotoShortcutsGroup.iUid );
+ break;
+ }
+
+ case EWmlCmdShowShortcutKeymap:
+ {
+ ShowKeymap();
+ break;
+ }
+
+ case EWmlCmdHideShortcutKeymap:
+ {
+ HideKeymap();
+ break;
+ }
+
+ case EWmlCmdOpenFeedsFolder:
+ // Launch into feeds view, telling it that we came from content view
+ ApiProvider().FeedsClientUtilities().ShowFolderViewL(KUidBrowserContentViewId);
+ break;
+
+ case EWmlCmdEnterFullScreenBrowsing:
+ {
+ if ( iPenEnabled )
+ {
+ EnableFullScreenModeL( ETrue );
+ }
+ else
+ {
+ if ( iContentFullScreenMode )
+ {
+ EnableFullScreenModeL( EFalse );
+ }
+ else
+ {
+ EnableFullScreenModeL( ETrue );
+ }
+ }
+ break;
+ }
+
+ case EWmlCmdExitFullScreenBrowsing:
+ EnableFullScreenModeL( EFalse );
+ break;
+
+ default:
+ {
+ // DO element and toolbar commands are passed to BrCtl via AppUi
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ } // end of switch (aCommand)
+
+ // Enabling FullScreen for non-touch devices, after processing some dialog-based shortcut and toolbar actions
+ if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode &&
+ ( ( aCommand == EWmlCmdFindKeywordPaneClose ) ||
+ ( aCommand == EWmlCmdHideShortcutKeymap ) ||
+ ( aCommand == EWmlCmdGotoPaneGoTo ) ||
+ ( aCommand == EWmlCmdGotoPaneCancel ) ||
+ ( aCommand == EAknSoftkeyCancel ) ) )
+ {
+ EnableFullScreenModeL( ETrue );
+ iWasContentFullScreenMode = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::ViewHistoryL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::ViewHistoryL()
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowHistory +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::DoActivateL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::DoActivateL(
+ const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ CBrowserAppUi* ui;
+
+ ui = STATIC_CAST( CBrowserAppUi*, AppUi() );
+ iPreviousViewID = ApiProvider().LastActiveViewId();
+ if ( ui->LastActiveViewId() == KUidBrowserNullViewId )
+ {
+ //No view has been yet set as startup view -> use bookmarks view
+ ui->SetLastActiveViewId ( KUidBrowserBookmarksViewId );
+ ui->SetViewToBeActivatedIfNeededL( ui->LastActiveViewId() );
+ ApiProvider().SetLastActiveViewId ( ui->LastActiveViewId() );
+ }
+ else
+ {
+ HandleStatusPaneCallBack();
+ ApiProvider().SetLastActiveViewId(Id());
+ }
+
+ iContainer->ActivateL();
+
+ AppUi()->AddToViewStackL( *this, iContainer );
+
+ //Reset the title before updating the title in case of view activation
+ delete iTitle;
+ iTitle = NULL;
+
+ ApiProvider().Display().FSPaneOnL( );
+ ApiProvider().Display().SetGPRSIndicatorOnL();
+
+ UpdateTitleL( ApiProvider() );
+
+ ApiProvider().BrCtlInterface().MakeVisible(ETrue);
+ ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandGainFocus +
+ (TInt)TBrCtlDefs::ECommandIdBase);
+
+ if( ui->Connection().Connected() &&
+ !ui->Preferences().HttpSecurityWarningsStatSupressed() )
+ {
+ // Update security indicators
+ if ( ui->SomeItemsNotSecure() )
+ {
+ ui->Display().UpdateSecureIndicatorL( EAknIndicatorStateOff );
+ }
+ else
+ {
+ ui->Display().UpdateSecureIndicatorL(
+ ui->LoadObserver().LoadStatus(
+ CBrowserLoadObserver::ELoadStatusSecurePage ) ?
+ EAknIndicatorStateOn : EAknIndicatorStateOff );
+ }
+ }
+ UpdateCbaL();
+ if(KeymapIsUp())
+ {
+ RedrawKeymap();
+ }
+
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ iContainer->SetRect(ClientRect());
+PERFLOG_STOP_WRITE("ContentView::DoActivate")
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::UpdateFullScreenL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::UpdateFullScreenL()
+ {
+ TVwsViewId activeViewId;
+ if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone )
+ {
+ if ( activeViewId.iViewUid == KUidBrowserContentViewId )
+ {
+ if ( iContentFullScreenMode )
+ {
+ SetContentContainerRect();
+ if (iPenEnabled)
+ {
+ Toolbar()->SetToolbarVisibility( EFalse, EFalse );
+ Toolbar()->MakeVisible( EFalse );
+ }
+ if(Cba()->IsVisible())
+ {
+ Cba()->MakeVisible( EFalse );
+ UpdateCbaL();
+ }
+ if (!ApiProvider().Fetching())
+ {
+ if(StatusPane()->IsVisible())
+ {
+ StatusPane()->MakeVisible(EFalse);
+ }
+ }
+ else
+ {
+ if(!StatusPane()->IsVisible())
+ {
+ ShowFsStatusPane(ETrue);
+ }
+ }
+ }
+ else
+ {
+ Cba()->MakeVisible( ETrue );
+ StatusPane()->MakeVisible( ETrue );
+ }
+
+ ApiProvider().Display().FSPaneOnL( );
+ ApiProvider().Display().SetGPRSIndicatorOnL();
+
+ //Reset the title before updating the title in case of view activation
+ delete iTitle;
+ iTitle = NULL;
+ UpdateTitleL(ApiProvider());
+ ApiProvider().Display().RestoreTitleL();
+ StatusPane()->ApplyCurrentSettingsL();
+ }
+ }
+ }
+
+TRect CBrowserContentView::ResizeClientRect()
+ {
+ TRect clientRect = ClientRect();
+
+ if(iContentFullScreenMode && (Toolbar() && Toolbar()->IsVisible()) && Cba()->IsVisible())
+ {
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, screenRect);
+ clientRect = screenRect;
+ }
+
+ if (Layout_Meta_Data::IsLandscapeOrientation() &&
+ (StatusPane() && StatusPane()->IsVisible()) && !Cba()->IsVisible() && IsForeground())
+ {
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, screenRect);
+ clientRect.iBr.iY = screenRect.iBr.iY;
+
+ }
+
+ return clientRect;
+ }
+
+void CBrowserContentView::SetContentContainerRect()
+ {
+ TRect clientRect = ResizeClientRect();
+ iContainer->SetRect(clientRect);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SetFullScreenOffL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SetFullScreenOffL()
+ {
+ TVwsViewId activeViewId;
+ if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone )
+ {
+ Cba()->MakeVisible( ETrue );
+ UpdateCbaL();
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
+ StatusPane()->ApplyCurrentSettingsL();
+ StatusPane()->MakeVisible( ETrue );
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SetZoomLevelL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SetZoomLevelL()
+ {
+ // Get the current index of the array.
+ iCurrentZoomLevel = ApiProvider().BrCtlInterface().
+ BrowserSettingL(TBrCtlDefs::ESettingsCurrentZoomLevelIndex);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::DoDeactivate
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::DoDeactivate()
+ {
+ if ( !ApiProvider().ExitInProgress() )
+ {
+ TBrCtlDefs::TBrCtlElementType focusedElementType =
+ ApiProvider().BrCtlInterface().FocusedElementType();
+ if (focusedElementType == TBrCtlDefs::EElementActivatedInputBox)
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandAccept +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ TRAP_IGNORE( ApiProvider().Display().UpdateSecureIndicatorL(
+ EAknIndicatorStateOff ));
+ iContainer->SetFocus( EFalse );
+
+ EnableFullScreenModeL( EFalse);
+
+ TRAP_IGNORE( ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandLoseFocus +
+ (TInt)TBrCtlDefs::ECommandIdBase ) );
+ ApiProvider().BrCtlInterface().MakeVisible(EFalse);
+ }
+
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserContentView::CommandSetResourceIdL
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserContentView::CommandSetResourceIdL()
+ {
+ LOG_ENTERFN("ContentView::CommandSetResourceIdL");
+
+ // default case for normal screen
+ TInt result( R_BROWSER_DEFAULT_BUTTONS );
+
+ // default case for full screen
+ if ( iContentFullScreenMode )
+ {
+ result = R_BROWSER_SOFTKEYS_EXIT_FULL_SCREEN;
+ }
+ if ( isZoomMode() )
+ {
+ return R_BROWSER_DEFAULT_BUTTONS_AT_ZOOM_MODE_ON;
+ }
+ if( KeymapIsUp() )
+ {
+ return R_BROWSER_SOFTKEYS_CONFIGURE_HIDE;
+ }
+ if( iHistoryViewIsUp )
+ {
+ return R_BROWSER_SOFTKEYS_SELECT_CANCEL_SELECT;
+ }
+ if( iPluginPlayerIsUp )
+ {
+ return R_BROWSER_SOFTKEYS_CANCEL;
+ }
+ if( iSmartTextViewIsUp )
+ {
+ return R_INPUT_ELEMENT_BUTTONS;
+ }
+ if( iThumbnailViewIsUp )
+ {
+ return R_BROWSER_DEFAULT_BUTTONS_AT_THUMBNAIL_VIEW_ON;
+ }
+ if( iImageMapActive )
+ {
+ return R_BROWSER_DEFAULT_BUTTONS;
+ }
+ if( iSynchRequestViewIsUp )
+ {
+ if ( !iContentFullScreenMode )
+ {
+ result = R_BROWSER_SOFTKEYS_CANCEL;
+ }
+ return result;
+ }
+
+ if( iContainer->GotoPane()->IsVisible() )
+ // when goto pane is up there is no focusable element or active fetching
+ // process in place
+ {
+ if( iContainer->GotoPane()->SearchPaneActive() )
+ {
+ result = R_BROWSER_BOOKMARKS_CBA_SEARCH_PANE_SEARCH_CANCEL;
+ }
+ else
+ {
+ //check wheter there is an active popuplist
+ if( (iContainer->GotoPane()->PopupList() != NULL) &&
+ ( iContainer->GotoPane()->PopupList()->IsOpenDirToShow() ))
+ {
+ result = R_BROWSER_BOOKMARKS_CBA_GOTO_PANE_OPENDIR_CANCEL;
+ }
+ else if(iContainer->GotoPane()->PopupList() &&
+ iContainer->GotoPane()->PopupList()->IsPoppedUp() &&
+ !iPenEnabled)
+ {
+ // LSK Select is only for non-touch devices
+ result = R_BROWSER_BOOKMARKS_CBA_GOTO_PANE_SELECT_CANCEL;
+ }
+ else
+ {
+ result = R_BROWSER_BOOKMARKS_CBA_GOTO_PANE_GOTO_CANCEL;
+ }
+ }
+ }
+ else if ( iContainer->FindKeywordPane()->IsVisible() )
+ {
+ result = R_BROWSER_CBA_FIND_KEYWORD_PANE_OPTION_CLOSE;
+ }
+ else if ( ApiProvider().Fetching() )
+ {
+ if ( !iContentFullScreenMode )
+ {
+ // Enable Options menu during download can be done here
+ // otherwise use defualt Full Screen buttons
+ result = R_BROWSER_OPTIONS_MENU_DURING_DOWNLOAD;
+ }
+ }
+ else
+ {
+ TBrCtlDefs::TBrCtlElementType elementtype =
+ ApiProvider().BrCtlInterface().FocusedElementType();
+ if( elementtype == TBrCtlDefs::EElementActivatedObjectBox )
+ {
+ if ( !iContentFullScreenMode )
+ {
+ result = R_INPUT_ELEMENT_BUTTONS;
+ }
+ }
+ else if ( !ApiProvider().BrCtlInterface().NavigationAvailable(
+ TBrCtlDefs::ENavigationBack ) )
+ // at the beginning of the history list
+ {
+ if ( !iContentFullScreenMode )
+ {
+ // Options + Close
+ result = R_BROWSER_DEFAULT_BUTTONS_AT_BEGINNING_OF_HISTORY;
+ }
+ }
+ }
+BROWSER_LOG( ( _L(" ContentView's buttons:%d"), result ) );
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::ProcessCommandL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::ProcessCommandL(TInt aCommand)
+ {
+ CBrowserViewBase::ProcessCommandL( aCommand );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::DynInitMenuPaneL
+// -----------------------------------------------------------------------------
+void CBrowserContentView::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ LOG_ENTERFN("CBrowserContentView::DynInitMenuPaneL");
+ __ASSERT_DEBUG(aMenuPane, Util::Panic(Util::EUninitializedData));
+
+ // pasue js timers
+ ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandPauseScriptTimers );
+
+ if ( aResourceId == R_MENU_PANE )
+ {
+ // web feeds
+ #ifndef __RSS_FEEDS
+ aMenuPane->SetItemDimmed( EWmlCmdShowSubscribeList, ETrue );
+ #else
+ const RPointerArray<TBrCtlSubscribeTo>& items = ApiProvider().BrCtlInterface().SubscribeToMenuItemsL();
+ if ( items.Count() == 0 )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdShowSubscribeList, ETrue );
+ }
+ #endif // __RSS_FEEDS
+
+ // downloads
+ aMenuPane->SetItemDimmed( EWmlCmdDownloads,
+ !ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ) );
+
+ // If we have a touch device, check to see if the zoom slider is up, if so disable
+ if ( PenEnabled() && ZoomSliderVisible() )
+ {
+ MakeZoomSliderVisibleL( EFalse );
+ }
+
+ // find
+ aMenuPane->SetItemDimmed( EWmlCmdFindNext, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdFindPrevious, ETrue );
+
+/*
+ // help menu sub-menu - depending if Independent Application Update is available
+ if (BRDO_BROWSER_UPDATE_UI_FF)
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdHelpMenu, ETrue );
+ }
+*/
+ if ( iContainer->FindKeywordPane()->IsVisible() )
+ {
+ CEikMenuPaneItem::SData menuFindNext =
+ aMenuPane->ItemData( EWmlCmdFindNext );
+ CEikMenuPaneItem::SData menuFindPrevious =
+ aMenuPane->ItemData( EWmlCmdFindPrevious );
+
+ // Delete all menu items
+ aMenuPane->DeleteBetweenMenuItems( 0,
+ aMenuPane->NumberOfItemsInPane() - 1 );
+
+ aMenuPane->AddMenuItemL( menuFindNext );
+ aMenuPane->AddMenuItemL( menuFindPrevious );
+ aMenuPane->SetItemDimmed( EWmlCmdFindNext, EFalse );
+ aMenuPane->SetItemDimmed( EWmlCmdFindPrevious, EFalse );
+ return;
+ }
+
+ // wml option menu items
+ if ( ApiProvider().BrCtlInterface().WMLOptionMenuItemsL()->Count() < 1 )
+ {
+ // there isn't DO element, or only the first one with PREV exist
+ aMenuPane->SetItemDimmed( EWmlCmdServiceOptions, ETrue );
+ }
+
+ // find window
+ if (ApiProvider().WindowMgr().CurrentWindow()->WMLMode())
+ {
+ aMenuPane->SetItemDimmed(EWmlCmdFindKeyword, ETrue);
+ }
+
+ // shortcut key map
+ if (PenEnabled() || ApiProvider().IsEmbeddedModeOn())
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdShowShortcutKeymap, ETrue);
+ }
+
+ // BrCtl adds menu items to UI options menu list
+ ApiProvider().BrCtlInterface().AddOptionMenuItemsL( *aMenuPane, aResourceId );
+ }
+ else if ( aResourceId == R_DO_ELEMENTS )
+ {
+ RPointerArray<TBrCtlWmlServiceOption>* wmlElements;
+ wmlElements = ApiProvider().BrCtlInterface().WMLOptionMenuItemsL();
+
+ for ( TInt i=0; i<wmlElements->Count(); i++ )
+ {
+ TBrCtlWmlServiceOption* option = (*wmlElements)[i];
+ if ( option != NULL)
+ {
+ CEikMenuPaneItem::SData item;
+ item.iText.Copy( option->Text() );
+ item.iCommandId = option->ElemID();
+ item.iFlags = 0;
+ item.iCascadeId = 0;
+ aMenuPane->InsertMenuItemL(item, 0);
+ }
+ }
+ }
+ else if ( aResourceId == R_GOTO_SUBMENU )
+ {
+ // back to page
+ aMenuPane->SetItemDimmed( EWmlCmdBackToPage, ETrue );
+
+ // bookmarks/webfeeds
+ if( ApiProvider().IsEmbeddedModeOn() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdFavourites, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdOpenFeedsFolder, ETrue );
+ }
+
+ // home
+ aMenuPane->SetItemDimmed( EWmlCmdLaunchHomePage, ApiProvider().IsLaunchHomePageDimmedL() );
+ //search
+ if ( ! ApiProvider().Preferences().SearchFeature() )
+ {
+ aMenuPane->SetItemDimmed( EIsCmdSearchWeb, ETrue );
+ }
+ }
+ else if ( aResourceId == R_PAGEACTIONS_SUBMENU )
+ {
+ // bookmark
+ if ( ApiProvider().IsEmbeddedModeOn() && CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSaveAsBookmark, ETrue );
+ }
+ HBufC *pageUrl = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( ( pageUrl == NULL ) || ( pageUrl->Length() == 0 ) )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSaveAsBookmark, ETrue );
+ }
+ CleanupStack::PopAndDestroy( pageUrl );
+
+ // send
+ aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue );
+
+ if (ApiProvider().IsEmbeddedModeOn())
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSendAddressViaUnifiedMessage, ETrue );
+ }
+
+ // set as home page
+ //aMenuPane->SetItemDimmed( EWmlCmdSetAsHomePage, ETrue);
+
+
+ // pop-up blocking
+ if ( ApiProvider().IsEmbeddedModeOn() || ApiProvider().WindowMgr().CurrentWindow()->WMLMode())
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, EFalse );
+ aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, EFalse );
+
+ if ( ApiProvider().Preferences().PopupBlocking())
+ {
+ HBufC* url = ApiProvider().WindowMgr().CurrentWindow()->BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ TBool dimAllow = EFalse;
+ if( url )
+ {
+ // 'Allow Popups' needed if the current URL is not on the whitelist
+ TRAPD( errWhite, dimAllow = ApiProvider().PopupEngine().IsUrlOnWhiteListL( *url ););
+ // Error handling
+ if ( !errWhite )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, !dimAllow );
+ aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, dimAllow );
+ }
+ }
+ // else no url (strange case), so no popup specific menuitem
+ CleanupStack::PopAndDestroy( url );
+ }
+ else
+ {
+ //not shown any popupblocks related menu items when it's setting noblock
+ aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, ETrue );
+ }
+ }
+ }
+ else if ( aResourceId == R_VIEW_SUBMENU )
+ {
+ // toolbar
+ if ( !PenEnabled() && iApiProvider.Preferences().ShowToolbarOnOff() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdShowToolBar, ApiProvider().WindowMgr().CurrentWindow()->WMLMode() );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdShowToolBar, ETrue);
+ }
+
+ // disable fullscreen mode for touch only -- which has auto fullscreen now
+ if (iPenEnabled)
+ {
+ aMenuPane->SetItemDimmed(EWmlCmdEnterFullScreenBrowsing, ETrue);
+ }
+
+ // rotate
+ if (!ApiProvider().Preferences().RotateDisplay() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdRotateDisplay, ETrue );
+ }
+
+ // page overview
+ if ( !ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) ||
+ ApiProvider().WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdShowMiniature, ETrue);
+ }
+
+ // show images
+ if( !ApiProvider().BrCtlInterface().ImageCountL() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdShowImages, ETrue );
+ }
+
+ // load images
+ if (( ApiProvider().Preferences().AutoLoadContent() == EWmlSettingsAutoloadImagesNoFlash) ||
+ (ApiProvider().Preferences().AutoLoadContent() == EWmlSettingsAutoloadAll) ||
+ ApiProvider().WindowMgr().CurrentWindow()->HasLoadedImages() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdLoadImages, ETrue );
+ }
+
+ // window
+ if ( !ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) ||
+ ApiProvider().IsEmbeddedModeOn() ||
+ ApiProvider().WindowMgr().WindowCount() < 2)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSwitchWindow, ETrue );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::CheckForEmptyWindowsMenuL
+// Checks for the existence of Windows Submenu Items return true if no submenu items exist
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserContentView::CheckForEmptyWindowsMenuL(TWindowsMenuItemsDimCheck* aWindowMenuItems)
+ {
+
+ __ASSERT_DEBUG( (aWindowMenuItems != NULL), Util::Panic( Util::EUninitializedData ));
+
+ // 'OpenLinkInNewWindow is not available for 'non-anchor' elements or
+ // if current page has wml content.
+ //TBrCtlDefs::TBrCtlElementType elementtype =
+ // ApiProvider().BrCtlInterface().FocusedElementType();
+
+ // The commented part below enables the "Open link in new window" option.
+ // Currently the option is permanently dimmed
+ // UI change request AHUN-6U3NT4, S60 bug AHUN-6UYT6N
+ aWindowMenuItems->dimOpenInNewWin = ETrue; /*( (elementtype != TBrCtlDefs::EElementAnchor) ||
+ (ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(EFalse)) ); */
+
+
+ // Multiple Windows Supported
+ if ( ApiProvider().Preferences().UiLocalFeatureSupported(
+ KBrowserMultipleWindows ) )
+ {
+ TInt winCount = ApiProvider().WindowMgr().WindowCount();
+
+ // 'Close Window' & Switch Window needed if are 2+ open windows
+ if ( winCount > 1 )
+ {
+ aWindowMenuItems->dimCloseWin = EFalse;
+ // don't allow window switching if current window has wml. must close this window first
+ aWindowMenuItems->dimSwitchWin = ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(EFalse /*is any page wml?*/);//EFalse;
+ }
+
+ // Pop-up blocking is enabled
+ if ( ApiProvider().Preferences().PopupBlocking() )
+ {
+ //---------------------------------------------------------------------
+ // Popup Blocking Menu items
+ HBufC* url = ApiProvider().WindowMgr().CurrentWindow()->
+ BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( url )
+ {
+ // 'Allow Popups' needed if the current URL is not on the whitelist
+ TRAPD( errWhite,
+ aWindowMenuItems->dimAllowPopups = ApiProvider().PopupEngine().IsUrlOnWhiteListL( *url );
+ );
+ // Error handling
+ if ( errWhite )
+ {
+ // Better to have the menu item than not
+ aWindowMenuItems->dimAllowPopups = aWindowMenuItems->dimBlockPopups = EFalse;
+ }
+ else
+ {
+ aWindowMenuItems->dimBlockPopups = !aWindowMenuItems->dimAllowPopups;
+ }
+ }
+ // else no url (strange case), so no popup specific menuitem
+
+ CleanupStack::PopAndDestroy( url );
+ }
+ //=========================================================================
+ }
+ return (aWindowMenuItems->dimOpenInNewWin &&
+ aWindowMenuItems->dimSwitchWin &&
+ aWindowMenuItems->dimCloseWin &&
+ aWindowMenuItems->dimAllowPopups &&
+ aWindowMenuItems->dimBlockPopups);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::DimMultipleWindowsMenuItems
+// Dims the items of the windows submenu according to aWindowMenuItems
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::DimMultipleWindowsMenuItems( CEikMenuPane& aMenuPane, TWindowsMenuItemsDimCheck aWindowMenuItems )
+ {
+ aMenuPane.SetItemDimmed( EWmlCmdOpenLinkInNewWindow, aWindowMenuItems.dimOpenInNewWin );
+ aMenuPane.SetItemDimmed( EWmlCmdSwitchWindow, aWindowMenuItems.dimSwitchWin );
+ aMenuPane.SetItemDimmed( EWmlCmdCloseWindow, aWindowMenuItems.dimCloseWin );
+ aMenuPane.SetItemDimmed( EWmlCmdAllowPopups, aWindowMenuItems.dimAllowPopups );
+ aMenuPane.SetItemDimmed( EWmlCmdBlockPopups, aWindowMenuItems.dimBlockPopups );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::OptionListInit
+// Callback - we should initialize the list of DO elements
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::OptionListInitL()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::HandleGotoPaneEventL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleGotoPaneEventL(
+ CBrowserGotoPane* /*aGotoPane*/,
+ MGotoPaneObserver::TEvent aEvent )
+ {
+ switch ( aEvent )
+ {
+ case MGotoPaneObserver::EEventEnterKeyPressed:
+ {
+ if( !MenuBar()->MenuPane()->IsVisible() )
+ {
+ if (iContainer->GotoPane()->PopupList() != NULL)
+ {
+ if ( iContainer->GotoPane()->PopupList()->IsOpenDirToShow() )
+ {
+ HandleCommandL( EWmlCmdOpenFolder );
+ }
+ else
+ {
+ HandleCommandL( EWmlCmdGotoPaneGoTo );
+ }
+ }
+ }
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::OnScreenPosition
+// -----------------------------------------------------------------------------
+//
+TPoint CBrowserContentView::OnScreenPosition()
+ {
+ TRect rect = AppUi()->ApplicationRect();
+ TPoint point (rect.iTl);
+ if (iPenEnabled)
+ {
+ if (AppUi()->TouchPane())
+ {
+ TRect touchRect = AppUi()->TouchPane()->Rect();
+ if (touchRect.iTl == rect.iTl)
+ {
+ if (touchRect.Width() > touchRect.Height()) // Horizontal, on top
+ {
+ point = TPoint(rect.iTl.iX, touchRect.iBr.iY);
+ }
+ else // Vertical, on the left
+ {
+ point = TPoint(touchRect.iBr.iX, rect.iTl.iY);
+ }
+ }
+ }
+ }
+ return point;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::GotoUrlInGotoPaneL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::GotoUrlInGotoPaneL()
+ {
+ if ( iContainer->GotoPane() )
+ {
+ HBufC* url = iContainer->GotoPane()->GetTextL(); // the url
+ if( url )
+ {
+ iContainer->ShutDownGotoURLEditorL();
+
+ TFavouritesWapAp accessPoint;
+ // if current ap exists then use it. other ways use default ap.
+ if( ApiProvider().Connection().CurrentAPId() )
+ {
+ TUint apId = ApiProvider().Connection().CurrentAPId();
+ apId = Util::WapIdFromIapIdL( ApiProvider(), apId );
+ accessPoint.SetApId( apId );
+ }
+ else
+ {
+ accessPoint.SetApId(
+ ApiProvider().Preferences().DefaultAccessPoint() );
+ }
+ UpdateCbaL();
+ UpdateFullScreenL();
+
+ ApiProvider().FetchL( url->Des(),
+ KNullDesC,
+ KNullDesC,
+ accessPoint,
+ CBrowserLoadObserver::ELoadUrlTypeOther );
+
+ }
+ else // no URL entered
+ {
+ iContainer->ShutDownGotoURLEditorL();
+ UpdateCbaL();
+ UpdateFullScreenL();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::UpdateGotoPaneL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::UpdateGotoPaneL()
+ {
+ // Reset goto pane content
+ if( AUTOCOMP ) //ask the feature manager
+ {
+ //2.1 does not put http:// there
+ iContainer->GotoPane()->SetTextL( KNullDesC );
+ }
+ else
+ {
+ //2.0 does need http://
+ iContainer->GotoPane()->SetTextL( KHttpString );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::LaunchGotoAddressEditorL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::LaunchGotoAddressEditorL()
+ {
+ // Cancel editing and sets Goto Pane text back.
+ if (iContainer->GotoPane()->PopupList() != NULL)
+ {
+ iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ iContainer->GotoPane()->PopupList()->HidePopupL();
+ }
+
+ if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen )
+ {
+ MakeCbaVisible( ETrue );
+ }
+
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() );
+ CCoeEnv::Static()->AppUi()->AddToStackL( iContainer->GotoPane(), ECoeStackPriorityMenu );
+ iContainer->GotoPane()->MakeVisible( ETrue );
+ HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(
+ TBrCtlDefs::EPageInfoUrl );
+ if ( url && url->Length() )
+ {
+ iContainer->GotoPane()->SetTextL(*url);
+ iContainer->GotoPane()->SelectAllL();
+ }
+ else
+ {
+ // nor url; use default name.
+ // set "http://www." per Browser UI spec
+ iContainer->GotoPane()->SetTextL(KWWWString );
+ }
+ CleanupStack::PopAndDestroy(); // url
+ iContainer->GotoPane()->SetFocus( ETrue );
+ UpdateCbaL();
+
+ if (iPenEnabled)
+ {
+ Toolbar()->SetDimmed(ETrue);
+ Toolbar()->DrawNow();
+ }
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::LaunchFindKeywordEditorL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::LaunchFindKeywordEditorL()
+ {
+ // Cancel editing and sets Goto Pane text back.
+ if (iContainer->FindKeywordPane()->PopupList() != NULL)
+ {
+ iContainer->FindKeywordPane()->PopupList()->SetDirectoryModeL( ETrue );
+ iContainer->FindKeywordPane()->PopupList()->HidePopupL();
+ }
+
+ if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen )
+ {
+ MakeCbaVisible( ETrue );
+ }
+
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->FindKeywordPane() );
+ CCoeEnv::Static()->AppUi()->AddToStackL( iContainer->FindKeywordPane(), ECoeStackPriorityMenu );
+ iContainer->FindKeywordPane()->MakeVisible( ETrue );
+ iContainer->FindKeywordPane()->SetFocus( ETrue );
+ UpdateCbaL();
+ if (iPenEnabled)
+ {
+#ifdef RD_SCALABLE_UI_V2
+ Toolbar()->ToolbarExtension()->SetShown(EFalse);
+#endif
+ iBrowserContentViewToolbar->UpdateButtonsStateL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::UpdateTitleL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::UpdateTitleL( MApiProvider& aApiProvider )
+ {
+ HBufC* title = aApiProvider.BrCtlInterface().PageInfoLC(
+ TBrCtlDefs::EPageInfoTitle );
+ if ( title && title->Length() )
+ {
+ if( !iTitle || (iTitle && (iTitle->Des().Compare( title->Des())!= 0)))
+ {
+ delete iTitle;
+ iTitle = title->Des().AllocL();
+ aApiProvider.Display().SetTitleL( title->Des() );
+ }
+ }
+ else
+ {
+
+ TInt offset = 0;
+ HBufC* titleUrl = aApiProvider.BrCtlInterface().PageInfoLC(
+ TBrCtlDefs::EPageInfoUrl );
+ if( titleUrl == NULL ) // is this really possible?
+ {
+ CleanupStack::PopAndDestroy( titleUrl );
+ titleUrl = KNullDesC().AllocLC();
+ }
+ offset = titleUrl->Find( KSchemaIdentifier );
+ if(offset != KErrNotFound )
+ {
+ titleUrl->Des().Delete(0,offset + KSchemaIdentifierLength);
+ }
+ aApiProvider.Display().SetTitleL( titleUrl->Des() );
+ CleanupStack::PopAndDestroy( ); // titleUrl
+ }
+
+ CleanupStack::PopAndDestroy(); // title
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::AddNewBookmarkL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::AddNewBookmarkL( TBool aAsLastVisited, HBufC* aUrl )
+ {
+ TInt pop = 0;
+ HBufC* cardTitle = NULL;
+ TPtrC cardTitlePtr( KNullDesC );
+
+ // Make a bookmark model.
+ iBookmarksModel = CBrowserBookmarksModel::NewL(ApiProvider());
+
+ // Create a bookmark item.
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+
+ HBufC* theUrl = NULL;
+ if (aUrl == NULL)
+ {
+ // Set URL.
+ theUrl = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( !theUrl || !theUrl->Length() )
+ {
+ CleanupStack::PopAndDestroy( theUrl );
+ theUrl = KNullDesC().AllocLC();
+ }
+ pop++;
+ // Get the title
+ cardTitle = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoTitle );
+ pop++;
+ }
+ else
+ {
+ theUrl = aUrl;
+ }
+
+ if ( cardTitle )
+ {
+ cardTitle->Des().Trim();
+ cardTitlePtr.Set( cardTitle->Des() );
+ }
+
+ if ( cardTitlePtr.Length() )
+ {
+ // Current card has non-empty title, use that as bookmark name.
+ item->SetNameL( cardTitlePtr.Left(KFavouritesMaxName) );
+ }
+ else
+ {
+ // Get the URL
+ HBufC* url = theUrl->AllocLC();
+ pop++;
+
+ if ( url && url->Length() )
+ {
+ TUriParser16 urlParser;
+ urlParser.Parse(*url);
+ url->Des().SetLength( 0 );
+ url->Des().Append( urlParser.Extract( EUriHost) );
+ url->Des().Append( urlParser.Extract( EUriPath ) );
+ item->SetNameL( url->Left(KFavouritesMaxName) );
+ }
+ else
+ {
+ // No title, nor url; use default name.
+ iBookmarksModel->SetNameToDefaultL( *item );
+ }
+ }
+
+ // set url, username, password
+ Util::RetreiveUsernameAndPasswordFromUrlL( *theUrl, *item );
+ CleanupStack::PopAndDestroy(pop); // url, cardTitle, theUrl
+
+ item->SetParentFolder( KFavouritesRootUid );
+
+ // Set WAP AP.
+ TFavouritesWapAp ap; // default AP
+ item->SetWapAp( ap );
+
+ if ( aAsLastVisited )
+ {
+ iBookmarksModel->SetLastVisitedL( *item, EFalse,
+ CBrowserFavouritesModel::EAutoRename );
+ }
+
+ else
+ {
+ HBufC* prompt = StringLoader::LoadLC( R_WML_ENTER_BOOKMARK_NAME );
+ TBuf<KBrowserMaxPrompt+1> retString;
+ retString.Copy( item->Name() );
+
+ TBool queryName = ETrue;
+ while( queryName )
+ {
+ TInt result = TBrowserDialogs::DialogPromptReqL(
+ prompt->Des(),
+ &retString,
+ EFalse,
+ KFavouritesMaxBookmarkNameDefine );
+ if( result )
+ {
+ item->SetNameL(retString.Left(KFavouritesMaxName));
+ TInt err = iBookmarksModel->AddL(
+ *item,
+ ETrue,
+ CBrowserFavouritesModel::EDontRename );
+ if ( !err )
+ {
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_OK_NOTE,
+ iBookmarksModel->StringResourceId
+ ( *item, CBrowserFavouritesModel::ESaved ) );
+ queryName = EFalse;
+ AddBMUidToLastPlaceToCurrentListL( item->Uid() );
+
+ // To retain FavIcon in iconDatabase, we need to reference icon bitmap reference at least once
+ HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoUrl);
+ CGulIcon *icon = ApiProvider().BrCtlInterface().GetBitmapData(*url, TBrCtlDefs::EBitmapFavicon);
+ CleanupStack::PopAndDestroy(); //url
+ delete icon;
+ }
+ else if( KErrAlreadyExists == err )
+ {
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_INFO_NOTE, R_WML_NAME_ALREADY_IN_USE );
+ }
+ else
+ {
+ TBrowserDialogs::ErrorNoteL(
+ iBookmarksModel->StringResourceId(
+ *item,
+ CBrowserFavouritesModel::ENotSaved ) );
+
+ }
+ }
+ else
+ queryName = EFalse;
+ }
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+ CleanupStack::PopAndDestroy(); // item
+
+ delete iBookmarksModel;
+ iBookmarksModel = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::AddBMUidToLastPlaceToCurrentListL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::AddBMUidToLastPlaceToCurrentListL(const TInt aUid )
+ {
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL( orderArray );
+
+ CBrowserBookmarksOrder* currentOrder = CBrowserBookmarksOrder::NewLC();
+ if ( iBookmarksModel->Database().GetData( KFavouritesRootUid ,*currentOrder ) == KErrNone)
+ {
+ if ( currentOrder->GetBookMarksOrder().Count() > 0 )
+ {
+ orderArray->AppendL( &( currentOrder->GetBookMarksOrder()[0] ),
+ currentOrder->GetBookMarksOrder().Count() );
+ }
+ }
+ iBookmarksModel->AddUidToLastPlaceL(aUid, orderArray, currentOrder );
+ currentOrder->SetBookMarksOrderL( *orderArray );
+ iBookmarksModel->Database().SetData( KFavouritesRootUid ,*currentOrder );
+ CleanupStack::PopAndDestroy( 2 );// currentOrder, orderArray
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SendAddressL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SendAddressL( )
+ {
+ HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( url == NULL )
+ {
+ CleanupStack::PopAndDestroy( url ); // remove previous
+ url = KNullDesC().AllocLC();
+ }
+
+#ifndef _BOOKMARK_SENT_ASCII
+ if( url->Length() <= KMaxUrlLenghtInOTA )
+#endif // _BOOKMARK_SENT_ASCII
+ {
+ HBufC* title = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoTitle );
+ if( title == NULL )
+ {
+ CleanupStack::PopAndDestroy( title ); // remove previous
+ title = KNullDesC().AllocLC();
+ }
+
+ //CBrowserAppUi* ui = reinterpret_cast<CBrowserAppUi*>(AppUi());
+ MBmOTABinSender& sender = ApiProvider().BmOTABinSenderL();
+
+ sender.ResetAndDestroy();
+ sender.AppendL( url->Des(), title->Des() );
+ sender.SendAddressL( );
+ CleanupStack::PopAndDestroy( title ); // title
+ }
+#ifndef _BOOKMARK_SENT_ASCII
+ else
+ {
+#pragma message ( __FILE__ ": Length of bookmark addr cannot exceed 255bytes!")
+ _LIT( KErrMsg, "URL address of bookmark is too long. It cannot be sent.");
+
+ TBrowserDialogs::ErrorNoteL( KErrMsg );
+ }
+#endif // _BOOKMARK_SENT_ASCII
+ CleanupStack::PopAndDestroy( url ); // url
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::UpdateOptionMenuItemLabelL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::UpdateOptionMenuItemLabelL(CEikMenuPane* aMenuPane, const TInt aCommandId, const TInt aResourceId)
+ {
+
+ __ASSERT_DEBUG( (aMenuPane != NULL), Util::Panic( Util::EUninitializedData ));
+
+ HBufC* browserLabel = CCoeEnv::Static()->AllocReadResourceLC(aResourceId);
+ aMenuPane->SetItemTextL(aCommandId, *browserLabel);
+ CleanupStack::PopAndDestroy();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::DoSearchL
+// Do search for specified items in current page
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::DoSearchL(
+ CFindItemEngine::TFindItemSearchCase aSearchCase )
+ {
+ HBufC* findText = NULL;
+ findText = ApiProvider().BrCtlInterface().PageInfoLC(
+ TBrCtlDefs::EPageInfoContent );
+ if( findText == NULL )
+ {
+ CleanupStack::PopAndDestroy( findText );
+ return;
+ }
+
+ if( findText->Length() != 0 )
+ {
+
+ TPtr findTextDes = findText->Des();
+
+ for( int i = 0; i < findText->Length(); ++i )
+ {
+ if( (*findText)[i] == TUint16( 0x0a ) )
+ {
+ findTextDes[i] = TUint16( CEditableText::EParagraphDelimiter );
+ }
+
+ else if( (*findText)[i] == TUint16( CEditableText::ETabCharacter ) )
+ {
+ findTextDes[i] = TUint16( CEditableText::ESpace );
+ }
+ else if( (*findText)[i] == TUint16( CEditableText::ELineBreak ) )
+ {
+ findTextDes[i] = TUint16( CEditableText::EParagraphDelimiter );
+ }
+ }
+ }
+
+ SetFullScreenOffL();
+ CFindItemDialog* dialog = CFindItemDialog::NewL( *findText, aSearchCase );
+ dialog->ExecuteLD();
+ UpdateFullScreenL();
+ UpdateTitleL( ApiProvider() );
+
+ CleanupStack::PopAndDestroy( findText );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SetLastVisitedBookmarkL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SetLastVisitedBookmarkL()
+ {
+ AddNewBookmarkL( ETrue );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::UpdateNaviPaneL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::UpdateNaviPaneL( TDesC& aStatusMsg )
+ {
+ //Set text that will be shown in navipane
+ iStatusMsg.Des().Copy(aStatusMsg.Left(KStatusMessageMaxLength));//Might be longer than iStatusMsg
+ SetNavipaneViewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SetNavipaneViewL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SetNavipaneViewL()
+ {
+ TVwsViewId activeViewId;
+ if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone )
+ {
+ if ( (activeViewId.iViewUid == KUidBrowserContentViewId) )
+ {
+ if (!iNaviDecorator)
+ {
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+
+ if( iNaviPane )
+ {
+ if (iStatusMsg.Length())
+ {
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL(
+ iStatusMsg );
+ }
+ else
+ {
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL(_L(""));
+ }
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+ }
+ else
+ {
+ CAknNaviLabel* naviLabel = STATIC_CAST( CAknNaviLabel*,
+ iNaviDecorator->DecoratedControl());
+ naviLabel->SetTextL(iStatusMsg);
+ // make sure at top and redraw
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+
+ iNaviDecorator->MakeScrollButtonVisible(ETrue);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::FindItemIsInProgress
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserContentView::FindItemIsInProgress()
+ {
+ return iFindItemIsInProgress;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::HandleStatusPaneSizeChange
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleStatusPaneSizeChange()
+ {
+ SetContentContainerRect();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::StateChanged
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::StateChanged(
+ TBrCtlDefs::TBrCtlState aState,
+ TInt aValue )
+ {
+LOG_ENTERFN(" CBrowserContentView::StateChanged" );
+LOG_WRITE_FORMAT(" state: %d", aState );
+LOG_WRITE_FORMAT(" value: %d", aValue );
+ switch(aState)
+ {
+ case TBrCtlDefs::EStateImageMapView:
+ {
+ iImageMapActive = (TBool) aValue;
+ TRAP_IGNORE( UpdateCbaL() );
+ break;
+ }
+ case TBrCtlDefs::EStateHistoryView:
+ {
+ iHistoryViewIsUp = (TBool) aValue;
+ iHistoryAtBeginning = EFalse;
+ iHistoryAtEnd = EFalse;
+ if ( iPenEnabled )
+ {
+ TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() );
+ }
+ TRAP_IGNORE( UpdateCbaL() );
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ break;
+ }
+ case TBrCtlDefs::EStateThumbnailView:
+ {
+ iThumbnailViewIsUp = (TBool) aValue;
+ if ( iPenEnabled )
+ {
+ TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() );
+ }
+ TRAP_IGNORE( UpdateCbaL() );
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ break;
+ }
+ case TBrCtlDefs::EStatePluginPlayer:
+ {
+ iPluginPlayerIsUp = (TBool) aValue;
+ TRAP_IGNORE( UpdateCbaL() );
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ break;
+ }
+ case TBrCtlDefs::EStateSmartTextView:
+ {
+ iSmartTextViewIsUp = (TBool) aValue;
+ TRAP_IGNORE( UpdateCbaL() );
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ break;
+ }
+ case TBrCtlDefs::EStateToolBarMode:
+ {
+ if(!aValue)
+ {
+ TRAP_IGNORE( UpdateCbaL() );
+ }
+ break;
+ }
+ case TBrCtlDefs::EStateScriptLog:
+ {
+ TRAP_IGNORE( ApiProvider().Preferences().SetScriptLogL( aValue ) );
+ break;
+ }
+ case TBrCtlDefs::EStateZoomSliderMode:
+ {
+ if ( aValue )
+ {
+ iZoomSliderVisible = ETrue;
+ }
+ else
+ {
+ iZoomSliderVisible = EFalse;
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenTimer();
+ }
+ }
+ // Inform Toolbar of this fact
+ if ( iPenEnabled )
+ {
+ TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() );
+ }
+ break;
+ }
+ case TBrCtlDefs::EStateFullscreenBrowsing:
+ {
+ if (!iPenEnabled && IsEditMode())
+ {
+ if (!aValue)
+ { // exit fullscreen so remember what to go back to after edit mode is exited
+ iFullScreenBeforeEditModeEntry = iContentFullScreenMode;
+ TRAP_IGNORE( EnableFullScreenModeL( EFalse ) );
+ }
+ else if (aValue && iFullScreenBeforeEditModeEntry)
+ {
+ TRAP_IGNORE( EnableFullScreenModeL( ETrue ) );
+ }
+ }
+ else if (!aValue)
+ {
+ TRAP_IGNORE( EnableFullScreenModeL( EFalse ) );
+ }
+ break;
+ }
+ case TBrCtlDefs::EStateHistoryBeginning:
+ {
+ if(aValue)
+ {
+ iHistoryAtBeginning = ETrue;
+ }
+ else
+ {
+ iHistoryAtBeginning = EFalse;
+ }
+ if (iPenEnabled)
+ {
+ TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() );
+ }
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ break;
+ }
+ case TBrCtlDefs::EStateHistoryEnd:
+ {
+ if(aValue)
+ {
+ iHistoryAtEnd = ETrue;
+ }
+ else
+ {
+ iHistoryAtEnd = EFalse;
+ }
+ if (iPenEnabled)
+ {
+ TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() );
+ }
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ break;
+ }
+ case TBrCtlDefs::EStateSynchRequestMode:
+ {
+ iSynchRequestViewIsUp = (TBool) aValue;
+ if (iPenEnabled)
+ {
+ TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() );
+ }
+ TRAP_IGNORE( UpdateCbaL() );
+ TRAP_IGNORE( UpdateTitleL( ApiProvider() ) );
+ break;
+ }
+ case TBrCtlDefs::EStatePluginFullScreen:
+ HandlePluginFullScreen((TBool) aValue);
+ break;
+ default:
+ break;
+ }
+
+ ApiProvider().WindowMgr().SetCurrentWindowViewState(aState, aValue);
+ if (iPenEnabled && ApiProvider().WindowMgr().CurrentWindow()->WMLMode())
+ {
+ EnableFullScreenModeL( EFalse );
+ }
+
+ }
+
+// -------------------------------------------------------------------
+// CBrowserContentView::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleCommandL(
+ TBrCtlDefs::TBrCtlClientCommands aCommand,
+ const CArrayFix<TPtrC>& /*aAttributesNames*/,
+ const CArrayFix<TPtrC>& aAttributeValues)
+ {
+
+ // resume js timers
+ ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandResumeScriptTimers );
+
+ switch(aCommand)
+ {
+ case TBrCtlDefs::EClientCommandLaunchFindKeyword:
+ {
+ // Find Keyword not initiated from options menu so don't set menupane to visible.
+ LaunchFindKeywordEditorL();
+ MenuBar()->MenuPane()->MakeVisible(EFalse);
+ break;
+ }
+ case TBrCtlDefs::EClientCommandGotoWebAddress:
+ {
+ HandleCommandL(EWmlCmdGoToAddress);
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandSaveAsBookmark:
+ {
+ HandleCommandL(EWmlCmdSaveAsBookmark);
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandManageBookmarks:
+ {
+ HandleCommandL(EWmlCmdFavourites);
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandZoomIn:
+ {
+ ZoomImagesInL();
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandZoomOut:
+ {
+ ZoomImagesOutL();
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandZoomMode:
+ {
+ ZoomModeImagesL();
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandGoToHompage:
+ {
+ HandleCommandL(EWmlCmdLaunchHomePage);
+ break;
+ }
+ case TBrCtlDefs::EClientCommandRotateScreen:
+ {
+ HandleCommandL(EWmlCmdRotateDisplay);
+ break;
+ }
+ case TBrCtlDefs::EClientCommandSavePage:
+ {
+ HandleCommandL(EWmlCmdSavePage);
+ break;
+ }
+ case TBrCtlDefs::EClientCommandSwitchWindow:
+ {
+ HandleCommandL(EWmlCmdSwitchWindow);
+ break;
+ }
+ case TBrCtlDefs::EClientCommandShowHelp:
+ {
+ HandleCommandL(EAknCmdHelp);
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandToolbarConfigure:
+ {
+ // open settings view in toolbar group
+ AppUi()->HandleCommandL( EWmlCmdPreferencesToolbar );
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandToolbarShowKeymap:
+ {
+ ShowKeymap();
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandSubscribeToFeeds:
+ {
+#ifdef __RSS_FEEDS
+ const TPtrC16 name(aAttributeValues.At(0));
+ const TPtrC16 url(aAttributeValues.At(1));
+
+ ApiProvider().SetLastActiveViewId( KUidBrowserFeedsFolderViewId );
+ ApiProvider().FeedsClientUtilities().SubscribeToL( name, url );
+ // switch back to FeedsView, so change layout
+ SetFullScreenOffL();
+#endif
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandShowContextMenu:
+ {
+ // Get ElementType
+ const TPtrC elTypePtr(aAttributeValues.At(0));
+ TLex lex(elTypePtr);
+ TInt elType;
+ TInt resourceId = 0;
+ if (lex.Val(elType) == KErrNone)
+ {
+ switch (elType)
+ {
+ case TBrCtlDefs::EElementNone:
+ resourceId = R_BROWSER_EMPTY_SPACE_STYLUS_POPUP_MENU;
+ break;
+ case TBrCtlDefs::EElementAnchor:
+ case TBrCtlDefs::EElementTelAnchor:
+ case TBrCtlDefs::EElementMailtoAnchor:
+ resourceId = R_BROWSER_ANCHOR_STYLUS_POPUP_MENU;
+ break;
+ case TBrCtlDefs::EElementSmartLinkTel:
+ resourceId = R_BROWSER_PHONE_NUMBER_STYLUS_POPUP_MENU;
+ break;
+ case TBrCtlDefs::EElementSmartLinkEmail:
+ resourceId = R_BROWSER_EMAIL_ADDRESS_STYLUS_POPUP_MENU;
+ break;
+ case TBrCtlDefs::EElementImageBox:
+ resourceId = R_BROWSER_IMAGE_STYLUS_POPUP_MENU;
+ break;
+ case TBrCtlDefs::EElementBrokenImage:
+ if (ApiProvider().Preferences().AutoLoadContent() == EWmlSettingsAutoloadText)
+ {
+ if (ApiProvider().FlashPresent())
+ {
+ resourceId = R_BROWSER_IMAGE_PLACEHOLDER_STYLUS_POPUP_MENU_WITH_FLASH;
+ }
+ else
+ {
+ resourceId = R_BROWSER_IMAGE_PLACEHOLDER_STYLUS_POPUP_MENU_NO_FLASH;
+ }
+ }
+ break;
+ case TBrCtlDefs::EElementAreaBox:
+ resourceId = R_BROWSER_IMAGEMAP_STYLUS_POPUP_MENU;
+ break;
+ default:
+ break;
+ }
+ if (resourceId != 0)
+ {
+ TPoint point;
+ // Get point X
+ const TPtrC xPtr(aAttributeValues.At(1));
+ lex.Assign(xPtr);
+ lex.Val(point.iX);
+ // Get point Y
+ const TPtrC yPtr(aAttributeValues.At(2));
+ lex.Assign(yPtr);
+ lex.Val(point.iY);
+
+ delete iStylusPopupMenu;
+ iStylusPopupMenu = NULL;
+ iStylusPopupMenu = CAknStylusPopUpMenu::NewL( this, point);
+ TResourceReader rr;
+ CCoeEnv::Static()->CreateResourceReaderLC(rr, resourceId);
+ iStylusPopupMenu->ConstructFromResourceL( rr );
+ CleanupStack::PopAndDestroy(); // resource reader
+ iStylusPopupMenu->SetPosition( point);
+ iStylusPopupMenu->ShowMenu();
+ }
+ }
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandToolbarSettings:
+ {
+ // Launch Settings View
+ HandleCommandL(EWmlCmdPreferences);
+ break;
+ }
+
+ case TBrCtlDefs::EClientCommandFullScreen:
+ {
+ HandleCommandL(EWmlCmdEnterFullScreenBrowsing);
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::HandleSubscribeToL
+// Handles a selection from the subscribe to sub-menu.
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleSubscribeToL( TInt aCommand )
+ {
+#ifndef __RSS_FEEDS
+ (void) aCommand;
+#else // __RSS_FEEDS
+ TInt index;
+
+ // Get the corresponding feed info.
+ const RPointerArray<TBrCtlSubscribeTo>& items = ApiProvider().
+ BrCtlInterface().SubscribeToMenuItemsL();
+
+ index = aCommand - TBrCtlDefs::ECommandIdSubscribeToBase;
+ if ((index >= 0) && (index < items.Count()))
+ {
+ const TPtrC16 name(items[index]->Title());
+ const TPtrC16 url(items[index]->Url());
+
+ ApiProvider().SetLastActiveViewId( KUidBrowserFeedsFolderViewId );
+ ApiProvider().FeedsClientUtilities().SubscribeToL( name, url );
+ // switch back to FeedsView, so change layout
+ SetFullScreenOffL();
+ }
+#endif // __RSS_FEEDS
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::HandleSubscribeToUrlL
+// Handles subscribing to a feed from a ur
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleSubscribeToWithUrlL( TPtrC aUrl )
+ {
+#ifndef __RSS_FEEDS
+ (void) aUrl;
+#else // __RSS_FEEDS
+
+ ApiProvider().SetLastActiveViewId( KUidBrowserFeedsFolderViewId );
+
+ //Get the 'Title' info by comparing aUrl with the url's populated in array 'items'
+ const RPointerArray<TBrCtlSubscribeTo>& items = ApiProvider().BrCtlInterface().SubscribeToMenuItemsL();
+ TInt index = 0;
+ TInt itemCount = items.Count();
+
+ while (itemCount != 0 && index < itemCount)
+ {
+ if (!(aUrl.Compare(items[index]->Url())))
+ {
+ break;
+ }
+ else
+ {
+ index++;
+ }
+ }
+
+
+ if (itemCount == 0 || index >= itemCount )
+ {
+ ApiProvider().FeedsClientUtilities().SubscribeToL( KNullDesC, aUrl );
+ }
+ else
+ {
+ const TPtrC16 name(items[index]->Title());
+ ApiProvider().FeedsClientUtilities().SubscribeToL(name , aUrl );
+ }
+
+#endif // __RSS_FEEDS
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::DynInitToolbarL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ )
+ {
+ // If we have a touch device, check to see if the zoom slider is up,
+ // if displayed, close it, so the extended toolbar shows without the
+ // zoomslider displaying on top of it.
+ if ( PenEnabled() && ZoomSliderVisible() )
+ {
+ MakeZoomSliderVisibleL( EFalse );
+ }
+
+ if ( iPenEnabled )
+ {
+ iBrowserContentViewToolbar->UpdateButtonsStateL() ;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::WindowEventHandlerL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::WindowEventHandlerL( TWindowEvent /*aEvent*/, TInt aWindowId )
+ {
+ if ( aWindowId == ApiProvider().WindowMgr().CurrentWindow()->WindowId() )
+ {
+ if ( iPenEnabled )
+ {
+ iBrowserContentViewToolbar->UpdateButtonsStateL();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::IsHistoryViewUp
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserContentView::IsHistoryViewUp()
+ {
+ return iHistoryViewIsUp;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::IsHistoryAtBeginning
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserContentView::IsHistoryAtBeginning()
+ {
+ return iHistoryAtBeginning;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::IsHistoryAtEnd
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserContentView::IsHistoryAtEnd()
+ {
+ return iHistoryAtEnd;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::FindKeywordL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::FindKeywordL( HBufC* aFindString, TBool aFindDirection )
+ {
+ TInt findResponse = 0;
+
+ if ( aFindString )
+ {
+ // Find string
+ delete iEnteredKeyword;
+ iEnteredKeyword = NULL;
+ iEnteredKeyword = aFindString;
+ findResponse = ApiProvider().BrCtlInterface().FindKeyword( iEnteredKeyword->Des() );
+ }
+ else
+ {
+ // Search next/previous
+ findResponse = ApiProvider().BrCtlInterface().FindKeywordAgain( aFindDirection );
+ }
+
+ HBufC* toolTipText = NULL;
+
+ switch ( findResponse )
+ {
+ case TBrCtlDefs::EFindNoMatches:
+ toolTipText = StringLoader::LoadLC( R_QTN_BROWSER_KEYWORD_FIND_NO_MATCHES );
+ break;
+ case TBrCtlDefs::EFindWrapAround:
+ toolTipText = StringLoader::LoadLC( R_QTN_BROWSER_KEYWORD_FIND_WRAPAROUND );
+ break;
+ case TBrCtlDefs::EFindAllMatches:
+ toolTipText = StringLoader::LoadLC( R_QTN_BROWSER_KEYWORD_FIND_ALL_CONTENT_SEARCHED );
+ break;
+ }
+
+ // Show the result of the search.
+ if ( toolTipText )
+ {
+ ApiProvider().DialogsProvider().ShowTooltipL( *toolTipText );
+ CleanupStack::PopAndDestroy( toolTipText );
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::HandleClientRectChange
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::HandleClientRectChange()
+ {
+ if( iContainer )
+ {
+ iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ UpdateFullScreenL();
+ if(KeymapIsUp())
+ {
+ RedrawKeymap();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::SetZoomModeL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::SetZoomModeL( TBool aZoomMode )
+ {
+ // if ( !ApiProvider().Fetching() )
+ if (ApiProvider().ContentDisplayed())
+ {
+ iZoomMode = aZoomMode;
+ TRAP_IGNORE( UpdateCbaL() );
+ if ( aZoomMode )
+ {
+ // Show the current zoom level in tooltip
+ SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL);
+ //MakeZoomSliderVisibleL( ETrue );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::MakeZoomSliderVisibleL
+// Informs Browser Control if the Zoom Slider should be visible or not.
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::MakeZoomSliderVisibleL( TBool aVisible )
+ {
+ if ( aVisible && !iZoomSliderVisible )
+ {
+ // If the page is being fetched then don't show the zoom slider
+ if ( ApiProvider().ContentDisplayed())
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomSliderShow +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ iZoomSliderVisible = ETrue;
+ }
+ }
+ // Set the zoom slider to invisible only if the toggle is false,
+ // and the zoom slider used to be visible
+ else if (!aVisible && iZoomSliderVisible )
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomSliderHide +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ iZoomSliderVisible = EFalse;
+ }
+
+ if ( iPenEnabled )
+ {
+ iBrowserContentViewToolbar->UpdateButtonsStateL();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::ZoomImagesInL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::ZoomImagesInL( TInt aDuration )
+ {
+ if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ iZoomLevelArray = ApiProvider().BrCtlInterface().ZoomLevels();
+
+ // Change zoom level
+ ZoomImagesL( 1, 0, iZoomLevelArray->Count()-2, aDuration );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::ZoomImagesOutL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::ZoomImagesOutL( TInt aDuration )
+ {
+ if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ iZoomLevelArray = ApiProvider().BrCtlInterface().ZoomLevels();
+
+ // Change zoom level
+ ZoomImagesL( -1, 1, iZoomLevelArray->Count()-1, aDuration );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::ZoomModeImagesL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::ZoomModeImagesL()
+ {
+ if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() )
+ {
+ // Retrieve the current zooming index value
+ iCurrentZoomLevel = ApiProvider().BrCtlInterface().BrowserSettingL(
+ TBrCtlDefs::ESettingsCurrentZoomLevelIndex );
+ iSavedZoomLevel = iCurrentZoomLevel;
+
+ // Toggle current zoom mode. Zoom Mode allows the user to change
+ // the zoom level using the navikey or HW zoom key
+ SetZoomModeL( ETrue );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::ZoomImagesL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::ZoomImagesL( TInt aDirection, TUint aLow,
+ TUint aHigh, TInt aDuration )
+ {
+ // Retrieve the current zooming index value, it takes effect right away
+ iCurrentZoomLevel = ApiProvider().BrCtlInterface().BrowserSettingL(
+ TBrCtlDefs::ESettingsCurrentZoomLevelIndex );
+ TInt currentZoomIndex = FindCurrentZoomIndex(iCurrentZoomLevel);
+
+ // Zoom can be increment, decrement or a direct change to a specific value.
+ if ( currentZoomIndex >= aLow && currentZoomIndex <= aHigh )
+ {
+ // Set current zoom level.
+ currentZoomIndex += aDirection;
+ iCurrentZoomLevel = (*iZoomLevelArray)[currentZoomIndex];
+
+ // Set actual zoom level.
+ ApiProvider().BrCtlInterface().SetBrowserSettingL(
+ TBrCtlDefs::ESettingsCurrentZoomLevelIndex, iCurrentZoomLevel );
+
+ // Retrieve the current zooming index value, because each page has its
+ // minimum zoom level, if smaller than it, engine will ignore
+ // so we have to retrieve the correct zoom level
+ iCurrentZoomLevel = ApiProvider().BrCtlInterface().BrowserSettingL(
+ TBrCtlDefs::ESettingsCurrentZoomLevelIndex );
+ }
+
+ // Display the zoom indicator
+ if ( currentZoomIndex <= 0 )
+ {
+ // Display minimum zoom indicator, it will dismiss after aDuration
+ SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL_MIN, aDuration );
+ }
+ else if ( currentZoomIndex >= iZoomLevelArray->Count()-1 )
+ {
+ TInt arrayCount = iZoomLevelArray->Count()-1;
+ // Display maximum zoom indicator, it will dismiss after aDuration
+ SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL_MAX, aDuration );
+ }
+ else
+ {
+ // Display zoom percentage indicator, it will dismiss after aDuration
+ // We turned off displaying zoom indicator for each level
+ // SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL, aDuration );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SaveCurrentZoomLevel
+// ---------------------------------------------------------------------------
+void CBrowserContentView::SaveCurrentZoomLevel(TBool saveZoom)
+{
+ if (saveZoom)
+ {
+ //save the current zoom level by clicking softkey to confirm
+ ApiProvider().BrCtlInterface().SetBrowserSettingL(
+ TBrCtlDefs::ESettingsCurrentZoomLevelIndex, iCurrentZoomLevel );
+ }
+ else
+ {
+ iCurrentZoomLevel = iSavedZoomLevel;
+ ApiProvider().BrCtlInterface().SetBrowserSettingL(
+ TBrCtlDefs::ESettingsCurrentZoomLevelIndex, iCurrentZoomLevel );
+ }
+}
+
+// ---------------------------------------------------------------------------
+// FindCurrentZoomIndex
+// ---------------------------------------------------------------------------
+TInt CBrowserContentView::FindCurrentZoomIndex(TInt aCurrentZoomLevel)
+{
+ TInt index = -1;
+ for ( index = 0; index<iZoomLevelArray->Count()-1; index++)
+ {
+ if (aCurrentZoomLevel <=(*iZoomLevelArray)[index] )
+ {
+ break;
+ }
+ }
+ return index;
+}
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::SetZoomLevelTitleTextL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::SetZoomLevelTitleTextL( TInt aResourceId, TInt aDuration )
+ {
+ HBufC* zoomLevelFormat = NULL;
+
+ if ( aResourceId == R_BROWSER_ZOOM_LEVEL_MIN ||
+ aResourceId == R_BROWSER_ZOOM_LEVEL_MAX )
+ {
+ // Display the zoom max or min string
+ zoomLevelFormat = StringLoader::LoadLC( aResourceId );
+
+ // Show zoom indicator for aDuration seconds
+ ApiProvider().WindowMgr().CurrentWindow()->ChangeTitlePaneTextUntilL( zoomLevelFormat->Des(), aDuration );
+
+ CleanupStack::PopAndDestroy( ); // zoomLevelFormat
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::GetTextZoomLevelsL
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::GetTextZoomLevelsL( )
+ {
+ // Creating the text level
+ // Levels must be equal to TFontSize, with step percent 25% or 50%
+ // depending on chinese build.
+ // This is a temporary solution until make sure if engine
+ // provides text zoom levels. So it is currently hardcoded.
+ //------
+ // China build has only three font sizes:
+ // 0, 2, 4 (all small, normal, all large)
+ TInt fontSize = 0;
+ if ( !AVKONAPAC )
+ {
+ // font sizes 0,1,2,3,4
+ for ( TInt level = 50; level <= 150; level = level + 25 )
+ {
+ iTextZoomLevelArray->AppendL( level );
+ iFontSizeArray->AppendL( fontSize );
+ fontSize++;
+ }
+ }
+ else
+ {
+ // font sizes 0,2,4
+ for ( TInt level = 50; level <= 150; level = level + 50 )
+ {
+ iTextZoomLevelArray->AppendL( level );
+ iFontSizeArray->AppendL( fontSize );
+ fontSize = fontSize + 2;
+ }
+ }
+
+ // Get initial text zoom level index, bt comparing
+ // the preferences value, with the one in iFontSizeArray,
+ // and get the index (i)
+ TBool found = EFalse;
+ for ( TInt i = 0; i < iFontSizeArray->Count(); i++ )
+ {
+ if ( ApiProvider().Preferences().FontSize() == (*iFontSizeArray)[i] )
+ {
+ iCurrentTextZoomLevelIndex = i;
+ found = ETrue;
+ }
+ }
+ // If the initial font size value is not found, then the cenrep
+ // default is not right, by default initial cenrep font size value
+ // should be 0,2,4. So general, and chinese values are the same.
+ // Because if for example default cenrep value of font size is 1,
+ // then that is not supported in chinese build.
+ // General font size values are: 0,1,2,3,4
+ // Chinese font size values are: 0,2,4
+ if ( !found )
+ {
+ User::Leave( KErrGeneral );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::KeymapIsUp
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserContentView::KeymapIsUp()
+ {
+ return (iShortcutKeyMap != NULL);
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::isZoomMode
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserContentView::isZoomMode()
+ {
+ // Zoom Mode currently disabled
+ // return iZoomMode;
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::ShowKeymap
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::ShowKeymap()
+ {
+ iShortcutKeyMap = CBrowserShortcutKeyMap::NewL(iContainer, iApiProvider);
+ UpdateCbaL();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::HideKeymap
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::HideKeymap()
+ {
+ delete(iShortcutKeyMap);
+ iShortcutKeyMap = NULL;
+ TRAP_IGNORE(UpdateCbaL());
+ TRAP_IGNORE(UpdateFullScreenL());
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentView::RedrawKeymap
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentView::RedrawKeymap()
+ {
+ HideKeymap();
+ ShowKeymap();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::EnableFullScreenModeL
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::EnableFullScreenModeL( TBool aEnableFullScreen )
+ {
+ if( iContentFullScreenMode == aEnableFullScreen )
+ return;
+
+ TInt command( KErrNotFound );
+ if ( aEnableFullScreen )
+ {
+ iContentFullScreenMode = ETrue;
+ UpdateFullScreenL();
+ command = TBrCtlDefs::ECommandEnterFullscreenBrowsing;
+ }
+ else
+ {
+ if (iPenEnabled)
+ {
+ Toolbar()->SetToolbarVisibility( ETrue, EFalse );
+ }
+ iContentFullScreenMode = EFalse;
+ SetFullScreenOffL();
+ command = TBrCtlDefs::ECommandLeaveFullscreenBrowsing;
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenIdleTimer();
+ }
+ }
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ command + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::HandlePluginFullScreen
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::HandlePluginFullScreen(TBool aFullScreen)
+{
+ iIsPluginFullScreenMode = aFullScreen;
+ if (aFullScreen) {
+ if (AppUi()->Orientation() != CAknAppUiBase::EAppUiOrientationLandscape) {
+ iOrientation = AppUi()->Orientation();
+ TRAP_IGNORE(AppUi()->SetOrientationL(CAknAppUiBase::EAppUiOrientationLandscape));
+ }
+ if (iPenEnabled) {
+ Toolbar()->SetToolbarVisibility( EFalse, EFalse );
+ }
+ iContentFullScreenMode = ETrue;
+ UpdateFullScreenL();
+ }
+ else {
+ TInt command( KErrNotFound );
+ command = TBrCtlDefs::ECommandLeaveFullscreenBrowsing;
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ command + (TInt)TBrCtlDefs::ECommandIdBase );
+ TRAP_IGNORE(AppUi()->SetOrientationL(iOrientation));
+ if (iPenEnabled) {
+ Toolbar()->SetToolbarVisibility( ETrue, EFalse );
+ }
+ iContentFullScreenMode = EFalse;
+ SetFullScreenOffL();
+ if (iPenEnabled)
+ {
+ StartAutoFullScreenIdleTimer();
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::ShowFsStatusPane
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::ShowFsStatusPane(TBool aShow)
+ {
+
+ if (aShow)
+ {
+#ifdef RD_SCALABLE_UI_V2
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ StatusPane()->SwitchLayoutL(R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT_NO_SOFTKEYS);
+#endif
+ StatusPane()->MakeVisible( ETrue );
+
+ SetContentContainerRect();
+
+ // Remove any timer that has already been set
+ if ( iPeriodic )
+ {
+ iPeriodic->Cancel();
+ }
+ }
+ else
+ {
+ // Kick off timer for 3 seconds before hiding status pane again
+ if ( iPeriodic )
+ {
+ iPeriodic->Cancel();
+ }
+ iPeriodic->Start(KFullScreenStatusPaneTimeout, 0,TCallBack(CallHideFsStatusPane,this));
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::CallHideFsStatusPane
+// -----------------------------------------------------------------------------
+TInt CBrowserContentView::CallHideFsStatusPane(TAny* aCBrowserContentView)
+ {
+ __ASSERT_DEBUG(aCBrowserContentView, Util::Panic( Util::EUninitializedData ));
+ TRAP_IGNORE(
+ ((CBrowserContentView*)aCBrowserContentView)->HideFsStatusPane();
+ );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::HideFsStatusPane
+// -----------------------------------------------------------------------------
+void CBrowserContentView::HideFsStatusPane()
+ {
+ iPeriodic->Cancel();
+ if (iContentFullScreenMode && ApiProvider().LastActiveViewId() == KUidBrowserContentViewId )
+ {
+ StatusPane()->MakeVisible( EFalse );
+
+ SetContentContainerRect();
+ }
+ }
+// -----------------------------------------------------------------------------
+// CBrowserContentView::StartAutoFullScreenTimer
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::StartAutoFullScreenTimer()
+ {
+ SuspendAutoFullScreenIdleTimer();
+ if ( iAutoFSPeriodic )
+ {
+ iAutoFSPeriodic->Cancel();
+ }
+ iAutoFSPeriodic->Start(KAutoFullScreenTimeout, 0,TCallBack(CallActivateAutoFullScreen,this));
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::StartAutoFullScreenIdleTimer
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::StartAutoFullScreenIdleTimer()
+ {
+ if ( iIdlePeriodic )
+ {
+ iIdlePeriodic->Cancel();
+ }
+ iIdlePeriodic->Start(KAutoFullScreenIdleTimeout, 0,TCallBack(CallActivateAutoFullScreen,this));
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SuspendAutoFullScreenTimer
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SuspendAutoFullScreenTimer()
+ {
+ if ( iAutoFSPeriodic )
+ {
+ iAutoFSPeriodic->Cancel();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SuspendAutoFullScreenIdleTimer
+// -----------------------------------------------------------------------------
+//
+void CBrowserContentView::SuspendAutoFullScreenIdleTimer()
+ {
+ if ( iIdlePeriodic )
+ {
+ iIdlePeriodic->Cancel();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::CallSwitchToAutoFullScreen
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserContentView::CallActivateAutoFullScreen(TAny* aCBrowserContentView)
+ {
+ __ASSERT_DEBUG(aCBrowserContentView, Util::Panic( Util::EUninitializedData ));
+ TRAP_IGNORE(
+ ((CBrowserContentView*)aCBrowserContentView)->ActivateAutoFullScreenMode();
+ );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::ActivateAutoFullScreen
+// -----------------------------------------------------------------------------
+void CBrowserContentView::ActivateAutoFullScreenMode()
+ {
+ if ( iAutoFSPeriodic )
+ {
+ iAutoFSPeriodic->Cancel();
+ }
+ if ( iIdlePeriodic )
+ {
+ iIdlePeriodic->Cancel();
+ }
+
+ if ( ApiProvider().LastActiveViewId() == KUidBrowserContentViewId )
+ {
+ if( IsForeground()
+ && ApiProvider().LoadObserver().ContentDisplayed()
+ && !iZoomSliderVisible
+ && !iHistoryViewIsUp
+ && !iContainer->GotoPane()->IsVisible()
+ && !iContainer->FindKeywordPane()->IsVisible()
+#ifdef RD_SCALABLE_UI_V2
+ && !Toolbar()->ToolbarExtension()->IsShown()
+#endif
+ && !iThumbnailViewIsUp
+ && !iOptionsMenuActive
+ && !ApiProvider().IsDisplayingMenuOrDialog()
+ && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode()
+ && !iIsPluginFullScreenMode)
+ {
+ EnableFullScreenModeL( ETrue);
+ }
+ else
+ {
+ if (iIsPluginFullScreenMode || !IsForeground())
+ {
+ //Hide the FullscreenExit Button
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ TBrCtlDefs::ECommandLeaveFullscreenBrowsing
+ + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ StartAutoFullScreenTimer();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::SetEmphasis
+// -----------------------------------------------------------------------------
+
+void CBrowserContentView::SetEmphasis(CCoeControl* aMenuControl, TBool aEmphasis)
+ {
+ if (iPenEnabled)
+ {
+ if(aEmphasis)
+ {
+ iOptionsMenuActive = ETrue;
+ SuspendAutoFullScreenTimer();
+ }
+ else
+ {
+ iOptionsMenuActive = EFalse;
+ StartAutoFullScreenTimer();
+ }
+ }
+ CAknView::SetEmphasis(aMenuControl, aEmphasis);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentView::IsEditMode
+// -----------------------------------------------------------------------------
+TBool CBrowserContentView::IsEditMode()
+ {
+ TBrCtlDefs::TBrCtlElementType focusedElementType =
+ ApiProvider().BrCtlInterface().FocusedElementType();
+
+ TBool retVal = ((focusedElementType == TBrCtlDefs:: EElementActivatedInputBox) ||
+ (focusedElementType == TBrCtlDefs:: EElementInputBox) ||
+ (focusedElementType == TBrCtlDefs:: EElementTextAreaBox));
+ return (retVal);
+ }
+
+void CBrowserContentView::HandleStatusPaneCallBack()
+ {
+ TVwsViewId activeViewId;
+ TBool resIdChanged(EFalse);
+ TInt resId = StatusPane()->CurrentLayoutResId();
+
+ if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone )
+ {
+ if ( activeViewId.iViewUid == KUidBrowserContentViewId )
+ {
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ resIdChanged = resId != R_AVKON_STATUS_PANE_LAYOUT_USUAL;
+ StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
+ }
+ else //Portrait
+ {
+ resIdChanged = resId != R_AVKON_STATUS_PANE_LAYOUT_SMALL;
+ StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_SMALL);
+ }
+ }
+ }
+ if(resIdChanged)
+ SetContentContainerRect();
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserContentViewContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,903 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*/
+
+#include "BrowserContentViewContainer.h"
+#include "BrowserAppUi.h"
+#include "BrowserAppViewBase.h"
+#include "BrowserGotoPane.h"
+#include "CommonConstants.h"
+#include "BrowserContentView.h"
+#include "Display.h"
+#include "Preferences.h"
+#include "BrowserUtil.h"
+
+#include "BrowserPreferences.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include <FeatMgr.h>
+
+#include <LayoutMetaData.cdl.h> // For Layout_Meta_Data landscape/portrait status
+
+#include <eikrted.h>
+#include <eikbctrl.h>
+#include <Eikmenub.h>
+
+#include <aknutils.h>
+
+#include "BrowserUIVariant.hrh"
+
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include "BrowserApplication.h"
+#include <csxhelp/ope.hlp.hrh>
+#include <csxhelp/browser.hlp.hrh>
+#endif // __SERIES60_HELP
+
+#include "eikon.hrh"
+
+
+//Constant
+// The interval zoom tooltip is visible, it will disappear after KZoomLevelShowTime seconds
+const TInt KZoomLevelShowTime( 2 * 1000 ); // 2 seconds
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::NewL()
+// ---------------------------------------------------------------------------
+//
+CBrowserContentViewContainer*
+CBrowserContentViewContainer::NewL(CBrowserContentView* aView,
+ MApiProvider& aApiProvider )
+ {
+ CBrowserContentViewContainer* container =
+ new (ELeave) CBrowserContentViewContainer( aView, aApiProvider );
+ CleanupStack::PushL( container );
+ container->ConstructL();
+ CleanupStack::Pop(); // container
+
+ return container;
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::CBrowserContentViewContainer()
+// ---------------------------------------------------------------------------
+//
+CBrowserContentViewContainer::
+CBrowserContentViewContainer(CBrowserContentView* aView,
+ MApiProvider& aApiProvider ) :
+ iView( aView ),
+ iApiProvider( aApiProvider )
+ {
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::~CBrowserContentViewContainer()
+// ---------------------------------------------------------------------------
+//
+CBrowserContentViewContainer::~CBrowserContentViewContainer()
+ {
+ delete iGotoPane;
+ delete iFindKeywordPane;
+ iView = NULL; // Not owned
+
+ iShortCutFuncMap.Close();
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::ConstructL()
+ {
+ CreateWindowL();
+
+#if defined(BRDO_MULTITOUCH_ENABLED_FF) && !defined (__WINSCW__)
+ //Enable advance pointer info for multi-touch.
+ Window().EnableAdvancedPointers();
+#endif
+
+ SetAllowStrayPointers();
+ SetMopParent( iView );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserContentViewContainer::HandlePointerEventL
+// Handles pointer events
+// -----------------------------------------------------------------------------
+void CBrowserContentViewContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ switch ( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ // Do nothing
+ break;
+ }
+ case TPointerEvent::EDrag:
+ {
+ // Do nothing
+ break;
+ }
+ case TPointerEvent::EButton1Up:
+ {
+ // Close the zoom silder when the user selects anywhere in the
+ // BrowserContainerView
+ if ( iView->ZoomSliderVisible() )
+ {
+ iView->MakeZoomSliderVisibleL( EFalse );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ } // end of switch
+
+ // Must pass the pointer event to the CoeControl
+ CCoeControl::HandlePointerEventL( aPointerEvent );
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::OfferKeyEventL()
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CBrowserContentViewContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+ {
+ CBrowserAppUi* ui = CBrowserAppUi::Static();
+ TKeyResponse result( EKeyWasNotConsumed );
+
+ if (ui->OfferApplicationSpecificKeyEventL(aKeyEvent, aType) == EKeyWasConsumed)
+ {
+ return EKeyWasConsumed;
+ }
+
+ // For Short Cut
+ if (!iShortCutFuncsReady)
+ {
+ CreateShortCutFuncsHashTable();
+ iShortCutFuncsReady = ETrue;
+ }
+
+ // Turn off some controls, if we receive events
+ if ( aType == EEventKey )
+ {
+ // Turn off the keymap if on
+ if ( iView->KeymapIsUp() )
+ {
+ iView->HandleCommandL( EWmlCmdHideShortcutKeymap );
+ }
+
+ // Turn off the zoom slider if on
+ if ( iView->ZoomSliderVisible() )
+ {
+ iView->MakeZoomSliderVisibleL( EFalse );
+ }
+ }
+
+ // If goto pane is visible, offer key events to it
+ if ( iGotoPane->IsVisible() )
+ {
+ return iGotoPane->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ TKeyEvent keyEvent( aKeyEvent );
+ TBrCtlDefs::TBrCtlElementType elementtype =
+ iApiProvider.BrCtlInterface().FocusedElementType();
+
+ // Don't allow virtual keyboard backspace key event to close the window
+ // And don't close window if editing in an input box or textarea input
+ if ( !AknLayoutUtils::PenEnabled() && aType == EEventKey
+ && keyEvent.iCode == EKeyBackspace
+ && elementtype != TBrCtlDefs::EElementActivatedInputBox
+ && elementtype != TBrCtlDefs::EElementTextAreaBox )
+ {
+ if ( iApiProvider.Preferences().UiLocalFeatureSupported(
+ KBrowserMultipleWindows ) )
+ {
+ TInt winCount = iApiProvider.WindowMgr().WindowCount();
+ if ( ( winCount > 1 ) && ( !iView->IsMiniatureViewUp() ) )
+ {
+ ui->CloseWindowL();
+ result = EKeyWasConsumed;
+ }
+ }
+ }
+
+ // Handle zooming events
+ // 1. RemConInterface will translate dedicated HW key press to OfferKeyEventL().
+ // See eikon.hrh for mapping.
+ // 2. When the browser is in Zoom Mode (slider or tooltip displayed), the
+ // navi-keys will zoom.
+ if ( aType == EEventKey )
+ {
+ // Handle dedicated HW key zoom-in: if not in zoom mode, HW zoom key takes
+ // zooming immediately without going to zoom mode
+ // if it's already in zoom mode, then HW zoom key acts the same as up
+ // and down navigation key mode
+ // Zoom mode can display tooltip (current) or slider (future)
+ if ( iView->isZoomMode() )
+ {
+ }
+ else if (!iView->IsHistoryViewUp() && !iView->IsMiniatureViewUp())
+ {
+ // Not in zoom mode, or history view, or page overview, and HW zoom key
+ // pressed - zoom immediately without entering zoom mode.
+ if ( keyEvent.iCode == EKeyZoomIn )
+ {
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomIn +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ iView->ZoomImagesInL(KZoomLevelShowTime);
+ result = EKeyWasConsumed;
+ }
+ // Handle dedicated HW key zoom-out
+ else if ( keyEvent.iCode == EKeyZoomOut )
+ {
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandZoomOut +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ iView->ZoomImagesOutL(KZoomLevelShowTime);
+ result = EKeyWasConsumed;
+ }
+ }
+
+ } // End of handling key events for zooming
+
+
+ // Web Engine opens the highlighted link into a new window. (long press)
+ // Currently the option is disabled and the link is opened in the same window
+ // The commented part below enables the "Open link in new window" option on long press.
+ // UI change request AHUN-6U3NT4, S60 bug AHUN-6UYT6N
+
+ TBool aEnterKeyForLinksActivation = (keyEvent.iCode == EKeyEnter) &&
+ (iApiProvider.Preferences().EnterKeyMode() == TBrCtlDefs::EEnterKeyCanActivateLink);
+ if ( aType == EEventKey &&
+ (keyEvent.iCode == EKeyOK || aEnterKeyForLinksActivation) )
+ {
+ if ( keyEvent.iRepeats && iSelectionKeyPressed )
+ {
+
+ TInt command( KErrNotFound );
+ switch( elementtype )
+ {
+ case TBrCtlDefs::EElementAnchor:
+ {
+ // command = TBrCtlDefs::ECommandOpenNewWindow;
+ command = TBrCtlDefs::ECommandOpen;
+ break;
+ }
+ default: break;
+ }
+ // if ( command == TBrCtlDefs::ECommandOpenNewWindow &&
+ // iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ // !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))
+ if ( command == TBrCtlDefs::ECommandOpen)
+ {
+ iSelectionKeyPressed = EFalse;
+ keyEvent.iCode = EKeyNull;
+ result = EKeyWasConsumed;
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ command + TBrCtlDefs::ECommandIdBase );
+ }
+ }
+ }
+
+ // stop the event handling when find item was actived
+ if ( (keyEvent.iScanCode == EStdKeyDevice3 ||
+ keyEvent.iScanCode == EStdKeyXXX ||
+ aEnterKeyForLinksActivation)
+ && aType == EEventKeyDown && !iView->FindItemIsInProgress() )
+ {
+ iSelectionKeyPressed = ETrue;
+ keyEvent.iCode = EKeyNull;
+ }
+
+ // Ignore key event in zoom mode
+ if ( result == EKeyWasNotConsumed && !iView->isZoomMode())
+ {
+ if ( !iView->PenEnabled() && iView->FullScreenMode() && keyEvent.iRepeats)
+ {
+ iView->setFullScreenFlag();
+ iView->EnableFullScreenModeL( EFalse );
+ }
+ TRAP_IGNORE(result = iApiProvider.BrCtlInterface().OfferKeyEventL(keyEvent, aType));
+ }
+
+ /**
+ * When checking long or short key presses, iScanCode must be used, because
+ * when EEventKeyUp/EEventKeyUp are handled, the iCode is not available.
+ * iIsKeyLongPressed must be checked in short key presses because, when the
+ * button is released short key code will be called again. And that time it
+ * must be ignored.
+ */
+
+ /**
+ // This key is inactive, only for testing short / long key presses.
+ if ( keyEvent.iScanCode == 48 && keyEvent.iRepeats && !iIsKeyLongPressed)
+ {
+ iEikonEnv->InfoMsg(_L("0 Long"));
+ iIsKeyLongPressed = ETrue;
+ keyEvent.iCode = EKeyNull;
+ result = EKeyWasConsumed;
+ }
+ if ( aType == EEventKeyUp && keyEvent.iScanCode == 48 && !keyEvent.iRepeats)
+ {
+ if ( !iIsKeyLongPressed )
+ {
+ iEikonEnv->InfoMsg(_L("0 Short"));
+ keyEvent.iCode = EKeyNull;
+ result = EKeyWasConsumed;
+ }
+ iIsKeyLongPressed = EFalse;
+ }
+ **/
+
+ /*
+ * Not processing short keys, if the History view, or the
+ * Miniature View ( old name: Thumbnail View ) is up,
+ * except short key: '8'.
+ */
+ if (!iApiProvider.Preferences().AccessKeys())
+ {
+ // Key short press, activate function based on keyEvent.iCode
+ if ( aType == EEventKey && result == EKeyWasNotConsumed )
+ {
+ if (!AknLayoutUtils::PenEnabled())
+ {
+ if (iView->isZoomMode())
+ {
+ result = EKeyWasConsumed;
+ }
+ else
+ {
+ if (iApiProvider.Preferences().ShortcutKeysForQwerty())
+ {
+ result = InvokeFunction ( keyEvent.iCode );
+ }
+ else
+ {
+ if ( !iView->IsMiniatureViewUp() && !iView->IsHistoryViewUp() )
+ {
+ TInt function = -1;
+ switch(keyEvent.iCode)
+ {
+ case '0':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey0Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '1':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey1Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '2':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey2Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '3':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey3Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '4':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey4Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '5':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey5Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '6':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey6Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '7':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey7Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '8':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey8Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '9':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey9Cmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '*':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKeyStarCmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ case '#':
+ {
+ function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKeyHashCmd()][KShortcutsCommandDecodeMatrixCmdVal];
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ if (function != -1)
+ {
+ iView->HandleCommandL(function);
+ result = EKeyWasConsumed;
+ }
+ }
+ } //endof handle shortcut keys
+
+ if (result == EKeyWasConsumed)
+ {
+ keyEvent.iCode = EKeyNull;
+ }
+ }
+ }
+ }
+
+ if ( iView->IsHistoryViewUp() && result == EKeyWasConsumed )
+ {
+ if ( ( aType == EEventKey || aType == EEventKeyUp )
+ && ( keyEvent.iCode == EKeyLeftUpArrow // Northwest
+ || keyEvent.iCode == EStdKeyDevice10 // : Extra KeyEvent supports diagonal event simulator wedge
+ || keyEvent.iCode == EKeyLeftArrow // West
+ || keyEvent.iCode == EKeyLeftDownArrow // Southwest
+ || keyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
+
+ || keyEvent.iCode == EKeyRightUpArrow // Northeast
+ || keyEvent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
+ || keyEvent.iCode == EKeyRightArrow // East
+ || keyEvent.iCode == EKeyRightDownArrow // Southeast
+ || keyEvent.iCode == EStdKeyDevice12 ) ) // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ iView->UpdateTitleL( iApiProvider );
+ }
+ }
+
+ // If in zoom mode, then show the zoom tooltip
+ if (iView->isZoomMode() && result == EKeyWasConsumed )
+ {
+ iView->SetZoomLevelTitleTextL(R_BROWSER_ZOOM_LEVEL);
+ }
+
+ } // if (!iApiProvider.Preferences().AccessKeys())
+
+ if ( result == EKeyWasNotConsumed &&
+ (keyEvent.iScanCode == EStdKeyDevice3 || keyEvent.iScanCode == EStdKeyXXX) &&
+ aType == EEventKeyUp &&
+ iSelectionKeyPressed )
+ {
+ // Selection key was released and it is not a long press!
+ iSelectionKeyPressed = EFalse;
+ aType = EEventKey;
+ keyEvent.iCode = EKeyOK;
+
+ // first offer event to browser control, e.g. link activation
+ // result = iApiProvider.BrCtlInterface().OfferKeyEventL(keyEvent, aType);
+
+ iView->ResetPreviousViewFlag();
+ }
+ return result;
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::FocusChanged()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::FocusChanged(TDrawNow aDrawNow)
+ {
+ // do not proceed further if a browser app exit is in progress
+ if ( iApiProvider.ExitInProgress() )
+ {
+ return;
+ }
+
+ if ( iApiProvider.StartedUp() )
+ iApiProvider.BrCtlInterface().SetFocus(IsFocused());
+ if ( iGotoPane->IsVisible() )
+ {
+ TRAP_IGNORE(iGotoPane->EnableKeyEventHandlerL( IsFocused() ));
+ }
+
+ CCoeControl::FocusChanged( aDrawNow );
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::SizeChanged()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::SizeChanged()
+ {
+ // BrCtl could be uninitialized
+ if ( iApiProvider.StartedUp() )
+ {
+ if(iApiProvider.LastActiveViewId() != KUidBrowserFeedsFeedViewId)
+ {
+ const TRect& oldRect = iApiProvider.BrCtlInterface().Rect();
+ iApiProvider.BrCtlInterface().SetRect( TRect( oldRect.iTl, Size() ) );
+ }
+ }
+
+ if ( iFindKeywordPane->IsVisible() )
+ iFindKeywordPane->HandleFindSizeChanged();
+ if ( iGotoPane->IsVisible() )
+ iGotoPane->HandleFindSizeChanged();
+
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::CountComponentControls()
+// ---------------------------------------------------------------------------
+//
+TInt CBrowserContentViewContainer::CountComponentControls() const
+ {
+ TInt ctrls = 0;
+ ctrls++; // iGotoPane
+ if ( iApiProvider.StartedUp() )
+ {
+ ctrls++;
+ }
+ ctrls++; // iFindKeywordPane
+ return ctrls;
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::ComponentControl()
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CBrowserContentViewContainer::ComponentControl( TInt aIndex ) const
+ {
+ CCoeControl *ctrl = NULL;
+ switch( aIndex )
+ {
+ case 0:
+ {
+ ctrl = iGotoPane;
+ break;
+ }
+ case 1:
+ {
+ if ( iApiProvider.StartedUp() )
+ ctrl = &(iApiProvider.BrCtlInterface());
+ break;
+ }
+ case 2:
+ {
+ ctrl = iFindKeywordPane;
+ break;
+ }
+
+ default:
+ break;
+ }
+ return ctrl;
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::ShutDownGotoURLEditorL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::ShutDownGotoURLEditorL()
+ {
+ iGotoPane->MakeVisible( EFalse );
+ iGotoPane->SetFocus( EFalse );
+ SetFocus( ETrue );
+ }
+
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::ShutDownFindKeywordEditorL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::ShutDownFindKeywordEditorL()
+ {
+ iFindKeywordPane->MakeVisible( EFalse );
+ iFindKeywordPane->SetFocus( EFalse );
+ SetFocus( ETrue );
+ }
+
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::HandleResourceChange()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::HandleResourceChange(TInt aType)
+ {
+ CCoeControl::HandleResourceChange( aType );
+ if ( aType == KEikDynamicLayoutVariantSwitch)
+ {
+ if (!iView->FindItemIsInProgress())
+ {
+ iView->HandleStatusPaneCallBack();
+ iApiProvider.Display().RestoreTitleL();
+ }
+
+ iView->SetContentContainerRect();
+
+ if( iApiProvider.Preferences().SearchFeature() )
+ {
+ iGotoPane->SetTextModeItalicL();
+ // To Avoid Flickring, only when layout changed.
+ iGotoPane->DrawNow();
+ }
+
+ DrawDeferred();
+
+ // For Touch only-If find pane open, force toolbar to show since avkon disables
+ // touch toolbar whenever a dialog is open and a rotate event is handled.
+ // ** This workaround was provided by Avkon toolbar group
+ if ( AknLayoutUtils::PenEnabled() &&
+ iFindKeywordPane->IsVisible() &&
+ iView->Toolbar() )
+ {
+ iView->Toolbar()->DrawableWindow()->SetOrdinalPosition( 0 );
+ }
+ }
+ }
+
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::CreateShortCutFuncsHashTable()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::CreateShortCutFuncsHashTable()
+ {
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncHomePg(), EWmlSettingsShortCutsActivateHomepage);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncBkMark(), EWmlSettingsShortCutsActivateBkmkview);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncFindKeyWord(), EWmlSettingsShortCutsShowFindKeyword);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncPrePage(), EWmlSettingsShortCutsGotoPreviousPage);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncSwitchWin(), EWmlSettingsShortCutsShowSwitchWindowList);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncMiniImage(), EWmlSettingsShortCutsShowMiniature);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncFullScreen(), EWmlSettingsShortCutsShowFullScreen);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncGoAddr(), EWmlSettingsShortCutsGotoPane);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncZoomIn(), EWmlSettingsShortCutsZoomIn);
+ InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncZoomOut(), EWmlSettingsShortCutsZoomOut);
+ // InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncZoomMode(), EWmlSettingsShortCutsZoomMode);
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::InsertFuncToHashTable()
+// ---------------------------------------------------------------------------
+//
+void CBrowserContentViewContainer::InsertFuncToHashTable(HBufC* aKeyStr, TInt aFunc)
+ {
+
+ __ASSERT_DEBUG( (aKeyStr != NULL), Util::Panic( Util::EUninitializedData ));
+
+ if (aKeyStr->Length() == 0)
+ {
+ return;
+ }
+
+ TBuf<4> key1Str; // Ex.: 0075
+ TBuf<4> key2Str; // Ex.: 0032
+
+ // Get the position of the separator ',' character from '0075, 0032'.
+ TInt pos = aKeyStr->LocateF( ',' );
+ if ( ( pos != KErrNotFound ) )
+ { //we have two string
+ // Extract the first unicode string
+ key1Str.Copy( aKeyStr->Des().Left( pos ) );
+ TUint key1 = MyAtoi(key1Str);
+
+ // Extract the second unicode string; second "-1" below is for remove space
+ key2Str.Copy( aKeyStr->Des().Right( aKeyStr->Des().Length() - pos - 1 -1) );
+ TUint key2 = MyAtoi(key2Str);
+
+ // insert key and function
+ iShortCutFuncMap.Insert(key1, aFunc);
+ iShortCutFuncMap.Insert(key2, aFunc);
+ }
+ else
+ { //we only have one string
+ // Extract the first unicode string
+ key1Str.Copy( aKeyStr->Des() );
+ TUint key1 = MyAtoi(key1Str);
+ // insert key and function
+ iShortCutFuncMap.Insert(key1, aFunc);
+ }
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::MyAtoi()
+// ---------------------------------------------------------------------------
+//
+TUint CBrowserContentViewContainer::MyAtoi(TPtrC aData)
+ {
+ TLex lex(aData);
+ TUint dataValue = 0;
+ lex.Val(dataValue, EHex);
+ return dataValue;
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserContentViewContainer::InvokeFunction()
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CBrowserContentViewContainer::InvokeFunction(TUint aCode)
+ {
+ TInt function = -1;
+ // if error, no function defined for this shortcut key
+ TRAPD( err, function = iShortCutFuncMap.FindL(aCode) );
+ if ( err != KErrNone )
+ {
+ return EKeyWasNotConsumed;
+ }
+
+ TBool embedded = iApiProvider.IsEmbeddedModeOn();
+
+ if ( !iView->IsMiniatureViewUp() && !iView->IsHistoryViewUp() )
+ {
+ CBrowserAppUi* ui = CBrowserAppUi::Static();
+
+ switch(function)
+ {
+ case EWmlSettingsShortCutsActivateHomepage:
+ {
+ TBool homepage = iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserUiHomePageSetting );
+ // home page
+ if ( homepage )
+ {
+ //
+ TWmlSettingsHomePage pgtype = iApiProvider.Preferences().HomePageType();
+
+ if ( !(embedded || pgtype == EWmlSettingsHomePageBookmarks) )
+ {
+ ui->LaunchHomePageL();
+ }
+ else
+ {
+ if ( pgtype == EWmlSettingsHomePageBookmarks )
+ {
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ }
+ }
+ }
+ return EKeyWasConsumed;
+ }
+ case EWmlSettingsShortCutsActivateBkmkview:
+ {
+ if ( !embedded )
+ {
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ }
+ return EKeyWasConsumed;
+ }
+ case EWmlSettingsShortCutsGotoPane:
+ {
+ iView->LaunchGotoAddressEditorL();
+ iView->MenuBar()->MenuPane()->MakeVisible(EFalse);
+ return EKeyWasConsumed;
+ }
+ case EWmlSettingsShortCutsShowFindKeyword:
+ {
+ if (!iView->ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(ETrue /* is current page wml?*/))
+ {
+ iView->LaunchFindKeywordEditorL();
+ iView->MenuBar()->MenuPane()->MakeVisible(EFalse);
+ }
+ return EKeyWasConsumed;
+ }
+ case EWmlSettingsShortCutsShowSwitchWindowList:
+ {
+ if (!iView->ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(EFalse /*is any page wml?*/))
+ {
+ if (iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ) &&
+ iApiProvider.WindowMgr().WindowCount() > 1)
+ {
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserWindowSelectionViewId );
+ }
+ else
+ {
+ if (iApiProvider.WindowMgr().WindowCount() > 1)
+ {
+ ui->SwitchWindowL();
+ }
+ }
+ }
+ return EKeyWasConsumed;
+ }
+
+ case EWmlSettingsShortCutsZoomOut:
+ {
+ iView->ZoomImagesOutL();
+ return EKeyWasConsumed;
+ }
+
+ case EWmlSettingsShortCutsZoomIn:
+ {
+ iView->ZoomImagesInL();
+ return EKeyWasConsumed;
+ }
+
+ case EWmlSettingsShortCutsGotoPreviousPage:
+ {
+ if ( iApiProvider.BrCtlInterface().NavigationAvailable( TBrCtlDefs::ENavigationBack ) )
+ {
+ iApiProvider.LoadObserver().DoStartLoad( CBrowserLoadObserver::ELoadUrlTypeOther );
+ iApiProvider.BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandOneStepBack +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ return EKeyWasConsumed;
+ }
+
+ case EWmlSettingsShortCutsShowFullScreen:
+ {
+ iView->HandleCommandL(EWmlCmdEnterFullScreenBrowsing);
+ return EKeyWasConsumed;
+ }
+ }
+ } // END if ( !iView->IsMiniatureViewUp() && !iView->IsHistoryViewUp() && !iView->isZoomMode())
+
+
+ if ( function == EWmlSettingsShortCutsShowMiniature && !iView->IsHistoryViewUp() )
+ { // Process short key '8' only if History view is not shown.
+ if (!iView->ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(ETrue /* is current page wml?*/))
+ {
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowThumbnailView + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ return EKeyWasConsumed;
+ }
+
+ return EKeyWasNotConsumed;
+ }
+
+
+
+#ifdef __SERIES60_HELP
+// ---------------------------------------------------------
+// CBrowserContentViewContainer::GetHelpContext()
+// ---------------------------------------------------------
+//
+void CBrowserContentViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ const TUid KUidOperatorMenuApp = { 0x10008D5E };
+ aContext.iMajor = KUidBrowserApplication;
+ if ( iApiProvider.IsEmbeddedModeOn() )
+ {
+ if ( CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu() )
+ {
+ aContext.iMajor = KUidOperatorMenuApp;
+ aContext.iContext = KOPERATOR_HLP_OPTIONS_LIST;
+ }
+ else
+ {
+ aContext.iContext = KOSS_HLP_PAGEVIEW_EMBED;
+ }
+
+ }
+ else
+ {
+ aContext.iContext = KOSS_HLP_PAGEVIEW;
+ }
+ }
+
+#endif // __SERIES60_HELP
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserContentViewToolbar.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class that handles the toolbar
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BrowserContentView.h"
+#include "BrowserContentViewToolbar.h"
+#include "BrowserContentViewContainer.h"
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include "ApiProvider.h"
+#include "Preferences.h"
+#include <AknToolbar.h>
+#ifdef RD_SCALABLE_UI_V2
+#include <AknToolbarExtension.h>
+#include "BrowserUiVariant.hrh"
+#endif
+#include <aknutils.h>
+#include <brctlinterface.h>
+#include "BrowserAppUi.h"
+#include <gulicon.h>
+#include <browser.mbg>
+#include <data_caging_path_literals.hrh>
+#include <aknsutils.h>
+
+// ================= MEMBER FUNCTIONS =========================================
+
+// ----------------------------------------------------------------------------
+// CBrowserContentViewToolbar::CBrowserContentViewToolbar
+// ----------------------------------------------------------------------------
+//
+CBrowserContentViewToolbar::CBrowserContentViewToolbar(CBrowserContentView* aBrowserContentView)
+ {
+ iBrowserContentView = aBrowserContentView;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserContentViewToolbar::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CBrowserContentViewToolbar::ConstructL()
+ {
+#ifdef RD_SCALABLE_UI_V2
+ // Do not move this code back to UpdateButtonsStateL.
+ // Avkon does not allow hiding buttons when the extended toolbar is visible.
+ TBool embeddedMode = iBrowserContentView->ApiProvider().IsEmbeddedModeOn();
+ TBool embeddedOperatorMenu = CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu();
+ iBrowserContentView->Toolbar()->ToolbarExtension()->HideItemL( EWmlCmdShowSubscribeList, embeddedMode );
+ iBrowserContentView->Toolbar()->ToolbarExtension()->HideItemL( EWmlCmdOpenFeedsFolder, embeddedMode );
+ iBrowserContentView->Toolbar()->ToolbarExtension()->HideItemL( EWmlCmdFavourites, (embeddedMode || embeddedOperatorMenu) );
+ iBrowserContentView->Toolbar()->ToolbarExtension()->HideItemL( EWmlCmdSaveAsBookmark, embeddedOperatorMenu );
+ iBrowserContentView->Toolbar()->ToolbarExtension()->HideItemL( EWmlCmdLaunchHomePage, (embeddedMode || embeddedOperatorMenu) );
+
+ if ( iBrowserContentView->ApiProvider().Preferences().SearchFeature() )
+ {
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdGoToAddress, ETrue, EFalse );
+ }
+ else
+ {
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdGoToAddressAndSearch, ETrue, EFalse );
+ }
+
+#endif
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserContentViewToolbar::NewL
+// ----------------------------------------------------------------------------
+//
+CBrowserContentViewToolbar* CBrowserContentViewToolbar::NewL(CBrowserContentView* aBrowserContentView)
+ {
+ CBrowserContentViewToolbar *self = new CBrowserContentViewToolbar(aBrowserContentView);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserContentViewToolbar::~CBrowserContentViewToolbar
+// ----------------------------------------------------------------------------
+//
+CBrowserContentViewToolbar::~CBrowserContentViewToolbar()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserContentViewToolbar::UpdateButtonsStateBasicL
+// ----------------------------------------------------------------------------
+//
+void CBrowserContentViewToolbar::UpdateButtonsStateL()
+ {
+ TBool historyView = iBrowserContentView->IsHistoryViewUp();
+ TBool findKeywordPane = iBrowserContentView->Container()->FindKeywordPane()->IsVisible();
+ TBool pageOverview = iBrowserContentView->IsMiniatureViewUp();
+ TBool zoomSlider = iBrowserContentView->ZoomSliderVisible();
+ TBool contentDisplayed = iBrowserContentView->ApiProvider().ContentDisplayed();
+ TBool wmlMode = iBrowserContentView->ApiProvider().WindowMgr().CurrentWindow()->WMLMode();
+ TBool DimHomePage = iBrowserContentView->ApiProvider().IsLaunchHomePageDimmedL();
+ TBool searchMode = iBrowserContentView->ApiProvider().Preferences().SearchFeature();
+ TBool embeddedMode = iBrowserContentView->ApiProvider().IsEmbeddedModeOn();
+ TBool embeddedOperatorMenu = CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu();
+ iBrowserContentView->Toolbar()->SetItemDimmed(EWmlCmdFavourites, (embeddedMode || embeddedOperatorMenu), ETrue);
+ // Extended Toolbar
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdToolbarExtensionContentView,
+ (pageOverview), ETrue );
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdToolbarExtensionContentView,
+ (historyView || findKeywordPane), ETrue );
+
+ // Goto Url & search
+ if ( searchMode )
+ {
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdGoToAddressAndSearch,
+ (pageOverview), ETrue );
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdGoToAddressAndSearch,
+ (historyView || findKeywordPane), ETrue );
+ }
+ // Goto Url
+ else
+ {
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdGoToAddress,
+ (pageOverview), ETrue );
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdGoToAddress,
+ (historyView || findKeywordPane), ETrue );
+ }
+
+
+ // Zoom Slider button
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdZoomSliderShow,
+ ( !contentDisplayed || pageOverview || wmlMode ), ETrue );
+
+ // History buttons
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdHistoryBack, (!historyView), ETrue );
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdHistoryForward, (!historyView), ETrue );
+
+ if ( historyView )
+ {
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdHistoryForward, EFalse, ETrue );
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdHistoryBack, EFalse, ETrue );
+ if(iBrowserContentView->IsHistoryAtEnd())
+ {
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdHistoryForward, ETrue, ETrue );
+ }
+ if (iBrowserContentView->IsHistoryAtBeginning())
+ {
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlCmdHistoryBack, ETrue, ETrue );
+ }
+ }
+
+ // Find keyword buttons
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdFindNext, (!findKeywordPane), ETrue );
+ iBrowserContentView->Toolbar()->HideItem( EWmlCmdFindPrevious, (!findKeywordPane), ETrue );
+
+ iBrowserContentView->Toolbar()->SetItemDimmed( EWmlNoCmd, ETrue, ETrue );
+ iBrowserContentView->Toolbar()->HideItem( EWmlNoCmd, (!(historyView || findKeywordPane)), ETrue );
+
+ // Extended Toolbar
+#ifdef RD_SCALABLE_UI_V2
+ CBrCtlInterface& brctl = iBrowserContentView->ApiProvider().BrCtlInterface();
+ TBool subscribeToItems(EFalse);
+ TRAPD(err, const RPointerArray<TBrCtlSubscribeTo>& items = brctl.SubscribeToMenuItemsL();
+ subscribeToItems = (err == KErrNone && items.Count() > 0));
+ TBool noMultiWin = ( !iBrowserContentView->ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) ||
+ iBrowserContentView->ApiProvider().IsEmbeddedModeOn() ||
+ iBrowserContentView->ApiProvider().WindowMgr().WindowCount() < 2);
+
+ iBrowserContentView->Toolbar()->ToolbarExtension()->SetItemDimmed( EWmlCmdFindKeyword, wmlMode );
+
+//Disable page overview for TB9.2
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ TBool dimDownloads = iBrowserContentView->ApiProvider().BrCtlInterface().BrowserSettingL(TBrCtlDefs::ESettingsNumOfDownloads) ? EFalse : ETrue;
+ iBrowserContentView->Toolbar()->ToolbarExtension()->SetItemDimmed( EWmlCmdDownloads, dimDownloads );
+#else
+ iBrowserContentView->Toolbar()->ToolbarExtension()->SetItemDimmed( EWmlCmdShowMiniature, wmlMode );
+#endif
+ iBrowserContentView->Toolbar()->ToolbarExtension()->SetItemDimmed( EWmlCmdShowSubscribeList,
+ (!subscribeToItems || wmlMode) );
+ iBrowserContentView->Toolbar()->ToolbarExtension()->SetItemDimmed( EWmlCmdSwitchWindow, noMultiWin );
+ iBrowserContentView->Toolbar()->ToolbarExtension()->SetItemDimmed( EWmlCmdLaunchHomePage, DimHomePage );
+#endif
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserContentViewZoomModeTimer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Timer for zoom mode.
+*
+*/
+
+
+// INCLUDES
+#include <e32base.h>
+
+#include "BrowserContentView.h"
+#include "BrowserContentViewZoomModeTimer.h"
+
+// ---------------------------------------------------------------------------------------
+// Default C++ constructor
+// ---------------------------------------------------------------------------------------
+//
+CBrowserContentViewZoomModeTimer::CBrowserContentViewZoomModeTimer()
+ : CTimer( EPriorityUserInput )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentViewZoomModeTimer::~CBrowserContentViewZoomModeTimer()
+// ---------------------------------------------------------------------------
+CBrowserContentViewZoomModeTimer::~CBrowserContentViewZoomModeTimer()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserContentViewZoomModeTimer::ConstructL()
+// ---------------------------------------------------------------------------
+void CBrowserContentViewZoomModeTimer::ConstructL(
+ CBrowserContentView* aBrowserContentView )
+ {
+ iBrowserContentView = aBrowserContentView;
+
+ CTimer::ConstructL();
+ CActiveScheduler::Add( this );
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserContentViewZoomModeTimer::NewL()
+//-----------------------------------------------------------------------------
+//
+CBrowserContentViewZoomModeTimer* CBrowserContentViewZoomModeTimer::NewL(
+ CBrowserContentView* aBrowserContentView )
+ {
+ CBrowserContentViewZoomModeTimer* self =
+ CBrowserContentViewZoomModeTimer::NewLC( aBrowserContentView );
+ CleanupStack::Pop();
+ return self;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserContentViewZoomModeTimer::NewLC()
+//-----------------------------------------------------------------------------
+//
+CBrowserContentViewZoomModeTimer* CBrowserContentViewZoomModeTimer::NewLC(
+ CBrowserContentView* aBrowserContentView )
+ {
+ CBrowserContentViewZoomModeTimer* self =
+ new (ELeave) CBrowserContentViewZoomModeTimer();
+ CleanupStack::PushL(self);
+ self->ConstructL( aBrowserContentView );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserContentViewZoomModeTimer::RunL()
+// ----------------------------------------------------------------------------
+void CBrowserContentViewZoomModeTimer::RunL()
+ {
+ if ( iBrowserContentView->isZoomMode() )
+ {
+ // If in zoom mode and timer expires, turn off zoom mode. Zoom indicator
+ // should also be removed.
+ iBrowserContentView->SetZoomModeL( EFalse );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::Start()
+// ----------------------------------------------------------------------------
+void CBrowserContentViewZoomModeTimer::Start( TTimeIntervalMicroSeconds32 aPeriod )
+ {
+ CTimer::After( aPeriod );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDialogs.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Helper class that pops up several dialogs.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+// System includes
+#include <aknnotewrappers.h>
+#include <BrowserNG.rsg>
+#include <StringLoader.h>
+#include <AknNoteDialog.h>
+
+// User includes
+#include "BrowserDialogs.h"
+
+// ================= MEMBER FUNCTIONS =========================================
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::DialogPromptReqL
+// ----------------------------------------------------------------------------
+//
+TInt TBrowserDialogs::DialogPromptReqL( const TDesC& aMsg,
+ TDes* aResp,
+ TBool aIsUrlAddress,
+ TInt aMaxLength
+ )
+ {
+ TPtrC msg( aMsg );
+ CAknTextQueryDialog* dialog = new( ELeave )CAknTextQueryDialog( *aResp, msg );
+ if( aMaxLength )
+ {
+ dialog->SetMaxLength(aMaxLength);
+ }
+ TInt resource;
+ if ( aIsUrlAddress )
+ {
+ resource = R_WB_SCRIPT_PROMPT_URL_ADDRESS;
+ }
+ else
+ {
+ resource = R_WB_SCRIPT_PROMPT_LINES;
+ }
+ dialog->SetPredictiveTextInputPermitted(ETrue);
+ return dialog->ExecuteLD( resource );
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::DialogQueryReqL
+// ----------------------------------------------------------------------------
+//
+TInt TBrowserDialogs::DialogQueryReqL( const TDesC& aMsg,
+ const TDesC& aYesMessage,
+ const TDesC& aNoMessage )
+ {
+ TPtrC msg(aMsg);
+ CAknQueryDialog* dialog =
+ new ( ELeave ) CAknQueryDialog( msg, CAknQueryDialog::ENoTone );
+
+ dialog->PrepareLC( R_WB_SCRIPT_QUERY_LINES );
+
+ if( aYesMessage.Length() )
+ {
+ dialog->ButtonGroupContainer().SetCommandL(EAknSoftkeyYes, aYesMessage );
+ }
+
+ if( aNoMessage.Length() )
+ {
+ dialog->ButtonGroupContainer().SetCommandL(EAknSoftkeyNo, aNoMessage );
+ }
+
+ return dialog->RunLD();
+ }
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::ConfirmQueryDialogL
+// ----------------------------------------------------------------------------
+//
+TInt TBrowserDialogs::ConfirmQueryDialogL( const TInt aPromptResourceId,
+ TInt aResId, TInt aAnimation )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId );
+ TInt ret = ConfirmQueryDialogL( *prompt, aResId, aAnimation );
+ CleanupStack::PopAndDestroy(); // prompt
+ return ret;
+ }
+
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::ConfirmQueryDialogL
+// ----------------------------------------------------------------------------
+//
+TInt TBrowserDialogs::ConfirmQueryDialogL( const TDesC& aPrompt,
+ TInt aResId,
+ TInt aAnimation )
+ {
+ CAknQueryDialog* dialog = new (ELeave) CAknQueryDialog();
+
+ // TO DO: Store dialog pointer for CBrowserDialogsProvider::CancelAll()
+
+ dialog->PrepareLC( R_BROWSER_CONFIRM_QUERY );
+ // passing prompt text in constructor is depracated according to
+ // AknQueryDialog.h
+ dialog->SetPromptL( aPrompt );
+ if( aResId )
+ {
+ dialog->ButtonGroupContainer().SetCommandSetL( aResId );
+ }
+
+ if( aAnimation )
+ {
+ CAknQueryControl* control = STATIC_CAST( CAknQueryControl*, dialog->Control(EGeneralQuery) );
+ control->SetAnimationL( aAnimation );
+ }
+
+ return dialog->RunLD();
+ }
+
+
+// ---------------------------------------------------------
+// TBrowserDialogs::ConfirmQueryYesNoL
+// ---------------------------------------------------------
+//
+TBool TBrowserDialogs::ConfirmQueryYesNoL( TDesC& aPrompt )
+ {
+ return ConfirmQueryDialogL( aPrompt );
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::ConfirmQueryYesNoL
+// ----------------------------------------------------------------------------
+//
+TBool TBrowserDialogs::ConfirmQueryYesNoL( const TInt aPromptResourceId )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId );
+ TBool ret = ConfirmQueryYesNoL( *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ return ret;
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::ConfirmQueryYesNoL
+// ----------------------------------------------------------------------------
+//
+TBool TBrowserDialogs::ConfirmQueryYesNoL
+ ( const TInt aPromptResourceId, const TDesC& aString )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId, aString );
+ TBool ret = ConfirmQueryYesNoL( *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ return ret;
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::ConfirmQueryYesNoL
+// ----------------------------------------------------------------------------
+//
+TBool TBrowserDialogs::ConfirmQueryYesNoL
+ ( const TInt aPromptResourceId, const TInt aNum )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId, aNum );
+ TBool ret = ConfirmQueryYesNoL( *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ return ret;
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::InfoNoteL
+// ----------------------------------------------------------------------------
+//
+void TBrowserDialogs::InfoNoteL( TInt aDialogResourceId,
+ const TDesC& aPrompt )
+ {
+ CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog
+ ( REINTERPRET_CAST( CEikDialog**, &dialog ) );
+ dialog->PrepareLC( aDialogResourceId ) ;
+ dialog->SetCurrentLabelL( EGeneralNote, aPrompt );
+ dialog->RunDlgLD( CAknNoteDialog::EShortTimeout , CAknNoteDialog::ENoTone );
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::InfoNoteL
+// ----------------------------------------------------------------------------
+//
+void TBrowserDialogs::InfoNoteL
+( TInt aDialogResourceId, const TInt aPromptResourceId )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId );
+ InfoNoteL( aDialogResourceId, *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::InfoNoteL
+// ----------------------------------------------------------------------------
+//
+void TBrowserDialogs::InfoNoteL ( TInt aDialogResourceId,
+ const TInt aPromptResourceId,
+ const TDesC& aString )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId, aString );
+ InfoNoteL( aDialogResourceId, *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::InfoNoteL
+// ----------------------------------------------------------------------------
+//
+void TBrowserDialogs::InfoNoteL
+( TInt aDialogResourceId, const TInt aPromptResourceId, const TInt aNum )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId, aNum );
+ InfoNoteL( aDialogResourceId, *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+
+// ----------------------------------------------------------------------------
+ // TBrowserDialogs::ErrorNoteL
+// ----------------------------------------------------------------------------
+//
+void TBrowserDialogs::ErrorNoteL( const TInt aPromptResourceId )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId );
+ ErrorNoteL( *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+
+// ----------------------------------------------------------------------------
+// TBrowserDialogs::ErrorNoteL
+// ----------------------------------------------------------------------------
+//
+void TBrowserDialogs::ErrorNoteL( const TDesC& aPrompt )
+ {
+ CAknErrorNote* note = new ( ELeave ) CAknErrorNote();
+ note->ExecuteLD( aPrompt );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDialogsProviderBlocker.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Blocks dialog requests to the BrowserDialogsProvider if a
+* window is in the background. When the window comes to the
+* foreground, it will be displayed.
+*
+*
+*/
+
+#include "BrowserDialogsProviderBlocker.h"
+#include "BrowserWindowFocusNotifier.h"
+
+// ----------------------------------------------------------------------------
+// static CBrowserDialogsProviderBlocker*
+// CBrowserDialogsProviderBlocker::NewLC
+// ----------------------------------------------------------------------------
+//
+CBrowserDialogsProviderBlocker* CBrowserDialogsProviderBlocker::NewLC(
+ CBrowserWindowFocusNotifier& aWinFocusNotifier )
+ {
+ CBrowserDialogsProviderBlocker* self = new (ELeave)
+ CBrowserDialogsProviderBlocker( aWinFocusNotifier );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserDialogsProviderBlocker::CBrowserDialogsProviderBlocker()
+// ----------------------------------------------------------------------------
+//
+CBrowserDialogsProviderBlocker::CBrowserDialogsProviderBlocker(
+ CBrowserWindowFocusNotifier& aWinFocusNotifier )
+
+ : CActive( CActive::EPriorityStandard ),
+ iWinFocusNotifier( aWinFocusNotifier )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDialogsProviderBlocker::~CBrowserDialogsProviderBlocker()
+// Destroy the object and release all memory objects
+// ---------------------------------------------------------------------------
+//
+CBrowserDialogsProviderBlocker::~CBrowserDialogsProviderBlocker()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserDialogsProviderBlocker::ConstructL()
+// Two-pase constructor
+// ---------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderBlocker::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserDialogsProviderBlocker::Start()
+// Complete an asynchronous request.
+// ---------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderBlocker::Start()
+ {
+ // Register the AO status
+ iStatus = KRequestPending;
+ iWinFocusNotifier.Add( &iStatus );
+ SetActive();
+
+ // Asynch wait start
+ iWait.Start();
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserDialogsProviderBlocker::DoCancel()
+// Cancel any outstanding requests.
+// ---------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderBlocker::DoCancel()
+ {
+ // The AO can continue
+ iWait.AsyncStop();
+ }
+
+// ---------------------------------------------------------------------------
+// void CBrowserDialogsProviderBlocker::RunL()
+// Handles object`s request completion event.
+// ---------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderBlocker::RunL()
+ {
+ // The AO can continue
+ iWait.AsyncStop();
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDialogsProviderProxy.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,501 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of the CBrowserDialogsProviderProxy class.
+*
+*/
+
+
+// INCLUDE Files
+
+// User includes
+#include "BrowserDialogsProviderProxy.h"
+#include "BrowserDialogsProviderBlocker.h"
+#include "BrowserWindowFocusNotifier.h"
+#include "BrowserWindow.h"
+#include "logger.h"
+
+// System includes
+#include <browserdialogsproviderobserver.h>
+#include <browserdialogsprovider.h>
+
+// CONSTANTS
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::CBrowserDialogsProviderProxy
+//-----------------------------------------------------------------------------
+CBrowserDialogsProviderProxy::CBrowserDialogsProviderProxy(
+ CBrowserDialogsProvider& aDialogsProvider,
+ MBrowserDialogsProviderObserver* aDialogsObserver,
+ CBrowserWindow& aBrowserWindow )
+ : iDialogsProvider( aDialogsProvider ),
+ iDialogsObserver( aDialogsObserver ),
+ iBrowserWindow( aBrowserWindow ),
+ iCancelWaitingDialogs( EFalse )
+ {
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::~CBrowserDialogsProviderProxy
+//-----------------------------------------------------------------------------
+CBrowserDialogsProviderProxy::~CBrowserDialogsProviderProxy()
+ {
+LOG_ENTERFN("~CBrowserDialogsProviderProxy");
+ delete iWinFocusNotifier;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy* CBrowserDialogsProviderProxy::NewL
+//-----------------------------------------------------------------------------
+CBrowserDialogsProviderProxy* CBrowserDialogsProviderProxy::NewL(
+ CBrowserDialogsProvider& aDialogsProvider,
+ MBrowserDialogsProviderObserver* aDialogsObserver,
+ CBrowserWindow& aBrowserWindow )
+ {
+ CBrowserDialogsProviderProxy* self = new (ELeave)
+ CBrowserDialogsProviderProxy( aDialogsProvider,
+ aDialogsObserver,
+ aBrowserWindow );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self ); // self
+ return self;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::ConstructL
+//
+//-----------------------------------------------------------------------------
+void CBrowserDialogsProviderProxy::ConstructL()
+ {
+ // Keeps track of blocked dialogs
+ iWinFocusNotifier = CBrowserWindowFocusNotifier::NewL();
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogNotifyErrorL
+//
+//-----------------------------------------------------------------------------
+void CBrowserDialogsProviderProxy::DialogNotifyErrorL( TInt aErrCode )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogNotifyErrorL");
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.DialogNotifyErrorL( aErrCode );
+ if ( iDialogsObserver )
+ {
+ iDialogsObserver->ReportDialogEventL(
+ MBrowserDialogsProviderObserver::ENotifyError,
+ aErrCode );
+ }
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogNotifyErrorL");
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogNotifyHttpErrorL
+//-----------------------------------------------------------------------------
+void CBrowserDialogsProviderProxy::DialogNotifyHttpErrorL(
+ TInt aErrCode, const TDesC& aUri )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogNotifyHttpErrorL");
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.DialogNotifyHttpErrorL( aErrCode, aUri );
+ if ( iDialogsObserver )
+ {
+ iDialogsObserver->ReportDialogEventL(
+ MBrowserDialogsProviderObserver::ENotifyHttpError,
+ NULL );
+ }
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogNotifyHttpErrorL");
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogFileSelectLC
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogFileSelectLC(
+ const TDesC& aStartPath,
+ const TDesC& aRootPath,
+ HBufC*& aSelectedFileName )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogFileSelectLC");
+ TBool retVal( EFalse );
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ CEikButtonGroupContainer* currentCba = CEikButtonGroupContainer::Current();
+ TBool softKeysVisible( ETrue );
+ if ( currentCba )
+ {
+ softKeysVisible = currentCba->IsVisible();
+ }
+
+ retVal = iDialogsProvider.DialogFileSelectLC( aStartPath,
+ aRootPath,
+ aSelectedFileName );
+
+ // If the softkeys were not visible before, then make sure they are not
+ // visible after.
+ if ( currentCba && !softKeysVisible )
+ {
+ currentCba->MakeVisible( EFalse );
+ }
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogFileSelectLC");
+ return retVal;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogSelectOptionL
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogSelectOptionL(
+ const TDesC& aTitle,
+ TBrCtlSelectOptionType aBrCtlSelectOptionType,
+ CArrayFix<TBrCtlSelectOptionData>& aOptions )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogSelectOptionL");
+ TBool retVal( EFalse );
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ CEikButtonGroupContainer* currentCba = CEikButtonGroupContainer::Current();
+ TBool softKeysVisible( ETrue );
+ if ( currentCba )
+ {
+ softKeysVisible = currentCba->IsVisible();
+ }
+
+ retVal = iDialogsProvider.DialogSelectOptionL(
+ aTitle,
+ aBrCtlSelectOptionType,
+ aOptions );
+ // If the softkeys were not visible before, then make sure they are not
+ // visible after.
+ if ( currentCba && !softKeysVisible )
+ {
+ currentCba->MakeVisible( EFalse );
+ }
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogSelectOptionL");
+ return retVal;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogUserAuthenticationLC
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogUserAuthenticationLC(
+ const TDesC& aUrl,
+ const TDesC& aRealm,
+ const TDesC& aDefaultUserName,
+ HBufC*& aReturnedUserName,
+ HBufC*& aReturnedPasswd,
+ TBool aBasicAuthentication )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogUserAuthenticationLC");
+ TBool retVal( EFalse );
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ CEikButtonGroupContainer* currentCba = CEikButtonGroupContainer::Current();
+ TBool softKeysVisible( ETrue );
+ if ( currentCba )
+ {
+ softKeysVisible = currentCba->IsVisible();
+ }
+
+ retVal = iDialogsProvider.DialogUserAuthenticationLC(
+ aUrl,
+ aRealm,
+ aDefaultUserName,
+ aReturnedUserName,
+ aReturnedPasswd,
+ aBasicAuthentication );
+ if ( iDialogsObserver )
+ {
+ iDialogsObserver->ReportDialogEventL(
+ MBrowserDialogsProviderObserver::EUserAuthentication,
+ ( TInt ) retVal );
+ }
+
+ // If the softkeys were not visible before, then make sure they are not
+ // visible after.
+ if ( currentCba && !softKeysVisible )
+ {
+ currentCba->MakeVisible( EFalse );
+ }
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogUserAuthenticationLC");
+ return retVal;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogNoteL
+//-----------------------------------------------------------------------------
+void CBrowserDialogsProviderProxy::DialogNoteL( const TDesC& aMessage )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogNoteL");
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.DialogNoteL( aMessage );
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogNoteL");
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogAlertL
+//-----------------------------------------------------------------------------
+void CBrowserDialogsProviderProxy::DialogAlertL( const TDesC& aTitle,
+ const TDesC& aMessage )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogAlertL");
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.DialogAlertL( aTitle, aMessage );
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogAlertL");
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogConfirmL
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogConfirmL( const TDesC& aTitle,
+ const TDesC& aMessage,
+ const TDesC& aYesMessage,
+ const TDesC& aNoMessage )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogConfirmL");
+ TBool retVal( EFalse );
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ CEikButtonGroupContainer* currentCba = CEikButtonGroupContainer::Current();
+ TBool softKeysVisible( ETrue );
+ if ( currentCba )
+ {
+ softKeysVisible = currentCba->IsVisible();
+ }
+
+ retVal = iDialogsProvider.DialogConfirmL( aTitle, aMessage,
+ aYesMessage, aNoMessage );
+
+ // If the softkeys were not visible before, then make sure they are not
+ // visible after.
+ if ( currentCba && !softKeysVisible )
+ {
+ currentCba->MakeVisible( EFalse );
+ }
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogConfirmL");
+ return retVal;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogPromptLC
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogPromptLC( const TDesC& aTitle,
+ const TDesC& aMessage,
+ const TDesC& aDefaultInput,
+ HBufC*& aReturnedInput )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogPromptLC");
+ TBool retVal( EFalse );
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ CEikButtonGroupContainer* currentCba = CEikButtonGroupContainer::Current();
+ TBool softKeysVisible( ETrue );
+ if ( currentCba )
+ {
+ softKeysVisible = currentCba->IsVisible();
+ }
+
+ retVal = iDialogsProvider.DialogPromptLC( aTitle, aMessage,
+ aDefaultInput, aReturnedInput );
+
+ // If the softkeys were not visible before, then make sure they are not
+ // visible after.
+ if ( currentCba && !softKeysVisible )
+ {
+ currentCba->MakeVisible( EFalse );
+ }
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogPromptLC");
+ return retVal;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogDownloadObjectL
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogDownloadObjectL(
+ CBrCtlObjectInfo* aBrCtlObjectInfo )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogDownloadObjectL");
+ TBool retVal( EFalse );
+
+ if (iBrowserWindow.IsWindowActive())
+ {
+ retVal = iDialogsProvider.DialogDownloadObjectL( aBrCtlObjectInfo );
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogDownloadObjectL");
+ return retVal;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogDisplayPageImagesL
+//-----------------------------------------------------------------------------
+void CBrowserDialogsProviderProxy::DialogDisplayPageImagesL(
+ CArrayFixFlat<TBrCtlImageCarrier>& aPageImages )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogDisplayPageImagesL");
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.DialogDisplayPageImagesL( aPageImages );
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogDisplayPageImagesL");
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::CancelAll
+//-----------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderProxy::CancelAll()
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::CancelAll");
+ // Dialogs should be flushed, but not displayed
+ iCancelWaitingDialogs = ETrue;
+ iDialogsProvider.CancelAll();
+ iWinFocusNotifier->FlushAOStatusArray();
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::CancelAll");
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::DialogMimeFileSelectLC
+//-----------------------------------------------------------------------------
+TBool CBrowserDialogsProviderProxy::DialogMimeFileSelectLC(
+ HBufC*& aSelectedFileName,
+ const TDesC& aMimeType )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::DialogMimeFileSelectLC");
+ TBool retVal( EFalse );
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ CEikButtonGroupContainer* currentCba = CEikButtonGroupContainer::Current();
+ TBool softKeysVisible( ETrue );
+ if ( currentCba )
+ {
+ softKeysVisible = currentCba->IsVisible();
+ }
+
+ retVal = iDialogsProvider.DialogMimeFileSelectLC( aSelectedFileName,
+ aMimeType );
+ // If the softkeys were not visible before, then make sure they are not
+ // visible after.
+ if ( currentCba && !softKeysVisible )
+ {
+ currentCba->MakeVisible( EFalse );
+ }
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::DialogMimeFileSelectLC");
+ return retVal;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::ShowTooltipL
+//-----------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderProxy::ShowTooltipL( const TDesC& aText,
+ TInt aDuration,
+ TInt aDelay )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::ShowTooltipL");
+
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.ShowTooltipL( aText, aDuration, aDelay );
+ }
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::ShowTooltipL");
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::UploadProgressNoteL
+//-----------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderProxy::UploadProgressNoteL(
+ TInt32 aTotalSize,
+ TInt32 aChunkSize,
+ TBool aIsLastChunk,
+ MBrowserDialogsProviderObserver* aObserver )
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::UploadProgressNoteL");
+
+ // Forward dialog to DialogsProvider if it has not been cancelled
+ if ( iBrowserWindow.IsWindowActive() && !iCancelWaitingDialogs )
+ {
+ iDialogsProvider.UploadProgressNoteL( aTotalSize,
+ aChunkSize,
+ aIsLastChunk,
+ aObserver );
+ }
+
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::UploadProgressNoteL");
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDialogsProviderProxy::WindowActivated()
+//-----------------------------------------------------------------------------
+//
+void CBrowserDialogsProviderProxy::WindowActivated()
+ {
+ LOG_ENTERFN("CBrowserDialogsProviderProxy::WindowActivated");
+ // Window is now topmost, all waiting dialogs should be shown in turn
+ iWinFocusNotifier->OnFocusGained();
+// LOG_LEAVEFN("CBrowserDialogsProviderProxy::WindowActivated");
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDisplay.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,879 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Access to display components
+*
+*
+*/
+
+
+// INCLUDE FILES
+// System includes
+#include <aknappui.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <akntabgrp.h>
+#include <akntitle.h>
+#include <eikenv.h>
+#include <eikspane.h>
+#include <ApEngineConsts.h>
+#include <avkon.hrh>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+#include <akneditstateindicator.h>
+#include <aknindicatorcontainer.h>
+#include <AknStatuspaneUtils.h>
+#include <browser_platform_variant.hrh>
+
+#include <wlaninternalpskeys.h> // For WLAN state checking
+
+#include <LayoutMetaData.cdl.h> // For Layout_Meta_Data landscape/portrait status
+
+// User includes
+#include "ApiProvider.h"
+#include "BrowserProgressIndicator.h"
+#include "BrowserDisplay.h"
+#include "BrowserUtil.h"
+#include "Preferences.h"
+#include "CommonConstants.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "Logger.h"
+
+#include "WlanObserver.h"
+
+#include <BrowserNG.rsg>
+
+// TYPES
+
+struct TIndicatorContainer {
+ TInt locName; // indicator's local name
+ TInt aknName; // indicator's avkon name
+ TInt indState; // indicator's value
+};
+
+// cosmetic macros
+#define _AKN_IND( a ) EAknNaviPaneEditorIndicator ## a
+#define _LOC_IND( a ) ELocalIndicator ## a
+#define _IND_STATE( a ) KLocalIndicators[ _LOC_IND( a ) ].indState
+#define _SET_INDIC( a ) SetIndicatorState( \
+ TUid::Uid( _AKN_IND( a ) ), _IND_STATE( a ) )
+#define _SET_INDIC2( a, b ) SetIndicatorState( \
+ TUid::Uid( _AKN_IND( a ) ), _IND_STATE( a ), b )
+
+// indicators used in this module
+enum {
+ _LOC_IND( SecuredConnection ),
+ _LOC_IND( MessageInfo ),
+ _LOC_IND( ProgressBar ),
+ // _LOC_IND( WaitBar ), //
+ // _LOC_IND( T9 ), //
+ // _LOC_IND( UpperCase ), //
+ // _LOC_IND( LowerCase ), //
+ // _LOC_IND( AudioAttached ), //
+ // _LOC_IND( Objects ), //
+ // _LOC_IND( WmlWaitGlobe ),
+ _LOC_IND( Gprs ),
+ _LOC_IND( WlanAvailable ),
+ _LOC_IND( WlanActive ),
+ _LOC_IND( WlanActiveSecure ),
+ _LOC_IND( FileSize ),
+ // _LOC_IND( MessageLength ), //
+ _LOC_IND( WmlWindows ),
+ _LOC_IND( WmlWindowsText ),
+ _LOC_IND( LastItem )
+};
+
+// CONSTANTS
+_LIT( KBrowserSpaceChar, " " );
+
+// order of the indicators in this structure MUST match the enum definition above!
+LOCAL_D TIndicatorContainer KLocalIndicators[] =
+{
+ { _LOC_IND( SecuredConnection ), _AKN_IND( SecuredConnection ), EAknIndicatorStateOff },
+ { _LOC_IND( MessageInfo ), _AKN_IND( MessageInfo ), EAknIndicatorStateOff },
+ { _LOC_IND( ProgressBar ), _AKN_IND( ProgressBar ), EAknIndicatorStateOff },
+ // { _LOC_IND( WaitBar ), _AKN_IND( WaitBar ), EAknIndicatorStateOff },
+ // { _LOC_IND( T9 ), _AKN_IND( T9 ), EAknIndicatorStateOff },
+ // { _LOC_IND( UpperCase ), _AKN_IND( UpperCase ), EAknIndicatorStateOff },
+ // { _LOC_IND( LowerCase ), _AKN_IND( LowerCase ), EAknIndicatorStateOff },
+ // { _LOC_IND( AudioAttached ), _AKN_IND( AudioAttached ), EAknIndicatorStateOff },
+ // { _LOC_IND( Objects ), _AKN_IND( Objects ), EAknIndicatorStateOff },
+ // { _LOC_IND( WmlWaitGlobe ), _AKN_IND( WmlWaitGlobe ), EAknIndicatorStateOff },
+ { _LOC_IND( Gprs ), _AKN_IND( Gprs ), EAknIndicatorStateOn },
+ { _LOC_IND( WlanAvailable ), _AKN_IND( WlanAvailable ), EAknIndicatorStateOff },
+ { _LOC_IND( WlanActive ), _AKN_IND( WlanActive ), EAknIndicatorStateOff },
+ { _LOC_IND( WlanActiveSecure ), _AKN_IND( WlanActiveSecure ), EAknIndicatorStateOff },
+ { _LOC_IND( FileSize ), _AKN_IND( FileSize ), EAknIndicatorStateOff },
+ // { _LOC_IND( MessageLength ), _AKN_IND( MessageLength ), EAknIndicatorStateOff },
+ { _LOC_IND( WmlWindows ), _AKN_IND( WmlWindows ), EAknIndicatorStateOff },
+ { _LOC_IND( WmlWindowsText ), _AKN_IND( WmlWindowsText ), EAknIndicatorStateOff },
+ { _LOC_IND( LastItem ), 0, 0 }
+};
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CBrowserDisplay::CBrowserDisplay( MApiProvider& aApiProvider, CBrowserWindow& aWindow )
+: iApiProvider( aApiProvider ), iWindow( &aWindow )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserDisplay::ConstructL()
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ iProgressIndicator = CBrowserProgressIndicator::NewL( iApiProvider );
+ iEditorIndicatorContainer = NULL;
+ iTitle = NULL;
+PERFLOG_STOP_WRITE("BrProgressIndicator")
+ InitIndicatorsL(); //for full screen
+
+#ifdef _DEBUG
+ // check the indicator array's integrity
+ TInt i = 0;
+ while( KLocalIndicators[i].locName != _LOC_IND( LastItem ) )
+ {
+ __ASSERT_DEBUG( KLocalIndicators[i].locName == i,
+ Util::Panic( Util::EUnExpected ) );
+ ++i;
+ }
+#endif // _DEBUG
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::NewL()
+// ---------------------------------------------------------------------------
+//
+CBrowserDisplay* CBrowserDisplay::NewL( MApiProvider& aApiProvider, CBrowserWindow& aWindow )
+ {
+ CBrowserDisplay* self = new (ELeave) CBrowserDisplay( aApiProvider, aWindow );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::~CBrowserDisplay()
+// ---------------------------------------------------------------------------
+//
+CBrowserDisplay::~CBrowserDisplay()
+ {
+ delete iProgressIndicator;
+ delete iEditorIndicatorContainer;
+ delete iTitle;
+ delete iWlanObserver;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::StatusPane()
+// ---------------------------------------------------------------------------
+//
+CEikStatusPane* CBrowserDisplay::StatusPane() const
+ {
+ return STATIC_CAST( CAknAppUi*, CEikonEnv::Static()->EikAppUi() )->
+ StatusPane();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::NaviPaneL()
+// ---------------------------------------------------------------------------
+//
+CAknNavigationControlContainer* CBrowserDisplay::NaviPaneL() const
+ {
+ CEikStatusPane* sp = StatusPane();
+ User::LeaveIfNull( sp );
+ return STATIC_CAST( CAknNavigationControlContainer*,
+ sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetTitleL( const TDesC& aTitle )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ HBufC* temp = aTitle.AllocL();
+ delete iTitle;
+ iTitle = temp;
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ // Checking to see if we are in contentview so that title is updated for other views like
+ // Bookmarks and Settings. In landscape mode title could be updated all the time regardless of progress bar.
+ if ( !Layout_Meta_Data::IsLandscapeOrientation() &&
+ (indicContainerEditing) && (ApiProvider().LastActiveViewId() == KUidBrowserContentViewId ))
+ {
+ //Under full screen mode, the progress bar is at the bottom and the title should be updated
+ //all the time.
+ if (indicContainerEditing->IndicatorState(
+ TUid::Uid(EAknNaviPaneEditorIndicatorProgressBar) ) != EAknIndicatorStateOn)
+ {
+ RestoreTitleL();
+ }
+ }
+ else
+ {
+ RestoreTitleL();
+ }
+PERFLOG_STOP_WRITE("BrDsply:SetTitle")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::ClearMessageInfo()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::ClearMessageInfo()
+ {
+
+ if( iEditorIndicatorContainer != NULL )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ _IND_STATE( MessageInfo ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( MessageInfo );
+ indicContainerOwn->_SET_INDIC( MessageInfo );
+ }
+ }
+// ---------------------------------------------------------
+// CBrowserDisplay::RestoreTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::RestoreTitleL()
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ if ( (iTitle !=NULL) )
+ {
+
+ if(( iApiProvider.LastActiveViewId() == KUidBrowserContentViewId )
+ && ( iEditorIndicatorContainer != NULL )
+ && (!(AknStatuspaneUtils::StaconPaneActive())) )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ // Lanscape mode - Title in title pane not navipane/messageinfo
+ ClearMessageInfo();
+ }
+ else
+ { // Portrait mode - Title in navipane/messageinfo
+ _IND_STATE( MessageInfo ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC( MessageInfo );
+ indicContainerOwn->_SET_INDIC( MessageInfo );
+ indicContainerEditing->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( MessageInfo ) ), *iTitle);
+ indicContainerOwn->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( MessageInfo ) ), *iTitle);
+ }
+
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )->StatusPane();
+ CAknTitlePane* title = STATIC_CAST( CAknTitlePane*,
+ sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ title->SetTextL( *iTitle );
+ }
+ else
+ {
+ if( ( iEditorIndicatorContainer != NULL )
+ && ( AknStatuspaneUtils::StaconPaneActive() ) )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+ //turn off other indicator, because both are visible in landscape mode
+ _IND_STATE( MessageInfo ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC2( MessageInfo, ETrue );
+ indicContainerOwn->_SET_INDIC2( MessageInfo, ETrue );
+ }
+
+ // Set title to be page title
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )->StatusPane();
+ CAknTitlePane* title = STATIC_CAST( CAknTitlePane*,
+ sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ title->SetTextL( *iTitle );
+ }
+
+#ifndef __WINSCW__
+ // Wireless Lan Indicator
+ TInt wlanStateValue;
+ StartWlanObserverL(); // if needed
+ if ( iWlanObserver && iWlanObserver->GetCurrentState(wlanStateValue) )
+ {
+ UpdateWlanIndicator(wlanStateValue);
+ }
+#endif // __WINSCW__
+
+ // Multiple Windows Indicator
+ TInt winCount = iApiProvider.WindowMgr().WindowCount();
+ TBool showMWIndic = (( winCount > 1 ) &&
+ (ApiProvider().LastActiveViewId() == KUidBrowserContentViewId )) ?
+ ETrue : EFalse;
+ UpdateMultipleWindowsIndicatorL( showMWIndic, winCount );
+ }
+PERFLOG_STOP_WRITE("BrDsply:RestoreTitle")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetTitleL( TInt aResourceId )
+ {
+ HBufC* title = CEikonEnv::Static()->AllocReadResourceLC( aResourceId );
+ SetTitleL( *title );
+ CleanupStack::PopAndDestroy(); // title
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::StartProgressAnimationL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StartProgressAnimationL()
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN( "Display::StartProgressAnimationL" );
+BROWSER_LOG( ( _L("myWindow: %d, active: %d"),
+ iWindow->WindowId(), iWindow->IsWindowActive() ) );
+ if ( iApiProvider.IsProgressShown() )
+ {
+ // ProgressIndicator doesn't have pointer to its Window or parent Display
+ // so check validity here
+ if( iWindow->IsWindowActive() )
+ {
+ iProgressIndicator->StartL();
+ }
+ // start globe animation
+ iApiProvider.StartProgressAnimationL();
+ }
+PERFLOG_STOP_WRITE("BrDsply: StartPrgAnim")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::StopProgressAnimationL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StopProgressAnimationL()
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN( "Display::StopProgressAnimationL" );
+BROWSER_LOG( ( _L("myWindow: %d"), iWindow->WindowId() ) );
+ if ( iApiProvider.IsProgressShown() )
+ {
+ // always stop spinning globe in FavouritesView
+ // most of the cases View::DoDeactivateL() does it
+ // other: e.g. Cancel load in BookmarksView
+ iApiProvider.StopProgressAnimationL();
+
+ if ( !ApiProvider().Fetching() )
+ {
+ if ( iEditorIndicatorContainer != NULL )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ _IND_STATE( FileSize ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( FileSize );
+ indicContainerOwn->_SET_INDIC( FileSize );
+
+ indicContainerOwn->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( FileSize ) ), KNullDesC() );
+
+ _IND_STATE( ProgressBar ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( ProgressBar );
+ indicContainerOwn->_SET_INDIC( ProgressBar );
+
+ if( iTitle )
+ {
+ RestoreTitleL();
+ }
+ iApiProvider.SetProgressShown( EFalse );
+ }
+ iProgressIndicator->StopL();
+ }
+ }
+ PERFLOG_STOP_WRITE("BrDsply: StopPrgAnim")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SelectIndicContainerEditing()
+// ---------------------------------------------------------
+//
+CAknIndicatorContainer* CBrowserDisplay::SelectIndicContainerEditing()
+ {
+ CAknIndicatorContainer* indicContainer1 = CAknEnv::Static()->
+ EditingStateIndicator()->IndicatorContainer();
+ return indicContainer1;
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SelectIndicContainerOwn()
+// ---------------------------------------------------------
+//
+CAknIndicatorContainer* CBrowserDisplay::SelectIndicContainerOwn()
+ {
+ CAknIndicatorContainer* indicContainer2 = STATIC_CAST(
+ CAknIndicatorContainer*, iEditorIndicatorContainer->DecoratedControl() );
+ return indicContainer2;
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::InitIndicatorsL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::InitIndicatorsL()
+ {
+ PERFLOG_LOCAL_INIT
+ PERFLOG_STOPWATCH_START
+
+ if (iEditorIndicatorContainer)
+ {
+ return;
+ }
+
+ if ((iEditorIndicatorContainer == NULL))
+ {
+ PERFLOG_LOCAL_INIT
+ PERFLOG_STOPWATCH_START
+ iEditorIndicatorContainer = NaviPaneL()->CreateEditorIndicatorContainerL();
+ PERFLOG_STOP_WRITE(" -> BrDsply: EditorContainer")
+ }
+
+ PERFLOG_STOPWATCH_START
+ CAknIndicatorContainer* indicContainer = SelectIndicContainerOwn();
+
+ _IND_STATE( SecuredConnection ) = EAknIndicatorStateOff;
+ _IND_STATE( MessageInfo ) = EAknIndicatorStateOff;
+ _IND_STATE( ProgressBar ) = EAknIndicatorStateOff;
+ // _IND_STATE( WaitBar ) = EAknIndicatorStateOff;
+ // _IND_STATE( T9 ) = EAknIndicatorStateOff;
+ // _IND_STATE( UpperCase ) = EAknIndicatorStateOff;
+ // _IND_STATE( LowerCase ) = EAknIndicatorStateOff;
+ // _IND_STATE( AudioAttached ) = EAknIndicatorStateOff;
+ // _IND_STATE( Objects ) = EAknIndicatorStateOff;
+ // _IND_STATE( WmlWaitGlobe ) = EAknIndicatorStateOff;
+ _IND_STATE( Gprs ) = EAknIndicatorStateOn;
+
+ _IND_STATE( WlanAvailable ) = EAknIndicatorStateOff;
+ _IND_STATE( WlanActive ) = EAknIndicatorStateOff;
+ _IND_STATE( WlanActiveSecure ) = EAknIndicatorStateOff;
+
+ _IND_STATE( FileSize ) = EAknIndicatorStateOff;
+ // _IND_STATE( MessageLength ) = EAknIndicatorStateOff;
+ _IND_STATE( WmlWindows ) = EAknIndicatorStateOff;
+ _IND_STATE( WmlWindowsText ) = EAknIndicatorStateOff;
+
+ indicContainer->_SET_INDIC( SecuredConnection );
+ indicContainer->_SET_INDIC( MessageInfo );
+ indicContainer->_SET_INDIC( ProgressBar );
+ // indicContainer->_SET_INDIC( WaitBar );
+ // indicContainer->_SET_INDIC( T9 );
+ // indicContainer->_SET_INDIC( UpperCase );
+ // indicContainer->_SET_INDIC( LowerCase );
+ // indicContainer->_SET_INDIC( AudioAttached );
+ // indicContainer->_SET_INDIC( Objects );
+ // indicContainer->_SET_INDIC( WmlWaitGlobe );
+ indicContainer->_SET_INDIC( Gprs );
+
+ indicContainer->_SET_INDIC( WlanAvailable );
+ indicContainer->_SET_INDIC( WlanActive );
+ indicContainer->_SET_INDIC( WlanActiveSecure );
+
+ indicContainer->_SET_INDIC( FileSize );
+ // indicContainer->_SET_INDIC( MessageLength );
+ indicContainer->_SET_INDIC( WmlWindows );
+ indicContainer->_SET_INDIC( WmlWindowsText );
+ PERFLOG_STOP_WRITE( "Display:InitIndicators")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateSecureIndicatorL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateSecureIndicatorL( const TInt aState )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ if( !iApiProvider.ExitInProgress() )
+ {
+ SetFullScreenSecureIndicatorL(aState);
+ NaviPaneL()->DrawDeferred();
+ }
+PERFLOG_STOP_WRITE( "Display:UpdateSecureIndicator")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateFSDownloadInitialIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateFSDownloadInitialIndicator( const TBool aState )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ if( !iEditorIndicatorContainer )
+ {
+ InitIndicatorsL();
+ }
+
+ if ( iApiProvider.IsProgressShown() && ( iEditorIndicatorContainer != NULL ) )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+ if (aState)
+ {
+ ClearMessageInfo();
+
+ _IND_STATE( FileSize ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( FileSize );
+ indicContainerOwn->_SET_INDIC( FileSize );
+ }
+ }
+PERFLOG_STOP_WRITE("BrDsply: GlobeAnimation init")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetGPRSIndicatorOnL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetGPRSIndicatorOnL()
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ if ( iEditorIndicatorContainer != NULL )
+ {
+ // Set GPRS indicator on, it will update itself
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+ _IND_STATE( Gprs ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC( Gprs );
+ indicContainerOwn->_SET_INDIC( Gprs );
+ }
+PERFLOG_STOP_WRITE("BrDsply: Gprsidic on")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateWlanIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateWlanIndicator( const TInt aWlanValue )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+
+ if ( iEditorIndicatorContainer != NULL )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ _IND_STATE( WlanAvailable ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( WlanAvailable );
+ indicContainerOwn->_SET_INDIC( WlanAvailable );
+
+ _IND_STATE( WlanActive ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( WlanActive );
+ indicContainerOwn->_SET_INDIC( WlanActive );
+
+ _IND_STATE( WlanActiveSecure ) = EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( WlanActiveSecure );
+ indicContainerOwn->_SET_INDIC( WlanActiveSecure );
+
+ switch (aWlanValue)
+ {
+ case EPSWlanIndicatorNone:
+ {
+ // do nothing.
+ break;
+ }
+
+ case EPSWlanIndicatorAvailable:
+ {
+ _IND_STATE( WlanAvailable ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC( WlanAvailable );
+ indicContainerOwn->_SET_INDIC( WlanAvailable );
+ break;
+ }
+
+ case EPSWlanIndicatorActive:
+ {
+ _IND_STATE( WlanActive ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC( WlanActive );
+ indicContainerOwn->_SET_INDIC( WlanActive );
+ break;
+ }
+
+ case EPSWlanIndicatorActiveSecure:
+ {
+
+ _IND_STATE( WlanActiveSecure ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC( WlanActiveSecure );
+ indicContainerOwn->_SET_INDIC( WlanActiveSecure );
+ break;
+ }
+
+ default:
+ {
+ // do nothing.
+ break;
+ }
+ }
+ }
+PERFLOG_STOP_WRITE("BrDsply: UpdateWlanIndicator")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::StartWlanObserverL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StartWlanObserverL()
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+
+ if (iWlanObserver == NULL)
+ {
+ iWlanObserver = new ( ELeave ) CWlanObserver( iApiProvider );
+ }
+
+PERFLOG_STOP_WRITE("BrDsply: Wlan Observer Started")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetFullScreenSecureIndicatorL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetFullScreenSecureIndicatorL(const TBool aState)
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ _IND_STATE( SecuredConnection ) = aState;
+ if ( iEditorIndicatorContainer != NULL && iWindow->IsWindowActive() )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+ _IND_STATE( SecuredConnection ) = aState ?
+ EAknIndicatorStateOn : EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( SecuredConnection );
+ indicContainerOwn->_SET_INDIC( SecuredConnection );
+ }
+PERFLOG_STOP_WRITE("BrDsply: Secure indic upd")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::AddTransActIdL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::AddTransActIdL( TUint16 aId ) const
+ {
+ iProgressIndicator->AddTransActIdL( aId );
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::AddProgressDataL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::AddProgressDataL(
+ TUint16 aId, TUint32 aRecvdData, TUint32 aMaxData ) const
+ {
+ iProgressIndicator->AddProgressDataL( aId, aRecvdData, aMaxData );
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::TransActIdComplete()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::TransActIdComplete( TUint16 aId ) const
+ {
+ TRAP_IGNORE( iProgressIndicator->TransActIdCompleteL( aId ) );
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::StartFSWaitIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StartFSWaitIndicator()
+ {
+ if( iEditorIndicatorContainer != NULL &&
+ iWindow->IsWindowActive() )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateFSProgressIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateFSProgressIndicator( const TInt aMaxData,
+ const TInt aReceivedData )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN("UpdateFSProgressIndicator");
+BROWSER_LOG( ( _L( "maxData: %d, recData: %d" ), aMaxData, aReceivedData ) );
+ if ( iApiProvider.IsProgressShown() &&
+ ( iEditorIndicatorContainer != NULL ) &&
+ iWindow->IsWindowActive() )
+ {
+ CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ if( indicContainerEditing->IndicatorState(
+ TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ) )
+ != EAknIndicatorStateOn ||
+ indicContainerOwn->IndicatorState(
+ TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ) )
+ != EAknIndicatorStateOn
+ )
+ {
+ _IND_STATE( ProgressBar ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC2( ProgressBar, ETrue );
+ indicContainerOwn->_SET_INDIC2( ProgressBar, ETrue );
+ }
+
+ indicContainerEditing->SetIndicatorValue(
+ TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ),
+ aReceivedData, aMaxData );
+ indicContainerOwn->SetIndicatorValue(
+ TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ),
+ aReceivedData, aMaxData );
+ }
+PERFLOG_STOP_WRITE("BrDsply: Prg indic upd")
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateFSProgressDataL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateFSProgressDataL( const TDesC16& aReceivedDataText )
+ {
+ PERFLOG_LOCAL_INIT
+ PERFLOG_STOPWATCH_START
+ if ( iApiProvider.IsProgressShown() &&( iEditorIndicatorContainer != NULL ) )
+ {
+ CAknIndicatorContainer* indicContainerEditing =
+ SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ if( indicContainerEditing->IndicatorState(
+ TUid::Uid( EAknNaviPaneEditorIndicatorMessageInfo ) )
+ != EAknIndicatorStateOff )
+ {
+ ClearMessageInfo();
+ }
+
+ if( indicContainerEditing->IndicatorState(
+ TUid::Uid( EAknNaviPaneEditorIndicatorFileSize ) )
+ != EAknIndicatorStateOn ||
+ indicContainerOwn->IndicatorState(
+ TUid::Uid( EAknNaviPaneEditorIndicatorFileSize ) )
+ != EAknIndicatorStateOn )
+ {
+ _IND_STATE( FileSize ) = EAknIndicatorStateOn;
+ indicContainerEditing->_SET_INDIC( FileSize );
+ indicContainerOwn->_SET_INDIC( FileSize );
+ }
+
+ indicContainerEditing->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( FileSize ) ), aReceivedDataText );
+ indicContainerOwn->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( FileSize ) ), aReceivedDataText );
+
+ NaviPaneL()->PushL( *iEditorIndicatorContainer );
+ }
+ PERFLOG_STOP_WRITE("BrDsply: Prg data upd")
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserDisplay::FSPaneOnL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::FSPaneOnL()
+ {
+ InitIndicatorsL();
+ NaviPaneL()->PushL(*iEditorIndicatorContainer);
+ }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::NotifyProgress()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::NotifyProgress()
+ {
+ if ( iProgressIndicator != NULL && iWindow->IsWindowActive() )
+ {
+ iProgressIndicator->NotifyProgress();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserDisplay::UpdateMultipleWindowsIndicatorL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserDisplay::UpdateMultipleWindowsIndicatorL(
+ TBool aState, TInt aWinCount )
+ {
+ LOG_ENTERFN("CBrowserDisplay::UpdateMultipleWindowsIndicatorL");
+
+ if ( iEditorIndicatorContainer != NULL )
+ {
+ CAknIndicatorContainer* indicContainerEditing =
+ SelectIndicContainerEditing();
+ CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+ // Show or hide MW Icon
+ _IND_STATE( WmlWindows ) = aState ?
+ EAknIndicatorStateOn : EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( WmlWindows );
+ indicContainerOwn->_SET_INDIC( WmlWindows );
+
+ // Show or hide text indicator
+ _IND_STATE( WmlWindowsText ) = aState ?
+ EAknIndicatorStateOn : EAknIndicatorStateOff;
+ indicContainerEditing->_SET_INDIC( WmlWindowsText );
+ indicContainerOwn->_SET_INDIC( WmlWindowsText );
+
+ if ( aState )
+ {
+ // MW Indicator is made of an indicator icon and a number (num wins)
+
+ // Display Number of windows open in text indicator
+ HBufC* numWins = HBufC::NewLC( 3 );
+ numWins->Des().AppendNum( aWinCount );
+ numWins->Des().Append( KBrowserSpaceChar );
+ indicContainerEditing->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( WmlWindowsText ) ), *numWins );
+ indicContainerOwn->SetIndicatorValueL(
+ TUid::Uid( _AKN_IND( WmlWindowsText ) ), *numWins );
+ CleanupStack::PopAndDestroy( numWins );
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDownloadIndicatorTimer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Timer for showing initial download animation in Full Screen Pane of the browser.
+*
+*/
+
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include "BrowserDownloadIndicatorTimer.h"
+#include "BrowserDownloadIndicatorTimerEvent.h"
+
+
+// ---------------------------------------------------------------------------------------
+// Default C++ constructor
+// ---------------------------------------------------------------------------------------
+//
+CBrowserDownloadIndicatorTimer::CBrowserDownloadIndicatorTimer()
+ : CTimer(EPriorityNormal)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::~CBrowserDownloadIndicatorTimer()
+// ---------------------------------------------------------------------------
+CBrowserDownloadIndicatorTimer::~CBrowserDownloadIndicatorTimer()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::ConstructL()
+// ---------------------------------------------------------------------------
+void CBrowserDownloadIndicatorTimer::ConstructL(
+ MBrowserDownloadIndicatorTimerEvent& aProgressIndicator )
+ {
+ iProgressIndicator = &aProgressIndicator;
+
+ CTimer::ConstructL();
+ CActiveScheduler::Add( this );
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::NewLC()
+//-----------------------------------------------------------------------------
+//
+CBrowserDownloadIndicatorTimer* CBrowserDownloadIndicatorTimer::NewLC(
+ MBrowserDownloadIndicatorTimerEvent& aProgressIndicator )
+ {
+ CBrowserDownloadIndicatorTimer* self =
+ new (ELeave) CBrowserDownloadIndicatorTimer;
+ CleanupStack::PushL(self);
+ self->ConstructL(aProgressIndicator);
+ return self;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::NewL()
+//-----------------------------------------------------------------------------
+//
+CBrowserDownloadIndicatorTimer* CBrowserDownloadIndicatorTimer::NewL(
+ MBrowserDownloadIndicatorTimerEvent& aProgressIndicator)
+ {
+ CBrowserDownloadIndicatorTimer* self =
+ CBrowserDownloadIndicatorTimer::NewLC( aProgressIndicator );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::RunL()
+// ----------------------------------------------------------------------------
+void CBrowserDownloadIndicatorTimer::RunL()
+ {
+ if (iStatus == KErrNone)
+ {
+ iProgressIndicator->SetBrowserDownloadIndicatorStateOff();
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserDownloadIndicatorTimer::Start()
+// ----------------------------------------------------------------------------
+void CBrowserDownloadIndicatorTimer::Start(TTimeIntervalMicroSeconds32 aPeriod)
+ {
+ CTimer::After( aPeriod );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDownloadUtil.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Download handling utilities.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BrowserDownloadUtil.h"
+#include "logger.h"
+#include "ApiProvider.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CAsyncDownloadsListExecuter::CAsyncDownloadsListExecuter
+// ---------------------------------------------------------
+//
+CAsyncDownloadsListExecuter::CAsyncDownloadsListExecuter( MApiProvider& aApiProvider )
+: CActive( EPriorityStandard ),
+ iApiProvider( aApiProvider )
+ {
+LOG_ENTERFN("CAsyncDownloadsListExecuter::CAsyncDownloadsListExecuter");
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CAsyncDownloadsListExecuter::~CAsyncDownloadsListExecuter
+// ---------------------------------------------------------
+//
+CAsyncDownloadsListExecuter::~CAsyncDownloadsListExecuter()
+ {
+LOG_ENTERFN("CAsyncDownloadsListExecuter::~CAsyncDownloadsListExecuter");
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CAsyncDownloadsListExecuter::Start
+// ---------------------------------------------------------
+//
+void CAsyncDownloadsListExecuter::Start()
+ {
+LOG_ENTERFN("CAsyncDownloadsListExecuter::Start");
+ if ( !IsActive() )
+ {
+ BROWSER_LOG( ( _L( " Already active" ) ) );
+ SetActive();
+ TRequestStatus* s = &iStatus;
+ User::RequestComplete( s, KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------
+// CAsyncDownloadsListExecuter::DoCancel
+// ---------------------------------------------------------
+//
+void CAsyncDownloadsListExecuter::DoCancel()
+ {
+LOG_ENTERFN("CAsyncDownloadsListExecuter::DoCancel");
+ }
+
+// ---------------------------------------------------------
+// CAsyncDownloadsListExecuter::RunL
+// ---------------------------------------------------------
+//
+void CAsyncDownloadsListExecuter::RunL()
+ {
+LOG_ENTERFN("CAsyncDownloadsListExecuter::RunL");
+ // open the downloads list
+ iApiProvider.BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowDownloads +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ // The list of downloads is now closed.
+ }
+
+// ---------------------------------------------------------
+// CAsyncDownloadsListExecuter::RunError
+// ---------------------------------------------------------
+//
+#ifdef I__BROWSER_LOG_ENABLED
+TInt CAsyncDownloadsListExecuter::RunError( TInt aError )
+ {
+LOG_ENTERFN("CAsyncDownloadsListExecuter::RunError");
+ BROWSER_LOG( ( _L( " aError: %d" ), aError ) );
+ return 0;
+ }
+#else
+TInt CAsyncDownloadsListExecuter::RunError( TInt /*aError*/ )
+ {
+ return 0;
+ }
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserGotoPane.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1394 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <Browser_Platform_Variant.hrh>
+#include <eikmenub.h>
+#include <eikdef.h>
+#include <akninfrm.h>
+#include <eikon.rsg>
+#include <eikenv.h>
+#include <txtglobl.h>
+#include <gulfont.h>
+#include <txtfrmat.h>
+#include <eikgted.h>
+#include <aknconsts.h>
+#include <akneditstateindicator.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <BrowserNG.rsg>
+#include <Featmgr.h>
+#include <fepbase.h>
+#include <aknutils.h>
+#include <browseruisdkcrkeys.h>
+
+#include <AknLayout2ScalableDef.h>
+#include <aknlayoutfont.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include "CommonConstants.h"
+#include "BrowserGotoPane.h"
+#include "BrowserAppUi.h"
+#include "BrowserUtil.h"
+#include "browser.hrh"
+#include <favouriteslimits.h>
+#include "BrowserAdaptiveListPopup.h"
+#include "BrowserContentView.h"
+
+#include "eikon.hrh"
+
+#include <StringLoader.h>
+
+const TInt KMaxTitleLength = 512;
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::NewL
+// ---------------------------------------------------------------------------
+//
+CBrowserGotoPane* CBrowserGotoPane::NewL(
+ const CCoeControl* aParent, TInt aIconBitmapId, TInt aIconMaskId,
+ TBool aPopupListStatus, CBrowserContentView* aContentView,
+ TBool aFindKeywordMode )
+ {
+ CBrowserGotoPane* gotoPane = new(ELeave)
+ CBrowserGotoPane( aContentView, aFindKeywordMode );
+
+ CleanupStack::PushL( gotoPane );
+ gotoPane->ConstructL( aParent, aIconBitmapId, aIconMaskId, aPopupListStatus );
+ gotoPane->MakeVisibleL( EFalse );
+ gotoPane->SetFocus( EFalse );
+ CleanupStack::Pop(); // gotoPane
+
+ return gotoPane;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::MakeVisibleL
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::MakeVisibleL( TBool aVisible )
+ {
+ if ( aVisible )
+ {
+ if ( iSearchEditor )
+ {
+ ConstructSearchPaneL();
+ }
+ HandleFindSizeChanged();
+ if ( AUTOCOMP ) //ask the feature manager
+ {
+ //2.1 does not put http:// there
+ SetTextL( KNullDesC );
+ }
+ else
+ {
+ //2.0 does put the http:// there
+ SetTextL( KHttpString );
+ }
+ }
+ else
+ {
+ // Clear the search text if goto is cancelled ( hidden ).
+ if ( iSearchEditor )
+ {
+ SetSearchTextL( KNullDesC );
+ }
+ }
+
+ SetPointerCapture(aVisible);
+ if (AknLayoutUtils::PenEnabled() && ( !iSearchEditor ) )
+ {
+ if (aVisible)
+ {
+ ActivateVKB();
+ }
+ }
+
+ CCoeControl::MakeVisible( aVisible );
+
+ iGotoKeyHandled->Reset();
+ iGotoKeyHandled->EnableL( aVisible );
+
+
+ if ( iSearchEditor )
+ {
+ SetTextModeItalicL();
+ }
+ // To avoid Flickring Effect when SearchInputFrame is
+ // re-created with new search provider icon.
+ DrawNow( );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::MakeVisible
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::MakeVisible( TBool aVisible )
+ {
+ TRAP_IGNORE( MakeVisibleL( aVisible ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::~CBrowserGotoPane
+// ---------------------------------------------------------------------------
+//
+CBrowserGotoPane::~CBrowserGotoPane()
+ {
+ if (iAvkonAppUi!=NULL)
+ {
+ iAvkonAppUi->RemoveFromStack( iGotoKeyHandled );
+ }
+ delete iSearchEditor;
+ delete iSearchInputFrame;
+
+ delete iGotoKeyHandled;
+ delete iEditor;
+ delete iInputFrame;
+ delete iPrevKeyword;
+ delete iBAdaptiveListPopup;
+ delete iDefaultSearchText;
+ iContentView = NULL;
+ CCoeEnv::Static()->RemoveFepObserver(static_cast<MCoeFepObserver &>(*this));
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::CBrowserGotoPane
+// ---------------------------------------------------------------------------
+//
+CBrowserGotoPane::CBrowserGotoPane( CBrowserContentView* aContentView, TBool aFindKeywordMode )
+: iContentView( aContentView),
+ iFindKeywordMode( aFindKeywordMode ),
+ iHandleFEPFind( ETrue ),
+ iBAdaptiveListPopup( NULL ),
+ iGotoPaneActive( ETrue ),
+ iSearchPaneActive( EFalse),
+ iSearchIconId( 0 )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::ConstructL ( const CCoeControl* aParent, TInt aIconBitmapId, TInt aIconMaskId,
+ TBool
+ aPopupListStatus
+ )
+ {
+ CreateWindowL();
+
+ // remove 'const' modifier and set parent control
+ SetMopParent( CONST_CAST( CCoeControl*, aParent ) );
+
+ iEditor = new (ELeave) CEikGlobalTextEditor;
+
+ iInputFrame = CAknInputFrame::NewL(
+ iEditor,
+ EFalse,
+ KAvkonBitmapFile,
+ aIconBitmapId,
+ aIconMaskId,
+ CAknInputFrame::EPopupLayout );
+
+ iInputFrame->SetContainerWindowL( *this );
+
+ AknEditUtils::ConstructEditingL ( iEditor,
+ KFavouritesMaxUrlGotoPaneDefine,
+ 1,
+ EAknEditorCharactersLowerCase,
+ EAknEditorAlignRight,
+ EFalse,
+ ETrue,
+ EFalse );
+
+ iEditor->SetContainerWindowL( *this );
+ iEditor->SetObserver( this );
+ iEditor->SetBorder( TGulBorder::ENone );
+ iEditor->SetAknEditorCase( EAknEditorLowerCase );
+ iEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
+
+ if (AVKONAPAC)
+ {
+ // Disallow chinese input.
+ iEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode |
+ EAknEditorNumericInputMode );
+ }
+ TInt editorFlags = ((iFindKeywordMode) ? EAknEditorFlagDefault : EAknEditorFlagLatinInputModesOnly) |EAknEditorFlagUseSCTNumericCharmap;
+
+ // Always disable T9 input for goto url
+ editorFlags = (editorFlags | EAknEditorFlagNoT9);
+
+ iEditor->SetAknEditorFlags( editorFlags );
+
+ iEditor->SetAknEditorPermittedCaseModes ( EAknEditorUpperCase |
+ EAknEditorLowerCase );
+
+ iGotoKeyHandled = new (ELeave) CBrowserKeyEventHandled( *this );
+ iAvkonAppUi->AddToStackL( iGotoKeyHandled,
+ ECoeStackPriorityFep + 1,
+ ECoeStackFlagRefusesFocus );
+ iEditor->SetEdwinObserver( iGotoKeyHandled );
+ iEditor->SetSkinBackgroundControlContextL(NULL);
+
+ TBool searchFeature = iContentView->ApiProvider().Preferences().SearchFeature();
+ if ( searchFeature && !iFindKeywordMode )
+ {
+ iDefaultSearchText = StringLoader::LoadL( R_IS_WEB_SEARCH );
+ ConstructSearchPaneL();
+ }
+
+ //adaptive popuplist
+ if ( aPopupListStatus && AUTOCOMP )
+ {
+ iBAdaptiveListPopup =
+ new (ELeave) CBrowserAdaptiveListPopup( iEditor, this, EGotoPane, searchFeature );
+ iBAdaptiveListPopup->ConstructL();
+ iEditor->SetObserver( iBAdaptiveListPopup );
+ if (iContentView)
+ {
+ iBAdaptiveListPopup->SetUrlSuffixList(iContentView->ApiProvider().Preferences().URLSuffixList());
+ iBAdaptiveListPopup->SetMaxRecentUrls(iContentView->ApiProvider().Preferences().MaxRecentUrls());
+ }
+ }
+
+ CCoeEnv::Static()->AddFepObserverL(static_cast<MCoeFepObserver &>(*this));
+ iPrevKeyword = KNullDesC().AllocL();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::SetOrdinalPosition
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SetOrdinalPosition( TInt aPos )
+ {
+ Window().SetOrdinalPosition( aPos );
+ if ( iBAdaptiveListPopup )
+ {
+ iBAdaptiveListPopup->SetOrdinalPosition( aPos );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::HandleFindSizeChanged
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::HandleFindSizeChanged()
+ {
+
+ if ( iSearchEditor && !iFindKeywordMode)
+ {
+ TRect clientRect = CBrowserAppUi::Static()->ClientRect();
+ TAknWindowLineLayout findWindow = AknLayout::popup_find_window();
+
+ TRect findWindowRect = AknLayoutUtils::RectFromCoords( clientRect,findWindow.il, findWindow.it,
+ findWindow.ir, findWindow.ib, findWindow.iW, findWindow.iH);
+
+ // Now Increase the height of rect to make room for two editors (Goto + search)//
+ findWindowRect.iTl.iY -= ( findWindow.iH );
+ SetRect( findWindowRect );
+ }
+
+ else if ( !AknLayoutUtils::PenEnabled() )
+ {
+
+ TRect parentrect = iAvkonAppUi->ApplicationRect();
+
+ TAknLayoutRect lrect;
+ lrect.LayoutRect( parentrect,
+ AknLayout::main_pane( CBrowserAppUi::Static()->ApplicationRect(), 0, 1, 1 )
+ );
+ AknLayoutUtils::LayoutControl ( this,
+ lrect.Rect(),
+ AknLayout::popup_find_window() );
+ }
+ else if( AknLayoutUtils::PenEnabled() )
+ {
+ // The ClientRect() will be the application rectangle minus any
+ // toolbars/menu bars etc.
+ AknLayoutUtils::LayoutControl ( this,
+ CBrowserAppUi::Static()->ClientRect(),
+ AknLayout::popup_find_window() );
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::EnableKeyEventHandler
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::EnableKeyEventHandlerL( TBool aEnable )
+ {
+ iGotoKeyHandled->EnableL( aEnable );
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::HandleControlEventL
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::HandleControlEventL ( CCoeControl* /*aControl*/,
+ TCoeEvent aEventType )
+ {
+ if ( iFindKeywordMode )
+ {
+ if ( iEditor->AknEditorCurrentInputMode() == EAknEditorCalculatorNumberModeKeymap
+ // When the user copies and paste's content to the find dialog, the editor
+ // is in Text Input mode, The engine should still get the find keyword request
+ || iEditor->AknEditorCurrentInputMode() == EAknEditorTextInputMode
+ // Also Chinese and Japanese input modes should apply here
+ || iEditor->AknEditorCurrentInputMode() == EAknEditorFullWidthKatakanaInputMode
+ || iEditor->AknEditorCurrentInputMode() == EAknEditorHiraganaInputMode
+ )
+ {
+ if ( aEventType == MCoeControlObserver::EEventStateChanged )
+ {
+ HBufC* newText = GetTextL();
+ if (!newText)
+ {
+ newText = KNullDesC().AllocL();
+ }
+
+ if ( iPrevKeyword->Compare( *newText ) )
+ {
+ delete iPrevKeyword;
+ iPrevKeyword = NULL;
+ iPrevKeyword = newText;
+ // Find the typed keyword.
+ iContentView->FindKeywordL( GetTextL() );
+ iHandleFEPFind = EFalse;
+ }
+ else
+ {
+ delete newText;
+ }
+ }
+ }
+ }
+
+ switch (aEventType)
+ {
+ case EEventRequestFocus:
+ {
+ FocusChanged( EDrawNow );
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::OfferKeyEventL
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CBrowserGotoPane::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse resp = EKeyWasNotConsumed;
+
+ if ( AknLayoutUtils::PenEnabled()
+ && PopupList()
+ && PopupList()->DrawableWindow()->OrdinalPosition() > 0 )
+ {
+ PopupList()->SetOrdinalPosition(0);
+ }
+
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyEscape ) // Escape key event handling
+ {
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( this );
+ if ( PopupList() )
+ {
+ PopupList()->SetDirectoryModeL( ETrue );
+ PopupList()->HidePopupL();
+ }
+ MakeVisible( EFalse ); // Hide Goto pane
+ SetFocus( EFalse );
+ resp = EKeyWasConsumed; // should set the focus of container to ETrue...how?
+ }
+
+ if ( iFindKeywordMode )
+ {
+ if ( iContentView->MenuBar()->MenuPane()->IsVisible() )
+ {
+ return iContentView->MenuBar()->MenuPane()->OfferKeyEventL( aKeyEvent, aType );
+ }
+ else
+ {
+ if ( aType == EEventKey ) // Handle up and down arow keys to search for
+ { // next and previous keywords.
+
+ if ( aKeyEvent.iCode == EKeyLeftUpArrow // Northwest
+ || aKeyEvent.iCode == EStdKeyDevice10 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyUpArrow // North
+ || aKeyEvent.iCode == EKeyRightUpArrow // Northeast
+ || aKeyEvent.iCode == EStdKeyDevice11 ) // : Extra KeyEvent supports diagonal event simulator wedge
+ { // Any of those? If so, then...
+ iContentView->FindKeywordL( NULL, EFalse ); // Find previous keyword
+ iHandleFEPFind = EFalse; // :
+ return EKeyWasConsumed; // And that consumes the key
+ }
+
+ if ( aKeyEvent.iCode == EKeyLeftDownArrow // Southwest
+ || aKeyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyDownArrow // South
+ || aKeyEvent.iCode == EKeyRightDownArrow // Southeast
+ || aKeyEvent.iCode == EStdKeyDevice12 ) // : Extra KeyEvent supports diagonal event simulator wedge
+ { // Any of those? If so, then...
+ iContentView->FindKeywordL( NULL, ETrue ); // Find next keyword
+ iHandleFEPFind = EFalse; // :
+ return EKeyWasConsumed; // And that consumes the key
+ }
+
+ if ( aKeyEvent.iCode == EKeyDevice3 ) // Select key?
+ { // If so, then...
+ return EKeyWasConsumed; // Ignore select key
+ }
+
+ }
+ return iEditor->OfferKeyEventL( aKeyEvent, aType ); // Otherwise, just pass the key on to the editor
+ }
+ }
+
+ else // *NOT* iFindKeywordMode
+ {
+
+ if ( aKeyEvent.iCode == EKeyRightUpArrow // Northeast
+ || aKeyEvent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyRightDownArrow // Southeast
+ || aKeyEvent.iCode == EStdKeyDevice12 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyLeftDownArrow // Southwest
+ || aKeyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyLeftUpArrow // Northwest
+ || aKeyEvent.iCode == EStdKeyDevice10 ) // : Extra KeyEvent supports diagonal event simulator wedge
+ { // Any of those? If so, then...
+ return EKeyWasConsumed; // Ignore diagonal navigation events here
+ }
+
+ // For touch UI, handle enter key from VKB as a "GOTO"
+ if (AknLayoutUtils::PenEnabled() && aKeyEvent.iCode == EKeyEnter)
+ {
+ CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneGoTo);
+ return EKeyWasConsumed;
+ }
+ else if ( ((aKeyEvent.iCode == EKeyOK ) || (aKeyEvent.iCode == EKeyEnter))
+ && iGPObserver
+ && IsFocused() )
+ {
+ if ( CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->IsVisible() )
+ {
+ return CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->OfferKeyEventL( aKeyEvent, aType );
+ }
+ else
+ {
+ // If there is an observer and we have the focus, enter key is
+ // consumed and observer is notified.
+ iGPObserver->HandleGotoPaneEventL
+ ( this, MGotoPaneObserver::EEventEnterKeyPressed );
+ return EKeyWasConsumed;
+ }
+ }
+
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ resp = iSearchEditor->OfferKeyEventL( aKeyEvent, aType );
+ }
+ else
+ {
+ resp = iEditor->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ if ((iBAdaptiveListPopup ) && (resp != EKeyWasConsumed))
+ {
+ resp = iBAdaptiveListPopup->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+
+ if ( iSearchEditor )
+ {
+ if ( ( iGotoPaneActive || iSearchPaneActive)
+ && (resp != EKeyWasConsumed) )
+ {
+
+ if ( aKeyEvent.iCode == EKeyUpArrow )
+ {
+ resp = EKeyWasConsumed;
+ if ( iSearchPaneActive )
+ {
+ SetGotoPaneActiveL();
+
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ iEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
+#endif
+
+ }
+ }
+ if ( aKeyEvent.iCode == EKeyDownArrow )
+ {
+ resp = EKeyWasConsumed;
+ if ( iGotoPaneActive )
+ {
+ SetSearchPaneActiveL();
+
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ iSearchEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
+#endif
+
+ }
+ }
+ }
+ }
+
+ }
+
+ return resp;
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::HandlePointerEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ return;
+ }
+
+ // ponter is in goto pane
+ if (Rect().Contains(aPointerEvent.iPosition))
+ {
+ iGotoKeyHandled->EnableL(ETrue);
+
+ // If search feature exists, check and route to appropriate editor //
+ if ( iSearchEditor )
+ {
+ if ( iSearchInputFrame->Rect().Contains(aPointerEvent.iPosition))
+ {
+ if ( !iSearchPaneActive )
+ {
+ SetSearchPaneActiveL();
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ else
+ {
+#endif
+ iSearchEditor->HandlePointerEventL(aPointerEvent);
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ }
+#endif
+
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ iSearchEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB);
+#endif
+ }
+ else
+ {
+ if ( !iGotoPaneActive )
+ {
+ SetGotoPaneActiveL();
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ else
+ {
+#endif
+ iEditor->HandlePointerEventL(aPointerEvent);
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ }
+#endif
+
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ iEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB);
+#endif
+ }
+ }
+ else
+ {
+ iEditor->HandlePointerEventL(aPointerEvent);
+ }
+ iGotoKeyHandled->SetFirstKeyEvent(EFalse);
+ }
+ else
+ {
+ // pointer outside of control
+ if ( iFindKeywordMode )
+ {
+ CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdFindKeywordPaneClose);
+ ResetPrevText();
+ }
+ else
+ {
+ CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneCancel);
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::CountComponentControls
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserGotoPane::CountComponentControls() const
+ {
+ if ( iSearchEditor && !iFindKeywordMode )
+ {
+ return 4; // iEditor, input frame, SearchEditor and Searchinput frame.
+ }
+ return 2; // iEditor and input frame
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::ComponentControl
+// ----------------------------------------------------------------------------
+//
+CCoeControl* CBrowserGotoPane::ComponentControl ( TInt aIndex ) const
+ {
+ switch(aIndex)
+ {
+ case 0:
+ {
+ return iInputFrame;
+ }
+ case 1:
+ {
+ return iEditor;
+ }
+ case 2:
+ {
+ return iSearchInputFrame;
+ }
+ case 3:
+ {
+ return iSearchEditor;
+ }
+
+ default:
+ return NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SizeChanged
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SizeChanged()
+ {
+ if (iSearchEditor && !iFindKeywordMode )
+ {
+ // We need height and width of FindWindow
+ TAknWindowLineLayout findWindow = AknLayout::popup_find_window();
+ TRect findWindowRect = AknLayoutUtils::RectFromCoords( Rect(), findWindow.il,
+ findWindow.it, findWindow.ir, findWindow.ib, findWindow.iW, findWindow.iH);
+
+ TSize gotoSize( findWindowRect.Size() );
+ TRect gotoRect( TPoint( 0,0 ), gotoSize );
+ iInputFrame->SetRect( gotoRect );
+
+ // Now set SearchPane right below GoTo pane //
+ TRect searchRect( TPoint( 0, gotoRect.iBr.iY ), gotoSize );
+ iSearchInputFrame->SetRect( searchRect );
+ }
+ else
+ {
+ iInputFrame->SetRect( Rect() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::FocusChanged
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::FocusChanged( TDrawNow aDrawNow )
+ {
+ // this is a workaround
+ TRAP_IGNORE( iGotoKeyHandled->EnableL( IsFocused() ) );
+ CCoeControl::FocusChanged( aDrawNow );
+ if ( iGotoPaneActive )
+ {
+ iEditor->SetFocus( IsFocused() );
+ }
+ else if ( iSearchEditor && !iFindKeywordMode && iSearchPaneActive )
+ {
+ iSearchEditor->SetFocus( IsFocused() );
+ }
+ }
+
+
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::TextLength
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserGotoPane::SearchTextLength() const
+ {
+ TInt len = 0;
+ if ( iSearchEditor )
+ {
+ len = iSearchEditor->TextLength();
+ }
+ return len;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::TextLength
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserGotoPane::TextLength() const
+ {
+ return iEditor->TextLength();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::GetText
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserGotoPane::GetTextL() const
+ {
+ HBufC *retVal = NULL;
+
+ if ( TextLength()
+ || SearchTextLength()
+ || iFindKeywordMode)
+ {
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ retVal = HBufC::NewL( SearchTextLength() + 1 );
+ }
+ else
+ {
+ retVal = HBufC::NewL( TextLength() + 1 );
+ }
+ TPtr ptr = retVal->Des();
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ iSearchEditor->GetText( ptr );
+ }
+ else
+ {
+ iEditor->GetText( ptr );
+ }
+ ptr.ZeroTerminate();
+ if ( !iFindKeywordMode && !iSearchPaneActive )
+ {
+ Util::EncodeSpaces(retVal);
+ }
+ }
+
+ return retVal;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SetSearchTextL
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SetSearchTextL( const TDesC& aTxt )
+ {
+ // for search pane, no default text
+ if ( aTxt == KHttpString || aTxt == KWWWString)
+ {
+ iSearchEditor->SetTextL( &KNullDesC );
+ }
+ else
+ {
+ iSearchEditor->SetTextL( &aTxt );
+ }
+ TInt curPos = SearchTextLength();
+ // Cursor to end, no selection.
+ iSearchEditor->SetSelectionL( curPos, curPos );
+ iSearchEditor->DrawNow();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SetTextL
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SetTextL( const TDesC& aTxt )
+ {
+ iEditor->SetTextL( &aTxt );
+ TInt curPos = TextLength();
+ // Cursor to end, no selection.
+ iEditor->SetSelectionL( curPos, curPos );
+ iEditor->DrawNow();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SelectAllL
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SelectAllL()
+ {
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ iSearchEditor->SelectAllL();
+ }
+ else
+ {
+ iEditor->SelectAllL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SetInfoTextL
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SetInfoTextL( const TDesC& aText )
+ {
+ iInputFrame->SetInfoTextL( aText );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::ClipboardL
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::ClipboardL( CEikEdwin::TClipboardFunc aClipboardFunc )
+ {
+ iEditor->ClipboardL( aClipboardFunc );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::Editor
+// ----------------------------------------------------------------------------
+CEikEdwin* CBrowserGotoPane::Editor() const
+ {
+ return iEditor;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SetGPObserver
+// ----------------------------------------------------------------------------
+//
+void CBrowserGotoPane::SetGPObserver( MGotoPaneObserver* aObserver )
+ {
+ __ASSERT_DEBUG( !iGPObserver, \
+ Util::Panic( Util::EGotoPaneObserverAlreadySet ) );
+ iGPObserver = aObserver;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserKeyEventHandled::CBrowserKeyEventHandled
+// ----------------------------------------------------------------------------
+//
+CBrowserKeyEventHandled::CBrowserKeyEventHandled(
+ CBrowserGotoPane& aGotoPane ) :
+ iEnabled( EFalse )
+ ,iFirstKeyEvent( ETrue )
+ ,iLeftRightEvent ( EFalse )
+ ,iGotoPane( aGotoPane )
+ {
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserKeyEventHandled::OfferKeyEventL
+// ----------------------------------------------------------------------------
+//
+TKeyResponse
+ CBrowserKeyEventHandled::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType)
+ {
+ TKeyResponse response( EKeyWasNotConsumed );
+ iLeftRightEvent = EFalse;
+
+ if ( iEnabled && aType == EEventKey )
+ {
+ switch( aKeyEvent.iCode )
+ {
+ case EKeyUpArrow:
+ case EKeyDownArrow:
+ {
+ iFirstKeyEvent = EFalse;
+ break;
+ }
+
+ case EKeyLeftArrow:
+ case EKeyRightArrow:
+ {
+ iFirstKeyEvent = EFalse;
+ iLeftRightEvent = ETrue;
+
+ // Below added to compensate for a weird key event situation:
+ // For some reason the CBrowserGotoPane::OfferKeyEventL function
+ // is not being called for an EEventKey when you press the left/right
+ // arrows in the menupane produced to paste previously used special
+ // chars (this is brought up by pressing the pen button on the phone).
+ // This only happens when the cursor is in the first or last position in
+ // the goto pane with text in it.
+ // Therefore, in this particular scenario, we need to process the EEventKey
+ // here since we will not be able to in CBrowserGotoPane::OfferKeyEventL
+ if (CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->IsFocused())
+ {
+ response = CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->OfferKeyEventL( aKeyEvent, aType );
+ }
+ break;
+ }
+
+ case EKeyBackspace:
+ case EKeyDelete:
+ {
+ if ( iFirstKeyEvent )
+ {
+ iFirstKeyEvent = EFalse;
+ iCoeEnv->SimulateKeyEventL( aKeyEvent, aType );
+ response = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ default:
+ {
+ if ( iFirstKeyEvent )
+ {
+ if ( TChar( aKeyEvent.iCode ).IsPrint() )
+ {
+ iFirstKeyEvent = EFalse;
+ response = EKeyWasConsumed;
+ iCoeEnv->SimulateKeyEventL( aKeyEvent, aType );
+ }
+ }
+ break;
+ }
+ }
+// CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ return response;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserKeyEventHandled::HandleEdwinEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserKeyEventHandled::HandleEdwinEventL( CEikEdwin* /*aEdwin*/,
+ TEdwinEvent aEventType )
+ {
+ // if text changed in the editor we don't have to handle clear key anymore
+ if ( aEventType == EEventTextUpdate )
+ {
+ iFirstKeyEvent = EFalse;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserKeyEventHandled::EnableL
+// ----------------------------------------------------------------------------
+//
+void CBrowserKeyEventHandled::EnableL( TBool aEnable )
+ {
+ iEnabled = aEnable;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserKeyEventHandled::Reset
+// ----------------------------------------------------------------------------
+//
+void CBrowserKeyEventHandled::Reset()
+ {
+ iFirstKeyEvent = ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::PopupList
+// ---------------------------------------------------------------------------
+//
+CBrowserAdaptiveListPopup* CBrowserGotoPane::PopupList()
+ {
+ return iBAdaptiveListPopup;
+ }
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::HandleResourceChange
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::HandleResourceChange(
+ TInt
+ aType
+ )
+ {
+ CCoeControl::HandleResourceChange( aType );
+
+ if ( iBAdaptiveListPopup )
+ {
+ iBAdaptiveListPopup->HandleResourceChange( aType );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::HandleStartOfTransactionL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::HandleStartOfTransactionL()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserGotoPane::HandleCompletionOfTransactionL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserGotoPane::HandleCompletionOfTransactionL()
+ {
+ if ( iContentView && iFindKeywordMode && this->IsVisible() &&
+ !iContentView->MenuBar()->MenuPane()->IsVisible() )
+ {
+ if ( GetTextL() )
+ {
+ // Find the typed keyword.
+ if ( iHandleFEPFind && iPrevKeyword->Compare(GetTextL()->Des()) )
+ {
+ iContentView->FindKeywordL( GetTextL() );
+ }
+ }
+ }
+ iHandleFEPFind = ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::ActivateVKB
+// ----------------------------------------------------------------------------
+void CBrowserGotoPane::ActivateVKB()
+ {
+ if ( ( iEditor && iEditor->TextView() )
+ || ( iSearchEditor && iSearchEditor->TextView()) )
+ {
+ // make sure observer is set
+ iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+
+ // simulate pointer event to force VKB
+
+ // first get point at cursor location
+ TInt pos = 0;
+ CTextView* textView = NULL;
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ pos = iSearchEditor->CursorPos();
+ textView = iSearchEditor->TextView();
+ }
+ else
+ {
+ pos = iEditor->CursorPos();
+ textView = iEditor->TextView();
+ }
+
+ TPoint curPos;
+ textView->DocPosToXyPosL(pos, curPos);
+
+ TPointerEvent pe;
+ pe.iPosition = curPos;
+
+ pe.iType = TPointerEvent::EButton1Down;
+
+ TInt err(KErrNone);
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ TRAP(err, iSearchEditor->HandlePointerEventL(pe));
+ }
+ else
+ {
+ TRAP(err, iEditor->HandlePointerEventL(pe));
+ }
+
+ if (err != KErrNone)
+ {
+ return;
+ }
+
+ pe.iType = TPointerEvent::EButton1Up;
+
+ // VKB will only activate is nothing selected
+ if ( iSearchEditor && iSearchPaneActive )
+ {
+ iSearchEditor->SetSelectionL(pos,pos);
+ TRAP_IGNORE(iSearchEditor->HandlePointerEventL(pe));
+ }
+ else
+ {
+ iEditor->SetSelectionL(pos,pos);
+ TRAP_IGNORE(iEditor->HandlePointerEventL(pe));
+ }
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ TRAP_IGNORE(SelectAllL());
+#endif
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::ConstructSearchPaneL
+// ----------------------------------------------------------------------------
+void CBrowserGotoPane::ConstructSearchPaneL()
+ {
+
+ TFileName iconFile;
+ TInt iconId = iContentView->ApiProvider().Preferences().GetIntValue( KBrowserSearchIconId );
+ iContentView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchIconPath, KMaxFileName, iconFile );
+
+ // If Icon File Path Changed or Icon Id Changed, Refresh the Icon for Search Pane.
+ // Comparing Icon File path as well, because it may be possible that two different
+ // Icon files have same icon id.
+ if ( iconId != iSearchIconId
+ || iSearchIconFilePath.Compare( iconFile ) != 0 )
+ {
+
+ TInt iconMaskId = iContentView->ApiProvider().Preferences().GetIntValue( KBrowserSearchIconMaskId );
+ // Save IconId
+ iSearchIconId = iconId;
+ // Save Icon File
+ iSearchIconFilePath = iconFile;
+
+ // No Icon file or IconId or IconMaskId set , then it means no search provider is still
+ // selected and set by search application, in that case we use the default icon for Search.
+ if ( ! iconFile.Length()
+ || iconId == -1
+ || iconMaskId == -1 )
+ {
+ iconId = EMbmAvkonQgn_indi_find_glass;
+ iconMaskId = EMbmAvkonQgn_indi_find_glass_mask;
+ iconFile = KAvkonBitmapFile;
+ }
+
+
+ if ( iSearchEditor )
+ {
+ delete iSearchEditor;
+ iSearchEditor = NULL;
+ }
+
+ if ( iSearchInputFrame )
+ {
+ delete iSearchInputFrame;
+ iSearchInputFrame = NULL;
+ }
+
+
+ // iSearchEditor != NULL, implies presence of Search Feature, which can be
+ // used to validate search feature exsistence, avoiding unecessary feature
+ // check calls and need of separate variable.
+ iSearchEditor = new (ELeave) CEikGlobalTextEditor;
+ iSearchInputFrame = CAknInputFrame::NewL(
+ iSearchEditor,
+ EFalse,
+ iconFile,
+ iconId,
+ iconMaskId,
+ CAknInputFrame::EPopupLayout );
+
+ iSearchInputFrame->SetContainerWindowL( *this);
+ AknEditUtils::ConstructEditingL ( iSearchEditor,
+ KFavouritesMaxUrlGotoPaneDefine,
+ 1,
+ EAknEditorCharactersLowerCase,
+ EAknEditorAlignRight,
+ EFalse,
+ ETrue,
+ EFalse );
+
+ iSearchEditor->SetContainerWindowL( *this );
+ iSearchEditor->SetObserver( this );
+ iSearchEditor->SetBorder( TGulBorder::ENone );
+ iSearchEditor->SetAknEditorCase( EAknEditorLowerCase );
+ iSearchEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
+
+ if (AVKONAPAC)
+ {
+ // Disallow chinese input.
+ iSearchEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode |
+ EAknEditorNumericInputMode );
+ }
+
+ //Search should use EAknEditorFlagDefault as search allows all types of input
+ iSearchEditor->SetAknEditorFlags
+ ( EAknEditorFlagDefault | EAknEditorFlagUseSCTNumericCharmap );
+
+ iSearchEditor->SetAknEditorPermittedCaseModes ( EAknEditorUpperCase |
+ EAknEditorLowerCase );
+
+ iSearchEditor->SetEdwinObserver( iGotoKeyHandled );
+ iSearchEditor->SetSkinBackgroundControlContextL(NULL);
+ iSearchEditor->MakeVisible( ETrue );
+ iSearchInputFrame->MakeVisible( ETrue );
+ // Set the default text if not active//
+ if ( ! iSearchPaneActive )
+ {
+ HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
+ TPtr searchProviderPtr = searchProvider->Des();
+ iContentView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
+ KMaxTitleLength , searchProviderPtr);
+ if( searchProvider->Length() == 0 )
+ {
+ SetSearchTextL( *iDefaultSearchText );
+ }
+ else
+ {
+ SetSearchTextL( *searchProvider );
+ delete iDefaultSearchText;
+ iDefaultSearchText = NULL;
+ iDefaultSearchText = searchProvider->AllocL();
+ }
+ CleanupStack::PopAndDestroy(searchProvider);
+ }
+ iSearchInputFrame->ActivateL();
+ }
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SetGotoPaneActive
+// ----------------------------------------------------------------------------
+void CBrowserGotoPane::SetGotoPaneActiveL()
+ {
+
+ iGotoPaneActive = ETrue;
+ iSearchPaneActive = EFalse;
+
+ if ( iSearchEditor )
+ {
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ iEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableVKB );
+#endif
+ // if searchpane is empty add default text
+ if ( !SearchTextLength() )
+ {
+ HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
+ TPtr searchProviderPtr = searchProvider->Des();
+ iContentView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
+ KMaxTitleLength , searchProviderPtr);
+ if( searchProvider->Length() == 0 )
+ {
+ SetSearchTextL( *iDefaultSearchText );
+ }
+ else
+ {
+ SetSearchTextL( *searchProvider );
+ }
+ CleanupStack::PopAndDestroy(searchProvider);
+ }
+
+ // if gotopane is empty add default text
+ if ( !TextLength() )
+ {
+ SetTextL( KWWWString );
+ }
+
+ iSearchEditor->SetFocus( EFalse);
+ }
+
+ iEditor->SetFocus( ETrue );
+ CBrowserAppUi::Static()->UpdateCbaL();
+ SetTextModeItalicL();
+ iEditor->SetCursorPosL(iEditor->TextLength(), EFalse);
+ DrawDeferred();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserGotoPane::SetSearchPaneActive
+// ----------------------------------------------------------------------------
+void CBrowserGotoPane::SetSearchPaneActiveL()
+ {
+
+ if ( iSearchEditor )
+ {
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ iSearchEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableVKB );
+#endif
+ // if gotopane is empty add default text
+ if ( !TextLength() )
+ {
+ SetTextL( KWWWString );
+ }
+
+ // if searchpane has default text remove it
+ HBufC* text = iSearchEditor->GetTextInHBufL();
+ if ( text )
+ {
+ CleanupStack::PushL( text );
+ if ( !text->Compare( iDefaultSearchText->Des() ) )
+ {
+ SetSearchTextL( KNullDesC );
+ }
+
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ iSearchPaneActive = ETrue;
+ iGotoPaneActive = EFalse;
+ iEditor->SetFocus( EFalse );
+ if ( iBAdaptiveListPopup )
+ iBAdaptiveListPopup->HidePopupL();
+ iSearchEditor->SetFocus( ETrue );
+ iSearchEditor->SetCursorPosL(iSearchEditor->TextLength(), EFalse);
+ CBrowserAppUi::Static()->UpdateCbaL();
+
+ SetTextModeItalicL();
+ DrawDeferred();
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetTextModeItalic
+// ----------------------------------------------------------------------------
+void CBrowserGotoPane::SetTextModeItalicL()
+ {
+
+ // Editor Control is laid in a scalable way, so we need to get the correct font
+ // specification for setting CharFormatLayer, We could have used GetNearestFontInTwips,
+ // as done above in SetTextL() but it does not provide correct fonts for editor.
+ // We do not need to set the FontPosture back to EPostureUpright ( Normal ), as it
+ // is automatically handled by AknLayoutUtils::LayoutEdwinScalable called by
+ // iInputFrame->SetRect(), which overwrites all the properties for Editor.
+ if ( iSearchEditor )
+ {
+ TAknTextComponentLayout editorLayout;
+ TBool apac( AknLayoutUtils::Variant() == EApacVariant && ( CAknInputFrame::EShowIndicators ) );
+ editorLayout = AknLayoutScalable_Avkon::input_popup_find_pane_t1( apac ? 2 : 0 );
+ TAknTextLineLayout lineLayout = editorLayout.LayoutLine();
+ TInt fontid = lineLayout.FontId();
+ const CAknLayoutFont *font = AknLayoutUtils::LayoutFontFromId( fontid );
+
+ TCharFormat charFormat;
+ TCharFormatMask charFormatMask;
+ charFormat.iFontSpec = font->FontSpecInTwips();
+ charFormat.iFontSpec.iFontStyle.SetPosture( EPostureItalic );
+ charFormatMask.SetAttrib(EAttFontTypeface);
+ charFormatMask.SetAttrib(EAttFontHeight);
+ charFormatMask.SetAttrib(EAttFontStrokeWeight);
+ charFormatMask.SetAttrib(EAttFontPosture);
+
+ // Owner ship of charFormatLayer is taken by Editor
+ CCharFormatLayer* charFormatLayerItalics = NULL;
+ CCharFormatLayer* charFormatLayerUpright = NULL;
+ charFormatLayerItalics = CCharFormatLayer::NewL(charFormat,charFormatMask);
+ charFormat.iFontSpec.iFontStyle.SetPosture( EPostureUpright );
+ charFormatLayerUpright = CCharFormatLayer::NewL(charFormat,charFormatMask);
+ if ( iSearchPaneActive )
+ {
+ iSearchEditor->SetCharFormatLayer(charFormatLayerUpright);
+ iEditor->SetCharFormatLayer(charFormatLayerItalics);
+ }
+ else
+ {
+ iSearchEditor->SetCharFormatLayer(charFormatLayerItalics);
+ iEditor->SetCharFormatLayer(charFormatLayerUpright);
+ }
+ }
+ }
+
+void CBrowserGotoPane::ResetPrevText()
+ {
+ iPrevKeyword->Des().SetLength(0);
+ }
+
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserInitialContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserInitialContainer.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknLists.h>
+#include <BrowserNG.rsg>
+#include <barsread.h>
+#include <browser.mbg>
+#include <AknsUtils.h>
+#include <data_caging_path_literals.hrh>
+#include "BrowserInitialContainer.h"
+#include "CommonConstants.h"
+#include "BrowserInitialView.h"
+#include "BrowserAppUi.h"
+#include "BrowserUIVariant.hrh"
+#include "Display.h"
+#include "BrowserGotoPane.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::CBrowserInitialContainer
+// ---------------------------------------------------------
+//
+CBrowserInitialContainer::CBrowserInitialContainer( CBrowserInitialView *aView ) : iView( aView )
+ {
+ //
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserInitialContainer::ConstructL(const TRect& aRect)
+ {
+ CreateWindowL();
+
+ // Set view title
+ iView->ApiProvider().Display().SetTitleL( TitleResourceId() );
+
+
+ // Create gotopane
+ iGotoPane = CBrowserGotoPane::NewL( this );
+
+ SetRect(aRect);
+ ActivateL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::~CBrowserInitialContainer
+// ---------------------------------------------------------
+//
+CBrowserInitialContainer::~CBrowserInitialContainer()
+ {
+ delete iGotoPane;
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::SizeChanged
+// ---------------------------------------------------------
+//
+void CBrowserInitialContainer::SizeChanged()
+ {
+
+ iGotoPane->HandleFindSizeChanged();
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::CountComponentControls
+// ---------------------------------------------------------
+//
+TInt CBrowserInitialContainer::CountComponentControls() const
+ {
+ return 1; // return number of controls inside this container
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CBrowserInitialContainer::ComponentControl( TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ return iGotoPane;
+ default:
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::Draw
+// ---------------------------------------------------------
+//
+void CBrowserInitialContainer::Draw( const TRect& aRect ) const
+ {
+ CWindowGc& gc = SystemGc();
+
+ // example code...
+ gc.SetPenStyle( CGraphicsContext::ENullPen );
+ gc.SetBrushColor( KRgbGray );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.DrawRect( aRect );
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::HandleControlEventL
+// ---------------------------------------------------------
+//
+void CBrowserInitialContainer::HandleControlEventL( CCoeControl* /*aControl*/,
+ TCoeEvent /*aEventType*/ )
+ {
+ // control event handler code here
+ }
+
+
+
+// ----------------------------------------------------------------------------
+// CBrowserInitialContainer::OfferKeyEventL
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CBrowserInitialContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+ {
+ CBrowserAppUi* ui = CBrowserAppUi::Static();
+ TKeyResponse result( EKeyWasNotConsumed );
+
+ if (ui->OfferApplicationSpecificKeyEventL(aKeyEvent, aType) == EKeyWasConsumed)
+ {
+ return EKeyWasConsumed;
+ }
+
+ // If goto pane is visible, offer key events to it
+ if ( iGotoPane->IsVisible() )
+ {
+ result = iGotoPane->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialContainer::TitleResourceId
+// ---------------------------------------------------------
+//
+TInt CBrowserInitialContainer::TitleResourceId()
+ {
+ return R_BROWSER_INITIAL_VIEW_TITLE;
+ }
+
+//---------------------------------------------------------------------------
+// CBrowserInitialContainer::ShutDownGotoURLEditorL
+// ---------------------------------------------------------------------------
+//
+void CBrowserInitialContainer::ShutDownGotoURLEditorL()
+ {
+ iGotoPane->MakeVisible( EFalse );
+ iGotoPane->SetFocus( EFalse );
+ SetFocus( ETrue );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserInitialView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserInitialView.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <BrowserNG.rsg>
+#include <FeatMgr.h>
+#include <ApUtils.h>
+#include "BrowserInitialView.h"
+#include "BrowserInitialContainer.h"
+#include "BrowserBookmarksView.h"
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "Browser.hrh"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CBrowserInitialView::NewLC
+// ----------------------------------------------------------------------------
+//
+CBrowserInitialView* CBrowserInitialView::NewLC( MApiProvider& aApiProvider)
+ {
+ CBrowserInitialView* view = new (ELeave) CBrowserInitialView( aApiProvider );
+ CleanupStack::PushL( view );
+ view->ConstructL( );
+ return view;
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::ConstructL(const TRect& aRect)
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::ConstructL()
+ {
+ BaseConstructL( R_BROWSERINITIAL_VIEW );
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::CBrowserInitialView()
+// ---------------------------------------------------------
+//
+CBrowserInitialView::CBrowserInitialView( MApiProvider& aApiProvider ):
+CBrowserViewBase( aApiProvider )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::~CBrowserInitialView()
+// destructor
+// ---------------------------------------------------------
+//
+CBrowserInitialView::~CBrowserInitialView()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ }
+
+ delete iContainer;
+ delete iEnteredURL;
+ }
+
+// ---------------------------------------------------------
+// TUid CBrowserInitialView::Id()
+// ---------------------------------------------------------
+//
+TUid CBrowserInitialView::Id() const
+ {
+ return KUidBrowserInitialViewId;
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::HandleCommandL
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::HandleCommandL(TInt aCommand)
+ {
+ AppUi()->HandleCommandL( aCommand );
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::HandleClientRectChange()
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::HandleClientRectChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserInitialView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CBrowserInitialView::CommandSetResourceIdL()
+ {
+ return R_BROWSERINITIAL_CBA_OPTIONS_EXIT;
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::DoActivateL
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ iPreviousViewID = ApiProvider().LastActiveViewId();
+ ApiProvider().SetLastActiveViewId( Id() );
+ if (!iContainer)
+ {
+ iContainer = new (ELeave) CBrowserInitialContainer( this );
+ iContainer->SetMopParent(this);
+ iContainer->ConstructL( ClientRect() );
+ AppUi()->AddToViewStackL( *this, iContainer );
+ iContainer->GotoPane()->SetGPObserver( this );
+ }
+ UpdateCbaL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::DynInitMenuPaneL( TInt /*aResourceId*/, CEikMenuPane* /*aMenuPane*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::DoDeactivate()
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::DoDeactivate()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ }
+
+ delete iContainer;
+ iContainer = NULL;
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::LaunchGotoAddressEditorL
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::LaunchGotoAddressEditorL()
+ {
+ }
+
+void CBrowserInitialView::HandleGotoPaneEventL( CBrowserGotoPane* /*aGotoPane*/, TEvent /*aEvent*/ )
+ {
+ //
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::GotoUrlInGotoPaneL
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::GotoUrlInGotoPaneL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserInitialView::UpdateGotoPaneL
+// ---------------------------------------------------------
+//
+void CBrowserInitialView::UpdateGotoPaneL()
+ {
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserLauncherService.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of BrowserLauncherService
+*
+*
+*/
+
+// INCLUDES
+#include "BrowserLauncherService.h"
+#include <browseroverriddensettings.h>
+#include "LauncherServerCommands.hrh"
+#include "BrowserAppDocument.h"
+#include "BrowserAppUi.h"
+#include "BrowserAsyncExit.h"
+#include "logger.h"
+#include <AiwGenericParam.h>
+#include <s32mem.h>
+#include "BrowserSpecialLoadObserver.h"
+#include <mconnection.h>
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::~CBrowserLauncherService()
+// -----------------------------------------------------------------------------
+//
+CBrowserLauncherService::~CBrowserLauncherService()
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::~CBrowserLauncherService" );
+ // The base class has no destructor, thus resources must be freed up here!
+ delete iClientBuffer; iClientBuffer = 0;
+ // Cancel outstanding asynchronous request
+ if ( iMyAsyncMessage.Handle() !=0 )
+ {
+ iMyAsyncMessage.Complete( KErrCancel );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::ProcessMessageSyncL()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserLauncherService::ProcessMessageSyncL( TUid /*aEmbeddingApplicationUid*/,
+ TBrowserOverriddenSettings /*aSettings*/,
+ TInt /*aFolderUid*/,
+ TPtrC /*aSeamlessParam*/,
+ TBool /*aIsContentHandlerRegistered*/ )
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::ProcessMessageSyncL" );
+
+ // Do stuff here...
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::ProcessMessageASyncL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherService::ProcessMessageASyncL( TUid aEmbeddingApplicationUid,
+ TBrowserOverriddenSettings aSettings,
+ TInt aFolderUid,
+ TPtrC aSeamlessParam,
+ TBool aIsContentHandlerRegistered,
+ TBool aIsOverridenSettings )
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::ProcessMessageASyncL" );
+
+ TBrowserOverriddenSettings* paSettings;
+ TInt seamlessParamLength = aSeamlessParam.Length();
+ HBufC8* param8 = HBufC8::NewLC( seamlessParamLength );
+
+ // Set Browser`s document settings
+ if ( aIsOverridenSettings )
+ {
+ paSettings = &aSettings;
+ iBrowserDocument->SetOverriddenSettings( paSettings );
+ }
+ else
+ {
+ iBrowserDocument->SetOverriddenSettings( NULL );
+ }
+
+ // Set browser document
+ iBrowserDocument->SetFolderToOpen( aFolderUid );
+ iBrowserDocument->SetIsContentHandlerRegistered( aIsContentHandlerRegistered );
+
+ // Initialize browser
+ iBrowserAppUi->SetEmbeddingAppliacationUid( aEmbeddingApplicationUid );
+ iBrowserAppUi->InitBrowserL( );
+
+ // Load the specified URL
+ param8->Des().Copy( aSeamlessParam );
+
+ // If no command or URL was given open the browser with the specified bookmark
+ if ( seamlessParamLength )
+ {
+ iBrowserAppUi->ParseAndProcessParametersL( *param8 );
+ iBrowserAppUi->SetViewToBeActivatedIfNeededL( iBrowserAppUi->LastActiveViewId() );
+ }
+ else
+ {
+ iBrowserAppUi->ParseAndProcessParametersL( *param8, EFalse );
+
+ // startup content view to initialize fep/vkb
+ iBrowserAppUi->SetLastActiveViewId( KUidBrowserContentViewId );
+ iBrowserAppUi->SetViewToBeActivatedIfNeededL( iBrowserAppUi->LastActiveViewId() );
+ iBrowserAppUi->ActivateLocalViewL( iBrowserAppUi->LastActiveViewId() );
+
+ // Now activate bookmarks view
+ iBrowserAppUi->SetLastActiveViewId( KUidBrowserBookmarksViewId );
+ iBrowserAppUi->SetViewToBeActivatedIfNeededL( iBrowserAppUi->LastActiveViewId() );
+ }
+ iBrowserAppUi->ActivateLocalViewL( iBrowserAppUi->LastActiveViewId() );
+ iBrowserAppUi->HandleForegroundEventL( ETrue );
+
+ // perform special action for overridden context
+ // could later use as flag for LSK,RSK.
+ switch(aSettings.GetBrowserSetting(EBrowserOverSettingsContextId))
+ {
+ case EBrowserContextIdFeeds:
+ iBrowserAppUi->SetOverriddenLaunchContextId(EBrowserContextIdFeeds);
+ iBrowserAppUi->LaunchIntoFeedsL();
+ break;
+ default:
+ // do nothing
+ break;
+
+ }
+
+ CleanupStack::PopAndDestroy(); // param8
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::ProcessMessageSyncBufferL()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserLauncherService::ProcessMessageSyncBufferL( )
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::ProcessMessageSyncBufferL" );
+
+ // Write iClientBuffer to client`s address space.
+ iMySyncMessage.WriteL( 0,iClientBuffer->Des() );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::ProcessBoolsL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherService::ProcessBoolsL
+ ( TBool aClientWantsToContinue, TBool aWasContentHandled )
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::ProcessBoolsL" );
+
+ iBrowserAppUi->SetContentHandlingResult( aClientWantsToContinue, aWasContentHandled );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::DoBrowserExit()
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherService::DoBrowserExit( )
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::DoBrowserExitL" );
+
+ if ( iBrowserAppUi )
+ {
+ if ( !iBrowserAppUi->ExitInProgress() )
+ {
+ if (iBrowserAppUi->SpecialLoadObserver().IsConnectionStarted()) // If Connection request is in processing
+ {
+ iBrowserAppUi->Connection().Disconnect();
+ }
+ else
+ {
+ iBrowserAppUi->iBrowserAsyncExit->Start();
+ }
+ }
+ iBrowserAppUi->SetBrowserLauncherService( NULL );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::DownloadFinished()
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherService::DownloadFinishedL( TInt aReason, const CAiwGenericParamList& aParamList )
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::DownloadFinishedL" );
+
+ // This function is called by the Browser. If download is finished
+ // write the result to the clients buffer.
+
+ // Get the size of the parameter list`s externalized size.
+ TInt parameterListExternalizedSize = aParamList.Size();
+
+ // Create the buffer to hold the externalized data.
+ HBufC8* newClientBuffer = HBufC8::NewL( parameterListExternalizedSize );
+ delete iClientBuffer; // delete the old buffer
+ iClientBuffer = newClientBuffer;
+
+ // Create Stream object, and write stream to descriptor iClientBuffer.
+ TPtr8 piClientBuffer = iClientBuffer->Des();
+ RDesWriteStream writeStream( piClientBuffer );
+
+ // Externalize parameter list into descriptor iClientBuffer.
+ aParamList.ExternalizeL( writeStream );
+ BROWSER_LOG( ( _L( " ExternalizeL OK" ) ) );
+
+ // Close stream object.
+ writeStream.CommitL();
+ BROWSER_LOG( ( _L( " CommitL OK" ) ) );
+ writeStream.Close();
+ BROWSER_LOG( ( _L( " Close OK" ) ) );
+
+ // Complete the client with the created buffer`s size.
+ if ( aReason == KErrNone )
+ {
+ TPckg<TInt> bufferSize( iClientBuffer->Length() );
+ TRAPD(err, iMyAsyncMessage.WriteL( 1, bufferSize ));
+ LOG_WRITE_FORMAT(" WriteL erro code : %d", err );
+ User::LeaveIfError(err);
+ iMyAsyncMessage.Complete( KErrNone );
+ }
+ else
+ {
+ iMyAsyncMessage.Complete( aReason );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherService::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherService::ConstructL()
+ {
+ LOG_ENTERFN( "CBrowserLauncherService::ConstructL" );
+ iBrowserAppUi->SetBrowserLauncherService( this );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserLoadObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,648 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handle special load events such as network connection,
+* deal with non-http or non-html requests
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BrowserLoadObserver.h"
+#include "ApiProvider.h"
+#include "Display.h"
+#include "BrowserContentView.h"
+#include "CommonConstants.h"
+#include "BrowserAppUi.h"
+#include "logger.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "BrowserDialogsProviderProxy.h"
+
+#include <FeatMgr.h>
+#include <mconnection.h>
+#include <browserdialogsprovider.h>
+
+#ifdef I__LOG_EVENT_TIME
+ // defines a local timer with name 'localTime'
+ #define START_TIMER( localTime ) TTime localTime; localTime.HomeTime();
+
+ // count the elapsed time based on timer 'localTime'
+ // and increment number of timers called ( numOfTimer )
+ #define STOP_TIMER( localTime, numOfTimer ) \
+ TTime locTime__a; locTime__a.HomeTime(); \
+ TInt64 updateTime = locTime__a.MicroSecondsFrom( localTime ).Int64(); \
+ LOG_WRITE_FORMAT( "Update time: %d", updateTime ); \
+ ++numOfTimer; \
+ CBrowserLoadObserver::iTotalUpdateTime += updateTime;
+#else // I__LOG_EVENT_TIME
+ // empty macros
+ #define START_TIMER( a )
+ #define STOP_TIMER( a, b )
+#endif // I__LOG_EVENT_TIME
+
+// ---------------------------------------------------------
+// CBrowserLoadObserver::NewL()
+// ---------------------------------------------------------
+//
+CBrowserLoadObserver* CBrowserLoadObserver::NewL(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ CBrowserWindow& aWindow )
+ {
+ CBrowserLoadObserver* self =
+ new (ELeave) CBrowserLoadObserver( aApiProvider, aContentView, aWindow );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CBrowserLoadObserver::~CBrowserLoadObserver()
+// ---------------------------------------------------------
+//
+CBrowserLoadObserver::~CBrowserLoadObserver()
+ {
+ // iApiProvider, iContentView, iWindow not owned by CBRowserLoadObserver.
+ // invalidate pointer for a cleaner/clearer destruction
+ iApiProvider = NULL;
+ iContentView = NULL;
+ iWindow = NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::HandleBrowserLoadEventL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::HandleBrowserLoadEventL(
+ TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+ TUint aSize,
+ TUint16 aTransactionId)
+ {
+LOG_ENTERFN("CBrowserLoadObserver::HandleBrowserLoadEventL");
+LOG_WRITE_FORMAT(" LoadEvent: %d", aLoadEvent );
+LOG_WRITE_FORMAT(" Size: %d", aSize );
+LOG_WRITE_FORMAT(" TrId: %d", aTransactionId );
+LOG_WRITE_FORMAT(" LoadState: %d", iLoadState );
+LOG_WRITE_FORMAT(" LoadType: %d", iLoadUrlType );
+ if( aLoadEvent == TBrCtlDefs::EEventNewContentDisplayed )
+ {
+ iWindow->ResetPageOverviewLocalSettingL();
+ iWindow->SetImagesLoaded(EFalse);
+ }
+ HandleLoadEventOtherL( aLoadEvent, aSize, aTransactionId );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::HandleLoadEventOtherL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::HandleLoadEventOtherL(
+ TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+ TUint aSize,
+ TUint16 aTransactionId )
+ {
+#define STATECHECK( a ) { if( (iLoadState & a) == 0 ) break; }
+
+ TInt err( KErrNone );
+ switch( aLoadEvent )
+ {
+ case TBrCtlDefs::EEventLoadError:
+ {
+ if(LoadStatus( ELoadStatusSecurePage ))
+ {
+ ClearStatus( ELoadStatusSecurePage );
+ ClearStatus( ELoadStatusAllItemIsSecure );
+ SetStatus ( ELoadStatusSecurePageVisited );
+ UpdateSecureIndicatorL();
+ }
+ ClearStatus();
+ SetStatus( ELoadStatusMainError );
+ break;
+ }
+ case TBrCtlDefs::EEventEnteringSecurePage:
+ {
+ SetStatus( ELoadStatusSecurePage );
+ SetStatus( ELoadStatusAllItemIsSecure );
+ UpdateSecureIndicatorL();
+ break;
+ }
+ case TBrCtlDefs::EEventSomeItemsNotSecure:
+ {
+ ClearStatus( ELoadStatusAllItemIsSecure );
+ UpdateSecureIndicatorL();
+ break;
+ }
+ case TBrCtlDefs::EEventSecureItemInNonSecurePage:
+ {
+ SetStatus( ELoadStatusSecureItemNonSecurePage );
+ UpdateSecureIndicatorL();
+ break;
+ }
+ case TBrCtlDefs::EEventExitingSecurePage:
+ case TBrCtlDefs::EEventSubmittingToNonSecurePage:
+ {
+ ClearStatus( ELoadStatusSecurePage );
+ ClearStatus( ELoadStatusAllItemIsSecure );
+ SetStatus ( ELoadStatusSecurePageVisited );
+ UpdateSecureIndicatorL();
+ break;
+ }
+ case TBrCtlDefs::EEventTitleAvailable:
+ {
+ SetStatus( ELoadStatusTitleAvailable );
+ NewTitleAvailableL();
+ break;
+ }
+ case TBrCtlDefs::EEventNewContentStart:
+ {
+#ifdef I__LOG_EVENT_TIME
+ iStartDownloadTime.HomeTime();
+ iTotalUpdateTime = 0;
+ iNumberOfUpdates = 0;
+#endif // I__LOG_EVENT_TIME
+ StateChange( ELoadStateResponseInProgress );
+ iApiProvider->SetProgressShown( ETrue );
+ iApiProvider->Display().StartProgressAnimationL();
+
+ // in case we're in bookmarks view and a background page load is in
+ // progress, don't update the softkeys
+ if( iApiProvider->IsForeGround() && InBrowserContentView() )
+ {
+ if( CBrowserAppUi::Static()->ActiveView() )
+ {
+ CBrowserAppUi::Static()->ActiveView()->UpdateCbaL();
+ }
+ }
+ iApiProvider->WindowMgr().NotifyObserversL( EWindowLoadStart, iWindow->WindowId() );
+ break;
+ }
+ case TBrCtlDefs::EEventUrlLoadingStart:
+ {
+ STATECHECK( ELoadStateResponseInProgress )
+ iApiProvider->Display().StartProgressAnimationL();
+
+ // If the load is not initiated from the bookmarks view (ie. engine initiated
+ // via some timer on a page like cnn.com) then don't change view to content view
+ if (iBrowserInitLoad)
+ {
+ iApiProvider->SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId);
+ iBrowserInitLoad = EFalse;
+ }
+
+ // add transaction to ProgressBar
+ iApiProvider->Display().AddTransActIdL( aTransactionId );
+
+ // Display the status pane, while loading
+ if ( InBrowserContentView() && iContentView->FullScreenMode() )
+ {
+ iContentView->ShowFsStatusPane(ETrue);
+ }
+ break;
+ }
+ // first content chunk arrived
+ case TBrCtlDefs::EEventNewUrlContentArrived:
+ {
+ STATECHECK( ELoadStateResponseInProgress )
+ SetStatus( ELoadStatusFirstChunkArrived );
+ // set MaxData for this transaction
+ iApiProvider->Display().AddProgressDataL(
+ aTransactionId, 0, aSize );
+ break;
+ }
+ // additional content chunk arrived
+ case TBrCtlDefs::EEventMoreUrlContentArrived:
+ {
+ STATECHECK( ELoadStateResponseInProgress )
+ START_TIMER( t1 );
+ // set RecvdData for this transaction
+ iApiProvider->Display().AddProgressDataL(
+ aTransactionId, aSize, 0 );
+ if( iApiProvider->IsForeGround() )
+ {
+ iApiProvider->Display().NotifyProgress();
+ }
+ STOP_TIMER( t1, iNumberOfUpdates );
+ break;
+ }
+ // content is processed, new fetch is allowed.
+ // some more event may still remain
+ case TBrCtlDefs::EEventContentFinished:
+ {
+ StateChange( ELoadStateIdle );
+ if( !ContentDisplayed() )
+ {
+ SetContentDisplayed( ETrue );
+ }
+
+ if( !iApiProvider->ExitInProgress() &&
+ iApiProvider->IsForeGround() )
+ {
+ iApiProvider->Display().StopProgressAnimationL();
+ }
+ User::ResetInactivityTime();
+
+ if( LoadUrlType() == ELoadUrlTypeEmbeddedBrowserWithUrl &&
+ !LoadStatus( ELoadStatusFirstChunkArrived ) &&
+ !iApiProvider->ExitInProgress() )
+ {
+ // Don't do anything; let the embedder close the browser
+ }
+ // No content to be shown, go back to where we came from
+ else if ( !iRestoreContentFlag )
+ {
+ CBrowserAppUi::Static()->ActivateLocalViewL(
+ iApiProvider->LastActiveViewId() );
+ if( iApiProvider->IsForeGround() )
+ {
+ if ( CBrowserAppUi::Static()->ActiveView() )
+ {
+ CBrowserAppUi::Static()->ActiveView()->UpdateCbaL();
+ }
+ }
+ }
+ else
+ {
+ ContentArrivedL();
+
+ // in case we're in bookmarks view and a background page load is in
+ // progress, don't update the softkeys
+ if( iApiProvider->IsForeGround() && InBrowserContentView() )
+ {
+ if ( CBrowserAppUi::Static()->ActiveView() )
+ {
+ CBrowserAppUi::Static()->ActiveView()->UpdateCbaL();
+ }
+ }
+ }
+#ifdef I__LOG_EVENT_TIME
+ TTime endDownloadTime;
+ endDownloadTime.HomeTime();
+ TInt64 dlTime = endDownloadTime.MicroSecondsFrom(iStartDownloadTime).Int64();
+ LOG_WRITE_FORMAT( "Total download time: %d", dlTime );
+ LOG_WRITE_FORMAT( "Total update time: %d", iTotalUpdateTime );
+ LOG_WRITE_FORMAT( "Total number of updates: %d", iNumberOfUpdates );
+ if( iNumberOfUpdates )
+ {
+ LOG_WRITE_FORMAT( "Average update time: %d",
+ iTotalUpdateTime / iNumberOfUpdates );
+ }
+ if( dlTime )
+ {
+ LOG_WRITE_FORMAT( "Total update time (%% of download time): %d",
+ iTotalUpdateTime / (dlTime / 100) );
+ }
+#endif // I__LOG_EVENT_TIME
+ break;
+ }
+ // first chunk displayed, no parameter
+ case TBrCtlDefs::EEventNewContentDisplayed:
+ {
+ iApiProvider->WindowMgr().SetContentExist( ETrue );
+ SetStatus( ELoadStatusFirstChunkDisplayed );
+ SetRestoreContentFlag( ETrue );
+ ContentArrivedL();
+ if( !ContentDisplayed() )
+ {
+ SetContentDisplayed( ETrue );
+ }
+ break;
+ }
+ // additional chunk displayed, no parameter
+ case TBrCtlDefs::EEventMoreContentDisplayed:
+ {
+ SetStatus( ELoadStatusContentDisplayed );
+ SetRestoreContentFlag( ETrue );
+ ContentArrivedL();
+ break;
+ }
+ // last chunk arrived
+ case TBrCtlDefs::EEventUrlLoadingFinished:
+ {
+ iApiProvider->Display().TransActIdComplete( aTransactionId );
+ SetRestoreContentFlag( ETrue );
+ ContentArrivedL();
+ TRAP( err, iApiProvider->LogAccessToRecentUrlL( iWindow->BrCtlInterface() ) );
+ break;
+ }
+ case TBrCtlDefs::EEventLoadFinished:
+ {
+ if( !iApiProvider->ExitInProgress() &&
+ iApiProvider->IsForeGround() )
+ {
+ iApiProvider->Display().StopProgressAnimationL();
+
+ // Turn off status pane, SK, and Cba
+ // If in content view, set to fullscreen after download complete
+ if ( InBrowserContentView() && iContentView->FullScreenMode() )
+ {
+ iContentView->ShowFsStatusPane(EFalse);
+ }
+ }
+ iApiProvider->WindowMgr().NotifyObserversL( EWindowLoadStop, iWindow->WindowId() );
+ break;
+ }
+ case TBrCtlDefs::EEventAuthenticationFailed:
+ {
+ // don't add url to Adaptive Bookmarks
+ ClearStatus( ELoadStatusFirstChunkArrived );
+ break;
+ }
+ // Large file upload events
+ case TBrCtlDefs::EEventUploadStart:
+ {
+ iMaxUploadContent = aSize;
+ iWindow->DialogsProviderProxy().UploadProgressNoteL(
+ iMaxUploadContent, 0, EFalse, this );
+ break;
+ }
+ case TBrCtlDefs::EEventUploadIncrement:
+ {
+ iWindow->DialogsProviderProxy().UploadProgressNoteL(
+ iMaxUploadContent, aSize, EFalse, this );
+ break;
+ }
+ case TBrCtlDefs::EEventUploadFinished:
+ {
+ iWindow->DialogsProviderProxy().UploadProgressNoteL(
+ iMaxUploadContent, aSize, ETrue, this );
+ break;
+ }
+ default:
+ break;
+ }
+#undef STATECHECK
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::CBrowserLoadObserver()
+// ----------------------------------------------------------------------------
+//
+CBrowserLoadObserver::CBrowserLoadObserver(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ CBrowserWindow& aWindow ) :
+ iApiProvider( &aApiProvider ),
+ iContentView( &aContentView ),
+ iWindow( &aWindow ),
+ iLoadState( ELoadStateIdle ),
+ iLoadUrlType( ELoadUrlTypeOther ),
+ iStatus( 0 )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::ConstructL()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::DoStartLoad()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::DoStartLoad(
+ TBrowserLoadUrlType aLoadUrlType )
+ {
+/*
+LOG_WRITE("-------------------")
+LOG_WRITE_FORMAT(" UrlType: %d ", aLoadUrlType )
+*/
+ // __ASSERT_DEBUG instead of condition?
+ if( iLoadState == ELoadStateIdle )
+ {
+ if (LoadStatus(ELoadStatusSecurePageVisited))
+ {
+ ClearStatus();
+ SetStatus(ELoadStatusSecurePageVisited);
+ }
+ else
+ {
+ ClearStatus();
+ }
+
+ iLoadUrlType = aLoadUrlType;
+ iRestoreContentFlag = EFalse;
+ }
+
+ iBrowserInitLoad = ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::DoEndLoad()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::DoEndLoad(
+ TBool aIsUserInitiated )
+ {
+// LOG_WRITE( "Cancelling.")
+ if( aIsUserInitiated)
+ {
+ // wait for the remaining load events
+ StateChange( ELoadStateLoadDone );
+ }
+ else // don't wait for anything
+ {
+ StateChange( ELoadStateIdle );
+ }
+
+ // first arrives ContentFinished and then UrlLoadingFinished!
+ // what to do with status?
+ // updatesoftkeys() done in appui
+
+ CBrowserViewBase* view = CBrowserAppUi::Static()->ActiveView();
+ if( view ) // just to be sure
+ {
+ TVwsViewId activeViewId = view->ViewId();
+ if( activeViewId.iViewUid == KUidBrowserBookmarksViewId)
+ {
+ SetRestoreContentFlag( EFalse );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::NewTitleAvailableL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::NewTitleAvailableL()
+ {
+ if( iWindow->IsWindowActive() )
+ {
+ CBrowserViewBase* view = CBrowserAppUi::Static()->ActiveView();
+ if( view ) // just to be sure
+ {
+ TVwsViewId activeViewId = view->ViewId();
+ if( activeViewId.iViewUid == KUidBrowserContentViewId )
+ {
+ iContentView->UpdateTitleL( *iApiProvider );
+ }
+ }
+ }
+ SetRestoreContentFlag( ETrue );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::InBrowserContentView()
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserLoadObserver::InBrowserContentView()
+ {
+ CBrowserViewBase* view = CBrowserAppUi::Static()->ActiveView();
+ if( view ) // just to be sure
+ {
+ TVwsViewId activeViewId = view->ViewId();
+ return ( activeViewId.iViewUid == KUidBrowserContentViewId );
+ }
+
+ return EFalse;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserLoadObserver::ContentArrivedL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::ContentArrivedL()
+ {
+ if( iApiProvider->Connection().Connected()
+ && iApiProvider->Preferences().HttpSecurityWarningsStatSupressed() )
+ {
+ TInt secureUpdate = EAknIndicatorStateOff;
+ if( LoadStatus( ELoadStatusSecurePage ) )
+ {
+ if( LoadStatus( ELoadStatusAllItemIsSecure ) )
+ {
+ secureUpdate = EAknIndicatorStateOn;
+ }
+ }
+ iApiProvider->Display().UpdateSecureIndicatorL( secureUpdate );
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserLoadObserver::ReportDialogEvent
+//-----------------------------------------------------------------------------
+// Handles dialog provider events
+void CBrowserLoadObserver::ReportDialogEventL(
+ TInt aType,
+ TInt aFlags )
+ {
+ switch( aType )
+ {
+ case MBrowserDialogsProviderObserver::ENotifyError:
+ // aFlags contains error code
+ {
+ // If card not in deck error, go to first card of deck
+ SetRestoreContentFlag( aFlags == KBrsrWmlbrowserCardNotInDeck );
+ break;
+ }
+ case MBrowserDialogsProviderObserver::ENotifyHttpError:
+ // aFlags contains error code
+ {
+ SetRestoreContentFlag( EFalse );
+ break;
+ }
+ case MBrowserDialogsProviderObserver::EUserAuthentication:
+ {
+ SetRestoreContentFlag( aFlags ); // False == Cancelled
+ break;
+ }
+ case MBrowserDialogsProviderObserver::EConfirm:
+ // aFlags contains Cancel status
+ {
+ // if confirmation query was cancelled, step back to idle
+ if( !aFlags )
+ {
+ DoEndLoad( EFalse );
+ }
+ SetRestoreContentFlag( !aFlags );
+ break;
+ }
+ case MBrowserDialogsProviderObserver::EUploadProgress:
+ {
+ // Cancel fetching - dialog is cancelled
+ if ( aFlags == KErrCancel )
+ {
+ iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandCancelFetch +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserLoadObserver::UpdateSecureIndicatorL
+//-----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::UpdateSecureIndicatorL()
+ {
+ TBool status = LoadStatus( ELoadStatusAllItemIsSecure );
+ iApiProvider->Display().UpdateSecureIndicatorL(
+ status &&
+ !iApiProvider->Preferences().HttpSecurityWarningsStatSupressed() );
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserLoadObserver::LoadUrlType
+//-----------------------------------------------------------------------------
+//
+CBrowserLoadObserver::TBrowserLoadUrlType CBrowserLoadObserver::LoadUrlType() const
+ {
+ return iLoadUrlType;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserLoadObserver::LoadState
+//-----------------------------------------------------------------------------
+//
+CBrowserLoadObserver::TBrowserLoadState CBrowserLoadObserver::LoadState() const
+ {
+ return iLoadState;
+ }
+//-----------------------------------------------------------------------------
+// CBrowserLoadObserver::StateChange
+//-----------------------------------------------------------------------------
+//
+void CBrowserLoadObserver::StateChange( TBrowserLoadState aNextState )
+ {
+ if( ELoadStateIdle == iLoadState &&
+ iLoadState != aNextState )
+ {
+ iNewContentDisplayed = EFalse;
+ iApiProvider->WindowMgr().NotifyObserversL( EWindowCntDisplayed, iWindow->WindowId() );
+ }
+ iLoadState = aNextState;
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserLoadObserver::SetContentDisplayed
+//-----------------------------------------------------------------------------
+//
+
+void CBrowserLoadObserver::SetContentDisplayed( TBool aValue )
+ {
+ iNewContentDisplayed = aValue;
+ TRAP_IGNORE( iApiProvider->WindowMgr().NotifyObserversL( EWindowCntDisplayed, iWindow->WindowId()));
+ }
+
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserPopupEngine.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,743 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of popupblocking
+*
+*
+*/
+
+
+// INCLUDES
+#include <Uri16.h>
+#include "BrowserPopupEngine.h"
+#include <f32file.h>
+#include "logger.h"
+#include "BrowserUtil.h"
+
+// CONSTANTS
+_LIT( KWhiteListFileName, "bpopupwl.db" );
+_LIT( KWhiteTmpFileName, "bpopwtmp.db" );
+_LIT( KWhiteBkpFileName, "bpopbbkp.db" );
+_LIT( KEndMark, "\n" );
+const TInt KArrayGranularity = 10;
+const TInt KCacheSize = 32;//The maximum size of the memory cache
+const TInt KMaxDbSize = 16384;// (255/max length of the domain/+1/\n/)*64
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::CBrowserPopupEngine()
+// -----------------------------------------------------------------------------
+//
+CBrowserPopupEngine::CBrowserPopupEngine()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::~CBrowserPopupEngine
+// -----------------------------------------------------------------------------
+//
+CBrowserPopupEngine::~CBrowserPopupEngine()
+ {
+ iWhiteListFile.Flush();
+ iWhiteListFile.Close();
+ iFs.Close();
+ delete iCachedWhiteUrls;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::NewLC
+// -----------------------------------------------------------------------------
+//
+CBrowserPopupEngine* CBrowserPopupEngine::NewLC()
+ {
+ CBrowserPopupEngine* self = new (ELeave) CBrowserPopupEngine;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::NewL
+// -----------------------------------------------------------------------------
+//
+CBrowserPopupEngine* CBrowserPopupEngine::NewL()
+ {
+ CBrowserPopupEngine* self = new (ELeave) CBrowserPopupEngine;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::ConstructL()
+ {
+LOG_ENTERFN("CBrowserPopupEngine::ConstructL");
+ User::LeaveIfError(iFs.Connect());
+//open databases
+ BROWSER_LOG( ( _L( "<-Popup engine-> RFs Connected." ) ) );
+ OpenDatabaseL( &iWhiteListFile );
+ BROWSER_LOG( ( _L( "<-Popup engine-> white file opened." ) ) );
+//Create memory cache
+ iCachedWhiteUrls = new(ELeave) CDesCArrayFlat(KArrayGranularity);
+ BROWSER_LOG( ( _L( "<-Popup engine-> Cache created." ) ) );
+ iCachedWhiteUrls->Reset();
+//Load some to memory cache
+ LoadUrlsToCacheL( &iWhiteListFile, iCachedWhiteUrls, &iWhiteCacheNo);
+ BROWSER_LOG( ( _L( "<-Popup engine-> Urls loaded to cache." ) ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::OpenDatabaseL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::OpenDatabaseL(RFile* aFile)
+ {
+LOG_ENTERFN("CBrowserPopupEngine::OpenDatabaseL");
+
+ __ASSERT_DEBUG( (aFile != NULL), Util::Panic( Util::EUninitializedData ));
+
+ TInt err;
+ RFile tmpFile;
+ TPtrC fileNamePtr;
+ TPtrC bkpFileNamePtr;
+ TBuf<KMaxFileName> privatePath;
+ TBuf<KMaxFileName> listFileName;
+ TBuf<KMaxFileName> bkpFileName;
+ TBuf<KMaxFileName> tmpFileName;
+ iFs.PrivatePath( privatePath );
+ listFileName.Copy( privatePath );
+ listFileName.Append( KWhiteListFileName );
+ bkpFileName.Copy( privatePath );
+ bkpFileName.Append( KWhiteBkpFileName );
+ tmpFileName.Copy( privatePath );
+ tmpFileName.Append( KWhiteTmpFileName );
+ err = aFile->Open( iFs, listFileName, EFileWrite | EFileStream | EFileShareExclusive );
+ BROWSER_LOG( ( _L( "<-Popup engine-> File open error: %d" ), err ) );
+ if ( err == KErrNotFound )
+ {
+ err = tmpFile.Open( iFs, bkpFileName, EFileWrite | EFileShareExclusive );
+ if( err != KErrNone )
+ {
+ err = aFile->Create( iFs, listFileName, EFileWrite | EFileShareExclusive );
+ BROWSER_LOG( ( _L( "<-Popup engine-> white file created." ) ) );
+ }
+ else
+ {
+//check validity of tmp file if the last char is \n it is probably OK
+ if( !CheckDbValidity( &tmpFile ) )
+ {
+ User::LeaveIfError(
+ aFile->Create( iFs, listFileName,
+ EFileWrite | EFileShareExclusive ) );
+ }
+ else
+ {
+//rename tmp to origin
+ err = tmpFile.Rename( listFileName );
+ if(err == KErrNone)
+ {
+ tmpFile.Close();
+ User::LeaveIfError(aFile->Open( iFs, listFileName, EFileWrite | EFileStream | EFileShareExclusive ) );
+ }
+ else
+ {
+ User::LeaveIfError(
+ aFile->Create( iFs, listFileName,
+ EFileWrite | EFileShareExclusive ) );
+ }
+ }
+ }
+ }
+ else if ( err == KErrPathNotFound )
+ {
+ User::LeaveIfError( iFs.CreatePrivatePath( EDriveC ) );
+ User::LeaveIfError(
+ aFile->Create( iFs, listFileName, EFileWrite | EFileShareExclusive ) );
+ }
+ else if((err != KErrInUse)&&( err != KErrNone ))
+ {
+ User::Leave(err);
+ }
+ else if( !CheckDbValidity( aFile ) )
+ {
+//if the file is not valid delete it and create a new one
+ aFile->Close();
+ User::LeaveIfError( iFs.Delete( listFileName ) );
+ User::LeaveIfError(
+ aFile->Create( iFs, listFileName, EFileWrite | EFileShareExclusive ) );
+ }
+//delete tmp and bkp files if they exist
+ iFs.Delete( tmpFileName );
+ iFs.Delete( bkpFileName );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::AddUrlToWhiteListL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::AddUrlToWhiteListL(const TDesC& aUrl)
+ {
+LOG_ENTERFN("CBrowserPopupEngine::AddUrlToWhiteListL");
+ TUriParser16 urlParser;
+ BROWSER_LOG( ( _L( "<-Popup engine-> url to add to white list : %S" ), &aUrl ) );
+//check whether file allready exists in list
+ /*if( IsUrlOnWhiteListL( aUrl ) )
+ {
+ RDebug::Print(_L("<-Popup engine-> url is in white cache allready.\n"));
+ return;
+ }*/
+//get the domain from the url
+ urlParser.Parse(aUrl);
+ if( urlParser.IsSchemeValid() )
+ {
+//write domain to file
+ HandleUrlOrderChangeL( &iWhiteListFile, urlParser.Extract( EUriHost), EFalse, ETrue );
+//add domain to memory cache
+ AddUrlToCacheL( iCachedWhiteUrls, urlParser.Extract( EUriHost) );
+ }
+ else
+ {
+ User::Leave( KErrBadName );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::IsUrlOnWhiteListL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserPopupEngine::IsUrlOnWhiteListL(const TDesC& aUrl)
+ {
+LOG_ENTERFN("CBrowserPopupEngine::IsUrlOnWhiteListL");
+ TUriParser16 urlParser;
+ urlParser.Parse(aUrl);
+ if( !urlParser.IsSchemeValid() )
+ {
+ User::Leave( KErrBadName );
+ }
+//look for URL in memory cache
+ if( IsUrlInWhiteCacheL( urlParser.Extract( EUriHost) ) )
+ {
+ BROWSER_LOG( ( _L( "<-Popup engine-> url is in white cache." ) ) );
+ HandleUrlOrderChangeL( &iWhiteListFile, urlParser.Extract( EUriHost), ETrue, ETrue );
+ return ETrue;
+ }
+//look for URL in file
+ if( IsUrlInWhiteFileL( urlParser.Extract( EUriHost) ) )
+ {
+ HandleUrlOrderChangeL( &iWhiteListFile, urlParser.Extract( EUriHost), ETrue, ETrue );
+//if found and not in memory cache put it there
+ AddUrlToCacheL( iCachedWhiteUrls, urlParser.Extract( EUriHost) );
+ BROWSER_LOG( ( _L( "<-Popup engine-> url is in white file." ) ) );
+ return ETrue;
+ }
+ BROWSER_LOG( ( _L( "<-Popup engine-> url is not on white list." ) ) );
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::IsUrlInWhiteCacheL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserPopupEngine::IsUrlInWhiteCacheL(const TDesC& aUrl)
+ {
+ return IsUrlInCacheL( iCachedWhiteUrls, aUrl, iWhiteCacheNo );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::IsUrlInWhiteFileL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserPopupEngine::IsUrlInWhiteFileL(const TDesC& aUrl)
+ {
+ return IsUrlInFileL( &iWhiteListFile , aUrl );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::IsUrlInFileL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserPopupEngine::IsUrlInFileL(const RFile* aFile, const TDesC& aUrl)
+ {
+
+ __ASSERT_DEBUG( (aFile != NULL), Util::Panic( Util::EUninitializedData ));
+
+ HBufC8* line = HBufC8::NewL( 256 );
+ CleanupStack::PushL( line );
+ HBufC8* parturl = HBufC8::NewL( 256 );
+ CleanupStack::PushL( parturl );
+ TInt match = 1;
+ TInt pos = 0;
+ TInt result;
+ TPtrC16 linePtr16;
+ HBufC8* url8 = TDesC16ToHBufC8LC( aUrl );
+ User::LeaveIfError( aFile->Seek( ESeekStart, pos ) );
+ TPtr8 linePtr = line->Des();
+ result = aFile->Read( linePtr );
+ parturl->Des().Zero();
+ while ( ( line->Des().Length() > 0 ) && ( result == KErrNone ) )
+ {
+ if(parturl->Des().Length() != 0 )
+ {
+ pos = linePtr.Locate( '\n' );
+ parturl->Des().Append( linePtr.Left( pos ) );
+ match = url8->Des().Compare( parturl->Des() );
+ if( match == 0 )
+ {
+ CleanupStack::PopAndDestroy( 3 );
+ return ETrue;
+ }
+ parturl->Des().Zero();
+ }
+ match = linePtr.Find( url8->Des() );
+ if( match == KErrNotFound )
+ {
+ pos = linePtr.LocateReverse( '\n' );
+ if(( linePtr.Length() != pos )&&( linePtr.Length() > 1 ))
+ {
+ parturl->Des().Append( linePtr.Mid( pos + 1, linePtr.Length() - pos - 1 ));
+ }
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( 3 );
+ return ETrue;
+ }
+ result = aFile->Read( linePtr, 256 );
+ }
+ CleanupStack::PopAndDestroy( 3 );
+ User::LeaveIfError( result );
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::LoadUrlsToCacheL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::LoadUrlsToCacheL(const RFile* aFile, CDesCArrayFlat* aCacheArray, TInt* aLoadedUrlNo)
+ {
+LOG_ENTERFN( "PopupEngine::LoadUrlsToCacheL" );
+
+ __ASSERT_DEBUG( (aFile != NULL), Util::Panic( Util::EUninitializedData ));
+ __ASSERT_DEBUG( (aCacheArray != NULL), Util::Panic( Util::EUninitializedData ));
+ __ASSERT_DEBUG( (aLoadedUrlNo != NULL), Util::Panic( Util::EUninitializedData ));
+
+ TPtrC8 test;
+ HBufC8* line = HBufC8::NewL( 256 );
+ CleanupStack::PushL( line );
+ HBufC8* parturl = HBufC8::NewL( 256 );
+ CleanupStack::PushL( parturl );
+ TInt result;
+ TInt itemno = 0;
+ TInt offset = 0;
+ TInt prevOffset = 0;
+ TPtr8 linePtr = line->Des();
+ parturl->Des().Zero();
+ User::LeaveIfError( aFile->Seek( ESeekStart, offset ) );
+ result = aFile->Read( linePtr, 256 );
+ while ( ( line->Des().Length() > 0 ) &&( result == KErrNone ) && ( itemno < KCacheSize ))
+ {
+ offset = linePtr.Locate('\n' );
+ if( parturl->Length() != 0 )
+ {
+ parturl->Des().Append( linePtr.Mid( prevOffset, offset ) );
+ aCacheArray->AppendL( *TDesC8ToHBufC16LC( parturl->Des() ) );
+ CleanupStack::PopAndDestroy( );
+ prevOffset = prevOffset + offset +1;
+ itemno++;
+ if( itemno == KCacheSize )
+ {
+ break;
+ }
+ offset = ( linePtr.Right( linePtr.Length() - prevOffset ) ).Locate('\n');
+ }
+ while(( offset != KErrNotFound ) && ( itemno < KCacheSize ))
+ {
+ aCacheArray->AppendL( *TDesC8ToHBufC16LC( linePtr.Mid( prevOffset, offset ) ) );
+ CleanupStack::PopAndDestroy( );
+ prevOffset = prevOffset + offset +1;
+ itemno++;
+ offset = ( linePtr.Right( linePtr.Length() - prevOffset ) ).Locate('\n' );
+ }
+ if( prevOffset != linePtr.Length() )
+ {
+ parturl->Des().Zero();
+ parturl->Des().Append( linePtr.Right( linePtr.Length() - prevOffset ));
+ }
+ prevOffset = 0;
+ result = aFile->Read( linePtr, 256 );
+ }
+ *aLoadedUrlNo = itemno;
+ CleanupStack::PopAndDestroy( 2 );
+ User::LeaveIfError( result );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::IsUrlInCacheL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserPopupEngine::IsUrlInCacheL( const CDesCArrayFlat* aCacheArray, const TDesC& aUrl, const TInt aLoadedurlno )
+ {
+LOG_ENTERFN("CBrowserPopupEngine::IsUrlInCacheL");
+
+ __ASSERT_DEBUG( (aCacheArray != NULL), Util::Panic( Util::EUninitializedData ));
+
+ TInt itemno=0;
+ BROWSER_LOG( ( _L( "<-Popup engine-> url to find in cache : %S" ), &aUrl ) );
+ while( ( itemno < aLoadedurlno ) && ( aUrl.Compare((*aCacheArray)[ itemno ]) != 0 ) )
+ {
+ itemno++;
+ }
+ if( itemno != aLoadedurlno )
+ {
+ BROWSER_LOG( ( _L( "<-Popup engine-> url found in cache" ) ) );
+ return ETrue;
+ }
+ BROWSER_LOG( ( _L( "<-Popup engine-> url not found in cache" ) ) );
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::AddUrlToCacheL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::AddUrlToCacheL( CDesCArrayFlat* aCacheArray, const TDesC& aUrl )
+ {
+LOG_ENTERFN("CBrowserPopupEngine::AddUrlToCacheL");
+
+ __ASSERT_DEBUG( (aCacheArray != NULL), Util::Panic( Util::EUninitializedData ));
+
+ if( iWhiteCacheNo < KCacheSize )
+ {
+ aCacheArray->AppendL( aUrl );
+ iWhiteCacheNo++;
+ BROWSER_LOG( ( _L( "<-Popup engine-> url added to cache : %S" ), &aUrl ) );
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( "<-Popup engine-> url not added to cache : %S" ), &aUrl ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::TDesC16ToTPtrC8
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CBrowserPopupEngine::TDesC16ToTPtrC8(const TDesC16 &aString)
+ {
+ TPtrC8 ptr8(reinterpret_cast<const TUint8*>(aString.Ptr()),(aString.Length()*2));
+ return ptr8;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::TDesC8ToTPtrC16
+// -----------------------------------------------------------------------------
+//
+TPtrC16 CBrowserPopupEngine::TDesC8ToTPtrC16(const TDesC8 &aString)
+ {
+ TPtrC16 ptr16(reinterpret_cast<const TUint16*>(aString.Ptr()),(aString.Length()/2));
+ return ptr16;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::HandleUrlOrderChange
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::HandleUrlOrderChangeL(RFile* aFile, const TDesC& aUrl, const TBool aExists,const TBool aToAdd )
+ {
+LOG_ENTERFN("CBrowserPopupEngine::HandleUrlOrderChangeL");
+
+ __ASSERT_DEBUG( (aFile != NULL), Util::Panic( Util::EUninitializedData ));
+
+ RFile tmpFile;
+ TInt err, match;
+ HBufC8* line = HBufC8::NewL( 256 );
+ CleanupStack::PushL( line );
+ HBufC8* parturl = HBufC8::NewL( 256 );
+ CleanupStack::PushL( parturl );
+ HBufC8* url8;
+ parturl->Des().Zero();
+ TPtr8 linePtr = line->Des();
+ TPtrC8 linePtrOffset;
+ TPtrC8 tmpPtr;
+ TInt result;
+ TInt pos = 0;
+ TInt offset;
+ TInt writtenSize = 0;
+ TBuf<KMaxFileName> privatePath;
+ TBuf<KMaxFileName> listFileName;
+ TBuf<KMaxFileName> bkpFileName;
+ TBuf<KMaxFileName> tmpFileName;
+//set the filenames
+ iFs.PrivatePath( privatePath );
+ listFileName.Copy( privatePath );
+ listFileName.Append( KWhiteListFileName );
+ bkpFileName.Copy( privatePath );
+ bkpFileName.Append( KWhiteBkpFileName );
+ tmpFileName.Copy( privatePath );
+ tmpFileName.Append( KWhiteTmpFileName );
+//create a tmp file
+ err = tmpFile.Create( iFs, tmpFileName, EFileWrite | EFileShareExclusive );
+ if( err != KErrNone )
+ {
+ RDebug::Print(_L("Creation of tmp file failed.\n"));
+ BROWSER_LOG( ( _L( "<-Popup engine-> Creation of tmp file failed." ) ) );
+ User::LeaveIfError( err );
+ }
+//convert url to 8bit
+ url8 = TDesC16ToHBufC8LC( aUrl );
+//add url to tmp file
+ if( aToAdd )
+ {
+//by url removal it is not needed to write the url
+ tmpFile.Seek( ESeekStart, pos );
+ tmpFile.Write( url8->Des() );
+ tmpFile.Write( *TDesC16ToHBufC8LC( KEndMark ) );
+ CleanupStack::PopAndDestroy();
+ tmpFile.Flush();
+ writtenSize = url8->Des().Size() + 1;
+ }
+//write all urls to tmp file except the if needed
+ parturl->Des().Zero();
+ User::LeaveIfError( aFile->Seek( ESeekStart, pos ) );
+ result = aFile->Read( linePtr, 256 );
+ linePtr.Set(line->Des());
+ writtenSize += linePtr.Length();
+ if ( aExists )
+ {
+ while ( ( line->Des().Length() > 0 ) &&( result == KErrNone ))
+ {
+ offset=0;
+//if there was a part of an url check it too
+ if( parturl->Length() != 0 )
+ {
+ offset = linePtr.Locate('\n' );
+ parturl->Des().Append( linePtr.Left( offset ) );
+ match = url8->Des().Compare( parturl->Des() );
+ if( match != 0 )
+ {
+ tmpFile.Write( parturl->Des() );
+ tmpFile.Write( *TDesC16ToHBufC8LC( KEndMark ) );
+ CleanupStack::PopAndDestroy();
+ }
+ offset++;
+ parturl->Des().Zero();
+ }
+//find the new url in the old file
+ linePtrOffset.Set( linePtr.Right( linePtr.Length() - offset ));
+ match = linePtrOffset.Find( url8->Des() );
+ if( match == KErrNotFound )
+ {
+ pos = linePtrOffset.LocateReverse('\n' );
+//store the remaining part of the last url
+ if( pos != KErrNotFound )
+ {
+ if( pos == linePtrOffset.Length() -1 )
+ {
+ tmpFile.Write( linePtrOffset );
+ }
+ else
+ {
+ parturl->Des( ).Append( linePtrOffset.Mid( pos + 1, linePtrOffset.Length() - pos - 1 ));
+ tmpFile.Write( linePtrOffset.Left( pos+1 ));
+ }
+ }
+ else if( linePtrOffset.Length() > 0 )
+ {
+ parturl->Des( ).Append( linePtrOffset );
+ }
+ }
+ else
+ {
+ if( match == 0)
+ {
+ tmpFile.Write( linePtrOffset.Right( linePtrOffset.Length() - url8->Des().Length() - 1 ) );
+ }
+ else
+ {
+ pos = linePtrOffset.LocateReverse('\n' );
+ tmpFile.Write( linePtrOffset, match );
+ if( pos < linePtrOffset.Length() - 1 )
+ {
+ if( pos == linePtrOffset.Length() - url8->Des().Length() - 1 )
+ {
+ parturl->Des( ).Append( linePtrOffset.Right( url8->Des().Length() ) );
+ }
+ else//add to offset
+ {
+ tmpFile.Write( linePtrOffset.Right( linePtrOffset.Length() - match - url8->Des().Length() - 1 ) );
+ }
+ }
+ }
+ }
+ result = aFile->Read( linePtr, 256 );
+ linePtr.Set(line->Des());
+ }
+ }
+ else
+ {
+//copy the whole file
+ while ( ( line->Des().Length() > 0 ) &&( result == KErrNone ))
+ {
+ result = tmpFile.Write( linePtr );
+ if ( result == KErrNone )
+ {
+ result = aFile->Read( linePtr, 256 );
+ linePtr.Set( line->Des() );
+ writtenSize += linePtr.Length();
+ if( writtenSize > KMaxDbSize )
+ {
+ offset = linePtr.Length();
+ while( writtenSize > KMaxDbSize )
+ {
+ offset = linePtr.Left( offset ).LocateReverse('\n' );
+ writtenSize -= linePtr.Length() - offset ;
+ }
+ tmpFile.Write( linePtr, offset );
+ tmpFile.Write( *TDesC16ToHBufC8LC( KEndMark ) );
+ CleanupStack::PopAndDestroy();
+ break;
+ }
+ }
+ }
+ }
+ tmpFile.Flush();
+//rename original file to bkp
+ User::LeaveIfError( aFile->Rename( bkpFileName ) );
+ aFile->Close();
+//rename temp file to original
+ User::LeaveIfError( tmpFile.Rename( listFileName ) );
+ tmpFile.Close();
+ User::LeaveIfError( aFile->Open( iFs, listFileName, EFileWrite | EFileStream | EFileShareExclusive ) );
+//delete bkp file
+ User::LeaveIfError( iFs.Delete( bkpFileName ) );
+ CleanupStack::PopAndDestroy( 3 );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::RemoveUrlFromWhiteListL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::RemoveUrlFromWhiteListL(const TDesC& aUrl)
+ {
+LOG_ENTERFN("CBrowserPopupEngine::RemoveUrlFromWhiteListL");
+ TUriParser16 urlParser;
+ urlParser.Parse(aUrl);
+ if( !urlParser.IsSchemeValid() )
+ {
+ BROWSER_LOG( ( _L( "<-Popup engine-> Url is not valid." ) ) );
+ User::Leave( KErrBadName );
+ }
+ HandleUrlOrderChangeL( &iWhiteListFile, urlParser.Extract( EUriHost), ETrue, EFalse );
+ BROWSER_LOG( ( _L( "<-Popup engine-> Url removed from database." ) ) );
+ if( iWhiteCacheNo > 0)
+ {
+ RemoveUrlFromCacheL( iCachedWhiteUrls, urlParser.Extract( EUriHost), iWhiteCacheNo );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::RemoveUrlFromCacheL
+// -----------------------------------------------------------------------------
+//
+void CBrowserPopupEngine::RemoveUrlFromCacheL( CDesCArrayFlat* aCacheArray, const TDesC& aUrl, TInt &aCacheNo )
+ {
+LOG_ENTERFN("CBrowserPopupEngine::RemoveUrlFromCacheL");
+
+ __ASSERT_DEBUG( (aCacheArray != NULL), Util::Panic( Util::EUninitializedData ));
+
+ TInt pos;
+ TInt ret;
+ ret = aCacheArray->Find( aUrl, pos );
+ if( ret == 0 )
+ {
+ aCacheArray->Delete( pos );
+ aCacheArray->Compress();
+ aCacheNo--;
+ BROWSER_LOG( ( _L( "<-Popup engine-> Url is found in cache and removed." ) ) );
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( "<-Popup engine-> Url is not in cache." ) ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::CheckDbValidity
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserPopupEngine::CheckDbValidity(RFile* aFile)
+{
+LOG_ENTERFN("CBrowserPopupEngine::CheckDbValidity");
+
+ __ASSERT_DEBUG( (aFile != NULL), Util::Panic( Util::EUninitializedData ));
+
+ TInt size;
+ TBuf8<1> tmp;
+ aFile->Size( size );
+ if( size == 0)
+ {
+//empty file is ok
+ BROWSER_LOG( ( _L( "<-Popup engine-> File is valid." ) ) );
+ return ETrue;
+ }
+ else
+ {
+//check whether the last char is \n
+ size = -1;
+ aFile->Seek( ESeekEnd, size );
+ aFile->Read( tmp, 1 );
+ if( tmp.Compare( *TDesC16ToHBufC8LC( KEndMark ) ) == 0 )
+ {
+ CleanupStack::PopAndDestroy( );
+ BROWSER_LOG( ( _L( "<-Popup engine-> File is valid." ) ) );
+ return ETrue;
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( );
+ BROWSER_LOG( ( _L( "<-Popup engine-> File is not valid." ) ) );
+ return EFalse;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::ConvertTDesC16ToHBufC8LC
+// -----------------------------------------------------------------------------
+//
+HBufC8 *CBrowserPopupEngine::TDesC16ToHBufC8LC(const TDesC16 &string)
+ {
+ HBufC8 *buff = HBufC8::NewLC(string.Length());
+ buff->Des().Copy(string);
+ return buff;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPopupEngine::TDesC8ToHBufC16LC
+// -----------------------------------------------------------------------------
+//
+HBufC16 *CBrowserPopupEngine::TDesC8ToHBufC16LC(const TDesC8 &aString)
+ {
+ HBufC16 *buff = HBufC16::NewLC(aString.Length());
+ buff->Des().Copy(aString);
+ return buff;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserPreferences.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,2295 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* It manages WmlBrowser's preferences
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <browser_platform_variant.hrh>
+#include <s32stor.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikenv.h>
+
+#include <ApSettingsHandlerUi.h>
+
+#include <ApEngineConsts.h>
+#include <aputils.h>
+#include <ApDataHandler.h>
+#include <ApDataHandler.h>
+#include <ApAccessPointItem.h>
+#include <ApSelect.h>
+#include <ApListItem.h>
+#include <ApListItemList.h>
+#include <VpnAPEngine.h>
+#include <VpnApItem.h>
+#include <aknutils.h>
+
+#include <COEMAIN.H>
+#include <FeatMgr.h>
+#include <brctldefs.h>
+
+#include "CommsModel.h"
+#include "ApiProvider.h"
+#include "BrowserApplication.h"
+#include "BrowserPreferences.h"
+#include "Browser.hrh"
+#include "BrowserUiVariant.hrh"
+#include <bldvariant.hrh>
+#include "commonconstants.h"
+#include "BrowserAppUi.h"
+#include <browseroverriddensettings.h>
+#include "SettingsContainer.h" // for TEncoding
+#include "BrowserUtil.h" // for Util::AllocateUrlWithSchemeL
+#include "logger.h"
+
+#include "CmApplicationSettingsUi.h"
+#include <cmmanager.h>
+#include <cmdestination.h>
+
+// CONSTANTS
+#define KSearchAppUid 0x2001f3a9
+//Shared data values for Full Screen setting
+const TInt KBrowserFullScreenSettingDataSoftkeysOff = 0; //full screen
+const TInt KBrowserFullScreenSettingDataSoftkeysOn = 1; //softkeys displayed
+
+//Shared data values for Adaptive Bookmarks setting
+const TInt KBrowserAdaptiveBookmarksSettingDataOn = 0;
+const TInt KBrowserAdaptiveBookmarksSettingDataHideFolder = 1;
+const TInt KBrowserAdaptiveBookmarksSettingDataOff = 2;
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::ConstructL( TBrowserOverriddenSettings* aSettings )
+ {
+ LOG_ENTERFN("CBrowserPreferences::ConstructL");
+ iObservers = new ( ELeave ) CArrayPtrFlat< MPreferencesObserver >( 1 );
+ iCommsModel.ApDb().AddObserverL( this );
+
+ iApDH = CApDataHandler::NewLC( iCommsModel.CommsDb() );
+ CleanupStack::Pop();
+
+ iVpnEngine = CVpnApEngine::NewLC( &(iCommsModel.CommsDb()) );
+ CleanupStack::Pop();
+
+ CRepository* repository = CRepository::NewL( KCRUidBrowserUiLV );
+
+ if ( repository->Get(
+ KBrowserUiCommonFlags, iEngineLocalFeaturesBitmask ) != KErrNone )
+ {
+ // in case of problems, assume everything is off
+ iEngineLocalFeaturesBitmask = 0;
+ }
+ if ( repository->Get(
+ KBrowserUiCommonFlags, iUiLocalFeaturesBitmask ) != KErrNone )
+ {
+ // in case of problems, assume everything is off
+ iUiLocalFeaturesBitmask = 0;
+ }
+ if ( repository->Get(
+ KBrowserUiCdmaFlags, iCdmaUiLocalFeaturesBitmask ) != KErrNone )
+ {
+ // in case of problems, assume everything is off
+ iCdmaUiLocalFeaturesBitmask = 0;
+ }
+
+ delete repository;
+
+ iRepository = CRepository::NewL( KCRUidBrowser );
+
+ iEmbeddedMode = ApiProvider().IsEmbeddedModeOn(); // EFalse;
+ if( iEmbeddedMode )
+ {
+ // embedded mode doesn't allow multiple windows feature
+ iUiLocalFeaturesBitmask &= ~KBrowserMultipleWindows;
+ }
+ iOverriden = EFalse;
+
+ SetIntValueL( KBrowserConfirmedDTMFOnce, EFalse );
+
+ //Read ini values to local variables.
+ TRAP_IGNORE( RestoreSettingsL() );
+
+ // and overwrite some of them if needed
+ if ( aSettings )
+ {
+ SetOverriddenSettingsL( aSettings );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::EngineLocalFeatureSupported
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::EngineLocalFeatureSupported( const TInt aFeature ) const
+ {
+LOG_ENTERFN("CBrowserPreferences::EngineLocalFeatureSupported");
+BROWSER_LOG( ( _L( "EnginLocalFeatureSupported returns %d" ),
+ (iEngineLocalFeaturesBitmask & aFeature) ) );
+ return (iEngineLocalFeaturesBitmask & aFeature);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::UiLocalFeatureSupported
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::UiLocalFeatureSupported( const TInt aFeature ) const
+ {
+LOG_ENTERFN("CBrowserPreferences::UiLocalFeatureSupported");
+BROWSER_LOG( ( _L( "UiLocalFeatureSupported returns %d" ),
+ (iUiLocalFeaturesBitmask & aFeature) ) );
+ return (iUiLocalFeaturesBitmask & aFeature);
+ }
+
+
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::NewLC
+// ----------------------------------------------------------------------------
+//
+CBrowserPreferences* CBrowserPreferences::NewLC
+ ( MCommsModel& aCommsModel, MApiProvider& aApiProvider , TBrowserOverriddenSettings* aSettings)
+ {
+LOG_ENTERFN("CBrowserPreferences::NewLC");
+ CBrowserPreferences* result;
+ result = new ( ELeave ) CBrowserPreferences( aCommsModel, aApiProvider );
+ CleanupStack::PushL( result );
+ result->ConstructL( aSettings );
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::NewL
+// ----------------------------------------------------------------------------
+//
+CBrowserPreferences* CBrowserPreferences::NewL
+ ( MCommsModel& aCommsModel, MApiProvider& aApiProvider, TBrowserOverriddenSettings* aSettings )
+ {
+LOG_ENTERFN("CBrowserPreferences::NewL");
+ CBrowserPreferences* result;
+ result = CBrowserPreferences::NewLC( aCommsModel, aApiProvider, aSettings );
+ CleanupStack::Pop();
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::CBrowserPreferences
+// ----------------------------------------------------------------------------
+//
+CBrowserPreferences::CBrowserPreferences( MCommsModel& aCommsModel,
+ MApiProvider& aApiProvider) :
+ iApiProvider( aApiProvider ),
+ iCommsModel( aCommsModel ),
+ iEmbeddedMode( EFalse )
+ {
+ LOG_ENTERFN("CBrowserPreferences::CBrowserPreferences");
+ iAllPreferences.iCookies = EWmlSettingsCookieAllow;
+ iAllPreferences.iHttpSecurityWarnings = ETrue;
+ iAllPreferences.iDownloadsOpen = ETrue;
+ iAllPreferences.iConnDialogs = ETrue;
+ iAllPreferences.iHomePgURL = NULL;
+ iAllPreferences.iSearchPgURL = NULL;
+ iAllPreferences.iQueryOnExit = EFalse;
+ iAllPreferences.iSendReferrer = EFalse;
+ iAllPreferences.iAssocVpn = KWmlNoDefaultAccessPoint;
+ iAllPreferences.iDefaultAccessPoint = KWmlNoDefaultAccessPoint;
+ iAllPreferences.iDefaultSnapId = KWmlNoDefaultSnapId;
+ iAllPreferences.iDefaultAPDetails = NULL;
+ iAllPreferences.iShortCutFuncHomePg = NULL;
+ iAllPreferences.iShortCutFuncBkMark = NULL;
+ iAllPreferences.iShortCutFuncFindKeyWord = NULL;
+ iAllPreferences.iShortCutFuncPrePage = NULL;
+ iAllPreferences.iShortCutFuncSwitchWin = NULL;
+ iAllPreferences.iShortCutFuncMiniImage = NULL;
+ iAllPreferences.iShortCutFuncFullScreen = NULL;
+ iAllPreferences.iShortCutFuncGoAddr = NULL;
+ iAllPreferences.iShortCutFuncZoomIn = NULL;
+ iAllPreferences.iShortCutFuncZoomOut = NULL;
+ iAllPreferences.iShortCutFuncZoomMode = NULL;
+ iAllPreferences.iSearch = EFalse;
+ iAllPreferences.iService = EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::~CBrowserPreferences
+// ----------------------------------------------------------------------------
+//
+CBrowserPreferences::~CBrowserPreferences()
+ {
+ LOG_ENTERFN("CBrowserPreferences::~CBrowserPreferences");
+ delete iObservers;
+ delete iApDH;
+ delete iVpnEngine;
+ delete iVpnItem;
+ iCommsModel.ApDb().RemoveObserver( this );
+ delete iSelfDownloadContentTypes;
+ iSelfDownloadContentTypes = 0;
+
+ // All Settings struct - for observers
+ delete iAllPreferences.iSearchPgURL;
+ iAllPreferences.iSearchPgURL = NULL;
+ delete iAllPreferences.iHomePgURL;
+ iAllPreferences.iHomePgURL = NULL;
+ delete iAllPreferences.iDefaultAPDetails;
+ delete iRepository;
+
+ // For short cut functions
+ delete iAllPreferences.iShortCutFuncHomePg;
+ iAllPreferences.iShortCutFuncHomePg = NULL;
+
+ delete iAllPreferences.iShortCutFuncBkMark;
+ iAllPreferences.iShortCutFuncBkMark = NULL;
+
+ delete iAllPreferences.iShortCutFuncFindKeyWord;
+ iAllPreferences.iShortCutFuncFindKeyWord = NULL;
+
+ delete iAllPreferences.iShortCutFuncPrePage;
+ iAllPreferences.iShortCutFuncPrePage = NULL;
+
+ delete iAllPreferences.iShortCutFuncSwitchWin;
+ iAllPreferences.iShortCutFuncSwitchWin = NULL;
+
+ delete iAllPreferences.iShortCutFuncMiniImage;
+ iAllPreferences.iShortCutFuncMiniImage = NULL;
+
+ delete iAllPreferences.iShortCutFuncFullScreen;
+ iAllPreferences.iShortCutFuncFullScreen = NULL;
+
+ delete iAllPreferences.iShortCutFuncGoAddr;
+ iAllPreferences.iShortCutFuncGoAddr = NULL;
+
+ delete iAllPreferences.iShortCutFuncZoomIn;
+ iAllPreferences.iShortCutFuncZoomIn = NULL;
+
+ delete iAllPreferences.iShortCutFuncZoomOut;
+ iAllPreferences.iShortCutFuncZoomOut = NULL;
+
+ delete iAllPreferences.iShortCutFuncZoomMode;
+ iAllPreferences.iShortCutFuncZoomMode = NULL;
+
+ delete iAllPreferences.iUrlSuffixList;
+ iAllPreferences.iUrlSuffixList = NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::AddObserverL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::AddObserverL( MPreferencesObserver* anObserver )
+ {
+ LOG_ENTERFN("CBrowserPreferences::AddObserverL");
+ iObservers->AppendL( anObserver );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::RemoveObserver
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::RemoveObserver( MPreferencesObserver* anObserver )
+ {
+ LOG_ENTERFN("CBrowserPreferences::RemoveObserver");
+ TInt i( 0 );
+ TInt count = iObservers->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iObservers->At( i ) == anObserver )
+ {
+ iObservers->Delete( i );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::NotifyObserversL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::NotifyObserversL( TPreferencesEvent aEvent,
+ TBrCtlDefs::TBrCtlSettings aSettingType = TBrCtlDefs::ESettingsUnknown )
+ {
+ LOG_ENTERFN("CBrowserPreferences::NotifyObserversL");
+ TInt i;
+ TInt count = iObservers->Count();
+
+ // Passed struct of all preferences to observers
+ for ( i = 0; i < count; i++ )
+ {
+ iObservers->At( i )->HandlePreferencesChangeL(
+ aEvent,
+ iAllPreferences,
+ aSettingType );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::RestoreSettingsL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::RestoreSettingsL()
+ {
+ LOG_ENTERFN("CBrowserPreferences::RestoreSettingsL");
+//
+// READ USER VARIATED SETTINGS
+//
+
+ //Read auto load content setting
+ iAllPreferences.iAutoLoadContent = GetIntValue( KBrowserNGImagesEnabled );
+
+ //Read font size
+ iAllPreferences.iFontSize = GetIntValue( KBrowserNGFontSize );
+
+ // Read Allow Cookies setting
+ if ( GetIntValue( KBrowserNGCookiesEnabled ) )
+ {
+ iAllPreferences.iCookies = EWmlSettingsCookieAllow;
+ }
+ else
+ {
+ iAllPreferences.iCookies = EWmlSettingsCookieReject;
+ }
+
+ // Read ECMA Setting
+ if ( GetIntValue( KBrowserNGECMAScriptSupport ) )
+ {
+ iAllPreferences.iEcma = EWmlSettingsECMAEnable;
+ }
+ else
+ {
+ iAllPreferences.iEcma = EWmlSettingsECMADisable;
+ }
+
+ // Read IMEI Setting
+ if ( IMEI_NOTIFICATION )
+ {
+ if ( GetIntValue( KBrowserIMEINotification ) )
+ {
+ iAllPreferences.iIMEINotification = EWmlSettingsIMEIEnable;
+ }
+ else
+ {
+ iAllPreferences.iIMEINotification = EWmlSettingsIMEIDisable;
+ }
+ }
+
+ TInt encoding;
+ iRepository->Get( KBrowserNGEncoding, encoding );
+ iAllPreferences.iEncoding = ( TUint32 ) encoding;
+
+ iAllPreferences.iScriptLog = GetIntValue( KBrowserNGScriptLog ) ;
+
+ //Read Fullscreen setting
+ TInt value;
+ value = GetIntValue ( KBrowserNGFullScreen );
+
+ switch ( value )
+ {
+ case KBrowserFullScreenSettingDataSoftkeysOff:
+ {
+ iAllPreferences.iFullScreen = EWmlSettingsFullScreenFullScreen;
+ break;
+ }
+
+ case KBrowserFullScreenSettingDataSoftkeysOn:
+ {
+ iAllPreferences.iFullScreen = EWmlSettingsFullScreenSoftkeysOnly;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ iAllPreferences.iSendReferrer = (TBool) GetIntValue( KBrowserSendReferrerHeader );
+
+
+ //Read adaptive bookmarks setting
+ if (ADAPTIVEBOOKMARKS)
+ {
+ TInt adBm;
+ adBm = GetIntValue ( KBrowserNGAdaptiveBookmarks );
+
+ switch(adBm)
+ {
+ case (KBrowserAdaptiveBookmarksSettingDataOn):
+ {
+ iAllPreferences.iAdaptiveBookmarks =
+ EWmlSettingsAdaptiveBookmarksOn;
+ break;
+ }
+ case (KBrowserAdaptiveBookmarksSettingDataHideFolder):
+ {
+ iAllPreferences.iAdaptiveBookmarks =
+ EWmlSettingsAdaptiveBookmarksHideFolder;
+ break;
+ }
+ case (KBrowserAdaptiveBookmarksSettingDataOff):
+ {
+ iAllPreferences.iAdaptiveBookmarks =
+ EWmlSettingsAdaptiveBookmarksOff;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+//
+// READ OPERATOR VARIATED SETTINGS
+//
+
+ iAllPreferences.iHomePgType =
+ ( TWmlSettingsHomePage ) GetIntValue( KBrowserNGHomepageType );
+ iAllPreferences.iPageOverview = GetIntValue (
+ KBrowserNGPageOverview );
+ iAllPreferences.iBackList = GetIntValue (
+ KBrowserNGBackList );
+ iAllPreferences.iAutoRefresh = GetIntValue (
+ KBrowserNGAutoRefresh );
+
+ if(PROGRESSIVE_DOWNLOAD)
+ {
+ iAllPreferences.iDownloadsOpen = GetIntValue ( KBrowserNGOpenDownloads );
+ }
+ else
+ {
+ iAllPreferences.iDownloadsOpen = EFalse;
+ }
+
+ //Read suppress security UI setting
+ iAllPreferences.iHTTPSecuritySupressed = GetIntValue ( KBrowserSecurityUI );
+
+ //Read show connection queries setting
+ iAllPreferences.iConnDialogs = GetIntValue( KBrowserConnectionDialogs );
+
+ // Read HTTP security warnings setting
+ // value 0 :we don't want to see sec warning because they're supressed
+ // value 1 : want to see sec warning and warnings are enabled
+ iAllPreferences.iHttpSecurityWarnings = GetIntValue (
+ KBrowserNGShowSecurityWarnings );
+
+ // Media Volume uses different SD ini. Revert to Browser SD ini after use
+ iAllPreferences.iMediaVolume = GetIntValue( KBrowserMediaVolumeControl );
+
+ // Pop up Blocking
+ iAllPreferences.iPopupBlocking = GetIntValue( KBrowserNGPopupBlocking );
+
+ // Form Data Saving
+ iAllPreferences.iFormDataSaving = (TWmlSettingsFormData) GetIntValue( KBrowserFormDataSaving );
+
+ // Access Keys
+ iAllPreferences.iAccessKeys = (TBool) GetIntValue( KBrowserNGAccessKeys );
+
+ // The leaving functions come at the end
+
+ // Search Page
+ if ( iAllPreferences.iSearchPgURL )
+ {
+ delete iAllPreferences.iSearchPgURL;
+ iAllPreferences.iSearchPgURL = NULL;
+ }
+
+ // Web reed feeds settings - begin
+ iAllPreferences.iAutomaticUpdatingAP = GetIntValue( KBrowserNGAutomaticUpdatingAccessPoint );
+
+ iAllPreferences.iAutomaticUpdatingWhileRoaming = GetIntValue( KBrowserNGAutomaticUpdatingWhileRoaming );
+
+ // Web reed feeds settings - end
+ if (CBrowserAppUi::Static()->OrientationCanBeChanged() )
+ {
+ iAllPreferences.iRotateDisplay = GetIntValue( KBrowserNGRotateDisplay );
+ }
+ else
+ {
+ iAllPreferences.iRotateDisplay = 0;
+ }
+ if ( iAllPreferences.iUrlSuffixList )
+ {
+ delete iAllPreferences.iUrlSuffixList;
+ iAllPreferences.iUrlSuffixList = NULL;
+ }
+ iAllPreferences.iUrlSuffixList = HBufC::NewL( KUrlSuffixMaxLength );
+ TPtr suffix = iAllPreferences.iUrlSuffixList->Des();
+ GetStringValueL( KBrowserUrlSuffix, KBrowserUrlSuffix, suffix );
+
+ // If something fails for an option, the default value will be used
+ TInt ap;
+
+ // Read Accesss point selection mode for advanced settings
+#ifdef BRDO_OCC_ENABLED_FF
+ const TInt selectionMode = GetIntValue( KBrowserOccAccessPointSelectionMode ); //2 Destination
+ BROWSER_LOG( ( _L( " OCC Ap Selection mode : %d" ), selectionMode ) );
+#else
+ const TInt selectionMode = GetIntValue( KBrowserAccessPointSelectionMode );
+#endif
+
+ switch ( selectionMode )
+ {
+ case EBrowserCenRepApSelModeUserDefined:
+ {
+ iAllPreferences.iAccessPointSelectionMode = EConnectionMethod;
+ break;
+ }
+ case EBrowserCenRepApSelModeAlwaysAsk:
+ {
+ iAllPreferences.iAccessPointSelectionMode = EAlwaysAsk;
+ break;
+ }
+ case EBrowserCenRepApSelModeDestination:
+ {
+ iAllPreferences.iAccessPointSelectionMode = EDestination;
+ break;
+ }
+ default: // Default to Always ask.
+ {
+ iAllPreferences.iAccessPointSelectionMode = EAlwaysAsk;
+ break;
+ }
+ }
+
+ //we differentiate by connecting with a Snap or an access point
+ if (iAllPreferences.iAccessPointSelectionMode == EConnectionMethod)
+ {
+ //Read default AP setting
+ ap = GetIntValue( KBrowserDefaultAccessPoint );
+
+ SetDefaultAccessPointL( ap );
+ }
+ else if (iAllPreferences.iAccessPointSelectionMode == EDestination)
+ {
+#ifdef BRDO_OCC_ENABLED_FF
+ iAllPreferences.iDefaultSnapId = GetIntValue( KBrowserOccNGDefaultSnapId );
+ if ( iAllPreferences.iDefaultSnapId == 0)
+ {
+ BROWSER_LOG( ( _L( " Cenrep OCC Default Snap id is : %d" ), iAllPreferences.iDefaultSnapId ) );
+ TUint32 snapId(0);
+ RCmManager manager;
+ manager.OpenLC();
+ RArray<TUint32> destIdArray;
+ CleanupClosePushL(destIdArray);
+ manager.AllDestinationsL( destIdArray );
+ const TInt count = destIdArray.Count();
+ for ( TInt i = 0; i < count && !snapId; i++ )
+ {
+ RCmDestination dests = manager.DestinationL( destIdArray[i] );
+ CleanupClosePushL( dests );
+ if ( CMManager::TSnapPurpose( dests.MetadataL( CMManager::ESnapMetadataPurpose ) )
+ == CMManager::ESnapPurposeInternet )
+ {
+ BROWSER_LOG( ( _L( " Using Internet snap for connection" ) ) );
+ snapId = destIdArray[i];
+ SetDefaultSnapId(snapId);
+ }
+ CleanupStack::PopAndDestroy( 1 ); //dests
+ }
+ CleanupStack::PopAndDestroy( 2 ); // destIdArray, manager
+ }
+#else
+ iAllPreferences.iDefaultSnapId = GetIntValue( KBrowserNGDefaultSnapId );
+#endif
+ }
+
+ // For Short Cut keys
+ if ( iAllPreferences.iShortCutFuncHomePg )
+ {
+ delete iAllPreferences.iShortCutFuncHomePg;
+ iAllPreferences.iShortCutFuncHomePg = NULL;
+ }
+ iAllPreferences.iShortCutFuncHomePg = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func1 = iAllPreferences.iShortCutFuncHomePg->Des();
+ GetStringValueL( KBrowserNGShortCutFuncHomePg, KShortCutFuncStringLength, func1 );
+
+ if ( iAllPreferences.iShortCutFuncBkMark )
+ {
+ delete iAllPreferences.iShortCutFuncBkMark;
+ iAllPreferences.iShortCutFuncBkMark = NULL;
+ }
+ iAllPreferences.iShortCutFuncBkMark = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func2 = iAllPreferences.iShortCutFuncBkMark->Des();
+ GetStringValueL( KBrowserNGShortCutFuncBkMark, KShortCutFuncStringLength, func2 );
+
+ if ( iAllPreferences.iShortCutFuncFindKeyWord )
+ {
+ delete iAllPreferences.iShortCutFuncFindKeyWord;
+ iAllPreferences.iShortCutFuncFindKeyWord = NULL;
+ }
+ iAllPreferences.iShortCutFuncFindKeyWord = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func3 = iAllPreferences.iShortCutFuncFindKeyWord->Des();
+ GetStringValueL( KBrowserNGShortCutFuncFindKeyWord, KShortCutFuncStringLength, func3 );
+
+ if ( iAllPreferences.iShortCutFuncPrePage )
+ {
+ delete iAllPreferences.iShortCutFuncPrePage;
+ iAllPreferences.iShortCutFuncPrePage = NULL;
+ }
+ iAllPreferences.iShortCutFuncPrePage = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func4 = iAllPreferences.iShortCutFuncPrePage->Des();
+ GetStringValueL( KBrowserNGShortCutFuncPrePage, KShortCutFuncStringLength, func4 );
+
+ if ( iAllPreferences.iShortCutFuncSwitchWin )
+ {
+ delete iAllPreferences.iShortCutFuncSwitchWin;
+ iAllPreferences.iShortCutFuncSwitchWin = NULL;
+ }
+ iAllPreferences.iShortCutFuncSwitchWin = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func5 = iAllPreferences.iShortCutFuncSwitchWin->Des();
+ GetStringValueL( KBrowserNGShortCutFuncSwitchWin, KShortCutFuncStringLength, func5 );
+
+ if ( iAllPreferences.iShortCutFuncMiniImage )
+ {
+ delete iAllPreferences.iShortCutFuncMiniImage;
+ iAllPreferences.iShortCutFuncMiniImage = NULL;
+ }
+ iAllPreferences.iShortCutFuncMiniImage = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func6 = iAllPreferences.iShortCutFuncMiniImage->Des();
+ GetStringValueL( KBrowserNGShortCutFuncMiniImage, KShortCutFuncStringLength, func6 );
+
+ if ( iAllPreferences.iShortCutFuncGoAddr )
+ {
+ delete iAllPreferences.iShortCutFuncGoAddr;
+ iAllPreferences.iShortCutFuncGoAddr = NULL;
+ }
+ iAllPreferences.iShortCutFuncGoAddr = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func7 = iAllPreferences.iShortCutFuncGoAddr->Des();
+ GetStringValueL( KBrowserNGShortCutFuncGoAddr, KShortCutFuncStringLength, func7 );
+
+ if ( iAllPreferences.iShortCutFuncZoomIn )
+ {
+ delete iAllPreferences.iShortCutFuncZoomIn;
+ iAllPreferences.iShortCutFuncZoomIn = NULL;
+ }
+ iAllPreferences.iShortCutFuncZoomIn = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func8 = iAllPreferences.iShortCutFuncZoomIn->Des();
+ GetStringValueL( KBrowserNGShortCutFuncZoomIn, KShortCutFuncStringLength, func8 );
+
+ if ( iAllPreferences.iShortCutFuncZoomOut )
+ {
+ delete iAllPreferences.iShortCutFuncZoomOut;
+ iAllPreferences.iShortCutFuncZoomOut = NULL;
+ }
+ iAllPreferences.iShortCutFuncZoomOut = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func9 = iAllPreferences.iShortCutFuncZoomOut->Des();
+ GetStringValueL( KBrowserNGShortCutFuncZoomOut, KShortCutFuncStringLength, func9 );
+
+/*
+ if ( iAllPreferences.iShortCutFuncZoomMode )
+ {
+ delete iAllPreferences.iShortCutFuncZoomMode;
+ iAllPreferences.iShortCutFuncZoomMode = NULL;
+ }
+ iAllPreferences.iShortCutFuncZoomMode = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func11 = iAllPreferences.iShortCutFuncZoomMode->Des();
+ GetStringValueL( KBrowserNGShortCutFuncZoomMode, KShortCutFuncStringLength, func11 );
+*/
+
+ if ( iAllPreferences.iShortCutFuncFullScreen )
+ {
+ delete iAllPreferences.iShortCutFuncFullScreen;
+ iAllPreferences.iShortCutFuncFullScreen = NULL;
+ }
+ iAllPreferences.iShortCutFuncFullScreen = HBufC::NewL( KShortCutFuncStringLength );
+ TPtr func10 = iAllPreferences.iShortCutFuncFullScreen->Des();
+ GetStringValueL( KBrowserNGShortCutFuncFullScreen, KShortCutFuncStringLength, func10 );
+
+ // For Configuring Toolbar Buttons
+ iAllPreferences.iToolbarOnOff = GetIntValue( KToolbarOnOff );
+
+ iAllPreferences.iToolbarButton1Cmd = GetIntValue( KToolbarButton1Cmd );
+ iAllPreferences.iToolbarButton2Cmd = GetIntValue( KToolbarButton2Cmd );
+ iAllPreferences.iToolbarButton3Cmd = GetIntValue( KToolbarButton3Cmd );
+ iAllPreferences.iToolbarButton4Cmd = GetIntValue( KToolbarButton4Cmd );
+ iAllPreferences.iToolbarButton5Cmd = GetIntValue( KToolbarButton5Cmd );
+ iAllPreferences.iToolbarButton6Cmd = GetIntValue( KToolbarButton6Cmd );
+ iAllPreferences.iToolbarButton7Cmd = GetIntValue( KToolbarButton7Cmd );
+
+ // For configuring Shortcut Keys
+ iAllPreferences.iShortcutKeysForQwerty = GetIntValue( KShortcutKeysForQwerty );
+
+ iAllPreferences.iShortcutKey1Cmd = GetIntValue( KShortcutKey1Cmd );
+ iAllPreferences.iShortcutKey2Cmd = GetIntValue( KShortcutKey2Cmd );
+ iAllPreferences.iShortcutKey3Cmd = GetIntValue( KShortcutKey3Cmd );
+ iAllPreferences.iShortcutKey4Cmd = GetIntValue( KShortcutKey4Cmd );
+ iAllPreferences.iShortcutKey5Cmd = GetIntValue( KShortcutKey5Cmd );
+ iAllPreferences.iShortcutKey6Cmd = GetIntValue( KShortcutKey6Cmd );
+ iAllPreferences.iShortcutKey7Cmd = GetIntValue( KShortcutKey7Cmd );
+ iAllPreferences.iShortcutKey8Cmd = GetIntValue( KShortcutKey8Cmd );
+ iAllPreferences.iShortcutKey9Cmd = GetIntValue( KShortcutKey9Cmd );
+ iAllPreferences.iShortcutKey0Cmd = GetIntValue( KShortcutKey0Cmd );
+ iAllPreferences.iShortcutKeyStarCmd = GetIntValue( KShortcutKeyStarCmd );
+ iAllPreferences.iShortcutKeyHashCmd = GetIntValue( KShortcutKeyHashCmd );
+
+
+ iAllPreferences.iZoomLevelMin = GetIntValue( KBrowserNGZoomMin );
+ iAllPreferences.iZoomLevelMax = GetIntValue( KBrowserNGZoomMax );
+ iAllPreferences.iZoomLevelDefault = GetIntValue( KBrowserNGZoomDefault );
+
+ iAllPreferences.iMaxRecentUrlsToShow = GetIntValue( KBrowserNGMaxRecentUrls );
+
+ RApaLsSession aLs;
+ User::LeaveIfError(aLs.Connect());
+ CleanupClosePushL(aLs);
+ iAllPreferences.iSearch = GetSearchFeatureStatusL( KBrowserSearch, aLs );
+ iAllPreferences.iService = GetSearchFeatureStatusL( KBrowserServices, aLs );
+ CleanupStack::PopAndDestroy(&aLs);
+
+ iAllPreferences.iCursorShowMode = (TBrCtlDefs::TCursorSettings)GetIntValue( KBrowserCursorShowMode );
+ iAllPreferences.iEnterKeyMode = (TBrCtlDefs::TEnterKeySettings)GetIntValue( KBrowserEnterKeyMode );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::AllPreferencesL
+// ----------------------------------------------------------------------------
+//
+const TPreferencesValues& CBrowserPreferences::AllPreferencesL()
+ {
+ return iAllPreferences;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::VpnDataL
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::VpnDataL( TUint aDefaultAccessPoint, CVpnApItem& aVpnItem )
+ {
+ TBool ret( EFalse );
+
+ if( iVpnEngine->IsVpnApL( aDefaultAccessPoint ) )
+ {
+ iVpnEngine->VpnDataL( aDefaultAccessPoint, aVpnItem );
+ ret = ETrue;
+ }
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetDefaultAccessPointL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetDefaultAccessPointL( TUint aDefaultAccessPoint, TUint aAssocVpn )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetDefaultAccessPointL");
+ BROWSER_LOG( ( _L( " aDefaultAccessPoint: %u" ), aDefaultAccessPoint ) );
+
+ //get the connection identifier based on the connection type
+ switch ( AccessPointSelectionMode() )
+ {
+ //get the destination identifyer based on the snap Id
+ case EDestination:
+ {
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SetDefaultAccessPointL EDestination" ) ) );
+ RCmManager cmManager;
+ cmManager.OpenL();
+
+ // if user-defined destination then check that destination still exists.
+ // if it doesn't, reset access point to always ask and homepage to blank access point home page.
+ TUint snapId = iAllPreferences.iDefaultSnapId;
+ if (snapId != KWmlNoDefaultSnapId)
+ {
+ TRAPD(err, RCmDestination dest = cmManager.DestinationL( snapId ));
+ if (err != KErrNone)
+ {
+ aDefaultAccessPoint = KWmlNoDefaultAccessPoint;
+ aAssocVpn = KWmlNoDefaultAccessPoint;
+
+ SetAccessPointSelectionModeL(EAlwaysAsk );
+ if (iAllPreferences.iHomePgType == EWmlSettingsHomePageAccessPoint)
+ {
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr ptr( buf->Des() );
+ // read user defined home page from SD shouldn't get any error
+ HomePageUrlL( ptr, ETrue );
+ SetHomePageUrlL(ptr);
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ }
+ cmManager.Close();
+
+ break;
+ }
+
+ //if connecting with Iap Id
+ case EConnectionMethod:
+ {
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SetDefaultAccessPointL EConnectionMethod" ) ) );
+ // if user-defined access point then check that access point still exists.
+ // if it doesn't, reset access point to always ask and homepage to blank access point home page.
+ CApListItem* apItem = iCommsModel.AccessPointsL()->ItemForUid( aDefaultAccessPoint );
+ if (apItem == NULL)
+ {
+ TBool isVpn = EFalse;
+ TRAPD(leaveCode, isVpn = iVpnEngine->IsVpnApL( aDefaultAccessPoint ))
+ if ( leaveCode == KErrNone )
+ {
+ if ( isVpn )
+ {
+ BROWSER_LOG( ( _L( " This is VPN AP which has a snap in it" ) ) );
+ break;
+ }
+ }
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SetDefaultAccessPointL Ap is not exist, Setting to Always Ask" ) ) );
+ aDefaultAccessPoint = KWmlNoDefaultAccessPoint;
+ aAssocVpn = KWmlNoDefaultAccessPoint;
+ delete iAllPreferences.iDefaultAPDetails;
+ iAllPreferences.iDefaultAPDetails = NULL;
+ SetAccessPointSelectionModeL(EAlwaysAsk );
+ if (iAllPreferences.iHomePgType == EWmlSettingsHomePageAccessPoint)
+ {
+ HBufC* buf = HBufC::NewLC( KMaxHomePgUrlLength ); // cleanupstack
+ TPtr ptr( buf->Des() );
+ // read user defined home page from SD shouldn't get any error
+ HomePageUrlL( ptr, ETrue );
+ SetHomePageUrlL(ptr);
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+
+ // check web feeds for deleted access point
+ CApListItem* apItem = iCommsModel.AccessPointsL()->ItemForUid( iAllPreferences.iAutomaticUpdatingAP );
+ if (apItem == NULL)
+ {
+ SetAutomaticUpdatingApL( KWmlNoDefaultAccessPoint );
+ }
+ bool checkAPMode = ( (iAllPreferences.iAccessPointSelectionMode != EDestination) && (iAllPreferences.iAccessPointSelectionMode != EAlwaysAsk) );
+ if( ( KWmlNoDefaultAccessPoint != aDefaultAccessPoint ) && ( checkAPMode ) && iVpnEngine->IsVpnApL( aDefaultAccessPoint ) )
+ {
+ delete iVpnItem;
+ iVpnItem = NULL;
+
+ iVpnItem = CVpnApItem::NewLC();
+ CleanupStack::Pop();
+
+ iVpnEngine->VpnDataL( aDefaultAccessPoint, *iVpnItem );
+
+ TUint32 ass( aDefaultAccessPoint );
+ iVpnItem->ReadUint( EApVpnWapAccessPointID, ass );
+ aAssocVpn = ass;
+
+ // get real WAP id
+ TUint32 ap( aDefaultAccessPoint );
+ iVpnItem->ReadUint( EApVpnRealWapID, ap );
+ aDefaultAccessPoint = ap;
+ }
+ BROWSER_LOG( ( _L( "VPN OK" ) ) );
+ iAllPreferences.iDefaultAccessPoint = aDefaultAccessPoint;
+ iAllPreferences.iAssocVpn = aAssocVpn;
+
+ CApAccessPointItem* api = CApAccessPointItem::NewLC();//maybe we can optimise this too
+ BROWSER_LOG( ( _L( "CApAccessPointItem OK" ) ) );
+ TInt err;
+ if ( iOverridenSettings )
+ {
+ iCustomAp = iOverridenSettings->GetBrowserSetting(
+ EBrowserOverSettingsCustomAp );
+ }
+ if ( ( iOverridenSettings ) && iCustomAp )
+ {
+ TRAP( err, iApDH->AccessPointDataL( iCustomAp, *api ) );
+ if ( err != KErrNone )
+ {
+ iCustomAp = 0;
+ TRAP( err, iApDH->AccessPointDataL( iAllPreferences.iDefaultAccessPoint, *api ) );
+ }
+ }
+ else
+ {
+ TRAP( err, iApDH->AccessPointDataL(
+ iAllPreferences.iDefaultAccessPoint, *api ) );
+ }
+ BROWSER_LOG( ( _L( " AccessPointDataL: %d" ), err ) );
+ //Reset default AP pointer and delete the data
+ delete iAllPreferences.iDefaultAPDetails;
+ iAllPreferences.iDefaultAPDetails = NULL;
+ if ( err != KErrNone )// Set it to always ask
+ {
+ iAllPreferences.iDefaultAccessPoint = KWmlNoDefaultAccessPoint;
+ iAllPreferences.iDefaultAPDetails = NULL;
+ CleanupStack::PopAndDestroy( api );
+ }
+ else
+ {
+ iAllPreferences.iDefaultAPDetails = api;//store new default accesspoint details
+ CleanupStack::Pop( ); // api
+ }
+ /*
+ * If VPN set VPN AP ID to default access point!
+ */
+ if( KWmlNoDefaultAccessPoint != iAllPreferences.iAssocVpn )
+ {
+ iAllPreferences.iDefaultAccessPoint = iAllPreferences.iAssocVpn;
+ }
+ if( !iEmbeddedMode )
+ {
+ //Store ini value / gateway
+ SetIntValueL ( KBrowserDefaultAccessPoint,
+ iAllPreferences.iDefaultAccessPoint );
+ }
+ NotifyObserversL( EPreferencesItemChange );
+
+ // LOG_LEAVEFN("CBrowserPreferences::SetDefaultAccessPointL");
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetDefaultSnapId: DestNetChange
+// ----------------------------------------------------------------------------
+//
+ void CBrowserPreferences::SetDefaultSnapId (TUint aSnapId)
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetDefaultSnapId");
+ //storing the value of the default snap ID
+ iAllPreferences.iDefaultSnapId = aSnapId;
+#ifdef BRDO_OCC_ENABLED_FF
+ SetIntValueL ( KBrowserOccNGDefaultSnapId, iAllPreferences.iDefaultSnapId );
+ BROWSER_LOG( ( _L( " Setting OCC Snap id : %d" ), iAllPreferences.iDefaultSnapId ) );
+#else
+ SetIntValueL ( KBrowserNGDefaultSnapId,
+ iAllPreferences.iDefaultSnapId );
+#endif
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetAutoLoadContentL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetAutoLoadContentL( TInt aAutoLoadContent )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetAutoLoadContentL");
+ if ( aAutoLoadContent != iAllPreferences.iAutoLoadContent )
+ {
+ iAllPreferences.iAutoLoadContent = aAutoLoadContent;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGImagesEnabled,
+ iAllPreferences.iAutoLoadContent );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsAutoLoadImages );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetPageOverviewL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetPageOverviewL( TBool aPageOverview )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetPageOverviewL");
+ if ( aPageOverview != iAllPreferences.iPageOverview )
+ {
+ iAllPreferences.iPageOverview = aPageOverview;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGPageOverview,
+ iAllPreferences.iPageOverview );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsPageOverview);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetBackListL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetBackListL( TBool aBackList )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetBackListL");
+ if ( aBackList != iAllPreferences.iBackList )
+ {
+ iAllPreferences.iBackList = aBackList;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGBackList,
+ iAllPreferences.iBackList );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsBackList);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetAutoRefreshL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetAutoRefreshL( TBool aAutoRefresh )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetAutoRefreshL");
+ if ( aAutoRefresh != iAllPreferences.iAutoRefresh )
+ {
+ iAllPreferences.iAutoRefresh = aAutoRefresh;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGAutoRefresh,
+ iAllPreferences.iAutoRefresh );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsAutoRefresh);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetTextWrapL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetTextWrapL( TBool aTextWrap )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetTextWrapL");
+ if ( aTextWrap != iAllPreferences.iTextWrap )
+ {
+ iAllPreferences.iTextWrap = aTextWrap;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if ( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserTextWrapEnabled, iAllPreferences.iTextWrap );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsTextWrapEnabled );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetFontSizeL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetFontSizeL( TInt aFontSize )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetFontSizeL");
+ if ( aFontSize != iAllPreferences.iFontSize )
+ {
+ iAllPreferences.iFontSize = aFontSize;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGFontSize, iAllPreferences.iFontSize );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsFontSize );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetEncodingL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetEncodingL( TUint32 aEncoding )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetEncodingL");
+ if ( aEncoding != iAllPreferences.iEncoding )
+ {
+ iAllPreferences.iEncoding = aEncoding;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL ( KBrowserNGEncoding,
+ ( TInt ) iAllPreferences.iEncoding );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsCharacterset );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetScriptLogL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetScriptLogL( TUint32 aScriptLog )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetScriptLogL");
+ if ( aScriptLog != iAllPreferences.iScriptLog )
+ {
+ iAllPreferences.iScriptLog = aScriptLog;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ TBool ret = SetIntValueL ( KBrowserNGScriptLog,
+ ( TInt ) iAllPreferences.iScriptLog );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsScriptLog );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetAdaptiveBookmarksL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetAdaptiveBookmarksL(
+ TWmlSettingsAdaptiveBookmarks aAdaptiveBookmarks )
+ {
+ LOG_ENTERFN( "CBrowserPreferences::SetAdaptiveBookmarksL" );
+
+ if ( ADAPTIVEBOOKMARKS )
+ {
+ if ( aAdaptiveBookmarks != iAllPreferences.iAdaptiveBookmarks )
+ {
+ iAllPreferences.iAdaptiveBookmarks = aAdaptiveBookmarks;
+
+ if( !iEmbeddedMode )
+ {
+
+ switch( iAllPreferences.iAdaptiveBookmarks )
+ {
+ case (EWmlSettingsAdaptiveBookmarksOn):
+ {
+
+ SetIntValueL ( KBrowserNGAdaptiveBookmarks,
+ KBrowserAdaptiveBookmarksSettingDataOn );
+ break;
+ }
+ case (EWmlSettingsAdaptiveBookmarksHideFolder):
+ {
+ SetIntValueL ( KBrowserNGAdaptiveBookmarks,
+ KBrowserAdaptiveBookmarksSettingDataHideFolder );
+ break;
+ }
+ case (EWmlSettingsAdaptiveBookmarksOff):
+ {
+ SetIntValueL ( KBrowserNGAdaptiveBookmarks,
+ KBrowserAdaptiveBookmarksSettingDataOff );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ NotifyObserversL( EPreferencesItemChange ); // Bookmarks View is interested
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetFullScreenL
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetFullScreenL( TWmlSettingsFullScreen aFullScreen )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetFullScreenL");
+
+ if ( aFullScreen != iAllPreferences.iFullScreen )
+ {
+ iAllPreferences.iFullScreen = aFullScreen;
+ if( !iEmbeddedMode )
+ {
+ switch ( iAllPreferences.iFullScreen )
+ {
+ case EWmlSettingsFullScreenSoftkeysOnly:
+ {
+ SetIntValueL ( KBrowserNGFullScreen,
+ KBrowserFullScreenSettingDataSoftkeysOn );
+ break;
+ }
+ case EWmlSettingsFullScreenFullScreen:
+ {
+ SetIntValueL ( KBrowserNGFullScreen,
+ KBrowserFullScreenSettingDataSoftkeysOff );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ NotifyObserversL( EPreferencesItemChange ); // ContentView is interested
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetCookiesL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetCookiesL( TWmlSettingsCookies aCookies )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetCookiesL");
+ if ( aCookies != iAllPreferences.iCookies )
+ {
+ iAllPreferences.iCookies = aCookies;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGCookiesEnabled,
+ iAllPreferences.iCookies );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsCookiesEnabled );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetEcmaL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetEcmaL( TWmlSettingsECMA aEcma )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetEcmaL");
+ if ( aEcma != iAllPreferences.iEcma )
+ {
+ iAllPreferences.iEcma = aEcma;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserNGECMAScriptSupport,
+ iAllPreferences.iEcma );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsECMAScriptEnabled );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetDownloadsOpen
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetDownloadsOpenL( TBool aOpen )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetDownloadsOpenL");
+ if ( aOpen != iAllPreferences.iDownloadsOpen )
+ {
+ iAllPreferences.iDownloadsOpen = aOpen;
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL ( KBrowserNGOpenDownloads,
+ (TInt) iAllPreferences.iDownloadsOpen );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsAutoOpenDownloads );
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetHttpSecurityWarningsL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetHttpSecurityWarningsL( TBool aWarningsOn )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetHttpSecurityWarningsL");
+ if ( aWarningsOn != iAllPreferences.iHttpSecurityWarnings )
+ {
+ iAllPreferences.iHttpSecurityWarnings = aWarningsOn;
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL ( KBrowserNGShowSecurityWarnings,
+ (TInt) iAllPreferences.iHttpSecurityWarnings );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsSecurityWarnings );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetIMEINotification
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetIMEINotificationL(
+ TWmlSettingsIMEI aIMEINotification )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetIMEINotificationL");
+ if ( IMEI_NOTIFICATION )
+ {
+ if ( aIMEINotification != iAllPreferences.iIMEINotification )
+ {
+ iAllPreferences.iIMEINotification = aIMEINotification;
+
+ // Store value in Shared Data and forward new setting to BrCtl
+ if( !iEmbeddedMode )
+ {
+ SetIntValueL( KBrowserIMEINotification,
+ iAllPreferences.iIMEINotification );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsIMEINotifyEnabled );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::HandleApDbEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::HandleApDbEventL( TEvent anEvent )
+ {
+ LOG_ENTERFN("CBrowserPreferences::HandleApDbEventL");
+ if ( anEvent == EDbChanged )//maybe somebody has modified the AP (not very likely though)
+ {
+ SetDefaultAccessPointL( iAllPreferences.iDefaultAccessPoint );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::HomePageUrlL
+// Get the user defined home page URL from shared data file.
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::HomePageUrlL( TDes& aUrl, TBool aForceLoadFromSD ) const
+ {
+LOG_ENTERFN("CBrowserPreferences::HomePageUrlL");
+ TInt homePgFound( KErrNotFound );
+ TBool homepage = UiLocalFeatureSupported( KBrowserUiHomePageSetting );
+ TWmlSettingsHomePage pgtype = HomePageType();
+BROWSER_LOG( ( _L( " pgtype: %d" ), pgtype ) );
+
+ if (homepage)
+ {
+ if (aForceLoadFromSD || (pgtype != EWmlSettingsHomePageAccessPoint))
+ {
+ // if we are requiring a force load from the shared data, or our homepage
+ // is set to be something other than the access point's home page, get
+ // the value of the home page from the shared data
+ homePgFound = GetStringValueL( KBrowserNGHomepageURL, KMaxHomePgUrlLength, aUrl );
+ }
+ else if ((iAllPreferences.iAccessPointSelectionMode == EConnectionMethod) &&
+ (pgtype == EWmlSettingsHomePageAccessPoint))
+ {
+ // The user has a defined access point, and wants to use the access point's
+ // home page
+BROWSER_LOG( ( _L( "HomePageUrl, Access Point" ) ) );
+
+ TUint defaultAp = DefaultAccessPoint();
+ if ( defaultAp != KWmlNoDefaultAccessPoint ) // There is an access point defined
+ {
+ CApAccessPointItem* apItem = iAllPreferences.iDefaultAPDetails;
+ if ( apItem )
+ {
+ const HBufC* defaultHP = apItem->ReadConstLongTextL( EApWapStartPage );
+ if ( defaultHP->Length() )
+ {
+ aUrl.Zero();
+ aUrl.Append( *defaultHP );
+ homePgFound = KErrNone;
+ }
+ }
+ else
+ {
+BROWSER_LOG( ( _L( "HomePageUrl, Read from Central Repository" ) ) );
+ homePgFound = GetStringValueL( KBrowserNGHomepageURL, KMaxHomePgUrlLength, aUrl );
+ }
+ }
+ }
+ }
+BROWSER_LOG( ( _L( "CBrowserPreferences::HomePageUrlL returns %d" ), homePgFound ) );
+ return homePgFound;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::HomePageFromIapL
+// Get the home page URL from belongs to the access point.
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::HomePageFromIapL( TDes& aUrl, TUint aIap ) const
+ {
+LOG_ENTERFN("CBrowserPreferences::HomePageFromIapL");
+ TInt homePgFound( KErrNotFound );
+
+ CApListItem* apItem = iCommsModel.AccessPointsL()->ItemForUid( aIap );
+ if ( apItem )
+ {
+ TPtrC defaultHP( apItem->StartPage() );
+ if ( defaultHP.Length() )
+ {
+ aUrl.Zero();
+ aUrl.Append( defaultHP );
+ homePgFound = KErrNone;
+ }
+ }
+BROWSER_LOG( ( _L( "CBrowserPreferences::HomePageFromIapL returns %d" ), homePgFound ) );
+ return homePgFound;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SearchPageUrlL
+// Get the user defined search page URL from shared data file.
+// ----------------------------------------------------------------------------
+//
+TPtrC CBrowserPreferences::SearchPageUrlL()
+ {
+LOG_ENTERFN("CBrowserPreferences::SearchPageUrlL");
+ TBool urlTooBig = EFalse;
+ TInt error = KErrTooBig;
+ TInt length = 512;
+
+ do
+ {
+ HBufC* temp = HBufC::NewL( length );
+ if ( iAllPreferences.iSearchPgURL )
+ {
+ delete iAllPreferences.iSearchPgURL;
+ iAllPreferences.iSearchPgURL = NULL;
+ }
+
+ iAllPreferences.iSearchPgURL = temp;
+ TPtr ptr = iAllPreferences.iSearchPgURL->Des();
+ // Here should handle the error variable, but its still not clear
+ // how big can a CenRep string be.( KMaxUnicodeStringLength )
+ error = iRepository->Get( KBrowserNGSearchPageURL, ptr);
+
+ if ( error == KErrTooBig )
+ {
+ if ( length >= KMaxSearchPgUrlLength )
+ {
+ urlTooBig = ETrue;
+ break;
+ }
+ else
+ length = length * 2;
+ }
+ } while ( error == KErrTooBig );
+
+ // If the URL exceeds the limit, return NULL.
+ if ( urlTooBig )
+ {
+ delete iAllPreferences.iSearchPgURL;
+ iAllPreferences.iSearchPgURL = NULL;
+ iAllPreferences.iSearchPgURL = KNullDesC().AllocL();
+ }
+
+ NotifyObserversL( EPreferencesItemChange );
+
+#ifdef _DEBUG
+ TPtrC logString = *iAllPreferences.iSearchPgURL;
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SearchPageUrlL returns %S" ), &logString ) );
+#endif // _DEBUG
+ return iAllPreferences.iSearchPgURL->Des();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetPopupBlockingL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetPopupBlockingL( TBool aPopupBlocking )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetPopupBlockingL");
+ if ( aPopupBlocking != iAllPreferences.iPopupBlocking )
+ {
+ iAllPreferences.iPopupBlocking = aPopupBlocking;
+ SetIntValueL( KBrowserNGPopupBlocking, iAllPreferences.iPopupBlocking );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetFormDataSavingL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetFormDataSavingL( TWmlSettingsFormData aFormDataSaving )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetFormDataSavingL");
+ if ( aFormDataSaving != iAllPreferences.iFormDataSaving )
+ {
+ iAllPreferences.iFormDataSaving = aFormDataSaving;
+
+
+ // TO DO: Add to cenrep
+ SetIntValueL( KBrowserFormDataSaving,
+ iAllPreferences.iFormDataSaving );
+ }
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsAutoFormFillEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::GetIntValue
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::GetIntValue( TUint32 aKey) const
+ {
+LOG_ENTERFN("CBrowserPreferences::GetIntValue");
+ TInt retVal = 0;
+
+ if ( iRepository )
+ {
+ iRepository->Get(aKey, retVal);
+ }
+
+BROWSER_LOG( ( _L( "CBrowserPreferences::GetIntValue returns %d" ), retVal ) );
+ return retVal;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetIntValueL
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::SetIntValueL ( TUint32 aKey, const TInt& aValue )
+ {
+LOG_ENTERFN("CBrowserPreferences::SetIntValueL");
+BROWSER_LOG( ( _L( "aValue: %d" ), aValue ) );
+
+ // Log setting value BEFORE the change
+ #ifdef I__BROWSER_LOG_ENABLED
+ TInt preValue;
+ iRepository->Get( aKey, preValue );
+ BROWSER_LOG( ( _L( "Prechange CenRep setting value: %d" ), preValue ) );
+ #endif // I__BROWSER_LOG_ENABLED
+
+ TBool retVal=EFalse;
+ if ( iRepository && ( KErrNone == iRepository->Set( aKey, aValue ) ) )
+ {
+ retVal = ETrue;
+ }
+
+ // Log setting value AFTER the change
+ #ifdef I__BROWSER_LOG_ENABLED
+ TInt postValue;
+ iRepository->Get( aKey, postValue );
+ BROWSER_LOG( ( _L( "Postchange CenRep setting value: %d" ), postValue ) );
+ #endif // I__BROWSER_LOG_ENABLED
+
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SetIntValueL returns %d" ), retVal ) );
+ return retVal;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::GetStringValueL
+// ----------------------------------------------------------------------------
+//
+HBufC* CBrowserPreferences::GetStringValueL ( TUint32 aKey ) const
+ {
+LOG_ENTERFN("CBrowserPreferences::GetStringValueL(TUint32)");
+ HBufC* retVal = NULL;
+ TFileName value;
+ TInt err( KErrNotFound );
+
+
+ if( iRepository )
+ {
+ err = iRepository->Get( aKey, value );
+ }
+
+ if ( err == KErrNone )
+ {
+ retVal = HBufC::NewL( value.Length() );
+ TPtr ptr = retVal->Des();
+ ptr.Copy ( value );
+ }
+
+ #ifdef _DEBUG
+ TPtrC logString = *retVal;
+ BROWSER_LOG( ( _L( "CBrowserPreferences::GetStringValueL returns %S" ), &logString ) );
+ #endif // _DEBUG
+
+ return retVal;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::GetStringValueL
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserPreferences::GetStringValueL(
+ TUint32 aKey, TInt aMaxBufSize,
+ TDes& aBuf) const
+ {
+LOG_ENTERFN("CBrowserPreferences::GetStringValueL(TUint32,TInt,TDes&)");
+ // Not sure this works, but CRepository has no information about the return
+ // values of the methods.
+ // So dont know if iRepository->Get returns with an errorid on error,therefore
+ // error = iRepository->Get( aKey, ptr ) may not work.
+ TInt length( 256 );
+ HBufC* value = HBufC::NewL( length );
+ TPtr ptr = value->Des();
+ TInt error;
+
+ error = iRepository->Get( aKey, ptr );
+
+ for( length=length*2; (error==KErrTooBig) && (length<aMaxBufSize); length=length*2)
+ {
+ delete value;
+ value = HBufC::NewL( length );
+ ptr = value->Des();
+
+ error = iRepository->Get( aKey, ptr );
+ }
+ if( error == KErrNone )
+ {
+ aBuf.Zero();
+ aBuf.Append( ptr );
+ }
+ delete value;
+
+ BROWSER_LOG( ( _L( "CBrowserPreferences::GetStringValueL(TUint32,TInt,TDes&) returns %d" ),
+ error ) );
+ return error;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetStringValueL
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::SetStringValueL( TUint32 aKey, const TDesC& aValue )
+ {
+LOG_ENTERFN("CBrowserPreferences::SetStringValueL");
+
+ // Log setting value BEFORE the change
+ #ifdef _DEBUG
+ TPtrC paramVal = aValue;
+ BROWSER_LOG( ( _L( "aValue %S" ), ¶mVal ) );
+ HBufC* doNothing = HBufC::NewL( 512 );
+ TPtr preChange = doNothing->Des();
+ iRepository->Get( aKey, preChange );
+ BROWSER_LOG( ( _L( "Prechange CenRep setting value: %S" ), &preChange ) );
+ delete doNothing;
+ #endif // _DEBUG
+
+ TBool retVal=EFalse;
+
+ if ( iRepository && ( KErrNone == iRepository->Set( aKey, aValue ) ) )
+ {
+ retVal = ETrue;
+ }
+ // Log setting value AFTER the change
+ #ifdef _DEBUG
+ HBufC* doNothing2 = HBufC::NewL( 512 );
+ TPtr postChange = doNothing2->Des();
+ iRepository->Get( aKey, postChange );
+
+ BROWSER_LOG( ( _L( "Postchange CenRep setting value: %S" ), &postChange ) );
+ delete doNothing2;
+ #endif // _DEBUG
+
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SetStringValueL returns %d" ), retVal) );
+ return retVal;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetOverridenSettingsL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetOverriddenSettingsL(TBrowserOverriddenSettings* aSettings)
+ {
+LOG_ENTERFN("CBrowserPreferences::SetOverriddenSettingsL");
+
+ if( aSettings != NULL )
+ {
+ TUint tempValue;
+ iOverriden = ETrue;
+ iOverridenSettings = aSettings;
+
+ // Check overridden settings by looking at their default values
+ // (see how Launcher2 sets them in the OverriddenSettings constructor)
+ tempValue = iOverridenSettings->GetBrowserSetting( EBrowserOverSettingsCustomAp );
+ if( tempValue != 0 )
+ {
+ iAllPreferences.iAccessPointSelectionMode = EConnectionMethod;
+ iCustomAp = tempValue;
+ SetDefaultAccessPointL( iCustomAp );
+ }
+ tempValue = iOverridenSettings->GetBrowserSetting( EBrowserOverSettingsAutoLoadImages );
+ if( tempValue != KMaxTUint )
+ {
+ iAllPreferences.iAutoLoadContent = tempValue;
+ }
+
+ tempValue = iOverridenSettings->GetBrowserSetting( EBrowserOverSettingsFontSize );
+ if( tempValue != EBrowserOverFontSizeLevelUndefined )
+ {
+ iAllPreferences.iFontSize = tempValue;
+ }
+ tempValue = iOverridenSettings->GetBrowserSetting( EBrowserOverSettingsFullScreen );
+ switch( tempValue )
+ {
+ case KBrowserFullScreenSettingDataSoftkeysOff:
+ {
+ iAllPreferences.iFullScreen = EWmlSettingsFullScreenFullScreen;
+ break;
+ }
+ case KBrowserFullScreenSettingDataSoftkeysOn:
+ default:
+ {
+ iAllPreferences.iFullScreen = EWmlSettingsFullScreenSoftkeysOnly;
+ break;
+ }
+ }
+ }
+ return;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetEmbeddedModeL(TBool aEmbeddedMode)
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetEmbeddedModeL(TBool aEmbeddedMode)
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetEmbeddedModeL");
+
+ iEmbeddedMode = aEmbeddedMode;
+ if( iEmbeddedMode /* && ApiProvider().StartedUp()*/ )
+ {
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsEmbedded );
+ }
+ return;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetMediaVolumeL( TInt aMediaVolume )
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetMediaVolumeL( TInt aMediaVolume )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetMediaVolumeL");
+
+ // Media Volume uses different SD ini. Revert to Browser SD ini after use
+ iAllPreferences.iMediaVolume = aMediaVolume;
+ SetIntValueL ( KBrowserMediaVolumeControl, iAllPreferences.iMediaVolume );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetHomePageTypeL( TWmlSettingsHomePage aHomePageType )
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetHomePageTypeL( TWmlSettingsHomePage aHomePageType )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetHomePageTypeL");
+ SetIntValueL( KBrowserNGHomepageType, aHomePageType );
+ iAllPreferences.iHomePgType = aHomePageType;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetHomePageUrlL( TDesC& aHomePageURL )
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetHomePageUrlL( const TDesC& aHomePageURL )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetHomePageUrlL");
+
+ if( aHomePageURL.Length() )
+ {
+ // Save the homepage with a scheme (default is http if not specified).
+ HBufC* temp = Util::AllocateUrlWithSchemeL( aHomePageURL );
+ delete iAllPreferences.iHomePgURL;
+ iAllPreferences.iHomePgURL = temp;
+ SetStringValueL( KBrowserNGHomepageURL,
+ iAllPreferences.iHomePgURL->Des() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetSearchPageUrlL( TDesC& aSearchPageURL )
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetSearchPageUrlL( const TDesC& aSearchPageURL )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetSearchPageUrlL");
+
+ // Save the searchpage with a scheme (default is http if not specified).
+ HBufC* temp = Util::AllocateUrlWithSchemeL( aSearchPageURL );
+ delete iAllPreferences.iSearchPgURL;
+ iAllPreferences.iSearchPgURL = temp;
+ SetStringValueL( KBrowserNGSearchPageURL,
+ iAllPreferences.iSearchPgURL->Des() );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::FlushSD()
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::FlushSD()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::CustomAccessPointDefined()
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserPreferences::CustomAccessPointDefined()
+ {
+LOG_ENTERFN("CBrowserPreferences::CustomAccessPointDefined");
+ TBool retval( iOverridenSettings && iCustomAp );
+ BROWSER_LOG( ( _L( "CBrowserPreferences::CustomAccessPointDefined returns %d" ),
+ (TInt)retval ) );
+ return retval;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SelfDownloadContentTypesL
+// ----------------------------------------------------------------------------
+//
+TPtrC CBrowserPreferences::SelfDownloadContentTypesL()
+ {
+LOG_ENTERFN("CBrowserPreferences::SelfDownloadContentTypesL");
+
+ TInt error = KErrNone;
+ const TInt KLengthIncrement = 32; // 32 characters
+ TInt length = KLengthIncrement; // Initially KLengthIncrement
+
+ do
+ {
+ HBufC* temp = HBufC::NewL( length );
+ delete iSelfDownloadContentTypes;
+ iSelfDownloadContentTypes = temp;
+ TPtr ptr = iSelfDownloadContentTypes->Des();
+ error = iRepository->Get( KBrowserSelfDownloadContentTypes, ptr );
+
+ if ( error == KErrOverflow )
+ {
+ // Increase the size of the placeholder
+ length += KLengthIncrement;
+ }
+ } while ( error == KErrOverflow );
+
+ #ifdef _DEBUG
+ TPtrC logString = *iSelfDownloadContentTypes;
+ BROWSER_LOG( ( _L( "CBrowserPreferences::SelfDownloadContentTypesL returns %S" ),
+ &logString ) );
+ #endif // _DEBUG
+
+ return (*iSelfDownloadContentTypes);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::AccessPointAlwaysAsk()
+// ----------------------------------------------------------------------------
+//
+TCmSettingSelectionMode CBrowserPreferences::AccessPointSelectionMode()
+ {
+LOG_ENTERFN("CBrowserPreferences::AccessPointSelectionMode");
+BROWSER_LOG( ( _L( "CBrowserPreferences::AccessPointSelectionMode returns %d" ),
+ iAllPreferences.iAccessPointSelectionMode ) );
+ return iAllPreferences.iAccessPointSelectionMode;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetAccessPointSelectionModeL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetAccessPointSelectionModeL(
+ TCmSettingSelectionMode aAccessPointSelectionMode )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetAccessPointSelectionModeL");
+
+ if ( aAccessPointSelectionMode != iAllPreferences.iAccessPointSelectionMode )
+ {
+ iAllPreferences.iAccessPointSelectionMode = aAccessPointSelectionMode;
+ TUint32 cenrepKey;
+#ifdef BRDO_OCC_ENABLED_FF
+ BROWSER_LOG( ( _L( " Setting OCC parameter " )) );
+ cenrepKey= KBrowserOccAccessPointSelectionMode;
+#else
+ cenrepKey = KBrowserAccessPointSelectionMode;
+#endif
+ switch ( aAccessPointSelectionMode )
+ {
+ case EAlwaysAsk:
+ {
+ SetIntValueL ( cenrepKey, EBrowserCenRepApSelModeAlwaysAsk );
+ break;
+ }
+ case EDestination:
+ {
+ SetIntValueL ( cenrepKey, EBrowserCenRepApSelModeDestination );
+ break;
+ }
+ case EConnectionMethod:
+ {
+ SetIntValueL ( cenrepKey, EBrowserCenRepApSelModeUserDefined );
+ break;
+ }
+ default:
+ {
+ SetIntValueL ( cenrepKey, EBrowserCenRepApSelModeAlwaysAsk );
+ break;
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetAutomaticUpdatingApL
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetAutomaticUpdatingApL( TUint aSetting )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetAutomaticUpdatingApL");
+
+ iAllPreferences.iAutomaticUpdatingAP = aSetting;
+ SetIntValueL ( KBrowserNGAutomaticUpdatingAccessPoint, aSetting );
+ }
+
+
+void CBrowserPreferences::SetAutomaticUpdatingWhileRoamingL( TBool aAutoUpdateRoaming )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetAutomaticUpdatingWhileRoamingL");
+ if ( aAutoUpdateRoaming != iAllPreferences.iAutomaticUpdatingWhileRoaming )
+ {
+ iAllPreferences.iAutomaticUpdatingWhileRoaming = aAutoUpdateRoaming;
+ SetIntValueL( KBrowserNGAutomaticUpdatingWhileRoaming,
+ iAllPreferences.iAutomaticUpdatingWhileRoaming );
+ }
+
+ }
+
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarOnOffL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarOnOffL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarOnOff )
+ {
+ iAllPreferences.iToolbarOnOff = aCommand;
+ SetIntValueL( KToolbarOnOff, iAllPreferences.iToolbarOnOff );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarOnOff );
+ }
+ }
+
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton1CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton1CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton1Cmd )
+ {
+ iAllPreferences.iToolbarButton1Cmd = aCommand;
+ SetIntValueL( KToolbarButton1Cmd, iAllPreferences.iToolbarButton1Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton1Cmd );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton2CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton2CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton2Cmd )
+ {
+ iAllPreferences.iToolbarButton2Cmd = aCommand;
+ SetIntValueL( KToolbarButton2Cmd, iAllPreferences.iToolbarButton2Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton2Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton3CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton3CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton3Cmd )
+ {
+ iAllPreferences.iToolbarButton3Cmd = aCommand;
+ SetIntValueL( KToolbarButton3Cmd, iAllPreferences.iToolbarButton3Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton3Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton4CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton4CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton4Cmd )
+ {
+ iAllPreferences.iToolbarButton4Cmd = aCommand;
+ SetIntValueL( KToolbarButton4Cmd, iAllPreferences.iToolbarButton4Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton4Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton5CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton5CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton5Cmd )
+ {
+ iAllPreferences.iToolbarButton5Cmd = aCommand;
+ SetIntValueL( KToolbarButton5Cmd, iAllPreferences.iToolbarButton5Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton5Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton6CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton6CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton6Cmd )
+ {
+ iAllPreferences.iToolbarButton6Cmd = aCommand;
+ SetIntValueL( KToolbarButton6Cmd, iAllPreferences.iToolbarButton6Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton6Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetToolbarButton7CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetToolbarButton7CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iToolbarButton7Cmd )
+ {
+ iAllPreferences.iToolbarButton7Cmd = aCommand;
+ SetIntValueL( KToolbarButton7Cmd, iAllPreferences.iToolbarButton7Cmd );
+
+ NotifyObserversL( EPreferencesItemChange,
+ TBrCtlDefs::ESettingsToolbarButton7Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey1CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey1CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey1Cmd )
+ {
+ iAllPreferences.iShortcutKey1Cmd = aCommand;
+ SetIntValueL( KShortcutKey1Cmd, iAllPreferences.iShortcutKey1Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey2CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey2CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey2Cmd )
+ {
+ iAllPreferences.iShortcutKey2Cmd = aCommand;
+ SetIntValueL( KShortcutKey2Cmd, iAllPreferences.iShortcutKey2Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey3CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey3CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey3Cmd )
+ {
+ iAllPreferences.iShortcutKey3Cmd = aCommand;
+ SetIntValueL( KShortcutKey3Cmd, iAllPreferences.iShortcutKey3Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey4CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey4CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey4Cmd )
+ {
+ iAllPreferences.iShortcutKey4Cmd = aCommand;
+ SetIntValueL( KShortcutKey4Cmd, iAllPreferences.iShortcutKey4Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey5CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey5CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey5Cmd )
+ {
+ iAllPreferences.iShortcutKey5Cmd = aCommand;
+ SetIntValueL( KShortcutKey5Cmd, iAllPreferences.iShortcutKey5Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey6CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey6CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey6Cmd )
+ {
+ iAllPreferences.iShortcutKey6Cmd = aCommand;
+ SetIntValueL( KShortcutKey6Cmd, iAllPreferences.iShortcutKey6Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey7CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey7CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey7Cmd )
+ {
+ iAllPreferences.iShortcutKey7Cmd = aCommand;
+ SetIntValueL( KShortcutKey7Cmd, iAllPreferences.iShortcutKey7Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey8CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey8CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey8Cmd )
+ {
+ iAllPreferences.iShortcutKey8Cmd = aCommand;
+ SetIntValueL( KShortcutKey8Cmd, iAllPreferences.iShortcutKey8Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey9CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey9CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey9Cmd )
+ {
+ iAllPreferences.iShortcutKey9Cmd = aCommand;
+ SetIntValueL( KShortcutKey9Cmd, iAllPreferences.iShortcutKey9Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKey0CmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKey0CmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKey0Cmd )
+ {
+ iAllPreferences.iShortcutKey0Cmd = aCommand;
+ SetIntValueL( KShortcutKey0Cmd, iAllPreferences.iShortcutKey0Cmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKeyStarCmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKeyStarCmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKeyStarCmd )
+ {
+ iAllPreferences.iShortcutKeyStarCmd = aCommand;
+ SetIntValueL( KShortcutKeyStarCmd, iAllPreferences.iShortcutKeyStarCmd );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPreferences::SetShortcutKeyHashCmdL()
+// ---------------------------------------------------------
+//
+void CBrowserPreferences::SetShortcutKeyHashCmdL(TInt aCommand)
+ {
+ if ( aCommand != iAllPreferences.iShortcutKeyHashCmd )
+ {
+ iAllPreferences.iShortcutKeyHashCmd = aCommand;
+ SetIntValueL( KShortcutKeyHashCmd, iAllPreferences.iShortcutKeyHashCmd );
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserPreferences::SetURLSuffixList
+// ----------------------------------------------------------------------------
+//
+void CBrowserPreferences::SetURLSuffixList( HBufC* aSetting )
+ {
+ LOG_ENTERFN("CBrowserPreferences::SetUpdateHoursDefined");
+
+ SetStringValueL ( KBrowserUrlSuffix, aSetting->Des() );
+
+ TPtr ptr = iAllPreferences.iUrlSuffixList->Des();
+ ptr.Copy( aSetting->Des() );
+ }
+
+//Following function is specific for Search application.
+//It will check if search application present in device and will turn the feature ON.
+TInt CBrowserPreferences::GetSearchFeatureStatusL( TUint32 aKey, RApaLsSession& aLs)
+{
+ TInt aVal = EFalse;
+ //Search for 'Search' application. If its there then only enable feature, otherwise disable.
+ TApaAppInfo aInfo;
+ aLs.GetAppInfo(aInfo, TUid::Uid( KSearchAppUid ));
+ if(aInfo.iUid == TUid::Uid( KSearchAppUid ))
+ {
+ //Now, Turn on the Search feature.
+ aVal = ETrue;
+ }
+ //Set value to key;
+ SetIntValueL(aKey, aVal);
+ //Again Read if feature is enabled.
+ return GetIntValue(aKey);
+}
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserProgressIndicator.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,493 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknAppUi.h>
+#include <e32math.h>
+#include <BrowserNG.rsg>
+#include <FeatMgr.h>
+#include <stringloader.h>
+
+// USER INCLUDES
+
+#include "Display.h"
+#include "ApiProvider.h"
+#include "CommonConstants.h" // for View Ids
+#include "BrowserProgressIndicator.h"
+#include "Logger.h"
+#include "AknUtils.h"
+
+// CONSTANTS
+
+const TInt KGranularity = 4;
+const TUint KkBLimit = 999;
+const TUint KOnekB = 1024;
+const TUint KOneMB = 1024 * 1024;
+const TInt KMaxPercentage = 100;
+const TInt KMBLimit = 10;
+const TInt KMaxMBLimit = 100;
+_LIT(text,"(%S) %S ");
+_LIT(twoDecimals,"%2.2lf");
+_LIT(oneDecimal, "%2.1lf");
+_LIT(noDecimals, "%d");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::NewL
+// ---------------------------------------------------------
+//
+CBrowserProgressIndicator* CBrowserProgressIndicator::NewL(
+ MApiProvider& aApiProvider )
+ {
+ CBrowserProgressIndicator* self = new (ELeave)
+ CBrowserProgressIndicator( aApiProvider );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::ConstructL()
+ {
+ iProgressData = new(ELeave) CArrayFixFlat<TProgressData>( KGranularity );
+ iInitialDownloadIndicatorState = EFalse;
+
+ HBufC* myKb = StringLoader::LoadL( R_WML_UNIT_KB );
+ iMyKb = myKb->Alloc();
+ delete myKb;
+
+ HBufC* myMb = StringLoader::LoadL( R_WML_UNIT_MB );
+ iMyMb = myMb->Alloc();
+ delete myMb;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::CBrowserProgressIndicator
+// ---------------------------------------------------------
+//
+CBrowserProgressIndicator::CBrowserProgressIndicator(
+ MApiProvider& aApiProvider ) :
+ iIsRunning( EFalse ),
+ iApiProvider( aApiProvider ),
+ iLastMaxEstimate( 0 ),
+ iLastReceivedData( 0 )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::~CBrowserProgressIndicator
+// ---------------------------------------------------------
+//
+CBrowserProgressIndicator::~CBrowserProgressIndicator()
+ {
+ delete iProgressData;
+ delete iMyKb;
+ delete iMyMb;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::AddTransActIdL
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::AddTransActIdL( TUint16 aId )
+ {
+ //Format each id at start point.
+ AddProgressDataL(aId, 0, 0);
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::DeleteProgressDataItem
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::DeleteProgressDataItem( TUint16 aId )
+ {
+ TKeyArrayFix key(0, ECmpTUint16);
+ TInt pos = 0;
+ TProgressData data;
+ data.iId = aId;
+ TInt retVal = iProgressData->Find( data,key,pos );
+ if ( retVal == KErrNone )
+ {
+ iProgressData->Delete( pos );
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::TransActIdAmount()
+// ---------------------------------------------------------
+//
+TInt CBrowserProgressIndicator::TransActIdAmount() const
+ {
+ return iProgressData->Count();
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::TransActIdAmountCompleted()
+// ---------------------------------------------------------
+//
+TInt CBrowserProgressIndicator::TransActIdAmountCompleted() const
+ {
+ TInt numOfCompleted( 0 );
+ TInt i;
+ for( i=0; i<TransActIdAmount(); ++i )
+ {
+ if( iProgressData->At( i ).iComplete )
+ ++numOfCompleted;
+ }
+ return numOfCompleted;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::ResetValues()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::ResetValues()
+ {
+ iProgressData->Reset();
+ iProgressEstimate = 0;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::ReceivedData()
+// ---------------------------------------------------------
+//
+TUint32 CBrowserProgressIndicator::ReceivedData()
+ {
+ TUint32 recvdData = 0;
+ for (TInt i = 0; i < iProgressData->Count();i++)
+ {
+ TProgressData data = iProgressData->At( i );
+ recvdData += data.iRecvdData;
+ }
+ return recvdData;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::EstimateMaxData()
+// ---------------------------------------------------------
+//
+TUint32 CBrowserProgressIndicator::EstimateMaxData()
+ {
+ TUint32 maxData = 0;
+ TInt count = 0;
+ TUint32 estimation = 0;
+ for ( TInt i = 0; i < iProgressData->Count();i++ )
+ {
+ TProgressData data = iProgressData->At( i );
+ if( data.iMaxData )
+ {
+ maxData += data.iMaxData;
+ count++;
+ }
+ }
+ // estimate maximum data what will be received
+ if ( count )
+ {
+ return estimation = ((maxData/count)* iProgressData->Count());
+ }
+
+ return estimation;
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::TransActId()
+// ---------------------------------------------------------
+//
+TUint16 CBrowserProgressIndicator::TransActId( TInt aIndex )
+ {
+ return iProgressData->At( aIndex ).iId;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::AddProgressDataL()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::AddProgressDataL(
+ TUint16 aId, TUint32 aRecvdData, TUint32 aMaxData )
+ {
+ //Try to seek if current id exist in array
+ TKeyArrayFix key(0, ECmpTUint16);
+ TInt pos = 0;
+ TProgressData data;
+ data.iId = aId;
+ TInt retVal = iProgressData->Find( data,key,pos );
+ if ( retVal!=KErrNone ) //id was NOT found
+ {
+ //Add id, recvdData and maxData to array
+ TProgressData data;
+ data.iId = aId;
+ data.iRecvdData = aRecvdData;
+ data.iMaxData = aMaxData;
+ data.iComplete = EFalse;
+ iProgressData->AppendL( data );
+ }
+ else
+ {
+
+ data = iProgressData->At( pos );
+ if( ((data.iRecvdData != aRecvdData) && aRecvdData!=0 ) )
+ {
+ data.iRecvdData = aRecvdData;
+ }
+ if ( aMaxData!=0 )
+ {
+ data.iMaxData = aMaxData;
+ }
+
+ iProgressData->Delete( pos );
+ iProgressData->InsertL( pos,data );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::TransActIdCompleteL()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::TransActIdCompleteL( TUint16 aId )
+ {
+ TKeyArrayFix key( 0, ECmpTUint16 );
+ TInt pos = 0;
+ TProgressData data;
+ data.iId = aId;
+ TInt retVal = iProgressData->Find( data,key,pos );
+ if ( retVal == KErrNone && ! iProgressData->At(pos).iComplete )
+ {
+ data = iProgressData->At( pos );
+ // we don't need this id anymore if both data values are empty
+ if ( !data.iMaxData && !data.iRecvdData )
+ {
+ iProgressData->Delete( pos );
+ }
+ else
+ {
+ data.iComplete = ETrue;
+ if ( data.iMaxData > data.iRecvdData )
+ {
+ data.iRecvdData = data.iMaxData;
+ }
+ iProgressData->Delete( pos );
+ iProgressData->InsertL( pos,data );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::EnquireStatusL()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::EnquireStatusL()
+ {
+LOG_ENTERFN("EnquireStatusL");
+ // Reset string storage.
+ iPercentText.SetLength( 0 );
+ iDataText.SetLength( 0 );
+ iMBvalue.SetLength( 0 );
+
+ TUint32 receivedData = ReceivedData();
+ TUint32 maxEstimate = EstimateMaxData();
+
+ if (receivedData == 0 || maxEstimate == 0)
+ {
+ // fake initial progress to reflect 5% downloaded and 0 kb received.
+ receivedData = 5;
+ maxEstimate = 100;
+ }
+
+ //Calculate either kB-text or MB-text
+ if ( ((receivedData)/KOnekB ) <= KkBLimit )
+ {
+ HBufC* kbUnit = HBufC::NewL( iMyKb->Length()+5 );
+ TPtr ptr1( kbUnit->Des() );
+ StringLoader::Format( ptr1, *iMyKb, -1, (receivedData)/KOnekB );
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr1);
+ iDataText.Copy( ptr1 );
+ delete kbUnit;
+ }
+ else
+ {
+
+ TReal received( receivedData );
+ TReal oneMB( KOneMB );
+ TReal result( received / oneMB );
+ // TUint32 result( receivedData / KOneMB );
+ if ( result < KMBLimit )
+ {
+ // TUint32 res2( ( ( receivedData * 100 ) / KOneMB ) % 100 );
+ // need to modify the format string too
+ iMBvalue.Format( twoDecimals, result );
+ }
+ else if ( result < KMaxMBLimit )
+ {
+ // TUint32 res2( ( ( receivedData * 10 ) / KOneMB ) % 10 );
+ // need to modify the format string too
+ iMBvalue.Format( oneDecimal, result );
+ }
+ else if ( result > KMaxMBLimit)
+ {
+ TInt16 resultInt( 0 );
+ Math::Int( resultInt, result );
+ iMBvalue.Format( noDecimals, resultInt );
+ }
+ HBufC* mbUnit = HBufC::NewL( iMyMb->Length() + iMBvalue.Length() + 1 );
+ TPtr ptr1( mbUnit->Des() );
+ StringLoader::Format( ptr1, *iMyMb, -1, iMBvalue );
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr1);
+ iDataText.Copy( ptr1 );
+ delete mbUnit;
+ }
+
+ // progress animation should be shown only in content view (not in bookmarks)
+ if( iApiProvider.LastActiveViewId() == KUidBrowserContentViewId )
+ {
+ // Check all possible states.
+ if ( !iInitialDownloadIndicatorState && maxEstimate <= 0 )
+ {
+ iInitialDownloadIndicatorState = ETrue;
+ // The initial indicator state changed from EFalse to ETrue. Update it.
+ iApiProvider.Display().UpdateFSDownloadInitialIndicator( ETrue );
+ }
+ else if ( !iInitialDownloadIndicatorState && 0 < maxEstimate )
+ {
+ //iInitialDownloadIndicatorState = EFalse; // Unnecessary statement.
+ }
+ else if ( iInitialDownloadIndicatorState && maxEstimate <= 0 )
+ {
+ //iInitialDownloadIndicatorState = ETrue; // Unnecessary statement.
+ }
+ else if ( iInitialDownloadIndicatorState && 0 < maxEstimate )
+ {
+ iInitialDownloadIndicatorState = EFalse;
+ // The initial indicator state changed from ETrue to EFalse. Update it.
+ iApiProvider.Display().UpdateFSDownloadInitialIndicator( EFalse );
+ }
+
+ iApiProvider.Display().UpdateFSProgressIndicator( maxEstimate, receivedData );
+
+ // Render the downloaded data size.
+ iApiProvider.Display().UpdateFSProgressDataL( iDataText );
+ }
+ else
+ {
+ // is this section really run?
+
+ // Show how many percentage has been dowloaded
+ if ( maxEstimate )
+ {
+ TReal received( receivedData );
+ TReal maxEst( maxEstimate );
+ TReal factor( 100 );
+ TReal percentage( (received / maxEst) * factor );
+ TInt16 percentInt( 0 );
+ Math::Int( percentInt, percentage );
+ if ( percentInt > KMaxPercentage )
+ {
+ percentInt = KMaxPercentage;
+ }
+ HBufC* percentUnit =
+ StringLoader::LoadLC( R_WML_UNIT_PERCENT, percentInt );
+ iPercentText.Format( text, percentUnit, &iDataText );
+ CleanupStack::PopAndDestroy( percentUnit ); //percentUnit
+
+ //Update navi pane
+ iApiProvider.UpdateNaviPaneL( iPercentText );
+ }
+ //Show amount of downloaded data (recvd data)
+ //(if maximum data is not available)
+ else
+ {
+ iApiProvider.UpdateNaviPaneL( iDataText );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::StartL()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::StartL()
+ {
+ if ( !iIsRunning )
+ {
+ // clear progress bar data
+ iLastMaxEstimate = 0;
+ iLastReceivedData = 0;
+
+ // progress animation should be shown
+ // only in content view (not in bookmarks)
+ if( iApiProvider.LastActiveViewId() == KUidBrowserContentViewId )
+ {
+ //Start progress bar
+ NotifyProgress();
+
+ iInitialDownloadIndicatorState = ETrue;
+ iApiProvider.Display().UpdateFSDownloadInitialIndicator( ETrue );
+ // Show initially 0 kB as downloaded size.
+ HBufC* kbUnit = HBufC::NewL( iMyKb->Length()+5 );
+ TPtr ptr1( kbUnit->Des() );
+ StringLoader::Format( ptr1, *iMyKb, -1, 0 );
+ iDataText.Copy( ptr1 );
+ delete kbUnit;
+ iApiProvider.Display().UpdateFSProgressDataL( iDataText );
+ }
+
+ iIsRunning = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::StopL()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::StopL()
+ {
+ if( iApiProvider.LastActiveViewId() == KUidBrowserContentViewId )
+ {
+ ResetValues();
+ if( iInitialDownloadIndicatorState )
+ {
+ iInitialDownloadIndicatorState = EFalse;
+ iApiProvider.Display().
+ UpdateFSDownloadInitialIndicator( EFalse );
+ }
+ iApiProvider.Display().RestoreTitleL();
+ }
+ iIsRunning = EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrowserProgressIndicator::NotifyProgress()
+// ---------------------------------------------------------
+//
+void CBrowserProgressIndicator::NotifyProgress()
+ {
+ // Unfortunately we could not eliminate TRAP. The Engine cannot
+ // support a leavable NotifyProgressL() function.
+ TRAP_IGNORE( EnquireStatusL() );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserPushMtmObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CBrowserPushMtmObserver
+*
+*/
+
+
+// INCLUDE FILES
+#include "BrowserPushMtmObserver.h"
+#include "ApiProvider.h"
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "Logger.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+// file monitored by browser
+_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::CBrowserPushMtmObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBrowserPushMtmObserver::CBrowserPushMtmObserver(MApiProvider* aApiProvider) : CActive( CActive::EPriorityIdle ),
+iApiProvider(aApiProvider)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::ConstructL()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::ConstructL");
+ User::LeaveIfError(iFsSession.Connect());
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBrowserPushMtmObserver* CBrowserPushMtmObserver::NewL( MApiProvider* aApiProvider )
+ {
+ CBrowserPushMtmObserver* self = new( ELeave ) CBrowserPushMtmObserver(aApiProvider);
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+CBrowserPushMtmObserver::~CBrowserPushMtmObserver()
+ {
+ Cancel();
+ iFsSession.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::RunL
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::RunL()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::RunL");
+ HBufC8* url8 = NULL;
+ TRAP_IGNORE( url8 = ReadMsgFileL() );
+ StartObserver();
+ if( url8 != NULL )
+ {
+ CleanupStack::PushL( url8 );
+ CBrowserAppUi* appUi = STATIC_CAST(CBrowserAppUi*, iApiProvider);
+ appUi->ParseAndProcessParametersL( url8->Des() );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::RunL appUi->ParseAndProcessParametersL with url8: %S" ), url8 ));
+ appUi->SetLastActiveViewId( KUidBrowserContentViewId );
+ appUi->SetViewToBeActivatedIfNeededL( appUi->LastActiveViewId() );
+ // view activation and bringing the browser to foreground are two
+ // distinct actions.
+ appUi->ActivateLocalViewL( KUidBrowserContentViewId );
+ appUi->HandleForegroundEventL( ETrue );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::RunL appUi->HandleForegroundEventL") ));
+ CleanupStack::PopAndDestroy(/*url8*/);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::RunError
+//
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserPushMtmObserver::RunError(TInt /*aError*/)
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::DoCancel
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::DoCancel()
+ {
+ iFsSession.NotifyChangeCancel(iStatus);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::StartObserver
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::StartObserver()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::StartObserver");
+ if (!IsActive())
+ {
+ iFsSession.NotifyChange( ENotifyWrite, iStatus, KPushMtmUrl() );
+ SetActive();
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::StartObserver iFsSession.NotifyChange") ));
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::ReadMsgFileL
+//
+// -----------------------------------------------------------------------------
+//
+HBufC8* CBrowserPushMtmObserver::ReadMsgFileL()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::ReadMsgFileL");
+
+ RFs rfs;
+ RFile file;
+ TInt size;
+ HBufC8* buffer = NULL;
+ TPtr8 bufferPtr(NULL, 0);
+ TInt err = KErrNone;
+
+ // Open the file.
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ TInt tryCount = 0;
+ for (tryCount = 0; tryCount < 5; tryCount++)
+ {
+ err = file.Open( rfs, KPushMtmUrl, EFileRead | EFileShareExclusive );
+ if (err == KErrInUse)
+ {
+ // wait 50 miliseconds and try again
+ User::After(50000);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Open return: %d" ), err ));
+ User::LeaveIfError( err );
+ CleanupClosePushL(file);
+
+ // Read file
+ err = file.Size(size);
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Size: %d, err: %d" ), size, err ));
+ User::LeaveIfError( err );
+
+ buffer = HBufC8::NewLC(size);
+ bufferPtr.Set(buffer->Des());
+
+ err = file.Read( bufferPtr, size );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Read: %d" ), err ));
+ User::LeaveIfError( err );
+
+ // Clean up.
+ CleanupStack::Pop(/*buffer*/);
+ CleanupStack::PopAndDestroy(/*file*/);
+
+ // don't need to leave due to this error
+ err = rfs.Delete( KPushMtmUrl );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL rfs.Delete: %d" ), err ));
+ CleanupStack::PopAndDestroy(/*rfs*/);
+
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL return: %S" ), buffer ));
+ return buffer;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserShortcutKeyMap.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,855 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Browser View
+*
+*/
+
+// INCLUDE FILES
+#include <aknutils.h>
+#include <gulicon.h>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+#include <eikbtgpc.h>
+#include <eikapp.h>
+#include <AknsUtils.h>
+#include <e32math.h>
+#include <browser.mbg>
+#include "BrowserShortcutKeyMap.h"
+#include "BrowserContentViewContainer.h"
+#include "BrowserPreferences.h"
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include "ApiProvider.h"
+#include "BrowserUIVariant.hrh"
+#include "BrowserAppUi.h"
+#include <AknBidiTextUtils.h>
+
+// CONSTANTS
+_LIT( KKeyMapSvgFile, "browser.mif" );
+
+// Value table for 70% Transparency
+const TInt KTransparency[256] =
+ {
+ 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7,
+ 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13,
+ 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19,
+ 19, 19, 20, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 24,
+ 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29,
+ 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35,
+ 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 40, 40, 40,
+ 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 46,
+ 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51,
+ 51, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 56,
+ 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62,
+ 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67,
+ 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 73,
+ 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77
+ };
+
+
+// keymap is 3x4
+#define KNumCellsX 3
+#define KNumCellsY 4
+#define KNumCells 12
+
+// spacing in pixels for scroll bars
+#define KKeymapHScrollbarSize 4
+#define KKeymapVScrollbarSize 4
+
+// sizing for entire keymap (not counting scrollbar)
+// as a percentage of vertical and horizontal screen size
+#define KKeymapVSize 0.90
+#define KKeymapHSize 0.90
+
+// margins for each cell
+#define KCellTopMargin 2
+#define KCellRightMargin 5
+#define KCellBotMargin 2
+#define KCellLeftMargin 5
+
+// Create constant icon assignments for each command
+// note that this follows TShortcutsCommandDecodeEntry in BrowserPreferences.h
+
+typedef const TInt TShortcutsIconAndTextDecodeEntry[2];
+
+#define KShortcutsIconAndTextAssignmentSize 22
+#define KShortcutsIconAndTextDecodeMatrixText 0 // First entry is the Text
+#define KShortcutsIconAndTextDecodeMatrixIcon 1 // Second entry is the Icon
+
+static const TShortcutsIconAndTextDecodeEntry KShortcutsIconAndTextAssignmentMatrix[] =
+{
+ /* 0 EWmlNoCmd, */ { R_BROWSER_KEYMAP_TEXT_NONE, EMbmBrowserQgn_indi_browser_tb_key_map },
+ /* 1 EWmlCmdHelp, */ { R_BROWSER_KEYMAP_TEXT_SHOW_HELP, EMbmBrowserQgn_indi_browser_tb_help },
+ /* 2 EWmlCmdSwitchWindow, */ { R_BROWSER_KEYMAP_TEXT_SWITCH_WINDOW, EMbmBrowserQgn_indi_browser_tb_switch_win },
+ /* 3 EWmlCmdSavePage, */ { R_BROWSER_KEYMAP_TEXT_SAVE_PAGE, EMbmBrowserQgn_indi_browser_tb_save_page },
+ /* 4 EWmlCmdShowImages, */ { R_BROWSER_KEYMAP_TEXT_VIEW_IMAGES, EMbmBrowserQgn_indi_browser_tb_view_images },
+ /* 5 EWmlCmdHistory, */ { R_BROWSER_KEYMAP_TEXT_VISUAL_HISTORY, EMbmBrowserQgn_indi_browser_tb_view_pages },
+ /* 6 EWmlCmdFavourites, */ { R_BROWSER_KEYMAP_TEXT_MANAGE_BOOKMARKS, EMbmBrowserQgn_indi_browser_tb_bm },
+ /* 7 EWmlCmdShowSubscribeList, */ { R_BROWSER_KEYMAP_TEXT_SUBSCRIBE_TO_FEEDS, EMbmBrowserQgn_indi_browser_tb_rss },
+ /* 8 EWmlCmdRotateDisplay, */ { R_BROWSER_KEYMAP_TEXT_ROTATE_SCREEN, EMbmBrowserQgn_indi_browser_tb_rotate },
+ /* 9 EWmlCmdPreferences, */ { R_BROWSER_KEYMAP_TEXT_SETTINGS, EMbmBrowserQgn_indi_browser_tb_settings },
+ /* 10 EWmlCmdZoomOut, */ { R_BROWSER_KEYMAP_TEXT_ZOOM_OUT, EMbmBrowserQgn_indi_browser_tb_zoom_out },
+ /* 11 EWmlCmdZoomIn, */ { R_BROWSER_KEYMAP_TEXT_ZOOM_IN, EMbmBrowserQgn_indi_browser_tb_zoom_in },
+ /* 12 EWmlCmdLaunchHomePage, */ { R_BROWSER_KEYMAP_TEXT_GO_TO_HOMEPAGE, EMbmBrowserQgn_indi_browser_tb_home },
+ /* 13 EWmlCmdOneStepBack, */ { R_BROWSER_KEYMAP_TEXT_PREVIOUS_PAGE, EMbmBrowserQgn_indi_browser_tb_back },
+ /* 14 EWmlCmdShowMiniature, */ { R_BROWSER_KEYMAP_TEXT_MINIATURE_SHOW, EMbmBrowserQgn_indi_browser_tb_page },
+ /* 15 EWmlCmdReload, */ { R_BROWSER_KEYMAP_TEXT_RELOAD, EMbmBrowserQgn_indi_browser_tb_reload },
+ /* 16 EWmlCmdFindKeyword, */ { R_BROWSER_KEYMAP_TEXT_FIND_KEYWORD, EMbmBrowserQgn_indi_browser_tb_find_kw },
+ /* 17 EWmlCmdSaveAsBookmark, */ { R_BROWSER_KEYMAP_TEXT_SAVE_AS_BOOKMARK, EMbmBrowserQgn_indi_browser_tb_save_bm },
+ /* 18 EWmlCmdGoToAddress, */ { R_BROWSER_KEYMAP_TEXT_GO_TO_WEB_ADDRESS, EMbmBrowserQgn_indi_browser_tb_goto },
+ /* 19 EWmlCmdShowToolBar, */ { R_BROWSER_KEYMAP_TEXT_SHOW_TOOLBAR, EMbmBrowserQgn_indi_browser_tb_tb },
+ /* 20 EWmlCmdShowShortcutKeymap, */ { R_BROWSER_KEYMAP_TEXT_SHOW_KEYMAP, EMbmBrowserQgn_indi_browser_tb_key_map },
+ /* 21 EWmlCmdEnterFullScreenBrowsing, */ { R_BROWSER_KEYMAP_TEXT_FULL_SCREEN, EMbmBrowserQgn_indi_button_exit_fs },
+};
+
+// key assignments
+static const TInt KDialpadAssignments[] =
+{
+ /* 0 */ R_BROWSER_KEYMAP_KEY0,
+ /* 1 */ R_BROWSER_KEYMAP_KEY1,
+ /* 2 */ R_BROWSER_KEYMAP_KEY2,
+ /* 3 */ R_BROWSER_KEYMAP_KEY3,
+ /* 4 */ R_BROWSER_KEYMAP_KEY4,
+ /* 5 */ R_BROWSER_KEYMAP_KEY5,
+ /* 6 */ R_BROWSER_KEYMAP_KEY6,
+ /* 7 */ R_BROWSER_KEYMAP_KEY7,
+ /* 8 */ R_BROWSER_KEYMAP_KEY8,
+ /* 9 */ R_BROWSER_KEYMAP_KEY9,
+ /* 10 */ R_BROWSER_KEYMAP_KEY10,
+ /* 11 */ R_BROWSER_KEYMAP_KEY11
+};
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TKeymapCellData::TKeymapCellData
+// TKeymapCellData Utility Class constructor
+// -----------------------------------------------------------------------------
+
+TKeymapCellData::TKeymapCellData() :
+ keyText(NULL),
+ lineText(NULL),
+ cmdRscId(NULL),
+ keyBitmapImage(NULL),
+ keyBitmapMask(NULL)
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// TKeymapCellData::TKeymapCellData
+// TKeymapCellData Utility Class destructor
+// -----------------------------------------------------------------------------
+TKeymapCellData::~TKeymapCellData()
+ {
+ if(keyText) delete keyText;
+ if(lineText) delete lineText;
+ if(keyBitmapImage) delete keyBitmapImage;
+ if(keyBitmapMask) delete keyBitmapMask;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::NewL
+// The two-phase Symbian constructor
+// -----------------------------------------------------------------------------
+//
+CBrowserShortcutKeyMap* CBrowserShortcutKeyMap::NewL( CBrowserContentViewContainer* aContentViewContainer, MApiProvider& aApiProvider )
+ {
+ CBrowserShortcutKeyMap* self = new (ELeave) CBrowserShortcutKeyMap( aContentViewContainer, aApiProvider );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(); //self
+ return self;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CBrowserShortcutKeyMap::~CBrowserShortcutKeyMap()
+ {
+ // Close out array and delete data members
+ iCellData.Close();
+
+ // cleanup svg mbm file name
+ if(iSvgMbmFile)
+ {
+ delete iSvgMbmFile;
+ iSvgMbmFile = NULL;
+ }
+
+ // Cleanup Sprite data
+ iSprite.Close();
+ if(iSpriteBitmapDevice)
+ {
+ delete iSpriteBitmapDevice;
+ iSpriteBitmapDevice = NULL;
+ }
+ if(iSpriteBitmapContext)
+ {
+ delete iSpriteBitmapContext;
+ iSpriteBitmapContext = NULL;
+ }
+ if(iSpriteBitmap)
+ {
+ delete iSpriteBitmap;
+ iSpriteBitmap = NULL;
+ }
+
+ if(iSpriteMaskBitmapDevice)
+ {
+ delete iSpriteMaskBitmapDevice;
+ iSpriteMaskBitmapDevice = NULL;
+ }
+ if(iSpriteMaskBitmapContext)
+ {
+ delete iSpriteMaskBitmapContext;
+ iSpriteMaskBitmapContext = NULL;
+ }
+ if(iSpriteMaskBitmap)
+ {
+ delete iSpriteMaskBitmap;
+ iSpriteMaskBitmap = NULL;
+ }
+
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::CBrowserShortcutKeyMap
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBrowserShortcutKeyMap::CBrowserShortcutKeyMap( CBrowserContentViewContainer* aContentViewContainer, MApiProvider& aApiProvider )
+ : iContentViewContainer( aContentViewContainer ), iApiProvider( aApiProvider )
+ {
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::ConstructL
+// The constructor that can contain code that might leave.
+// -----------------------------------------------------------------------------
+//
+void CBrowserShortcutKeyMap::ConstructL()
+ {
+ //LoadResourceFileL();
+ iSvgMbmFile = GetCannedImageDirL();
+ iSvgMbmFile->Des().Append( KKeyMapSvgFile );
+
+ InitKeymap();
+ CreateBitmapAndContextL();
+ ConstructSprite();
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::InitKeymap
+// Initialize Keymap properties
+// -----------------------------------------------------------------------------
+//
+void CBrowserShortcutKeyMap::InitKeymap()
+ {
+ // derive keymap's size from the container's size
+ iTargetRect = iContentViewContainer->Rect();
+
+ // resize it to account for scrollbar width/height
+ iTargetRect.Resize(-TSize(KKeymapHScrollbarSize,KKeymapVScrollbarSize));
+
+ TBool landscape = iTargetRect.Size().iWidth > iTargetRect.Size().iHeight ;
+
+ //
+ // derive shrink amounts based on keymap size constants and shrink the rect
+ //
+ TInt newHeight = (KKeymapVSize * iTargetRect.Size().iHeight);
+ TInt newWidth = (KKeymapHSize * iTargetRect.Size().iWidth);
+
+ if(newWidth > KKeymapHSize * iTargetRect.Size().iWidth)
+ {
+ newWidth = (KKeymapHSize * iTargetRect.Size().iWidth);
+ }
+
+ // shrink the height and width slightly
+ // as necessary to be evenly divisible by the rows/cols later on
+ TReal remainder;
+ TInt result;
+ result = Math::Mod(remainder,newWidth,KNumCellsX);
+ if((result == KErrNone) && (remainder != 0))
+ {
+ newWidth -= remainder;
+ }
+ result = Math::Mod(remainder,newHeight,KNumCellsY);
+ if((result == KErrNone) && (remainder != 0))
+ {
+ newHeight -= remainder;
+ }
+ TInt hShrink = (iTargetRect.Size().iWidth - newWidth)/2;
+ TInt vShrink = (iTargetRect.Size().iHeight - newHeight)/2;
+ iTargetRect.Shrink(TSize(hShrink,vShrink));
+
+ // Set font types
+ iLineFont = LatinPlain12();
+
+ if (landscape)
+ { // in landscape need to shrink the font or else it gets clipped
+ iKeyFont = LatinBold13();
+ }
+ else
+ {
+ iKeyFont = LatinBold16();
+ }
+
+ // init cell data
+ InitCellDataL();
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::InitCellDataL
+// Initialize Keymap data kept for each cell of the map
+// -----------------------------------------------------------------------------
+
+void CBrowserShortcutKeyMap::InitCellDataL()
+ {
+ for(TInt i = 0; i < KNumCells; i++)
+ {
+ TKeymapCellData* cellData = new (ELeave) TKeymapCellData();
+ CleanupStack::PushL(cellData);
+
+ TInt shortcutAssign;
+
+ // get the shortcut assignment from Browser Prefs
+ switch(i)
+ {
+ case 0:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey1Cmd();
+ break;
+ case 1:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey2Cmd();
+ break;
+ case 2:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey3Cmd();
+ break;
+ case 3:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey4Cmd();
+ break;
+ case 4:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey5Cmd();
+ break;
+ case 5:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey6Cmd();
+ break;
+ case 6:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey7Cmd();
+ break;
+ case 7:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey8Cmd();
+ break;
+ case 8:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey9Cmd();
+ break;
+ case 9:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKeyStarCmd();
+ break;
+ case 10:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey0Cmd();
+ break;
+ case 11:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKeyHashCmd();
+ break;
+ default:
+ shortcutAssign = iApiProvider.Preferences().ShortcutKey1Cmd();
+ break;
+ }
+
+ cellData->cmdRscId = KShortcutsIconAndTextAssignmentMatrix[shortcutAssign][KShortcutsIconAndTextDecodeMatrixText];
+ cellData->lineText = StringLoader::LoadLC(cellData->cmdRscId);
+
+ // get shortcut key assignments and set dialpad assignments
+ cellData->keyText = StringLoader::LoadLC(KDialpadAssignments[i]);
+
+ // load the icon its mask (use a default if we're out of range)
+ TInt iconId = EMbmBrowserQgn_indi_browser_tb_key_map;
+ if(shortcutAssign < KShortcutsIconAndTextAssignmentSize)
+ {
+ iconId = KShortcutsIconAndTextAssignmentMatrix[shortcutAssign][KShortcutsIconAndTextDecodeMatrixIcon];
+ }
+
+ if(shortcutAssign == NULL)
+ {
+ cellData->keyBitmapImage = NULL;
+ cellData->keyBitmapMask = NULL;
+ }
+ else
+ {
+ LoadSvg(iconId,
+ *iSvgMbmFile,
+ cellData->keyBitmapImage,
+ cellData->keyBitmapMask);
+ }
+
+ // add to the data array
+ iCellData.Append(cellData);
+
+ // remove cellData, keytext, linetext from stack
+ CleanupStack::Pop(3);
+ }
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::CreateBitmapAndContextL
+// Create the bitmap and context that will be used for the sprite
+// -----------------------------------------------------------------------------
+//
+void CBrowserShortcutKeyMap::CreateBitmapAndContextL()
+ {
+ // Create Sprite Bitmap
+ iSpriteBitmap = new (ELeave) CFbsBitmap;
+ User::LeaveIfError( iSpriteBitmap->Create( iTargetRect.Size(), EColor16MA ) );
+
+ iSpriteBitmapDevice = CFbsBitmapDevice::NewL( iSpriteBitmap );
+ User::LeaveIfError( iSpriteBitmapDevice->CreateContext( iSpriteBitmapContext ) );
+
+ // Create Mask Bitmap
+ iSpriteMaskBitmap = new (ELeave) CFbsBitmap;
+ User::LeaveIfError( iSpriteMaskBitmap->Create( iTargetRect.Size(), EColor16MA ) );
+ iSpriteMaskBitmapDevice = CFbsBitmapDevice::NewL( iSpriteMaskBitmap );
+ User::LeaveIfError( iSpriteMaskBitmapDevice->CreateContext( iSpriteMaskBitmapContext ) );
+
+ TRect r( TPoint( 0, 0 ), iSpriteMaskBitmap->SizeInPixels());
+
+ iSpriteMaskBitmapContext->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ iSpriteMaskBitmapContext->SetPenStyle( CGraphicsContext::ESolidPen );
+ iSpriteMaskBitmapContext->SetBrushColor( TRgb( 0, 0, 0) );
+ iSpriteMaskBitmapContext->SetPenColor( TRgb( 0, 0, 0) );
+ iSpriteMaskBitmapContext->DrawRect(r);
+
+ // Draw the rectangular outline
+ iSpriteBitmapContext->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ iSpriteBitmapContext->SetPenStyle( CGraphicsContext::ESolidPen );
+ iSpriteBitmapContext->SetBrushColor( TRgb( 242, 244, 242) );
+ iSpriteBitmapContext->SetPenColor( TRgb( 100, 100, 0) );
+ iSpriteBitmapContext->SetPenSize( TSize(2,2) );
+ iSpriteBitmapContext->DrawRect(r);
+
+ TSize cellSize(r.Width()/KNumCellsX,r.Height()/KNumCellsY);
+
+ for(TInt i = 0; i < KNumCellsY; i++)
+ {
+ for(TInt j = 0; j < KNumCellsX; j++)
+ {
+ TInt cellIndex(i*KNumCellsX + j);
+ CreateCellLayout( cellIndex, TPoint(j*cellSize.iWidth,i*cellSize.iHeight),cellSize);
+ CreateSpriteCellL( cellIndex );
+ }
+ }
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::CreateCellLayout
+// Calculate the layout of the sprite rects for a given cell
+// -----------------------------------------------------------------------------
+
+void CBrowserShortcutKeyMap::CreateCellLayout(const TInt& aCellIndex, const TPoint& aUpperL, const TSize& aSize)
+ {
+ // Create pointer for easy access curr Cell
+ TKeymapCellData* pCurrCell = iCellData[aCellIndex];
+
+ // Create rect for Cell
+ pCurrCell->r.SetRect(aUpperL, aSize);
+
+ // Internally, Our Cell is sized accounting for margin
+ // Setup this
+ TPoint marginOffset(KCellLeftMargin, KCellTopMargin);
+ TSize marginSize(KCellLeftMargin + KCellRightMargin, KCellTopMargin + KCellBotMargin);
+ pCurrCell->rCell.SetRect( aUpperL + marginOffset, aSize - marginSize );
+
+ // Upper LH key indicator
+ TInt keyFontHeight = iKeyFont->HeightInPixels() + iKeyFont->DescentInPixels();
+ pCurrCell->rKey.SetRect( pCurrCell->rCell.iTl, TSize(keyFontHeight, iKeyFont->MaxCharWidthInPixels()) );
+
+ // Prep the line rects, calculating the position based upon the font size
+ TInt lineFontHeight = iLineFont->HeightInPixels() + iLineFont->DescentInPixels();
+ TSize lineSize(pCurrCell->rCell.Width(),lineFontHeight);
+ TPoint lineAreaUpperLH(pCurrCell->rCell.iTl.iX, pCurrCell->rCell.iBr.iY - (2*lineSize.iHeight));
+
+ // Set this point to be the upper left of the line(s) of text.
+ // If we have two lines, this will be the upperLH of Line1
+ // If we have one line, this will be the upperLH of Line2
+ // This, we will use to set the rect size of the icon later
+ pCurrCell->rLine1.SetRect(lineAreaUpperLH,lineSize);
+ pCurrCell->rLine2.SetRect(lineAreaUpperLH + TPoint(0,lineSize.iHeight),lineSize);
+ TPoint linesUpperLH = pCurrCell->rLine1.iTl;
+
+ // CREATE the icon area from what is left over
+ TPoint iconUpperLH(pCurrCell->rCell.iTl + TPoint(pCurrCell->rKey.Size().iWidth,0));
+ TPoint iconLowerRH(pCurrCell->rCell.iBr.iX,linesUpperLH.iY);
+ pCurrCell->rIcon.SetRect(iconUpperLH,iconLowerRH);
+
+ // resize the icon rect to be square if its not already... according to its smallest dimension
+ if(pCurrCell->rIcon.Height() > pCurrCell->rIcon.Width())
+ {
+ TSize sizeChange(0,pCurrCell->rIcon.Width() - pCurrCell->rIcon.Height());
+ pCurrCell->rIcon.Resize(sizeChange);
+ pCurrCell->rIcon.Move(TPoint(0,-sizeChange.iHeight/2));
+ }
+ else if(pCurrCell->rIcon.Width() > pCurrCell->rIcon.Height())
+ {
+ TSize sizeChange(pCurrCell->rIcon.Height() - pCurrCell->rIcon.Width(),0);
+ pCurrCell->rIcon.Resize(sizeChange);
+ pCurrCell->rIcon.Move(TPoint(-sizeChange.iWidth/2,0));
+ }
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::CreateSpriteCellL
+// Draw the sprite rects to the sprite bitmap
+// ----------------------------------------------------------------------------
+
+void CBrowserShortcutKeyMap::CreateSpriteCellL(const TInt& aCellIndex)
+ {
+ // Create pointer for easy access curr Cell
+ TKeymapCellData* pCurrCell = iCellData[aCellIndex];
+
+ TBool ShowDim = EFalse;
+
+
+ // Draw rect for Cell
+ iSpriteBitmapContext->SetPenSize( TSize(1,1) );
+ iSpriteBitmapContext->SetPenStyle( CGraphicsContext::ESolidPen );
+ iSpriteBitmapContext->SetPenColor( TRgb( 0, 0, 0) );
+ iSpriteBitmapContext->DrawRect(pCurrCell->r);
+
+
+
+ // DRAW TEXT
+ iSpriteBitmapContext->SetPenColor( TRgb( 0, 0, 0) );
+
+ // Draw key text
+ if(pCurrCell->keyText)
+ {
+ iSpriteBitmapContext->UseFont( iKeyFont );
+ iSpriteBitmapContext->DrawText(pCurrCell->keyText->Des(),
+ pCurrCell->rKey, iKeyFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
+ }
+
+ // For line1, line2 text, we need to first wrap them
+ // based upon the width of their enclosing rectangles
+ if(pCurrCell->lineText)
+ {
+ CArrayFixFlat<TInt> *lineWidthArray = new( ELeave ) CArrayFixFlat<TInt>(2);
+ lineWidthArray->AppendL(pCurrCell->rLine1.Width());
+ lineWidthArray->AppendL(pCurrCell->rLine2.Width());
+
+ CArrayFixFlat<TPtrC> *WrappedArray = new( ELeave ) CArrayFixFlat<TPtrC>(3);
+ pCurrCell->lineText = pCurrCell->lineText->ReAllocL(pCurrCell->lineText->Length() + lineWidthArray->Count() * KAknBidiExtraSpacePerLine);
+ TPtr ptr(pCurrCell->lineText->Des());
+ AknBidiTextUtils::ConvertToVisualAndWrapToArrayL( ptr,*lineWidthArray, *iLineFont, *WrappedArray, EFalse );
+ iSpriteBitmapContext->UseFont( iLineFont );
+ iSpriteBitmapContext->DrawText(WrappedArray->At(0),
+ pCurrCell->rLine2, iLineFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
+
+ if(WrappedArray->Count() >= 2)
+ {
+ iSpriteBitmapContext->DrawText(WrappedArray->At(0),
+ pCurrCell->rLine1, iLineFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
+ iSpriteBitmapContext->DrawText(WrappedArray->At(1),
+ pCurrCell->rLine2, iLineFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
+ }
+
+
+ // Set dim flag if needed
+ switch (pCurrCell->cmdRscId)
+ {
+ case R_BROWSER_KEYMAP_TEXT_SWITCH_WINDOW:
+ { //EWmlCmdSwitchWindow;
+ ShowDim = ( !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) ||
+ iApiProvider.IsEmbeddedModeOn() ||
+ iApiProvider.WindowMgr().WindowCount() < 2);
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_VIEW_IMAGES:
+ { //EWmlCmdShowImages;
+ ShowDim = ( !iApiProvider.BrCtlInterface().ImageCountL() );
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_SUBSCRIBE_TO_FEEDS:
+ { // EWmlCmdShowSubscribeList
+ CBrCtlInterface& brctl = iApiProvider.BrCtlInterface();
+ TBool subscribeToItems(EFalse);
+ TRAPD(err, const RPointerArray<TBrCtlSubscribeTo>& items = brctl.SubscribeToMenuItemsL();
+ subscribeToItems = (err == KErrNone && items.Count() > 0));
+ ShowDim = !subscribeToItems;
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_GO_TO_HOMEPAGE:
+ { // EWmlCmdLaunchHomePage
+ ShowDim = iApiProvider.IsLaunchHomePageDimmedL();
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_PREVIOUS_PAGE:
+ { // EWmlCmdOneStepBack
+ ShowDim = (!iApiProvider.BrCtlInterface().NavigationAvailable(TBrCtlDefs::ENavigationBack ) );
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_MINIATURE_SHOW:
+ { //EWmlCmdShowMiniature;
+ ShowDim = ( !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) ||
+ iApiProvider.WindowMgr().CurrentWindow()->HasWMLContent(ETrue) );
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_SHOW_TOOLBAR:
+ { //EWmlCmdShowToolBar;
+ if ( !AknLayoutUtils::PenEnabled() && iApiProvider.Preferences().ShowToolbarOnOff() )
+ {
+ ShowDim = iApiProvider.WindowMgr().CurrentWindow()->WMLMode();
+ }
+ else
+ {
+ ShowDim = ETrue;
+ }
+ break;
+ }
+
+ case R_BROWSER_KEYMAP_TEXT_SAVE_AS_BOOKMARK:
+ { //EWmlCmdSaveAsBookmark;
+ if ( iApiProvider.IsEmbeddedModeOn() && CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu() )
+ {
+ ShowDim = ETrue;
+ }
+ else
+ {
+ HBufC *pageUrl = iApiProvider.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( ( pageUrl == NULL ) || ( pageUrl->Length() == 0 ) )
+ {
+ ShowDim = ETrue;
+ }
+ CleanupStack::PopAndDestroy( pageUrl );
+ }
+ break;
+ }
+
+ /* Zoom Mode currently disabled
+ case R_BROWSER_KEYMAP_TEXT_ZOOM_MODE:
+ { //EWmlCmdZoomMode;
+
+ ShowDim = ( iApiProvider.WindowMgr().CurrentWindow()->WMLMode() ||
+ !iApiProvider.ContentDisplayed() ||
+ AknLayoutUtils::PenEnabled() );
+ break;
+ }
+ */
+
+ default:
+ break;
+ }
+ }
+
+ // DRAW the icon,
+ // setting the icon size according to iconRect
+ if(pCurrCell->keyBitmapImage != NULL && pCurrCell->keyBitmapMask != NULL)
+ {
+ AknIconUtils::SetSize(pCurrCell->keyBitmapImage, pCurrCell->rIcon.Size() );
+ AknIconUtils::SetSize(pCurrCell->keyBitmapMask, pCurrCell->rIcon.Size() );
+
+ if (ShowDim)
+ {
+ CFbsBitmap* keyBitmapDimImage;
+ CFbsBitmap* keyBitmapDimMask;
+
+ CreateDimBitmapL(pCurrCell->keyBitmapImage,
+ pCurrCell->keyBitmapMask,
+ keyBitmapDimImage,
+ keyBitmapDimMask);
+
+ iSpriteBitmapContext->BitBltMasked(pCurrCell->rIcon.iTl,
+ keyBitmapDimImage,
+ TRect(TPoint(0, 0),pCurrCell->rIcon.Size() ),
+ keyBitmapDimMask,
+ ETrue);
+
+ delete keyBitmapDimImage;
+ delete keyBitmapDimMask;
+ }
+ else
+ {
+ iSpriteBitmapContext->BitBltMasked(pCurrCell->rIcon.iTl,
+ pCurrCell->keyBitmapImage,
+ TRect(TPoint(0, 0),pCurrCell->rIcon.Size() ),
+ pCurrCell->keyBitmapMask,
+ ETrue);
+ }
+ }
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::ConstructSprite
+// Construct the Sprite from the bitmap and context
+// -----------------------------------------------------------------------------
+//
+void CBrowserShortcutKeyMap::ConstructSprite()
+ {
+ iSprite = RWsSprite( CEikonEnv::Static()->WsSession() );
+ RWindowTreeNode *window = iContentViewContainer->DrawableWindow();
+ iSprite.Construct(*window,iTargetRect.iTl,ESpriteNoChildClip);
+
+ TSpriteMember spriteMem;
+ spriteMem.iBitmap = iSpriteBitmap;
+ spriteMem.iMaskBitmap = iSpriteMaskBitmap;
+ spriteMem.iInvertMask = ETrue;
+ iSprite.AppendMember(spriteMem);
+
+ iSprite.SetPosition(iTargetRect.iTl);
+ iSprite.Activate();
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::GetCannedImageDirL
+// Utility: Get the folder where the canned image is located
+// -----------------------------------------------------------------------------
+//
+HBufC* CBrowserShortcutKeyMap::GetCannedImageDirL( )
+ {
+ HBufC* mbmFile = NULL;
+ TParse parse;
+
+ // Get the drive letter where mbm resides.. it will be the same
+ // as this AppUi (browser ng)
+ CEikAppUi* pAppUI = (CEikAppUi*)(CCoeEnv::Static()->AppUi());
+ TFileName mbmDrive = pAppUI->Application()->DllName();
+
+ parse.Set( mbmDrive, NULL, NULL );
+ mbmDrive = parse.Drive();
+
+ // allocate memory for MBM file name
+ mbmFile = HBufC::NewL( KMaxFileName );
+
+ // assemble the MBM file name
+ TPtr ptr( mbmFile->Des() );
+ ptr.SetLength( 0 );
+ ptr.Append( mbmDrive );
+ ptr.Append( KDC_APP_BITMAP_DIR );
+ return mbmFile;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::LoadSvg
+// Utility: get the SVG bitmaps, etc, given its filename
+// -----------------------------------------------------------------------------
+//
+void CBrowserShortcutKeyMap::LoadSvg(
+ TInt aImageId,
+ const TDesC& aFileName,
+ CFbsBitmap*& aImage ,
+ CFbsBitmap*& aImageMask )
+ {
+ // Don't skin icons--at least for now.
+ TRAPD(error, AknIconUtils::CreateIconL( aImage,
+ aImageMask,
+ aFileName,
+ aImageId,
+ aImageId+1));
+
+ if (error!=KErrNone)
+ {
+ return;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserShortcutKeyMap::CreateDimBitmap
+// Utility: Create Dimmed version of Bitmap
+// -----------------------------------------------------------------------------
+//
+void CBrowserShortcutKeyMap::CreateDimBitmapL(
+ CFbsBitmap* aImage,
+ CFbsBitmap* aImageMask,
+ CFbsBitmap*& aDimImage,
+ CFbsBitmap*& aDimImageMask)
+ {
+
+ aDimImage = new ( ELeave ) CFbsBitmap;
+ CleanupStack::PushL( aDimImage );
+
+ aDimImage->Duplicate( aImage->Handle() );
+
+ aDimImageMask = new ( ELeave ) CFbsBitmap;
+
+ User::LeaveIfError( aDimImageMask->Create(aDimImage->SizeInPixels(),
+ EGray256 ) );
+
+ CleanupStack::PushL( aDimImageMask );
+
+ CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( aDimImageMask );
+ CleanupStack::PushL( bitmapDevice );
+
+ CFbsBitGc* bitGc( NULL );
+ User::LeaveIfError( bitmapDevice->CreateContext( bitGc ) );
+ CleanupStack::PushL( bitGc );
+
+ bitGc->SetPenStyle( CGraphicsContext::ESolidPen );
+ bitGc->BitBlt( TPoint( 0, 0 ), aImageMask );
+
+
+ aDimImageMask->LockHeap();
+ TInt w = aImageMask->SizeInPixels().iWidth;
+ TInt h = aImageMask->SizeInPixels().iHeight;
+ TInt dataStride = aImageMask->DataStride() - w;
+ unsigned char* address = (unsigned char *)aDimImageMask->DataAddress();
+
+ for ( TInt i = 0; i < h; ++i )
+ {
+ for ( TInt j = 0; j < w; ++j )
+ {
+ *address = KTransparency[*address];
+ ++address;
+ }
+ address += dataStride;
+ }
+
+ aDimImageMask->UnlockHeap();
+
+ CleanupStack::PopAndDestroy( 2 ); // bitmapDevice, bitGc
+ CleanupStack::Pop( 2 ); // aDimImage, aDimImageMask
+
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserSoftkeysObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handle special load events such as network connection, deal with non-http or non-html requests
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "BrowserSoftkeysObserver.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "BrowserContentView.h"
+
+// ---------------------------------------------------------
+// CBrowserSoftkeysObserver::NewL()
+// ---------------------------------------------------------
+//
+CBrowserSoftkeysObserver* CBrowserSoftkeysObserver::NewL(
+ CBrowserWindow& aWindow )
+ {
+ CBrowserSoftkeysObserver* self = new (ELeave)
+ CBrowserSoftkeysObserver( aWindow );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSoftkeysObserver::~CBrowserSoftkeysObserver()
+// ---------------------------------------------------------
+//
+CBrowserSoftkeysObserver::~CBrowserSoftkeysObserver()
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserSoftkeysObserver::UpdateSoftkeyL()
+// ---------------------------------------------------------
+//
+void CBrowserSoftkeysObserver::UpdateSoftkeyL(
+ TBrCtlKeySoftkey /* aKeySoftkey */,
+ const TDesC& /* aLabel */,
+ TUint32 /* aCommandId */,
+ TBrCtlSoftkeyChangeReason /* aReason */ )
+ {
+ // update only the active window's softkeys
+ if( iWindow->IsWindowActive() )
+ {
+ CBrowserContentView* cv = iWindow->WindowMgr().ContentView();
+ if( cv )
+ {
+ cv->UpdateCbaL();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserSoftkeysObserver::CBrowserSoftkeysObserver()
+// ---------------------------------------------------------
+//
+CBrowserSoftkeysObserver::CBrowserSoftkeysObserver(
+ CBrowserWindow& aWindow ) :
+ iWindow( &aWindow )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserSoftkeysObserver::ConstructL()
+// ---------------------------------------------------------
+//
+void CBrowserSoftkeysObserver::ConstructL()
+ {
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserSpecialLoadObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1102 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handle special load events such as network connection,
+* deal with non-http or non-html requests
+*
+*/
+
+
+// INCLUDE FILES
+#include <browser_platform_variant.hrh>
+#include "BrowserContentView.h" // not used, to be removed
+#include "BrowserSpecialLoadObserver.h"
+#include "BrowserLoadObserver.h"
+#include "logger.h"
+#include "BrowserAppDocument.h"
+#include "ApiProvider.h"
+#include "Preferences.h"
+#include "BrowserUIVariant.hrh"
+#include "Display.h"
+#include "BrowserAppUi.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "CommonConstants.h"
+#ifdef __WINS__
+ #include <commdb.h>
+ #include <aknselectionlist.h>
+ #include <AknLists.h>
+#endif // __WINS__
+#include <DocumentHandler.h>
+#include <mconnection.h> // for MConnection
+#include <schemehandler.h>
+#include <BrowserNG.rsg>
+#include <FeatMgr.h>
+#include <AiwGenericParam.h>
+#include <aknnavi.h>
+
+//CONSTANTS
+const TInt KMaxDocHandlerUrlLen = 255;
+//DestNetChange
+#include <CmApplicationSettingsUi.h>
+
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::NewL()
+// ---------------------------------------------------------
+//
+CBrowserSpecialLoadObserver* CBrowserSpecialLoadObserver::NewL(
+ MApiProvider& aApiProvider,
+ CBrowserWindow* aWindow,
+ CEikDocument* aDocument,
+ CBrowserContentView* aContentView )
+ {
+ CBrowserSpecialLoadObserver* self =
+ new (ELeave) CBrowserSpecialLoadObserver(
+ aApiProvider, aWindow, aDocument, aContentView );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::~CBrowserSpecialLoadObserver()
+// ---------------------------------------------------------
+//
+CBrowserSpecialLoadObserver::~CBrowserSpecialLoadObserver()
+ {
+ delete iSchemeHandler;
+ delete iDocHandler;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::CBrowserSpecialLoadObserver()
+// ---------------------------------------------------------
+//
+CBrowserSpecialLoadObserver::CBrowserSpecialLoadObserver(
+ MApiProvider& aApiProvider,
+ CBrowserWindow* aWindow,
+ CEikDocument* aDocument,
+ CBrowserContentView* aContentView ) :
+ iApiProvider( &aApiProvider ),
+ iWindow( aWindow ),
+ iDocument( aDocument ),
+ iSchemeHandler( NULL ),
+ iContentView( aContentView ),
+ iSchemeProcessing( EFalse ),
+ iLongZeroStartup( EFalse ),
+ iConnectionStarted( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::ConstructL()
+// ---------------------------------------------------------
+//
+void CBrowserSpecialLoadObserver::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::NetworkConnectionNeededL()
+// ---------------------------------------------------------
+//
+void CBrowserSpecialLoadObserver::NetworkConnectionNeededL(
+ TInt* aConnectionPtr,
+ TInt* aSockSvrHandle,
+ TBool* aNewConn,
+ TApBearerType* aBearerType )
+ {
+LOG_ENTERFN("CBrowserSpecialLoadObserver::NetworkConnectionNeededL");
+
+ __ASSERT_DEBUG( (aConnectionPtr != NULL), Util::Panic( Util::EUninitializedData ) );
+ __ASSERT_DEBUG( (aSockSvrHandle != NULL), Util::Panic( Util::EUninitializedData ) );
+ __ASSERT_DEBUG( (aNewConn != NULL), Util::Panic( Util::EUninitializedData ) );
+ __ASSERT_DEBUG( (aBearerType != NULL), Util::Panic( Util::EUninitializedData ) );
+
+#ifdef BRDO_OCC_ENABLED_FF
+ TBool retryFlag = CBrowserAppUi::Static()->GetRetryFlag();
+ if( retryFlag )
+ {
+ BROWSER_LOG((_L("Retry is in progress")));
+ return;
+ }
+#endif
+
+ iApiProvider->SetProgressShown( ETrue );
+ TBool query( EFalse );
+ if( iApiProvider->Connection().Connected() )
+ {
+ TInt a( iWindow->WindowId() );
+ BROWSER_LOG( ( _L( "already connected, WindowId: %d" ), a ) );
+ *aConnectionPtr = (TInt) &iApiProvider->Connection().Connection();
+ *aSockSvrHandle = iApiProvider->Connection().SocketServer().Handle();
+ *aNewConn = EFalse;
+ *aBearerType = iApiProvider->Connection().CurrentBearerTypeL();
+ }
+ else
+ {
+ BROWSER_LOG((_L("not connected.")));
+ *aNewConn = ETrue;
+ TBool isValid( EFalse );
+ TUint32 ap( 0 );
+ TInt err( KErrNone );
+
+ BROWSER_LOG((_L("AP selectionMode: %d."),
+ iApiProvider->Preferences().AccessPointSelectionMode() ));
+
+ //determine the type of connection
+ switch (iApiProvider->Preferences().AccessPointSelectionMode() )
+ {
+ case EAlwaysAsk:
+ {
+ BROWSER_LOG((_L("always ask.")));
+ // Always ask
+ isValid = ETrue;
+ break;
+ }
+
+ case EDestination:
+ {
+ isValid = ETrue; // force to show LAN connection dialog
+
+#ifdef __WINS__
+ query = ETrue; // disable connection query dialog
+#endif // __WINS__
+
+ // for bug fix MLAN-7EKFV4, if bookmark has defined its AP, use it
+ if ( iApiProvider->RequestedAp() != KWmlNoDefaultAccessPoint )
+ {
+ #ifndef __WINS__
+ ap = Util::IapIdFromWapIdL(
+ *iApiProvider, iApiProvider->RequestedAp() );
+ BROWSER_LOG((_L("ap: %d"), ap));
+ #else // __WINS__
+ // On WINS no need to convert the AP ID
+ ap = iApiProvider->RequestedAp();
+ #endif // __WINS__
+
+ iApiProvider->Connection().SetRequestedAP( ap );
+ iApiProvider->Connection().SetConnectionType( EConnectionMethod );
+ }
+ else
+ {
+ TUint32 snapId = iApiProvider->Preferences().DefaultSnapId();
+ //connection type is destination nw
+ iApiProvider->Connection().SetConnectionType( EDestination );
+ //set snap id
+ iApiProvider->Connection().SetRequestedSnap( snapId );
+ }
+ break;
+ }
+
+ case EConnectionMethod:
+ {
+ BROWSER_LOG((_L("user defined.")));
+ // User defined
+
+ TRAP( err, isValid = Util::CheckApValidityL( *iApiProvider,
+ iApiProvider->RequestedAp() ));
+ BROWSER_LOG((_L("isValid 1: %d"), isValid));
+ BROWSER_LOG((_L("err: %d"), err));
+ if( isValid )
+ { // valid AP, get it
+#ifndef __WINS__
+ ap = Util::IapIdFromWapIdL(
+ *iApiProvider, iApiProvider->RequestedAp() );
+ BROWSER_LOG((_L("ap: %d"), ap));
+#else // __WINS__
+ // On WINS no need to convert the AP ID
+ ap = iApiProvider->RequestedAp();
+#endif // __WINS__
+ }
+ else if( err == KErrNone )
+ { // still try to get AP
+ TUint apUid = iApiProvider->Preferences().DefaultAccessPoint();
+
+ BROWSER_LOG((_L("apUid: %d"), apUid));
+
+ if ( apUid == KWmlNoDefaultAccessPoint )
+ {
+#ifdef __WINS__
+ query = ETrue; // disable connection query dialog
+ isValid = ETrue; // force to show LAN connection dialog
+#else // __WINS__
+ BROWSER_LOG((_L("StartPrefView.")));
+ // there are no AP, show preferences view without always ask
+ isValid = iApiProvider->StartPreferencesViewL( EShowDestinations | EShowConnectionMethods );
+ if( isValid )
+ {
+ if( iApiProvider->Preferences().AccessPointSelectionMode() == EConnectionMethod )
+ {
+ ap = iApiProvider->Preferences().DefaultAccessPoint();
+ }
+ // else if EDestination, user choosed SNAP in preference view
+ }
+#endif // __WINS__
+ }
+ }
+
+ //set connection type and AP or SNAP Id
+ if( iApiProvider->Preferences().AccessPointSelectionMode() == EDestination )
+ {
+ TUint32 snapId = iApiProvider->Preferences().DefaultSnapId();
+ iApiProvider->Connection().SetConnectionType( EDestination );
+ iApiProvider->Connection().SetRequestedSnap( snapId );
+ }
+ else // EConnectionMethod
+ {
+ iApiProvider->Connection().SetRequestedAP( ap );
+ iApiProvider->Connection().SetConnectionType( EConnectionMethod );
+ }
+ break;
+ }
+
+ default:
+ {
+ BROWSER_LOG((_L("wrong type of connection")));
+ }
+ } //switch
+
+ BROWSER_LOG((_L("isValid 2: %d"), isValid));
+ if( isValid )
+ {
+ iConnectionCancelled = EFalse;
+ if( !iApiProvider->Connection().Connected() )
+ {
+ iApiProvider->Connection().SetRequestedAP( ap );
+
+ TBool startPage = iWindow->LoadObserver().LoadUrlType() ==
+ CBrowserLoadObserver::ELoadUrlTypeStartPage;
+ TBool noConnDlgs = !iApiProvider->Preferences().ShowConnectionDialogs();
+
+ // Disable connection dialogs if...
+ TBool disableConnDlgs =
+ query ||
+ startPage || // ...the load type is StartPage
+ noConnDlgs || // ...connection dialogs setting = OFF
+ LongZeroStartup(); // ...Browser started with long zero keypress
+ SetLongZeroStartup( EFalse );
+
+ BROWSER_LOG((_L("StartConnection params, query: %d, temp: %d"), query, disableConnDlgs));
+ iConnectionStarted = ETrue; // is true when connection request submited.
+#ifndef __WINS__
+ TUint32 bookmarkIap( 0 );
+ //If bookmark has defined its AP, use it
+ if ( iApiProvider->RequestedAp() != KWmlNoDefaultAccessPoint )
+ {
+ bookmarkIap = Util::IapIdFromWapIdL( *iApiProvider, iApiProvider->RequestedAp() );
+ BROWSER_LOG((_L("Bookmark Iap: %d"), bookmarkIap));
+ iApiProvider->Connection().SetRequestedAP( bookmarkIap );
+ iApiProvider->Connection().SetConnectionType( EConnectionMethod );
+ }
+ else
+ {
+ iApiProvider->Connection().SetRequestedAP( bookmarkIap );
+ BROWSER_LOG((_L("Setting Bookmark Iap: %d"), bookmarkIap));
+ }
+#endif
+ // might leave, don't TRAP. OK.
+ err = iApiProvider->Connection().StartConnectionL( disableConnDlgs );
+ iConnectionStarted = EFalse; // is false when connection response completed.
+ }
+
+ // during StartConnectionL user pressing "Stop" can cancel
+ if (iConnectionCancelled)
+ {
+ err = KErrCancel;
+ }
+ BROWSER_LOG((_L("err after StartConnection: %d"), err));
+
+ if( err == KErrNone )
+ {
+ *aConnectionPtr = (TInt) &iApiProvider->Connection().Connection();
+ *aSockSvrHandle = iApiProvider->Connection().SocketServer().Handle();
+ *aBearerType = iApiProvider->Connection().CurrentBearerTypeL();
+ }
+
+ CBrowserAppUi::Static()->ConnNeededStatusL( err );
+ if (( err == KErrCancel ) && !iApiProvider->IsPageLoaded())
+ {
+ // Close Browser's Content View window if connection setup is cancelled to avoid a blank white screen
+ // ** Don't do this is page was previously loaded and is visible to user.
+ // ALSO, if feeds are enabled, don't close the window if coming from feeds folder view
+ // or in topic or feed views
+
+ // *** Changing back to CloseContentView as a part of the new Browser exit functionality
+#ifdef __RSS_FEEDS
+ TUid previousViewID = iApiProvider->LastActiveViewId();
+ if( (previousViewID != KUidBrowserFeedsFolderViewId) &&
+ (previousViewID != KUidBrowserFeedsTopicViewId) &&
+ (previousViewID != KUidBrowserFeedsFeedViewId) )
+ {
+ iApiProvider->Display().NaviPaneL()->Pop();
+ CBrowserAppUi::Static()->CloseContentViewL();
+ }
+#else //__RSS_FEEDS
+ CBrowserAppUi::Static()->CloseContentViewL();
+#endif //__RSS_FEEDS
+ }
+ else if( err == KErrGeneral )
+ {
+ if( !iApiProvider->Preferences().HttpSecurityWarningsStatSupressed() )
+ {
+ iWindow->Display().UpdateSecureIndicatorL(
+ EAknIndicatorStateOff );
+ }
+ }
+ // user might cancel, pass result to BrowserEngine
+ User::LeaveIfError( err );
+ iApiProvider->Display().StartProgressAnimationL();
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::DoHandleRequestL()
+// ---------------------------------------------------------
+//
+TBool CBrowserSpecialLoadObserver::DoHandleRequestL
+ ( RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray )
+ {
+ LOG_ENTERFN("CBrowserSpecialLoadObserver::HandleRequestL");
+
+ if( !iSchemeProcessing )
+ {
+ iSchemeProcessing = ETrue;
+ TBool paramFound( EFalse );
+ TPtrC requestUrl = ExtractBrCtlParam(
+ EParamRequestUrl,
+ aTypeArray,
+ aDesArray,
+ paramFound );
+ __ASSERT_DEBUG( paramFound, Util::Panic( Util::EUninitializedData ) );
+ BROWSER_LOG( ( _L( " EParamRequestUrl: %S" ), &requestUrl ) );
+
+ // pass to the CSchemaHandler
+ CSchemeHandler* newSH = CSchemeHandler::NewL( requestUrl );
+ delete iSchemeHandler;
+ iSchemeHandler = newSH;
+ BROWSER_LOG( ( _L( " iSchemeHandler OK" ) ) );
+
+ // construct the current accesspoint
+ // if it's connected, always add it
+ if ( iApiProvider->Connection().Connected() )
+ {
+ CAiwGenericParamList* paramsList = CAiwGenericParamList::NewL();
+ CleanupStack::PushL(paramsList);
+ TInt32 ap = iApiProvider->Connection().CurrentAPId();
+ TAiwVariant paramVariant (ap);
+ TAiwGenericParam genericParam( EGenericParamAccessPoint, paramVariant );
+ paramsList->AppendL (genericParam );
+
+
+ // set the parameter
+ iSchemeHandler->SetParameterList( paramsList );
+
+ CleanupStack::Pop();
+ }
+
+ iSchemeHandler->Observer( this );
+ iSchemeHandler->HandleUrlEmbeddedL();
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::HandleRequestL()
+// ---------------------------------------------------------
+//
+TBool CBrowserSpecialLoadObserver::HandleRequestL
+ ( RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray )
+ {
+ TBool ret( ETrue );
+ TRAPD( err, DoHandleRequestL( aTypeArray, aDesArray ) );
+ if( KErrNone != err )
+ {
+ iSchemeProcessing = EFalse;
+ User::Leave( err );
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::HandleDownloadL()
+// ---------------------------------------------------------
+//
+TBool CBrowserSpecialLoadObserver::HandleDownloadL
+ ( RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray )
+ {
+ LOG_ENTERFN("CBrowserSpecialLoadObserver::HandleDownloadL");
+
+ TBool downloadHandled = EFalse;
+
+#ifdef __RSS_FEEDS
+ // Check to see if this is content to be handled by UI (rss or opml)
+ //
+ if (HandleUiContentL(aTypeArray, aDesArray))
+ {
+ return ETrue;
+ }
+#endif // __RSS_FEEDS
+
+ CBrowserAppDocument* appDoc = STATIC_CAST( CBrowserAppDocument*, iDocument );
+
+ __ASSERT_DEBUG( (appDoc != NULL), Util::Panic( Util::EUninitializedData ) );
+
+ if ( appDoc->IsContentHandlerRegistered() )
+ {
+ BROWSER_LOG( ( _L( "Calling file handler." ) ) );
+
+ TBool paramFound( EFalse );
+ TPtrC fileName = ExtractBrCtlParam(
+ EParamLocalFileName,
+ aTypeArray,
+ aDesArray,
+ paramFound );
+ __ASSERT_DEBUG( paramFound, Util::Panic( Util::EUninitializedData ) );
+
+ if ( fileName.Length() == 0 )
+ {
+ // May be a Rights Object download -
+ // no downloaded file, nothing to open/handle/pass to BrowserLauncher client.
+ BROWSER_LOG( ( _L( " Empty fileName" ) ) );
+ }
+ else
+ {
+ CAiwGenericParamList* genericParamList =
+ BrCtlParamList2GenericParamListL( aTypeArray, aDesArray );
+ CleanupStack::PushL( genericParamList );
+
+ // Forward the file to the registered handler.
+ TBool continueBrowsing( EFalse );
+ downloadHandled = CBrowserAppUi::Static()->HandleContentL
+ ( fileName, *genericParamList, continueBrowsing );
+ BROWSER_LOG( ( _L( " downloadHandled: %d, continueBrowsing: %d" ),
+ downloadHandled, continueBrowsing ) );
+
+ CleanupStack::PopAndDestroy( genericParamList ); // genericParamList
+
+ if ( downloadHandled )
+ {
+ // We can delete the file now.
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL( fs );
+ fs.Delete( fileName ); // Return value is ignored.
+ CleanupStack::PopAndDestroy( &fs ); // fs
+ }
+
+ if ( !continueBrowsing )
+ {
+ iApiProvider->SetExitFromEmbeddedMode( ETrue );
+ }
+ }
+ }
+ else
+ {
+ // No handler registered.
+ BROWSER_LOG( ( _L( " No handler registered." ) ) );
+ }
+
+ // If the download (file) was not handled,
+ // the BrowserUI handles it with Document Handler.
+ if ( !downloadHandled )
+ {
+ // This content must be handled by BrowserUI - Browser Control cannot handle it.
+ OpenFileEmbeddedL( aTypeArray, aDesArray );
+ downloadHandled = ETrue;
+ }
+
+ BROWSER_LOG( ( _L( " downloadHandled: [%d]" ), (TInt)downloadHandled ) );
+ return downloadHandled;
+ }
+
+#ifdef __RSS_FEEDS
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::HandleUiContentL()
+// ---------------------------------------------------------
+//
+TBool CBrowserSpecialLoadObserver::HandleUiContentL(
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray ) const
+ {
+ TDataType dataType;
+
+ TBool contentTypeFound( EFalse );
+ TBool urlFound( EFalse );
+ TBool fileFound( EFalse );
+ TBool result( EFalse );
+
+ TPtrC receivedContentType = ExtractBrCtlParam(
+ EParamReceivedContentType,
+ aTypeArray,
+ aDesArray,
+ contentTypeFound );
+
+ TPtrC url = ExtractBrCtlParam(
+ EParamRequestUrl,
+ aTypeArray,
+ aDesArray,
+ urlFound );
+
+
+ TPtrC fileName = ExtractBrCtlParam(
+ EParamLocalFileName,
+ aTypeArray,
+ aDesArray,
+ fileFound );
+
+ // Compare returns 0 if the strings are the same
+ if ((receivedContentType.Compare(KMimeTypeAppXML) == 0) ||
+ (receivedContentType.Compare(KMimeTypeTextXML) == 0) ||
+ (receivedContentType.Compare(KMimeTypeRSS) == 0) ||
+ (receivedContentType.Compare(KMimeTypeAtom) == 0) ||
+ (receivedContentType.Compare(KMimeTypeRDF) == 0) ||
+ (receivedContentType.Compare(KOPMLMimeType) == 0) ||
+ //++PK added check for Text/xml content-type, only T is in caps, should make string check case insensitive
+ (receivedContentType.Compare(KMimeTypeCapsTextXML) == 0)
+ //++PK
+ )
+ {
+ if (fileFound)
+ {
+ RFs rfs;
+ RFile rfile;
+
+ // Open the file.
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ TInt fileResult( rfile.Open( rfs, fileName, EFileRead ) );
+ // file open doesn't succeeded
+ User::LeaveIfError( fileResult );
+ if( fileResult == KErrNone )
+ {
+ CleanupClosePushL( rfile );
+
+ TBuf<KMaxDataTypeLength> dataTypeDes;
+ TBool deleteOpml = EFalse;
+
+ if(CBrowserAppUi::Static()->RecognizeUiFileL(rfile, dataTypeDes))
+ {
+ TFileName fileNameBuf = TFileName(fileName);
+ TFileName truncFileName;
+ User::LeaveIfError( rfile.Name(truncFileName) );
+
+ // Confirm with user that we want to handle it
+ if(CBrowserAppUi::Static()->ConfirmUiHandlingL(truncFileName, dataTypeDes))
+ {
+ // Have AppUI decide what to do with it, what view, etc.
+ CBrowserAppUi::Static()->HandleUiDownloadL(fileNameBuf, dataTypeDes);
+ }
+ else
+ {
+ deleteOpml = ETrue;
+ }
+ result = ETrue;
+ }
+
+
+ // delete the downloaded file if it is not handled
+ if(deleteOpml && (dataTypeDes.Compare(KOPMLMimeType) == 0 ))
+ {
+ rfs.Delete(fileName);
+ }
+ }
+
+ // If open file was handled, skip sending to feeds engine
+ // otherwise, pass it on
+ if(!result)
+ {
+ TInt fileSize;
+ // Read the file from the beginning into a buffer
+ User::LeaveIfError(rfile.Size(fileSize));
+ HBufC8* buffer = HBufC8::NewLC(fileSize);
+ TPtr8 bufferPtr(buffer->Des());
+ TInt startPos = 0;
+ User::LeaveIfError(rfile.Read(startPos, bufferPtr, fileSize));
+
+ _LIT8( searchTag1, "<feed" ); //Atom 1.0 Feed
+ _LIT8( searchTag2, "<rdf" ); //RSS 1.0 Feed
+ _LIT8( searchTag3, "<rss" ); //RSS 2.0 Feed
+
+ if( ( bufferPtr.FindF( searchTag1 ) != KErrNotFound ) || (bufferPtr.FindF( searchTag2 ) != KErrNotFound ) ||
+ (bufferPtr.FindF( searchTag3 ) != KErrNotFound ) )
+ {
+ // Launch the Feeds Engine only when xml file contain atleast one of the above mentioned feeds tag
+ iContentView->HandleSubscribeToWithUrlL(url);
+ }
+ else
+ {
+ //Delete the file, if it is not fwd to Feeds Engine, As displaying of xml files is not supported.
+ rfs.Delete(fileName);
+ }
+ result = ETrue;
+ CleanupStack::PopAndDestroy(); //buffer
+ }
+
+ CleanupStack::PopAndDestroy(); //rfile
+ CleanupStack::PopAndDestroy(); //rfs
+ }
+ }
+
+ return result;
+ }
+
+#endif // __RSS_FEEDS
+
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::BrCtlParamList2GenericParamListL()
+// ---------------------------------------------------------
+//
+CAiwGenericParamList* CBrowserSpecialLoadObserver::BrCtlParamList2GenericParamListL(
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray ) const
+ {
+ LOG_ENTERFN("CBrowserSpecialLoadObserver::BrCtlParamList2GenericParamListL");
+
+ __ASSERT_DEBUG( (aTypeArray != NULL), Util::Panic( Util::EUninitializedData ) );
+ __ASSERT_DEBUG( (aDesArray != NULL), Util::Panic( Util::EUninitializedData ) );
+
+
+ //Creating generic param list
+ CAiwGenericParamList* genericParamList = CAiwGenericParamList::NewLC();
+
+ for( TInt j = 0; j < aTypeArray->Count(); j++ )
+ {
+ BROWSER_LOG( ( _L( " iter: %d" ), j ) );
+ TBool paramFound( EFalse );
+ const TUint paramType = (*aTypeArray)[j];
+ TPtrC param = ExtractBrCtlParam(
+ paramType,
+ aTypeArray,
+ aDesArray,
+ paramFound );
+ __ASSERT_DEBUG( paramFound, Util::Panic( Util::EUninitializedData ) );
+
+ BROWSER_LOG( ( _L( " Type: %d, Value: %S" ), paramType, ¶m ) );
+
+ switch( paramType )
+ {
+ case EParamRequestUrl:
+ {
+ BROWSER_LOG( ( _L( " EParamRequestUrl" ) ) );
+ // limit url to 255 char's or DocHandler panics!
+ TAiwVariant paramVariant( param.Left( KMaxDocHandlerUrlLen ) );
+ TAiwGenericParam genericParam( EGenericParamURL,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ break;
+ }
+ case EParamRealm:
+ {
+ BROWSER_LOG( ( _L( " EParamRealm" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamUsername:
+ {
+ BROWSER_LOG( ( _L( " EParamUsername" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamPassword:
+ {
+ BROWSER_LOG( ( _L( " EParamPassword" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamProxyUsername:
+ {
+ BROWSER_LOG( ( _L( " EParamProxyUsername" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamProxyPassword:
+ {
+ BROWSER_LOG( ( _L( " EParamProxyPassword" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamRawRequestHeader:
+ {
+ BROWSER_LOG( ( _L( " EParamRawRequestHeader" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamReceivedContentType:
+ {
+ BROWSER_LOG( ( _L( " EParamReceivedContentType" ) ) );
+ // The expected content type should override the response header's
+ // content type => don't use EParamReceivedContentType if
+ // EParamExpectedContentType is set!
+ TBool expectedContentTypeFound( EFalse );
+ ExtractBrCtlParam(
+ EParamExpectedContentType,
+ aTypeArray,
+ aDesArray,
+ expectedContentTypeFound );
+ if ( !expectedContentTypeFound )
+ {
+ // Using EParamReceivedContentType
+ BROWSER_LOG( ( _L( " EParamExpectedContentType not found" ) ) );
+ TAiwVariant paramVariant( param );
+ TAiwGenericParam genericParam( EGenericParamMIMEType,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ }
+ break;
+ }
+ case EParamExpectedContentType:
+ {
+ // Overrides EParamReceivedContentType!
+ BROWSER_LOG( ( _L( " EParamExpectedContentType" ) ) );
+ TAiwVariant paramVariant( param );
+ TAiwGenericParam genericParam( EGenericParamMIMEType,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ break;
+ }
+ case EParamTotalContentLength:
+ {
+ BROWSER_LOG( ( _L( " EParamTotalContentLength" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamReceivedContent:
+ {
+ BROWSER_LOG( ( _L( " EParamReceivedContent" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamRawResponseHeader:
+ {
+ BROWSER_LOG( ( _L( " EParamRawResponseHeader" ) ) );
+ // No corresponding generic param!
+ break;
+ }
+ case EParamLocalFileName:
+ {
+ BROWSER_LOG( ( _L( " EParamLocalFileName" ) ) );
+ TAiwVariant paramVariant( param );
+ TAiwGenericParam genericParam( EGenericParamFile,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ break;
+ }
+ case EParamCharset:
+ {
+ BROWSER_LOG( ( _L( " EParamCharset" ) ) );
+ TAiwVariant paramVariant( param );
+ TAiwGenericParam genericParam( EGenericParamCharSet,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ break;
+ }
+ case EParamRefererHeader:
+ {
+ BROWSER_LOG( ( _L( " EParamRefererHeader" ) ) );
+ TAiwVariant paramVariant( param );
+ TAiwGenericParam genericParam( EGenericParamReferringURI,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ break;
+ }
+ default:
+ {
+ BROWSER_LOG( ( _L( " Unexpected argument" ) ) );
+ break;
+ }
+ }
+ }
+
+ // Always add the access point, if currently connected
+ if( iApiProvider->Connection().Connected() )
+ {
+ TInt32 ap = iApiProvider->Connection().CurrentAPId();
+ BROWSER_LOG( ( _L( " IAP: %d" ), ap ) );
+ TAiwVariant paramVariant( ap );
+ TAiwGenericParam genericParam( EGenericParamAccessPoint,
+ paramVariant );
+ genericParamList->AppendL( genericParam );
+ }
+
+ CleanupStack::Pop( genericParamList ); // genericParamList
+ return genericParamList;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::ExtractBrCtlParam()
+// ---------------------------------------------------------
+//
+TPtrC CBrowserSpecialLoadObserver::ExtractBrCtlParam
+ ( TUint aParamTypeToFind,
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray,
+ TBool& aParamFound ) const
+ {
+ LOG_ENTERFN("CBrowserSpecialLoadObserver::ExtractBrCtlParam");
+
+ __ASSERT_DEBUG( (aTypeArray != NULL), Util::Panic( Util::EUninitializedData ) );
+ __ASSERT_DEBUG( (aDesArray != NULL), Util::Panic( Util::EUninitializedData ) );
+
+ // initialize output parameter
+ aParamFound = EFalse;
+ TPtrC16 retParamValue;
+
+ for( TInt j = 0; j < aTypeArray->Count(); j++ )
+ {
+ BROWSER_LOG( ( _L( " iter: %d" ), j ) );
+ const TUint paramType = (*aTypeArray)[j];
+ if ( aParamTypeToFind == paramType )
+ {
+ // That's we need
+ retParamValue.Set( aDesArray->MdcaPoint(j) );
+ aParamFound = ETrue; // Indicate it in the out param
+ BROWSER_LOG( ( _L( " Type: %d, Value: %S" ), paramType, &retParamValue ) );
+ break; // break the loop - we found it
+ }
+ }
+
+ return retParamValue;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::IsSelfDownloadContentTypeL()
+// ---------------------------------------------------------
+//
+TBool CBrowserSpecialLoadObserver::IsSelfDownloadContentTypeL
+ ( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray ) const
+ {
+ LOG_ENTERFN("CBrowserSpecialLoadObserver::IsSelfDownloadContentTypeL");
+
+ TBool isSelfDownloadContentType = EFalse;
+
+ // First get the download's content type (mime type)
+ TBool paramFound( EFalse );
+ TPtrC contentType = ExtractBrCtlParam(
+ EParamReceivedContentType,
+ aTypeArray,
+ aDesArray,
+ paramFound );
+
+ if ( !paramFound )
+ {
+ isSelfDownloadContentType = EFalse;
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( " contentType: [%S]" ), &contentType ) );
+ // Then check, if it is in SelfDownloadContentTypes
+ TInt cTLength = contentType.Length();
+ TPtrC selfDownloadCTs = iApiProvider->Preferences().SelfDownloadContentTypesL();
+ TInt idx = KErrNotFound;
+ idx = selfDownloadCTs.FindF( contentType );
+ const TChar KBrowserSpecLoadObsSemicolon = ';';
+ while( idx != KErrNotFound )
+ {
+ // check for ';' on the left KSemicolon
+ if ( idx == 0 || selfDownloadCTs[ idx - 1 ] == KBrowserSpecLoadObsSemicolon )
+ {
+ // check for ';' on the right
+ idx += cTLength;
+ if ( idx == selfDownloadCTs.Length() || selfDownloadCTs[ idx ] == KBrowserSpecLoadObsSemicolon )
+ {
+ isSelfDownloadContentType = ETrue;
+ break;
+ }
+ }
+ selfDownloadCTs.Set( selfDownloadCTs.Mid( idx ) );
+ idx = selfDownloadCTs.FindF( contentType );
+ }
+ }
+
+ BROWSER_LOG( ( _L( " isSelfDownloadContentType: %d" ), isSelfDownloadContentType ) );
+ return isSelfDownloadContentType;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::OpenFileEmbeddedL()
+// ---------------------------------------------------------
+//
+void CBrowserSpecialLoadObserver::OpenFileEmbeddedL
+ ( RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray )
+ {
+ LOG_ENTERFN("CBrowserSpecialLoadObserver::OpenFileEmbeddedL");
+
+ CDocumentHandler* newDocHandler = CDocumentHandler::NewL();
+ delete iDocHandler;
+ iDocHandler = newDocHandler;
+ iDocHandler->SetExitObserver( this );
+
+ TBool paramFound( EFalse );
+ TPtrC fileName = ExtractBrCtlParam(
+ EParamLocalFileName,
+ aTypeArray,
+ aDesArray,
+ paramFound );
+ __ASSERT_DEBUG( paramFound, Util::Panic( Util::EUninitializedData ) );
+
+ TPtrC contentType = ExtractBrCtlParam(
+ EParamReceivedContentType,
+ aTypeArray,
+ aDesArray,
+ paramFound );
+ HBufC8* contentType8 = 0;
+ if ( !paramFound )
+ {
+ contentType8 = KNullDesC8().AllocLC();
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( " contentType: [%S]" ), &contentType ) );
+ contentType8 = HBufC8::NewLC( contentType.Length() );
+ // 16 bit buffer copied into 8 bit buffer.
+ contentType8->Des().Copy( contentType );
+ }
+ TDataType dataType( *contentType8 );
+
+ CAiwGenericParamList* genericParamList =
+ BrCtlParamList2GenericParamListL( aTypeArray, aDesArray );
+ CleanupStack::PushL( genericParamList );
+
+ // File is not yet saved to target folder.
+ TBool allowSave( ETrue );
+ TAiwVariant allowSaveVariant( allowSave );
+ TAiwGenericParam genericParamAllowSave
+ ( EGenericParamAllowSave, allowSaveVariant );
+ genericParamList->AppendL( genericParamAllowSave );
+
+ // Set EGenericParamAllowMove - we encourage handlers to apply
+ // move instead of copy for the file.
+ TBool allowMove( ETrue );
+ TAiwVariant allowMoveVariant( allowMove );
+ TAiwGenericParam genericParamAllowMove
+ ( EGenericParamAllowMove, allowMoveVariant );
+ genericParamList->AppendL( genericParamAllowMove );
+
+ RFile tempFile;
+ iDocHandler->OpenTempFileL( fileName, tempFile );
+ CleanupClosePushL( tempFile );
+ /*TInt err = */iDocHandler->OpenFileEmbeddedL( tempFile,
+ dataType,
+ *genericParamList );
+ //BROWSER_LOG( ( _L( " err: %d" ), err ) );
+ CleanupStack::PopAndDestroy( &tempFile ); // tempFile
+
+ CleanupStack::PopAndDestroy( genericParamList ); // genericParamList
+ CleanupStack::PopAndDestroy( contentType8 ); // contentType8
+ }
+
+// ---------------------------------------------------------
+// CBrowserSpecialLoadObserver::HandleServerAppExit()
+// ---------------------------------------------------------
+//
+void CBrowserSpecialLoadObserver::HandleServerAppExit( TInt /*aReason*/ )
+ {
+ iSchemeProcessing = EFalse;
+ }
+
+#ifdef __WINS__
+// ----------------------------------------------------------------------------
+// CBrowserSpecialLoadObserver::AskIapIdL(TUint32& aId)
+// Ask IAP id from the user
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserSpecialLoadObserver::AskIapIdL( TUint32& aId )
+ {
+ CCommsDatabase* TheDb;
+ TInt res;
+ TBuf<40> name;
+ TUint32 id;
+ RArray<TUint32> idArray;
+ CDesCArrayFlat* items = new (ELeave) CDesCArrayFlat(16);
+ CleanupStack::PushL( items ); // 1
+
+ // Get IAP names and ids from the database
+ TheDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+ CleanupStack::PushL( TheDb ); // 2
+
+ TheDb->ShowHiddenRecords();
+
+ CCommsDbTableView* view = TheDb->OpenTableLC( TPtrC( IAP ) ); // 3
+ res = view->GotoFirstRecord();
+
+ while( !res )
+ {
+ view->ReadTextL( TPtrC( COMMDB_NAME ), name );
+ view->ReadUintL( TPtrC( COMMDB_ID ), id );
+
+ idArray.Insert( id, 0 );
+ items->InsertL( 0, name );
+
+ res = view->GotoNextRecord();
+ RDebug::Print(_L("IAP name, id: %S, %d"), &name, id );
+ }
+
+ // Create listbox and PUSH it.
+ CEikTextListBox* list = new (ELeave) CAknSinglePopupMenuStyleListBox;
+ CleanupStack::PushL( list ); // 4
+
+ // Create popup list and PUSH it.
+ CAknPopupList* popupList = CAknPopupList::NewL(
+ list, R_AVKON_SOFTKEYS_OK_EMPTY__OK,
+ AknPopupLayouts::EMenuWindow);
+ CleanupStack::PushL( popupList ); // 5
+
+ // initialize listbox.
+ list->ConstructL(popupList, CEikListBox::ELeftDownInViewRect);
+ list->CreateScrollBarFrameL(ETrue);
+ list->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto);
+
+ // Set listitems.
+ CTextListBoxModel* model = list->Model();
+ model->SetItemTextArray( items );
+ model->SetOwnershipType( ELbmOwnsItemArray );
+
+ // Set title
+ popupList->SetTitleL( _L( "Select IAP:" ) );
+
+ // Show popup list.
+ TInt popupOk = popupList->ExecuteLD();
+ if( popupOk )
+ {
+ TInt index = list->CurrentItemIndex();
+ aId = idArray[index];
+ }
+
+ CleanupStack::Pop( popupList ); // popuplist
+ CleanupStack::PopAndDestroy( list ); // list
+ CleanupStack::PopAndDestroy( view ); // view
+ CleanupStack::PopAndDestroy( TheDb ); // TheDb
+ CleanupStack::Pop( items ); // items CTextListBoxModel* model owns it
+
+ idArray.Close();
+ items = NULL;
+ return popupOk;
+ }
+
+#endif // __WINS__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserUtil.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,407 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Utilities.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "logger.h"
+
+#include <e32base.h>
+#include <favouriteslimits.h>
+#include <favouritesitem.h>
+#include <uri16.h>
+#include <SysUtil.h>
+#include <ErrorUi.h>
+
+#include "BrowserUtil.h"
+#include "Browser.hrh"
+
+#include "CommonConstants.h"
+#include "ApiProvider.h"
+#include <commdb.h>
+#include <aputils.h>
+#include "commsmodel.h"
+#include "preferences.h"
+#include <FeatMgr.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// Util::Panic
+// ---------------------------------------------------------
+//
+void Util::Panic( Util::TPanicReason aReason )
+ {
+ _LIT( KAppName, "WmlBrowser" );
+ User::Panic( KAppName, aReason );
+ }
+
+// ---------------------------------------------------------
+// Util::SanityCheckL
+// ---------------------------------------------------------
+//
+void Util::SanityCheckL()
+ {
+#ifdef _DEBUG
+
+ // Check if the Engine limits for bookmarks match editing control sizes.
+ // Cannot do this compile time, because Engine limits are TInts instead of
+ // #define-s, so we must do run-time check (debug build only). Naturally,
+ // the conditional expression here is constant. Avoid warnings by using
+ // dummy variables (maxEngine...).
+ TInt maxEngineUrl = KFavouritesMaxUrl;
+ TInt maxEngineUsername = KFavouritesMaxUserName;
+ TInt maxEnginePassword = KFavouritesMaxPassword;
+ TInt maxEngineBookmarkName = KFavouritesMaxName;
+
+ if (
+ KFavouritesMaxUrlDefine != maxEngineUrl ||
+ KFavouritesMaxUsernameDefine != maxEngineUsername ||
+ KFavouritesMaxPasswordDefine != maxEnginePassword ||
+ KFavouritesMaxBookmarkNameDefine != maxEngineBookmarkName
+ )
+ {
+ Panic( ELimitMismatch );
+ }
+
+#endif
+ }
+
+// ---------------------------------------------------------
+// Util::RetreiveUsernameAndPasswordFromUrlL
+// ---------------------------------------------------------
+//
+void Util::RetreiveUsernameAndPasswordFromUrlL
+ ( const TDesC& aUrl, CFavouritesItem& aItem )
+ {
+ /// Empty string.
+ _LIT( KEmptyBuf, "" );
+/* CUrl* url = NULL;
+ TRAPD( error, url = CUrl::NewL( aUrl ) );
+ if( error == KErrNone )
+ {
+ CleanupStack::PushL( url );
+*/
+ TUriParser16 url;
+ url.Parse(aUrl);
+ TPtrC userInfo = url.Extract( EUriUserinfo );
+ TPtrC userName ;
+ TPtrC pass ;
+ userName.Set( KEmptyBuf );
+ pass.Set( KEmptyBuf );
+ if( userInfo.Length() )
+ {
+ TInt position = userInfo.LocateF( ':' );
+ if( ( position != KErrNotFound ) )
+ {
+ userName.Set( userInfo.Left( position ) );
+ aItem.SetUserNameL( userName );
+ pass.Set( userInfo.Right( userInfo.Length()-position-1 ) );
+ aItem.SetPasswordL( pass );
+ }
+ }
+
+
+ HBufC* parsedUrl = HBufC::NewLC( url.UriDes().Length() );
+ // get the pure Url (without username & password)
+ TInt position = url.UriDes().LocateF( '@' );
+ if( ( position != KErrNotFound ) && ( userName.Length() )
+ && ( url.UriDes().Find(userInfo) != KErrNotFound) )
+ {
+ parsedUrl->Des().Copy( url.Extract( EUriScheme ) );
+ _LIT( KDoubleSlash, "://" );
+ parsedUrl->Des().Append( KDoubleSlash );
+ parsedUrl->Des().Append( url.UriDes().Right
+ ( url.UriDes().Length() - position - 1 ) );
+ }
+ else
+ {
+ parsedUrl->Des().Copy( url.UriDes() );
+ }
+ if( parsedUrl->Length() )
+ {
+ aItem.SetUrlL( *parsedUrl );
+ }
+ CleanupStack::PopAndDestroy( 1 ); // parsedUrl
+ }
+
+
+// ---------------------------------------------------------
+// Util::StripUrl
+// ---------------------------------------------------------
+//
+TPtrC Util::StripUrl( const TDesC& aUrl )
+ {
+ TUriParser url;
+ TInt startPos;
+ TInt endPos;
+
+ url.Parse ( aUrl );
+
+ //Return parsed url only if we have a scheme. Otherwise return full url
+ if ( url.IsPresent ( EUriScheme ) )
+ {
+ startPos = url.Extract ( EUriScheme ).Length();
+ //jump over the :// chars (or a mistyped version like :/ or :)
+ while ( startPos < url.UriDes().Length() &&
+ ( aUrl.Mid( startPos, 1) == _L("/") ||
+ aUrl.Mid( startPos, 1) == _L(":") ) )
+ {
+ startPos++;
+ }
+ endPos = url.UriDes().Length() - url.Extract ( EUriFragment ).Length();
+ }
+ else
+ {
+ startPos = 0;
+ endPos = url.UriDes().Length();
+ }
+
+ return aUrl.Mid( startPos, endPos - startPos );
+ }
+
+// ---------------------------------------------------------
+// Util::UrlFromFileNameLC
+// ---------------------------------------------------------
+//
+HBufC* Util::UrlFromFileNameLC( const TDesC& aFileName )
+ {
+ HBufC* buf = HBufC::NewLC
+ ( aFileName.Length() + KWmlValueFileSlashSlashSlashStr().Length() );
+
+ HBufC* url = HBufC::NewLC
+ ( aFileName.Length() + KWmlValueFileSlashSlashSlashStr().Length() );
+ url->Des().Append( KWmlValueFileSlashSlashSlashStr );
+ url->Des().Append( aFileName );
+
+ for ( TInt i = 0; i < url->Length(); i++ )
+ {
+ if ( !url->Mid( i, 1 ).Compare( KWmlBackSlash ) )
+ {
+ buf->Des().Append( TChar('/') );
+ }
+ else
+ {
+ buf->Des().Append( url->Mid( i, 1 ) );
+ }
+ }
+ CleanupStack::PopAndDestroy(); // url
+ return buf;
+ }
+
+// ---------------------------------------------------------
+// Util::FFSSpaceBelowCriticalLevelL
+// ---------------------------------------------------------
+//
+TBool Util::FFSSpaceBelowCriticalLevelL
+ ( TBool aShowErrorNote, TInt aBytesToWrite /*=0*/ )
+ {
+ TBool ret( EFalse );
+ if ( SysUtil::FFSSpaceBelowCriticalLevelL
+ ( &(CCoeEnv::Static()->FsSession()), aBytesToWrite ) )
+ {
+ ret = ETrue;
+ if ( aShowErrorNote )
+ {
+ CErrorUI* errorUi = CErrorUI::NewLC( *(CCoeEnv::Static()) );
+ errorUi->ShowGlobalErrorNoteL( KErrDiskFull );
+ CleanupStack::PopAndDestroy(); // errorUi
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// Util::CheckBookmarkApL
+// ---------------------------------------------------------
+//
+TBool Util::CheckBookmarkApL(
+ const MApiProvider& aApiProvider,
+ const TFavouritesWapAp& aItem )
+ {
+ TBool apValid( EFalse );
+
+ if ( !aItem.IsNull() && !aItem.IsDefault() )
+ {
+ CCommsDatabase& db = aApiProvider.CommsModel().CommsDb();
+
+ CApUtils* apUtils = CApUtils::NewLC( db );
+ // if error, wapId is not found.
+ TRAPD( err, apValid = apUtils->WapApExistsL( aItem.ApId() ) );
+ if ( /* !apValid || */ err )
+ {
+ apValid = EFalse;
+ }
+ CleanupStack::PopAndDestroy(); // apUtils
+ }
+ else
+ {
+ apValid = ETrue;
+ }
+ return apValid;
+ }
+
+// ---------------------------------------------------------
+// Util::IsValidAPFromParamL
+// ---------------------------------------------------------
+//
+TBool Util::IsValidAPFromParamL(
+ const MApiProvider& aApiProvider,
+ TUint32 aIAPid )
+ {
+ CCommsDatabase& db = aApiProvider.CommsModel().CommsDb();
+ CApUtils* apUtils = CApUtils::NewLC( db );
+ TBool retVal = apUtils->WapApExistsL( aIAPid );
+ CleanupStack::PopAndDestroy(); // apUtils
+ return retVal;
+ }
+
+// ---------------------------------------------------------
+// Util::CheckApValidityL
+// ---------------------------------------------------------
+//
+TBool Util::CheckApValidityL(
+ const MApiProvider& aApiProvider,
+ const TUint32 aItem )
+ {
+ CCommsDatabase& db = aApiProvider.CommsModel().CommsDb();
+ CApUtils* apUtils = CApUtils::NewLC( db );
+ TBool apValid( EFalse );
+
+ // if error, IapId is not found.
+ TRAPD( err, apUtils->IapIdFromWapIdL( aItem ) );
+ if( err == KErrNone )
+ {
+ apValid = ETrue;
+ }
+ CleanupStack::PopAndDestroy(); // apUtils
+
+ return apValid;
+ }
+
+// ---------------------------------------------------------
+// Util::IapIdFromWapIdL
+// ---------------------------------------------------------
+//
+TUint32 Util::IapIdFromWapIdL( const MApiProvider& aApiProvider, const TUint32 aItem )
+{
+ CCommsDatabase& db = aApiProvider.CommsModel().CommsDb();
+ CApUtils* apUtils = CApUtils::NewLC( db );
+ TUint32 ap = apUtils->IapIdFromWapIdL( aItem );
+ CleanupStack::PopAndDestroy(); // apUtil
+ return ap;
+}
+
+// ---------------------------------------------------------
+// Util::WapIdFromIapIdL
+// ---------------------------------------------------------
+//
+TUint32 Util::WapIdFromIapIdL( const MApiProvider& aApiProvider, const TUint32 aItem )
+{
+ CCommsDatabase& db = aApiProvider.CommsModel().CommsDb();
+ CApUtils* apUtils = CApUtils::NewLC( db );
+ TUint32 ap = apUtils->WapIdFromIapIdL( aItem );
+ CleanupStack::PopAndDestroy(); // apUtil
+ return ap;
+}
+
+// ---------------------------------------------------------
+// Util::EncodeSpaces
+// ---------------------------------------------------------
+//
+void Util::EncodeSpaces(HBufC*& aString)
+ {
+ _LIT(KSpace," ");
+ _LIT(KSpaceEncoded,"%20");
+
+ TInt space(KErrNotFound);
+ TInt spaces(0);
+ TPtr ptr = aString->Des();
+
+ //Trim leading and trailing spaces in URL before encoding spaces inside URL
+ ptr.Trim();
+
+ for (TInt i = ptr.Length()-1; i > 0 ; i--)
+ {
+ if (ptr[i] == ' ')
+ {
+ spaces++;
+ space = i;
+ }
+ }
+
+ if (spaces)
+ {
+ TInt newLen = aString->Length() + (spaces * KSpaceEncoded().Length());
+ TRAPD(err,aString = aString->ReAllocL(newLen));
+ if (err != KErrNone)
+ {
+ return; // aString was not changed
+ }
+ ptr.Set( aString->Des() );
+
+ }
+
+ while (space != KErrNotFound)
+ {
+ ptr.Replace(space,1,KSpaceEncoded);
+ space = ptr.Find(KSpace);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// Util::AllocateUrlWithSchemeL
+// ---------------------------------------------------------
+//
+HBufC* Util::AllocateUrlWithSchemeL( const TDesC& aUrl )
+ {
+ _LIT( KBrowserDefaultScheme, "http://" );
+ TBool addDefaultScheme( EFalse );
+ TInt len = aUrl.Length();
+
+ // Do not check return value from parse. If the caller wants to allocate a
+ // badly formed url then let them do so.
+ TUriParser url;
+ url.Parse( aUrl );
+
+ if( !url.IsPresent( EUriScheme ) )
+ {
+ addDefaultScheme = ETrue;
+ len = len + KBrowserDefaultScheme().Length();
+ }
+
+ HBufC* urlBuffer = HBufC::NewL( len );
+ TPtr ptr = urlBuffer->Des();
+
+ if ( addDefaultScheme )
+ {
+ ptr.Copy( KBrowserDefaultScheme );
+ }
+ ptr.Append( aUrl );
+
+ // Handle rare case that the url needs escape encoding.
+ // Below function will realloc enough space for encoded urlBuffer.
+ Util::EncodeSpaces( urlBuffer );
+
+ return urlBuffer;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserWindow.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1532 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser content view
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <brctldefs.h>
+#include <brctlinterface.h>
+
+#include "BrowserWindow.h"
+#include "BrowserContentView.h"
+#include "BrowserContentViewContainer.h"
+#include <browserdialogsprovider.h>
+#include "BrowserDialogsProviderProxy.h"
+#include "BrowserSoftkeysObserver.h"
+#include "BrowserSpecialLoadObserver.h"
+#include "BrowserWindowManager.h"
+
+#include "ApiProvider.h"
+#include "BrowserAppUi.h"
+#include "BrowserUIVariant.hrh"
+#include "Logger.h"
+#include "BrowserDisplay.h"
+#include "BrowserPopupEngine.h"
+#include <cdownloadmgruidownloadslist.h>
+#include <downloadmgrclient.h>
+
+// for instantiating BrCtlInterface
+#include "CommonConstants.h"
+#include "BrowserApplication.h"
+#include "BrowserAppDocument.h"
+
+#include "Preferences.h"
+
+// for dialog notes
+#include <StringLoader.h>
+#include <BrowserNG.rsg>
+#include "BrowserDialogs.h"
+
+
+#define CALL_ORIG iWindowManager->ApiProvider()->
+
+TBool CBrowserWindow::iIsPageOverviewSupportQueried = EFalse;
+TBool CBrowserWindow::iIsPageOverviewSupported = EFalse;
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::NewLC()
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::CompleteDelayedInit()
+ {
+ return EFalse;
+ }
+
+CBrowserWindow* CBrowserWindow::NewLC(
+ TInt aWindowId,
+ const TDesC* aTargetName,
+ CBrowserWindowManager* aWindowMgr )
+ {
+ CBrowserWindow* self = new (ELeave)
+ CBrowserWindow( aWindowId, aTargetName, aWindowMgr );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::NewL()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindow* CBrowserWindow::NewL(
+ TInt aWindowId,
+ const TDesC* aTargetName,
+ CBrowserWindowManager* aWindowMgr )
+ {
+ CBrowserWindow* self =
+ CBrowserWindow::NewLC( aWindowId, aTargetName, aWindowMgr );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::~CBrowserWindow()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindow::~CBrowserWindow()
+ {
+ iClosing = ETrue;
+
+LOG_ENTERFN("CBrowserWindow::~CBrowserWindow");
+BROWSER_LOG( ( _L( "window id: %d" ), WindowId() ) );
+
+ if( iBrCtlInterface )
+ {
+ iBrCtlInterface->RemoveLoadEventObserver( iLoadObserver );
+ BROWSER_LOG( ( _L( " RemoveLoadEventObserver" ) ) );
+
+ CBrowserContentView* cv = iWindowManager->ContentView();
+ iBrCtlInterface->RemoveStateChangeObserver( cv );
+ BROWSER_LOG( ( _L( " RemoveStateChangeObserver" ) ) );
+ iBrCtlInterface->RemoveCommandObserver( cv );
+ BROWSER_LOG( ( _L( " RemoveCommandObserver" ) ) );
+
+
+ // TRAP_IGNORE( iBrCtlInterface->HandleCommandL(
+ // (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ BROWSER_LOG( ( _L( " HandleCommandL" ) ) );
+ }
+
+ // security indicator must be set off.
+ if( iDisplay && !iWindowManager->ApiProvider()->
+ Preferences().HttpSecurityWarningsStatSupressed() )
+ {
+ BROWSER_LOG( ( _L( " UpdateSecureIndicatorL 1" ) ) );
+ TRAP_IGNORE( iDisplay->UpdateSecureIndicatorL( EAknIndicatorStateOff ) );
+ BROWSER_LOG( ( _L( " UpdateSecureIndicatorL 2" ) ) );
+ // we cannot do much here if error occurs... application is closing anyway
+ }
+ delete iDisplay;
+ BROWSER_LOG( ( _L( " Display deleted.") ) );
+
+ //Delete iBrCtlInterface before observers. If this is not
+ //done then browser crashes on exit when page is being loaded.
+ delete iBrCtlInterface;
+ BROWSER_LOG( ( _L( " BrCtlInterface deleted.") ) );
+
+ delete iLoadObserver;
+ BROWSER_LOG( ( _L( " LoadObserver deleted.") ) );
+
+ delete iDialogsProviderProxy;
+ BROWSER_LOG( ( _L( " DialogsProviderProxy deleted.") ) );
+
+ delete iSpecialLoadObserver;
+ BROWSER_LOG( ( _L( " SpecialLoadObserver deleted.") ) );
+
+ delete iSoftkeysObserver;
+ BROWSER_LOG( ( _L( " SoftkeysObserver deleted.") ) );
+ //
+ delete iTargetName;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::CBrowserWindow()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindow::CBrowserWindow(
+ TInt aWindowId,
+ const TDesC* aTargetName,
+ CBrowserWindowManager* aWindowMgr ) :
+ iWindowId( aWindowId ),
+ iActive( EFalse ),
+ iFirstPage(ETrue),
+ iBrCtlInterface( NULL ),
+ iDialogsProviderProxy( NULL ),
+ iDisplay( NULL ),
+ iLoadObserver( NULL ),
+ iSoftkeysObserver( NULL ),
+ iSpecialLoadObserver( NULL ),
+ iWindowManager( aWindowMgr )
+ {
+ __ASSERT_DEBUG( (aTargetName != NULL), Util::Panic( Util::EUninitializedData ));
+ iTargetName = aTargetName->Alloc();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::ConstructL()
+ {
+PERFLOG_LOCAL_INIT
+LOG_ENTERFN("CBrowserWindow::ConstructL");
+ MApiProvider* api = iWindowManager->ApiProvider();
+ CleanupStack::PushL( api );
+PERFLOG_STOPWATCH_START
+ iDisplay = CBrowserDisplay::NewL( *this, *this );
+PERFLOG_STOP_WRITE("*BrowserDisplay*")
+ BROWSER_LOG( ( _L( " Multiple Display up" ) ) );
+
+ CBrowserContentView* cv = iWindowManager->ContentView();
+ TRect rect = cv->Container()->Rect();
+
+PERFLOG_STOPWATCH_START
+ iLoadObserver = CBrowserLoadObserver::NewL( *this, *cv, *this );
+ BROWSER_LOG( ( _L( " Multiple LoadObserver up" ) ) );
+PERFLOG_STOP_WRITE("*LoadObs*")
+PERFLOG_STOPWATCH_START
+ iDialogsProviderProxy = CBrowserDialogsProviderProxy::NewL(
+ api->DialogsProvider(), iLoadObserver, *this );
+PERFLOG_STOP_WRITE("*DlgProxy*")
+ BROWSER_LOG( ( _L( " Multiple CBrowserDialogsProviderProxy UP" ) ) );
+PERFLOG_STOPWATCH_START
+ iSoftkeysObserver = CBrowserSoftkeysObserver::NewL( *this );
+ BROWSER_LOG( ( _L( " Multiple SoftkeyObserver up" ) ) );
+PERFLOG_STOP_WRITE("*SoftKeyObs*")
+PERFLOG_STOPWATCH_START
+ iSpecialLoadObserver = CBrowserSpecialLoadObserver::NewL(
+ *this, this, CBrowserAppUi::Static()->Document(), cv );
+PERFLOG_STOP_WRITE("*SoftKeyObs*")
+ BROWSER_LOG( ( _L( " Multiple SpecialLoadObserver up" ) ) );
+
+ TInt autoLaunch( TBrCtlDefs::ECapabilityLaunchViewer );
+ CBrowserAppDocument* doc = STATIC_CAST( CBrowserAppDocument*,
+ CBrowserAppUi::Static()->Document() );
+
+ if( doc->IsContentHandlerRegistered() )
+ {
+ autoLaunch = 0;
+ }
+
+PERFLOG_STOPWATCH_START
+ TUint capabilityFlags = ( TBrCtlDefs::ECapabilityLoadHttpFw |
+ TBrCtlDefs::ECapabilityDisplayScrollBar |
+ TBrCtlDefs::ECapabilityConfirmDownloads |
+ TBrCtlDefs::ECapabilitySavedPage |
+ TBrCtlDefs::ECapabilityUseDlMgr |
+ TBrCtlDefs::ECapabilityCursorNavigation |
+ TBrCtlDefs::ECapabilityFavicon |
+ TBrCtlDefs::ECapabilityToolBar |
+ TBrCtlDefs::ECapabilityFitToScreen |
+ TBrCtlDefs::ECapabilityPinchZoom |
+ autoLaunch );
+
+ if ( Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ))
+ {
+ capabilityFlags = capabilityFlags | TBrCtlDefs::ECapabilityGraphicalPage;
+ }
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ if (Preferences().UiLocalFeatureSupported( KBrowserGraphicalHistory ))
+#else
+ if ( Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) &&
+ Preferences().UiLocalFeatureSupported( KBrowserGraphicalHistory ))
+#endif
+ {
+ capabilityFlags = capabilityFlags | TBrCtlDefs::ECapabilityGraphicalHistory;
+ }
+ if ( Preferences().UiLocalFeatureSupported( KBrowserAutoFormFill ) )
+ {
+ capabilityFlags = capabilityFlags | TBrCtlDefs::ECapabilityAutoFormFill;
+ }
+ if (Preferences().AccessKeys())
+ {
+ capabilityFlags = capabilityFlags | TBrCtlDefs::ECapabilityAccessKeys;
+ }
+
+ iBrCtlInterface = CreateBrowserControlL(
+ (CCoeControl*)cv->Container(), // parent control
+ rect, // client rect
+ capabilityFlags, // capabilities
+ (TUint)TBrCtlDefs::ECommandIdBase, // command base
+ iSoftkeysObserver,
+ (MBrCtlLinkResolver*)NULL, // LinkResolver
+ iSpecialLoadObserver,
+ (MBrCtlLayoutObserver*)NULL, // Layout Observer
+ iDialogsProviderProxy,
+ this // Window Observer
+ );
+ BROWSER_LOG( ( _L( " Multiple Plugin Br Control up, Kimono." ) ) );
+
+ iBrCtlInterface->SetBrowserSettingL(TBrCtlDefs::ESettingsLaunchAppUid, KUidBrowserApplication.iUid);
+ iBrCtlInterface->SetBrowserSettingL(TBrCtlDefs::ESettingsLaunchViewId, KUidBrowserBookmarksViewId.iUid);
+ iBrCtlInterface->SetBrowserSettingL(TBrCtlDefs::ESettingsLaunchCustomMessageId, KUidCustomMsgDownloadsList.iUid );
+ BROWSER_LOG( ( _L( " LaunchSettings are passed." ) ) );
+
+#if defined( __RSS_FEEDS )
+ TPtrC rssMimeTypes = api->FeedsClientUtilities().SupportedMimeTypesL();
+ BROWSER_LOG( ( _L( " rss SupportedMimeTypes OK" ) ) );
+ TPtrC selfDownloadContentTypes = api->Preferences().SelfDownloadContentTypesL();
+ BROWSER_LOG( ( _L( " SelfDownloadContentTypesL OK" ) ) );
+
+ HBufC* buf = HBufC::NewLC(
+ rssMimeTypes.Length() + selfDownloadContentTypes.Length() + 2 );
+ TPtr ptr( buf->Des() );
+ ptr.Append( rssMimeTypes );
+ ptr.Append( TChar(';') );
+ ptr.Append( selfDownloadContentTypes );
+ ptr.ZeroTerminate();
+
+ iBrCtlInterface->SetSelfDownloadContentTypesL( ptr );
+ CleanupStack::PopAndDestroy(); // buf
+#else // __RSS_FEEDS
+ TPtrC selfDownloadContentTypes = api->Preferences().SelfDownloadContentTypesL();
+ BROWSER_LOG( ( _L( " SelfDownloadContentTypesL OK" ) ) );
+ iBrCtlInterface->SetSelfDownloadContentTypesL( selfDownloadContentTypes );
+#endif // __RSS_FEEDS
+ BROWSER_LOG( ( _L( " SetSelfDownloadContentTypesL") ) );
+
+ iBrCtlInterface->AddLoadEventObserverL( iLoadObserver );
+ BROWSER_LOG( ( _L( " AddLoadEventObserverL") ) );
+ iBrCtlInterface->AddStateChangeObserverL( cv );
+ BROWSER_LOG( ( _L( " AddStateChangeObserverL") ) );
+ iBrCtlInterface->AddCommandObserverL( cv );
+ BROWSER_LOG( ( _L( " AddCommandObserverL") ) );
+
+ // Window is not added as PreferencesObserver,
+ // this message flow is controlled by the WindowManager.
+
+ // Each window needs to notify its Browser Control of the settings
+PERFLOG_STOP_WRITE("***BctlItem creation***")
+PERFLOG_STOPWATCH_START
+ InitialiseLocalPreferencesL();
+ UpdateBrCtlSettingsL();
+PERFLOG_STOP_WRITE("***BrowserCtl Settings update***")
+ CleanupStack::Pop( api );
+
+ iIsPageOverviewOn = iWindowManager->ApiProvider()->Preferences().PageOverview();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::OpenWindowL()
+// -----------------------------------------------------------------------------
+//
+CBrCtlInterface* CBrowserWindow::OpenWindowL(
+ TDesC& /* aUrl */, TDesC* aTargetName,
+ TBool aUserInitiated, TAny* /* aReserved */ )
+ {
+ // do not create new window when the browser is being closed
+ if( iClosing )
+ {
+ return NULL;
+ }
+LOG_ENTERFN("CBrowserWindow::OpenWindowL, OSS");
+ // Do not exceed the maximum number of windows allowed
+ if ( iWindowManager->WindowCount() ==
+ iWindowManager->MaxWindowCount() )
+ {
+
+ // Show warning to user
+ TBrowserDialogs::ErrorNoteL( R_BROWSER_NOTE_MAX_WINDOWS );
+
+ return NULL;
+ }
+
+ CBrCtlInterface* retVal( NULL );
+ TBool loadUrl( EFalse ); // allow fetching of url
+
+ CBrowserPopupEngine* popup = &( iWindowManager->ApiProvider()->PopupEngine() );
+ // embedded mode doesn't allow multiple windows feature, hence popup object is NULL
+ if (!popup) {
+ return retVal;
+ }
+
+ HBufC* url = BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if(!url)
+ {
+ //The url is already pushed on to the cleanup stack and we have the ownership of it. Pop it.
+ CleanupStack::Pop(url);
+ return NULL;
+ }
+
+ TPtrC ptr( url->Des() );
+
+ // Check if on the whitelist, if not a user initiated open
+ // or if pop-up blocking has been disabled
+ if ( !( iWindowManager->ApiProvider()->Preferences().PopupBlocking() ) ||
+ popup->IsUrlOnWhiteListL( ptr ) ||
+ aUserInitiated )
+ {
+ loadUrl = ETrue; // OK to fetch the URL
+ }
+ else
+ {
+ // Notify user that popup was blocked
+ HBufC* popupBlocked = StringLoader::LoadLC(
+ R_BROWSER_NOTE_POPUP_BLOCKED );
+ iWindowManager->ApiProvider()->
+ DialogsProvider().ShowTooltipL( *popupBlocked );
+
+ CleanupStack::PopAndDestroy( popupBlocked );
+ }
+
+ CleanupStack::PopAndDestroy( url );
+
+ if ( loadUrl )
+ {
+ // Open a new popup window
+ CBrowserWindow* window = iWindowManager->CreateWindowL(
+ WindowId(), aTargetName );
+ if (window == NULL)
+ {
+ return retVal;
+ }
+
+ retVal = & ( window->BrCtlInterface() );
+
+ // do not initiate load, it does by the engine automatically
+ // aUrl is empty / NULL
+
+
+ // Indicate to the user that a new window is being opened
+ HBufC* newWindow = StringLoader::LoadLC( R_BROWSER_NEW_WINDOW_OPENED );
+ iWindowManager->ApiProvider()->DialogsProvider().
+ ShowTooltipL( *newWindow );
+ CleanupStack::PopAndDestroy( newWindow );
+ }
+
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FindWindowL()
+// -----------------------------------------------------------------------------
+//
+CBrCtlInterface* CBrowserWindow::FindWindowL( const TDesC& aTargetName ) const
+ {
+ CBrowserWindow* window = iWindowManager->FindWindowL( aTargetName );
+ if( window )
+ return & ( window->BrCtlInterface() );
+ else
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::HandleWindowCommandL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::HandleWindowCommandL(
+ const TDesC& aTargetName,
+ TBrCtlWindowCommand aCommand )
+ {
+LOG_ENTERFN("CBrowserWindow::HandleWindowCommandL");
+BROWSER_LOG( ( _L( "window Id: %d, aCommand: %d" ), WindowId(), aCommand ) );
+
+ // KNullDesC() refers to the current window
+
+ // I am NOT that targetwindow
+ if( aTargetName != KNullDesC() && iTargetName->Compare( aTargetName ) != 0 )
+ {
+ // try to find that window
+ CBrowserWindow* window = iWindowManager->FindWindowL( aTargetName );
+ if( window )
+ {
+ window->HandleWindowCommandL( aTargetName, aCommand );
+ }
+ else
+ {
+ // no window with that name
+ }
+ }
+ else // I am that targetwindow
+ {
+ switch( aCommand )
+ {
+ case EShowWindow: // to activate a window after creating it
+ case EFocusWindow: // window.focus or reload
+ // focusing this window
+ {
+ // Changes were made to ClearHistory that cause it to keep one (current) page
+ // In order to reuse a window we need to clear the history again after the first new page
+ // is loaded
+ if (iFirstPage)
+ {
+ BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandClearHistory + (TInt)TBrCtlDefs::ECommandIdBase);
+ iFirstPage = EFalse;
+ }
+ iWindowManager->SwitchWindowL( WindowId() );
+ break;
+ }
+ case EUnfocusWindow: // focusing the last active window
+ {
+ // iWindowManager->SwitchWindowL( );
+ break;
+ }
+ case ECloseWindow:
+ {
+ CBrowserAppUi::Static()->CloseWindowL( WindowId() );
+ break;
+ }
+// case EDisableScriptLog:
+// iWindowManager->ApiProvider()->Preferences().SetScriptLogL( TBrCtlDefs::EScriptLogDisable );
+// break;
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::IsPageOverviewSupported
+// ---------------------------------------------------------
+//
+TBool CBrowserWindow::IsPageOverviewSupportedL()
+ {
+ if(!iIsPageOverviewSupportQueried)
+ {
+ iIsPageOverviewSupported = iBrCtlInterface->BrowserSettingL(
+ TBrCtlDefs::ESettingsPageOverview );
+ iIsPageOverviewSupportQueried = ETrue;
+ }
+
+ return iIsPageOverviewSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ResetPageOverviewLocalSettingL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::ResetPageOverviewLocalSettingL()
+ {
+ iIsPageOverviewOn =
+ iWindowManager->ApiProvider()->Preferences().PageOverview();
+ BrCtlInterface().SetBrowserSettingL(TBrCtlDefs::ESettingsPageOverview,
+ iIsPageOverviewOn );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ChangeTitlePaneTextUntilL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::ChangeTitlePaneTextUntilL(
+ const TDesC& aTitle, TInt /* aInterval */ )
+ {
+ iWindowManager->ApiProvider()->DialogsProvider().ShowTooltipL( aTitle );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FlipPageOverviewLocalSettingL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::FlipPageOverviewLocalSettingL()
+ {
+ iIsPageOverviewOn = !iIsPageOverviewOn;
+ BrCtlInterface().SetBrowserSettingL( TBrCtlDefs::ESettingsPageOverview,
+ iIsPageOverviewOn );
+ TInt tooltipResource = iIsPageOverviewOn ?
+ R_BROWSER_TOOLTIP_PAGE_OVERVIEW_ON : R_BROWSER_TOOLTIP_PAGE_OVERVIEW_OFF;
+ HBufC* overviewTooltip = StringLoader::LoadLC( tooltipResource );
+
+ iWindowManager->ApiProvider()->DialogsProvider().ShowTooltipL( *overviewTooltip );
+ CleanupStack::PopAndDestroy( overviewTooltip );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::BrCtlInterface()
+// -----------------------------------------------------------------------------
+//
+CBrCtlInterface& CBrowserWindow::BrCtlInterface() const
+ {
+ return *iBrCtlInterface;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::Display()
+// -----------------------------------------------------------------------------
+//
+MDisplay& CBrowserWindow::Display() const
+ {
+ return *iDisplay;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::LoadObserver()
+// -----------------------------------------------------------------------------
+//
+CBrowserLoadObserver& CBrowserWindow::LoadObserver() const
+ {
+ return *iLoadObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SoftkeysObserver()
+// -----------------------------------------------------------------------------
+//
+CBrowserSoftkeysObserver& CBrowserWindow::SoftkeysObserver() const
+ {
+ return *iSoftkeysObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SpecialLoadObserver()
+// -----------------------------------------------------------------------------
+//
+CBrowserSpecialLoadObserver& CBrowserWindow::SpecialLoadObserver() const
+ {
+ return *iSpecialLoadObserver;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindow::HandlePreferencesChangeL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindow::HandlePreferencesChangeL(
+ TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType )
+ {
+ switch ( aEvent )
+ {
+ case EPreferencesActivate:
+ {
+ // Provide local settings
+ aValues.iFontSize = iFontSize;
+ aValues.iTextWrap = iTextWrap;
+ aValues.iEncoding = iEncoding;
+ break;
+ }
+ case EPreferencesDeactivate:
+ {
+ // Save local preferences and notify Browser Control
+ if ( iActive ) // Topmost window only
+ {
+ UpdateLocalPreferencesL( aValues );
+ }
+ break;
+ }
+ case EPreferencesItemChange:
+ {
+ // All preferences changes should notify the
+ // Browser Control
+ UpdateGlobalPreferencesL( aSettingType );
+
+ if ( iActive ) // Topmost window only
+ {
+ UpdateLocalPreferencesL( aValues );
+ // Change the local setting to the changed setting.
+ iIsPageOverviewOn = iWindowManager->ApiProvider()->Preferences().PageOverview();
+ }
+ break;
+ }
+ default:
+ // Do nothing
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::UpdateGlobalPreferencesL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::UpdateGlobalPreferencesL(
+ TBrCtlDefs::TBrCtlSettings aSettingType )
+ {
+ // Local Settings should be ignored
+ switch ( aSettingType )
+ {
+ case TBrCtlDefs::ESettingsAutoLoadImages:
+ {
+ // WebEngine has two different settings for Content Autoload enable/disable:
+ // AutoLoad Images - True/False and Disable flash - True/False
+ // Here is how the Load Content setting in UI maps to the Image and
+ // Flash settings in Webengine in case flash Plugin is present
+ // Load Content = 0, AutoLoadImages = 0, DisableFlash = 1
+ // Load Content = 1, AutoLoadImages = 1, DisableFlash = 1
+ // Load Content = 2, AutoLoadImages = 1, DisableFlash = 0
+ // In case flash plugin is not present
+ // Load Content = 0, AutoLoadImages = 0, DisableFlash = 1
+ // Load Content = 1, AutoLoadImages = 1, DisableFlash = 1
+
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsAutoLoadImages,
+ ((Preferences().AutoLoadContent() == EWmlSettingsAutoloadText)
+ ?EFalse:ETrue));
+
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsDisableFlash,
+ ((Preferences().AutoLoadContent() == EWmlSettingsAutoloadAll)
+ ?EFalse:ETrue));
+ break;
+ }
+ case TBrCtlDefs::ESettingsEmbedded:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsEmbedded,
+ Preferences().EmbeddedMode() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsCookiesEnabled:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsCookiesEnabled,
+ Preferences().Cookies() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsECMAScriptEnabled:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsECMAScriptEnabled,
+ Preferences().Ecma() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsScriptLog:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsScriptLog,
+ Preferences().ScriptLog() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsIMEINotifyEnabled:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsIMEINotifyEnabled,
+ Preferences().IMEINotification() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsSendRefererHeader:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsSendRefererHeader,
+ Preferences().SendReferrer() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsSecurityWarnings:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsSecurityWarnings,
+ Preferences().HttpSecurityWarnings() );
+ break;
+ }
+
+ case TBrCtlDefs::ESettingsAutoOpenDownloads:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsAutoOpenDownloads,
+ Preferences().DownloadsOpen() );
+ break;
+ }
+
+ case TBrCtlDefs::ESettingsPageOverview:
+ {
+ if( IsPageOverviewSupportedL() )
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsPageOverview,
+ Preferences().PageOverview() );
+ }
+ break;
+ }
+ case TBrCtlDefs::ESettingsBackList:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsBackList,
+ Preferences().BackList() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsAutoRefresh:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsAutoRefresh,
+ Preferences().AutoRefresh() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsAutoFormFillEnabled:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsAutoFormFillEnabled,
+ Preferences().FormDataSaving() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarOnOff:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarOnOff,
+ Preferences().ShowToolbarOnOff() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton1Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton1Cmd,
+ Preferences().ShowToolbarButton1Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton2Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton2Cmd,
+ Preferences().ShowToolbarButton2Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton3Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton3Cmd,
+ Preferences().ShowToolbarButton3Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton4Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton4Cmd,
+ Preferences().ShowToolbarButton4Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton5Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton5Cmd,
+ Preferences().ShowToolbarButton5Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton6Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton6Cmd,
+ Preferences().ShowToolbarButton6Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsToolbarButton7Cmd:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsToolbarButton7Cmd,
+ Preferences().ShowToolbarButton7Cmd() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsZoomLevelMin:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsZoomLevelMin,
+ Preferences().ZoomLevelMinimum() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsZoomLevelMax:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsZoomLevelMax,
+ Preferences().ZoomLevelMaximum() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsZoomLevelDefault:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsZoomLevelDefault,
+ Preferences().ZoomLevelDefault() );
+ break;
+ }
+ case TBrCtlDefs::ESettingsCursorShowMode:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsCursorShowMode,
+ Preferences().CursorShowMode() );
+ break;
+ }
+
+ case TBrCtlDefs::ESettingsEnterKeyMode:
+ {
+ iBrCtlInterface->SetBrowserSettingL(
+ TBrCtlDefs::ESettingsEnterKeyMode,
+ Preferences().EnterKeyMode() );
+ break;
+ }
+
+ // LOCAL SETTINGS should be ignored
+ case TBrCtlDefs::ESettingsTextWrapEnabled:
+ case TBrCtlDefs::ESettingsFontSize:
+ case TBrCtlDefs::ESettingsCharacterset:
+ {
+ break;
+ }
+ case TBrCtlDefs::ESettingsUnknown: // ignore
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::UpdateLocalPreferencesL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::UpdateLocalPreferencesL( TPreferencesValues& aValues )
+ {
+ if ( iFontSize != aValues.iFontSize )
+ {
+ iFontSize = aValues.iFontSize;
+ iBrCtlInterface->SetBrowserSettingL(
+ ( TUint ) TBrCtlDefs::ESettingsFontSize, iFontSize );
+ }
+
+ if ( iTextWrap != aValues.iTextWrap )
+ {
+ iTextWrap = aValues.iTextWrap;
+ iBrCtlInterface->SetBrowserSettingL(
+ ( TUint ) TBrCtlDefs::ESettingsTextWrapEnabled, iTextWrap );
+ }
+ if ( iEncoding != aValues.iEncoding )
+ {
+ iEncoding = aValues.iEncoding;
+ iBrCtlInterface->SetBrowserSettingL(
+ ( TUint ) TBrCtlDefs::ESettingsCharacterset, iEncoding );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::InitialiseLocalPreferencesL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::InitialiseLocalPreferencesL()
+ {
+ // Initialise local settings from Central Repository
+ const TPreferencesValues& pref = Preferences().AllPreferencesL();
+ iFontSize = pref.iFontSize;
+ iTextWrap = pref.iTextWrap;
+ iEncoding = pref.iEncoding;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindow::UpdateBrCtlSettingsL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindow::UpdateBrCtlSettingsL()
+ {
+ LOG_ENTERFN("CBrowserPreferences::UpdateBrCtlSettingsL");
+
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsSmallScreen );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsAutoLoadImages );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsEmbedded );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsCookiesEnabled );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsCSSFetchEnabled );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsECMAScriptEnabled );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsScriptLog );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsIMEINotifyEnabled );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsSendRefererHeader );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsSecurityWarnings );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsAutoOpenDownloads );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsPageOverview );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsBackList );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsAutoRefresh );
+
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsAutoFormFillEnabled );
+
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarOnOff );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton1Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton2Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton3Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton4Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton5Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton6Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsToolbarButton7Cmd );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsZoomLevelMin );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsZoomLevelMax );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsZoomLevelDefault );
+
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsCursorShowMode );
+ UpdateGlobalPreferencesL( TBrCtlDefs::ESettingsEnterKeyMode );
+
+ // Font Size - LOCAL Setting
+ iBrCtlInterface->SetBrowserSettingL( TBrCtlDefs::ESettingsFontSize,
+ iWindowManager->ApiProvider()->Preferences().FontSize() );
+
+ // Text Wrap - LOCAL Setting
+ iBrCtlInterface->SetBrowserSettingL( TBrCtlDefs::ESettingsTextWrapEnabled,
+ iWindowManager->ApiProvider()->Preferences().TextWrap() );
+
+ // Encoding - LOCAL Setting
+ iBrCtlInterface->SetBrowserSettingL( TBrCtlDefs::ESettingsCharacterset,
+ iWindowManager->ApiProvider()->Preferences().Encoding() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ActivateL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::ActivateL( TBool aDraw )
+ {
+LOG_ENTERFN("CBrowserWindow::ActivateL");
+BROWSER_LOG( ( _L( "Activating window no. %d" ), WindowId() ) );
+ iDialogsProviderProxy->WindowActivated();
+ iBrCtlInterface->MakeVisible( ETrue ); // notify the engine
+ iActive = ETrue;
+ if( aDraw )
+ {
+ iBrCtlInterface->DrawNow();
+ CBrowserContentView* cv = iWindowManager->ContentView();
+ cv->UpdateFullScreenL();
+ TRAP_IGNORE(Display().StopProgressAnimationL());//also updates title
+ }
+ WindowMgr().NotifyObserversL( EWindowActivate, WindowId() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::DeactivateL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::DeactivateL()
+ {
+LOG_ENTERFN("CBrowserWindow::DeactivateL");
+BROWSER_LOG( ( _L( "Deactivating window no. %d" ), WindowId() ) );
+ iActive = EFalse;
+ iBrCtlInterface->MakeVisible( EFalse ); // notify the engine
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::Connection
+// -----------------------------------------------------------------------------
+//
+MConnection& CBrowserWindow::Connection() const
+ {
+ return CALL_ORIG Connection();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::Preferences()
+// -----------------------------------------------------------------------------
+//
+MPreferences& CBrowserWindow::Preferences() const
+ {
+ return CALL_ORIG Preferences();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::CommsModel
+// -----------------------------------------------------------------------------
+//
+MCommsModel& CBrowserWindow::CommsModel() const
+ {
+ return CALL_ORIG CommsModel();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::DialogsProvider()
+// -----------------------------------------------------------------------------
+//
+CBrowserDialogsProvider& CBrowserWindow::DialogsProvider() const
+ {
+ __ASSERT_DEBUG( (iDialogsProviderProxy != NULL), Util::Panic( Util::EUninitializedData ));
+ return *( (CBrowserDialogsProvider*)iDialogsProviderProxy );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::BmOTABinSender
+// -----------------------------------------------------------------------------
+//
+MBmOTABinSender& CBrowserWindow::BmOTABinSenderL()
+ {
+ return CALL_ORIG BmOTABinSenderL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::PopupEngine
+// -----------------------------------------------------------------------------
+//
+CBrowserPopupEngine& CBrowserWindow::PopupEngine() const
+ {
+ return CALL_ORIG PopupEngine();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetViewToBeActivatedIfNeededL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetViewToBeActivatedIfNeededL(
+ TUid aUid,
+ TInt aMessageId )
+ {
+ CALL_ORIG SetViewToBeActivatedIfNeededL( aUid, aMessageId );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsCancelFetchAllowed
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsCancelFetchAllowed() const
+ {
+ return CALL_ORIG IsCancelFetchAllowed();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::LastActiveViewId
+// -----------------------------------------------------------------------------
+//
+TUid CBrowserWindow::LastActiveViewId() const
+ {
+ return CALL_ORIG LastActiveViewId();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetLastActiveViewId
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetLastActiveViewId( TUid aUid )
+ {
+ CALL_ORIG SetLastActiveViewId( aUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ExitInProgress
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::ExitInProgress() const
+ {
+ return CALL_ORIG ExitInProgress();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetExitInProgress
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetExitInProgress( TBool aValue )
+ {
+ CALL_ORIG SetExitInProgress( aValue );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsConnecting
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsConnecting() const
+ {
+ return CALL_ORIG IsConnecting();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::UpdateNaviPaneL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::UpdateNaviPaneL( TDesC& aStatusMsg )
+ {
+ CALL_ORIG UpdateNaviPaneL( aStatusMsg );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetViewToReturnOnClose
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetViewToReturnOnClose( TUid const &aUid )
+ {
+ CALL_ORIG SetViewToReturnOnClose( aUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::CloseContentViewL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::CloseContentViewL()
+ {
+ CALL_ORIG CloseContentViewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsEmbeddedModeOn
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsEmbeddedModeOn() const
+ {
+ return CALL_ORIG IsEmbeddedModeOn();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsShutdownRequested
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsShutdownRequested() const
+ {
+ return CALL_ORIG IsShutdownRequested();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ExitBrowser
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::ExitBrowser( TBool aUserShutdown )
+ {
+ CALL_ORIG ExitBrowser( aUserShutdown );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsAppShutterActive
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsAppShutterActive() const
+ {
+ return CALL_ORIG IsAppShutterActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::StartPreferencesViewL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::StartPreferencesViewL( TUint aListItems )
+ {
+ return CALL_ORIG StartPreferencesViewL( aListItems );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsPageLoaded
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsPageLoaded()
+ {
+ return CALL_ORIG IsPageLoaded();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsForeGround
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsForeGround() const
+ {
+ return CALL_ORIG IsForeGround();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::Fetching
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::Fetching() const
+ {
+ return CALL_ORIG Fetching();
+ }
+// -----------------------------------------------------------------------------
+// CBrowserWindow::ContentDisplayed
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::ContentDisplayed() const
+ {
+ return CALL_ORIG ContentDisplayed();
+ }
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetContentDisplayed
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetContentDisplayed(TBool aValue)
+ {
+ return CALL_ORIG SetContentDisplayed( aValue );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FetchBookmarkL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::FetchBookmarkL( TInt aBookmarkUid )
+ {
+ CALL_ORIG FetchBookmarkL( aBookmarkUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FetchBookmarkL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::FetchBookmarkL( const CFavouritesItem& aBookmarkItem )
+ {
+ CALL_ORIG FetchBookmarkL( aBookmarkItem );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FetchL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::FetchL(
+ const TDesC& aUrl,
+ const TDesC& aUserName,
+ const TDesC& aPassword,
+ const TFavouritesWapAp& aAccessPoint,
+ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType )
+ {
+ CALL_ORIG FetchL( aUrl, aUserName, aPassword, aAccessPoint, aUrlType );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FetchL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::FetchL(
+ const TDesC& aUrl,
+ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType )
+ {
+ CALL_ORIG FetchL( aUrl, aUrlType );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::CancelFetch
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::CancelFetch( TBool aIsUserInitiated )
+ {
+ CALL_ORIG CancelFetch( aIsUserInitiated );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetRequestedAP
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetRequestedAP( TInt aAp )
+ {
+ CALL_ORIG SetRequestedAP( aAp );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetExitFromEmbeddedMode
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetExitFromEmbeddedMode( TBool aFlag )
+ {
+ CALL_ORIG SetExitFromEmbeddedMode( aFlag );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsProgressShown
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsProgressShown() const
+ {
+ return CALL_ORIG IsProgressShown();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetProgressShown
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetProgressShown( TBool aProgressShown )
+ {
+ CALL_ORIG SetProgressShown( aProgressShown );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::StartedUp
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::StartedUp() const
+ {
+ return CALL_ORIG StartedUp();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::RequestedAp
+// -----------------------------------------------------------------------------
+//
+TUint32 CBrowserWindow::RequestedAp() const
+ {
+ return CALL_ORIG RequestedAp();
+ }
+// -----------------------------------------------------------------------------
+// CBrowserWindow::LogAccessToRecentUrlL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::LogAccessToRecentUrlL( CBrCtlInterface& aBrCtlInterface)
+ {
+ CALL_ORIG LogAccessToRecentUrlL( aBrCtlInterface );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::LogRequestedPageToRecentUrlL
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::LogRequestedPageToRecentUrlL( const TDesC& aUrl)
+ {
+ CALL_ORIG LogRequestedPageToRecentUrlL( aUrl );
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::StartProgressAnimationL
+// ---------------------------------------------------------
+//
+void CBrowserWindow::StartProgressAnimationL()
+ {
+ CALL_ORIG StartProgressAnimationL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::StopProgressAnimationL
+// ---------------------------------------------------------
+//
+void CBrowserWindow::StopProgressAnimationL()
+ {
+ CALL_ORIG StopProgressAnimationL();
+ }
+
+#ifdef __RSS_FEEDS
+// ---------------------------------------------------------
+// CBrowserWindow::FeedsClientUtilities
+// ---------------------------------------------------------
+//
+CFeedsClientUtilities& CBrowserWindow::FeedsClientUtilities() const
+ {
+ return CALL_ORIG FeedsClientUtilities();
+ }
+#endif // __RSS_FEEDS
+
+// ---------------------------------------------------------
+// CBrowserWindow::BrowserWasLaunchedIntoFeeds
+// ---------------------------------------------------------
+//
+TBool CBrowserWindow::BrowserWasLaunchedIntoFeeds()
+{
+ return CALL_ORIG BrowserWasLaunchedIntoFeeds();
+}
+
+// ---------------------------------------------------------
+// CBrowserWindow::SetHasWMLContent
+// ---------------------------------------------------------
+//
+void CBrowserWindow::SetHasWMLContent(TBool aHasWMLContent)
+ {
+ iHasWMLContent = aHasWMLContent;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::SetCurrWinHasWMLContent
+// ---------------------------------------------------------
+//
+void CBrowserWindow::SetCurrWinHasWMLContent(TBool aCurrWinHasWMLContent)
+ {
+ iCurrWinHasWMLContent = aCurrWinHasWMLContent;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::HasWMLContent
+// ---------------------------------------------------------
+//
+TBool CBrowserWindow::HasWMLContent (TBool aCurrWinOnly)
+ {
+ if (aCurrWinOnly)
+ {
+ return iCurrWinHasWMLContent;
+ }
+ else
+ {
+ return iHasWMLContent;
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserWindow::SetWMLMode
+// ---------------------------------------------------------
+//
+void CBrowserWindow::SetWMLMode(TBool aWMLMode)
+ {
+ iWMLMode = aWMLMode;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::SetFirstPage
+// ---------------------------------------------------------
+//
+void CBrowserWindow::SetFirstPage(TBool aFirstPage)
+ {
+ iFirstPage = aFirstPage;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindow::SetHasFeedsContent
+// ---------------------------------------------------------
+//
+void CBrowserWindow::SetHasFeedsContent(TBool aHasFeedsContent)
+ {
+ iHasFeedsContent = aHasFeedsContent;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetLastCBAUpdateView
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetLastCBAUpdateView( TUid aView )
+ {
+ CALL_ORIG SetLastCBAUpdateView( aView );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::GetLastCBAUpdateView
+// -----------------------------------------------------------------------------
+//
+TUid CBrowserWindow::GetLastCBAUpdateView()
+ {
+ return CALL_ORIG GetLastCBAUpdateView();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::GetPreviousViewFromViewHistory
+// -----------------------------------------------------------------------------
+//
+TUid CBrowserWindow::GetPreviousViewFromViewHistory()
+ {
+ return CALL_ORIG GetPreviousViewFromViewHistory();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::CalledFromAnotherApp
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::CalledFromAnotherApp()
+ {
+ return CALL_ORIG CalledFromAnotherApp();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::SetCalledFromAnotherApp
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindow::SetCalledFromAnotherApp( TBool aValue )
+ {
+ return CALL_ORIG SetCalledFromAnotherApp( aValue );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::FlashPresent
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::FlashPresent()
+ {
+ return CALL_ORIG FlashPresent();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsLaunchHomePageDimmedL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsLaunchHomePageDimmedL()
+ {
+ return CALL_ORIG IsLaunchHomePageDimmedL();
+ }
+// -----------------------------------------------------------------------------
+// CBrowserWindow::IsDisplayingMenuOrDialog
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserWindow::IsDisplayingMenuOrDialog()
+ {
+ return CALL_ORIG IsDisplayingMenuOrDialog();
+ }
+
+#undef CALL_ORIG
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserWindowFocusNotifier.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE Files
+
+// User includes
+#include "BrowserWindowFocusNotifier.h" // Class header
+#include "logger.h"
+
+// System includes
+#include <e32std.h>
+
+// CONSTANTS
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier::CBrowserWindowFocusNotifier
+//-----------------------------------------------------------------------------
+CBrowserWindowFocusNotifier::CBrowserWindowFocusNotifier()
+ {
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier::~CBrowserWindowFocusNotifier
+//-----------------------------------------------------------------------------
+CBrowserWindowFocusNotifier::~CBrowserWindowFocusNotifier()
+ {
+LOG_ENTERFN("~CBrowserWindowFocusNotifier");
+ FlushAOStatusArray();
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier* CBrowserWindowFocusNotifier::NewL
+//-----------------------------------------------------------------------------
+CBrowserWindowFocusNotifier* CBrowserWindowFocusNotifier::NewL()
+ {
+ CBrowserWindowFocusNotifier* self = new (ELeave)
+ CBrowserWindowFocusNotifier();
+
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self ); // self
+ return self;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier::ConstructL
+//
+//-----------------------------------------------------------------------------
+void CBrowserWindowFocusNotifier::ConstructL()
+ {
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier::Add()
+//-----------------------------------------------------------------------------
+TInt CBrowserWindowFocusNotifier::Add( TRequestStatus* aStatus )
+ {
+ return iAOStatusArray.Append( aStatus );
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier::OnFocusGained()
+//-----------------------------------------------------------------------------
+void CBrowserWindowFocusNotifier::OnFocusGained()
+ {
+ FlushAOStatusArray();
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserWindowFocusNotifier::FlushAOStatusArray()
+//-----------------------------------------------------------------------------
+void CBrowserWindowFocusNotifier::FlushAOStatusArray()
+ {
+LOG_ENTERFN("CBrowserWindowFocusNotifier::FlushAOStatusArray");
+ TInt count = iAOStatusArray.Count();
+BROWSER_LOG( ( _L( "Flush count: %d" ), count ) );
+
+ // Clear all status requests and then clear array - in order
+ for ( TInt i = 0; i < count; i++ )
+ {
+BROWSER_LOG( ( _L( "Flushing: %d" ), i ) );
+ TRequestStatus* status = iAOStatusArray[i];
+ User::RequestComplete( status, KErrNone );
+ }
+
+ iAOStatusArray.Reset();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserWindowManager.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,833 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Multiple Windows' WindowManager.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowQueue.h"
+#include "BrowserContentView.h"
+#include "WindowInfoProvider.h"
+#include "Logger.h"
+#include "Preferences.h"
+#include "Display.h"
+#include "ApiProvider.h"
+#include <brctldefs.h>
+#include "BrowserUtil.h"
+#include <BrowserNG.rsg>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowQue::LastItem()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowQue* CBrowserWindowQue::LastItem() const
+ {
+ // remove 'const' modifier from 'this' in a const member function
+ CBrowserWindowQue* a = CONST_CAST( CBrowserWindowQue*, this );
+ for( ; a->iNext; a=a->iNext)
+ ;
+ return a;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowQue::~CBrowserWindowQue()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowQue::~CBrowserWindowQue()
+ {
+LOG_ENTERFN("WindowQue::~WindowQue");
+ if( this->iPrev )
+ {
+ BROWSER_LOG( ( _L( "iPrev" ) ) );
+ this->iPrev->iNext = this->iNext;
+ }
+ if( this->iNext )
+ {
+ BROWSER_LOG( ( _L( "iNext" ) ) );
+ this->iNext->iPrev = this->iPrev;
+ }
+ delete iWindow;
+ iWindow = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowQue::AppendL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindowQue::AppendL( CBrowserWindowQue* aItem )
+ {
+ __ASSERT_DEBUG( (aItem != NULL), Util::Panic( Util::EUninitializedData ));
+ aItem->iPrev = LastItem();
+ aItem->iPrev->iNext = aItem;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowQue::Next()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowQue* CBrowserWindowQue::Next() const
+ {
+ CBrowserWindowQue* b = this->iNext;
+ while( b && (b->iStatus & CBrowserWindowQue::EWindowDeleted ) )
+ {
+ b = b->iNext;
+ }
+ return b;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowQue::Prev()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowQue* CBrowserWindowQue::Prev() const
+ {
+ CBrowserWindowQue* b = this->iPrev;
+ while( b && (b->iStatus & CBrowserWindowQue::EWindowDeleted ) )
+ {
+ b = b->iPrev;
+ }
+ return b;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::
+// -----------------------------------------------------------------------------
+// initialization of static member variable
+TInt CBrowserWindowManager::iWindowIdGenerator( 0 );
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::NewLC()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowManager* CBrowserWindowManager::NewLC(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ TInt aMaxWindowCount )
+ {
+ CBrowserWindowManager* self = new (ELeave)
+ CBrowserWindowManager( aApiProvider, aContentView, aMaxWindowCount );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::NewL()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowManager* CBrowserWindowManager::NewL(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ TInt aMaxWindowCount )
+ {
+ CBrowserWindowManager* self = CBrowserWindowManager::NewLC(
+ aApiProvider, aContentView, aMaxWindowCount );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::~CBrowserWindowManager()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowManager::~CBrowserWindowManager( )
+ {
+LOG_ENTERFN("WindowManager::~WindowManager");
+ // Preferences must exist!
+ if(iApiProvider!=NULL)
+ {
+ iApiProvider->Preferences().RemoveObserver( this );
+ }
+ RemoveObserver(iContentView);
+ CBrowserWindowQue *window = iWindowQueue;
+ CBrowserWindowQue *temp = NULL;
+
+
+ TBool isStandAlone( !iApiProvider->IsEmbeddedModeOn() );
+ if ( ( isStandAlone && !iUserExit ) || ( !isStandAlone ) )
+ {
+ TRAP_IGNORE( window->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandSaveLaunchParams + (TInt)TBrCtlDefs::ECommandIdBase ) );
+ }
+
+ for(; window; )
+ {
+ temp = window;
+ window = window->iNext;
+ DeleteOneWindowL( temp->iWindow->WindowId() );
+ /*delete temp;
+ temp = NULL;*/
+ }
+ RemoveDeletedWindowsL();
+ delete iObservers;
+ iObservers = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::WindowCount()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowManager::WindowCount() const
+ {
+ return iWindowCount - iDeletedWindowCount;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::CBrowserWindowManager()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowManager::CBrowserWindowManager(
+ MApiProvider& aApiProvider,
+ CBrowserContentView& aContentView,
+ TInt aMaxWindowCount ) :
+ iApiProvider( &aApiProvider ),
+ iContentView( &aContentView),
+ iMaxWindowCount( aMaxWindowCount ),
+ iWindowCount( 0 ),
+ iDeletedWindowCount( 0 ),
+ iWindowQueue( NULL ),
+ iCurrentWindow( NULL ),
+ iUserExit( EFalse ),
+ iIsContentExist( EFalse )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::ConstructL( )
+ {
+ iApiProvider->Preferences().AddObserverL( this );
+ CreateWindowL( 0, &KNullDesC );
+ iCurrentWindow = iWindowQueue;
+ // don't draw anything, just activate it
+ iCurrentWindow->iWindow->ActivateL( EFalse );
+ iObservers = new ( ELeave ) CArrayPtrFlat< MWindowObserver >( 1 );
+ AddObserverL(iContentView);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::Window()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowManager::Window(
+ TInt aWindowId,
+ CBrowserWindow*& aWindow )
+ {
+ RemoveDeletedWindowsL();
+ CBrowserWindowQue *windowQue = NULL;
+ TInt error( Window( aWindowId, windowQue, iWindowQueue ) );
+ if( windowQue )
+ {
+ aWindow = windowQue->iWindow;
+ }
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::FindWindowL()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindow* CBrowserWindowManager::FindWindowL(
+ const TDesC& aTargetName )
+ {
+LOG_ENTERFN("WindowManager::FindWindowL( Target )");
+ RemoveDeletedWindowsL();
+ CBrowserWindow* result = NULL;
+ CBrowserWindow* window = NULL;
+ CBrowserWindowQue *windowQue = iWindowQueue;
+ for( ; windowQue; windowQue = windowQue->Next() )
+ {
+ window = windowQue->iWindow;
+ if( window->TargetName()->Compare( aTargetName ) == 0 )
+ {
+ result = window;
+ }
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::CurrentWindow()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindow* CBrowserWindowManager::CurrentWindow() const
+ {
+ if( iCurrentWindow )
+ {
+ return iCurrentWindow->iWindow;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::CurrentWindowQue()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindowQue* CBrowserWindowManager::CurrentWindowQue() const
+ {
+ if( iCurrentWindow )
+ {
+ return iCurrentWindow;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::GetWindowInfoL()
+// -----------------------------------------------------------------------------
+//
+CArrayFixFlat<CWindowInfo*>* CBrowserWindowManager::GetWindowInfoL(
+ MWindowInfoProvider* aWindowInfo )
+ {
+ __ASSERT_DEBUG( (aWindowInfo != NULL), Util::Panic( Util::EUninitializedData ));
+
+ RemoveDeletedWindowsL();
+ CBrowserWindowQue* window = iWindowQueue;
+ CArrayFixFlat<CWindowInfo*>* windowInfoList = new (ELeave)
+ CArrayFixFlat<CWindowInfo*>( 3 /* KGranularityMedium */ );
+ CleanupStack::PushL( windowInfoList );
+ for( ; window; window = window->Next() )
+ {
+ // create window info text by client
+ HBufC* buf = aWindowInfo->CreateWindowInfoLC( *( window->iWindow ) );
+
+ if (!buf)
+ {
+ CleanupStack::PopAndDestroy( buf );
+ buf = KNullDesC().AllocLC();
+ }
+
+ // create window info( text, id, current )
+ CWindowInfo* windowInfo = new ( ELeave ) CWindowInfo(
+ buf, window->iWindow->WindowId(), iCurrentWindow == window );
+
+ CleanupStack::Pop( buf );
+
+ // append to list
+ windowInfoList->AppendL( windowInfo );
+
+ }
+
+ CleanupStack::Pop( windowInfoList );
+ return windowInfoList;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::AddObserver()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::AddObserverL( MWindowObserver* aObserver )
+ {
+ LOG_ENTERFN("CBrowserWindowManager::AddObserver");
+ if ( iObservers )
+ {
+ iObservers->AppendL( aObserver );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::RemoveObserver()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::RemoveObserver( MWindowObserver* aObserver )
+ {
+ LOG_ENTERFN("CBrowserWindowManager::RemoveObserver");
+ TInt i( 0 );
+ TInt count = iObservers->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iObservers->At( i ) == aObserver )
+ {
+ iObservers->Delete( i );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::NotifyObservers()
+// -----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::NotifyObserversL( TWindowEvent aEvent, TInt aWindowId )
+ {
+ LOG_ENTERFN("CBrowserWindowManager::NotifyObservers");
+ if ( iObservers )
+ {
+ TInt i;
+ TInt count = iObservers->Count();
+
+ if ( count )
+ {
+ for ( i = 0; i < count; i++ )
+ {
+ iObservers->At( i )->WindowEventHandlerL( aEvent, aWindowId );
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::CreateWindowL()
+// -----------------------------------------------------------------------------
+//
+CBrowserWindow* CBrowserWindowManager::CreateWindowL(
+ TInt aParentId,
+ const TDesC* aTargetName )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN("WindowManager::CreateWindowL");
+ RemoveDeletedWindowsL();
+ if( WindowCount() >= iMaxWindowCount )
+ {
+ HBufC* maxWinsReached = StringLoader::LoadLC(R_BROWSER_NOTE_MAX_WINDOWS);
+ ApiProvider()->DialogsProvider().DialogNoteL( *maxWinsReached );
+ CleanupStack::PopAndDestroy( maxWinsReached );
+ return NULL;
+ }
+ CBrowserWindow* window = NULL;
+ // search for already existing window
+ Window( aParentId, aTargetName, window, iWindowQueue ); // error is ignored
+ if( window )
+ {
+
+ return window;
+ }
+ window = CBrowserWindow::NewLC( ++iWindowIdGenerator, aTargetName, this );
+BROWSER_LOG( ( _L( "Window is created, ID: %d, windowCount: %d" ),
+ window->WindowId(), WindowCount ) );
+ // create a WindowQue instance initiated by the new window
+ CBrowserWindowQue *windowQue = new (ELeave) CBrowserWindowQue( window );
+ CleanupStack::PushL( windowQue );
+ // and set window's parent
+ TInt error2( Window( aParentId, windowQue->iParent, iWindowQueue ) );
+BROWSER_LOG( ( _L( "error2: %d" ), error2 ) );
+ // append window to the list
+ if( iWindowQueue )
+ {
+ BROWSER_LOG( ( _L( "window queue not empty" ) ) );
+ iWindowQueue->AppendL( windowQue );
+ }
+ else
+ {
+ BROWSER_LOG( ( _L( "window queue empty" ) ) );
+ iWindowQueue = windowQue;
+ }
+ CleanupStack::Pop( windowQue );
+
+ // window is created and append to the list successfully
+ ++iWindowCount;
+
+ CleanupStack::Pop( window );
+ NotifyObserversL( EWindowOpen, window->WindowId() );
+
+ // window is activated by the client
+PERFLOG_STOP_WRITE("****CreateWindowL***")
+ return window;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::DeleteWindowL()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowManager::DeleteWindowL(
+ TInt aWindowId,
+ TBool aUserInitiated )
+ {
+LOG_ENTERFN("WindowManager::DeleteWindowL");
+ TInt windowToBeActivated( KErrNotFound );
+ // find the window
+ CBrowserWindowQue* windowQue = NULL;
+ Window( aWindowId, windowQue, iWindowQueue );
+ if( windowQue )
+ {
+ // make the old window absolutely inactive
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandClearHistory + (TInt)TBrCtlDefs::ECommandIdBase );
+ // Changes were made to ClearHistory that cause it to keep one (current) page
+ // In order to reuse a window we need to clear the history again after the first new page
+ // is loaded.
+ windowQue->iWindow->SetFirstPage(ETrue);
+
+
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandLoseFocus + (TInt)TBrCtlDefs::ECommandIdBase );
+
+ if(windowQue->iWindow->HasWMLContent(EFalse))
+ {
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandUnloadWMLEngine + (TInt)TBrCtlDefs::ECommandIdBase );
+ }
+
+ // On 3.1 CancelFetch activates the content view for some reason
+ // this section is temporarily flagged out until further
+ // investigation.
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase );
+
+ // if the topmost window is deleted
+ // try to find a new one to be activated
+ if( iCurrentWindow == windowQue )
+ {
+ CBrowserWindowQue* next = windowQue->Next();
+ CBrowserWindowQue* prev = windowQue->Prev();
+ if( next )
+ {
+ windowToBeActivated = next->iWindow->WindowId();
+ iCurrentWindow = next;
+ }
+ else if( prev )
+ {
+ windowToBeActivated = prev->iWindow->WindowId();
+ iCurrentWindow = prev;
+ }
+ else
+ {
+ windowToBeActivated = 0;
+ }
+ }
+ // else a background window was deleted
+
+ // last window handling
+ if( WindowCount() == 1 )
+ {
+ // here we already set the windowToBeActivated to 0
+ // means CloseContentView or Exit in AppUi
+
+ // clear all content of Window (images, scripts)
+
+// windowQue->iWindow->BrCtlInterface().HandleCommandL(
+// (TInt)TBrCtlDefs::ECommand + (TInt)TBrCtlDefs::ECommandIdBase );
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandUnloadWMLEngine + (TInt)TBrCtlDefs::ECommandIdBase );
+
+ //Remove the plugins windows. This is a fix for plugins still plays in the background
+ //while the page is closed.
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandUnLoadPluginWindows + (TInt)TBrCtlDefs::ECommandIdBase );
+
+ iIsContentExist = EFalse;
+ windowQue->iWindow->SetHasWMLContent(EFalse);
+ windowQue->iWindow->SetCurrWinHasWMLContent(EFalse);
+
+
+ }
+ // Update MW Indicator
+ else if ( WindowCount() == 2 )
+ {
+ // sets the window status
+ windowQue->iStatus |= CBrowserWindowQue::EWindowDeleted;
+ windowQue->iWindow->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandNotifyPluginFocusChangeEvent + (TInt)TBrCtlDefs::ECommandIdBase);
+ windowQue->iWindow->DeactivateL();
+ // maintain deleted windows' count
+ ++iDeletedWindowCount;
+
+ if( aUserInitiated )
+ {
+ DeleteOneWindowL( aWindowId );
+ }
+ }
+ else
+ {
+ // sets the window status
+ windowQue->iStatus |= CBrowserWindowQue::EWindowDeleted;
+ windowQue->iWindow->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandNotifyPluginFocusChangeEvent + (TInt)TBrCtlDefs::ECommandIdBase);
+ windowQue->iWindow->DeactivateL();
+ // maintain deleted windows' count
+ ++iDeletedWindowCount;
+
+ if( aUserInitiated )
+ {
+ DeleteOneWindowL( aWindowId );
+ }
+ }
+ }
+ NotifyObserversL( EWindowClose, aWindowId );
+
+ return windowToBeActivated;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::SwitchWindowL()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowManager::SwitchWindowL( TInt aWindowId, TBool aDraw )
+ {
+LOG_ENTERFN("WindowManager::SwitchWindowL");
+ CBrowserWindowQue* windowQue = NULL;
+ TBool wdnSwitching = EFalse;
+ TInt error( Window( aWindowId, windowQue, iWindowQueue ) );
+BROWSER_LOG( ( _L( "error: %d" ), error ) );
+ if( windowQue )
+ {
+ BROWSER_LOG( ( _L( "Switching..." ) ) );
+ if( windowQue != iCurrentWindow )
+ {
+ wdnSwitching = ETrue;
+ iCurrentWindow->iWindow->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandNotifyPluginFocusChangeEvent + (TInt)TBrCtlDefs::ECommandIdBase);
+ iCurrentWindow->iWindow->DeactivateL();
+ iCurrentWindow = windowQue;
+ }
+ //If the history view is up, don't activate the content view unless it is switching the window. Otherwise,
+ //it will overdraw the history view and it will cause serious problems when there
+ //is a background redirection
+ if(!iCurrentWindow->iWindow->IsWindowActive() && (!iContentView->IsHistoryViewUp() || wdnSwitching))
+ {
+ iCurrentWindow->iWindow->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandNotifyPluginFocusChangeEvent + (TInt)TBrCtlDefs::ECommandIdBase);
+ iCurrentWindow->iWindow->ActivateL( aDraw );
+ iContentView->UpdateCbaL();
+ }
+ }
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::Window()
+// -----------------------------------------------------------------------------
+// search for a window identified by its Id
+TInt CBrowserWindowManager::Window(
+ TInt aWindowId,
+ CBrowserWindowQue*& aWindowQue,
+ CBrowserWindowQue* aStartingItem ) const
+ {
+LOG_ENTERFN("WindowManager::Window( Id )");
+ TInt error( KErrNotFound );
+ CBrowserWindowQue *windowQue = aStartingItem;
+ for( ; (error != KErrNone) && (windowQue); windowQue = windowQue->iNext )
+ {
+ if( windowQue->iWindow->WindowId() == aWindowId )
+ {
+ error = KErrNone;
+ aWindowQue = windowQue;
+ }
+ }
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::Window()
+// -----------------------------------------------------------------------------
+// search for a window identified by TargetName and its Parent
+TInt CBrowserWindowManager::Window(
+ TInt aParentId,
+ const TDesC* aTargetName,
+ CBrowserWindow*& aWindow,
+ CBrowserWindowQue* aStartingItem ) const
+ {
+LOG_ENTERFN("WindowManager::Window( Parent, Target )");
+ TInt error( KErrNotFound );
+ if( aTargetName && aTargetName->Length() ) // sanity check
+ {
+ CBrowserWindow* window = NULL;
+ CBrowserWindowQue *windowQue = aStartingItem;
+ CBrowserWindowQue* parent = NULL;
+ for( ; (error != KErrNone) && (windowQue); windowQue = windowQue->iNext )
+ {
+ window = windowQue->iWindow;
+ parent = windowQue->iParent;
+ if( parent &&
+ ( parent->iWindow->WindowId() == aParentId ) &&
+ ( window->TargetName()->Compare( *aTargetName ) == 0 ) )
+ {
+ error = KErrNone;
+ aWindow = window;
+ }
+ }
+ }
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowManager::DeleteOneWindowL()
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowManager::DeleteOneWindowL( TInt aWindowId )
+ {
+ // Last window cannot be deleted, this is not called then.
+LOG_ENTERFN("WindowManager::DeleteOneWindowL");
+ CBrowserWindowQue* windowQue = NULL;
+ // find window, error ignored
+ Window( aWindowId, windowQue, iWindowQueue );
+ if( windowQue )
+ {
+ // set WindowQueue's first item if required
+ if( iWindowQueue == windowQue )
+ {
+ iWindowQueue = windowQue->iNext;
+ }
+
+ // clear children's parent pointer
+ CBrowserWindowQue* queue = iWindowQueue;
+ for( ; queue; queue = queue->iNext )
+ {
+ if( queue->iParent == windowQue )
+ {
+ queue->iParent = NULL;
+ }
+ }
+
+ // decrease WindowCount
+ --iWindowCount;
+
+ // maintain deleted status
+ if ( windowQue->iStatus & CBrowserWindowQue::EWindowDeleted )
+ {
+ __ASSERT_DEBUG( iDeletedWindowCount,
+ Util::Panic( Util::EUnExpected ));
+ --iDeletedWindowCount;
+ }
+ // delete window via its windowQue container
+ delete windowQue;
+ }
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindowManager::RemoveDeletedWindowsL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::RemoveDeletedWindowsL()
+ {
+ CBrowserWindowQue *window = iWindowQueue;
+ CBrowserWindowQue *temp = NULL;
+ // walk through all the windows
+ for( ; window; )
+ {
+ temp = window;
+ window = window->iNext;
+ // if it is set as deleted
+ if( temp->iStatus & CBrowserWindowQue::EWindowDeleted )
+ {
+ DeleteOneWindowL( temp->iWindow->WindowId() );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindowManager::HandlePreferencesChangeL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::HandlePreferencesChangeL(
+ const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType )
+ {
+LOG_ENTERFN("WindowManager::HandlePreferencesChangeL");
+BROWSER_LOG( ( _L( "Preferences event: %d" ), aEvent ) );
+ switch( aEvent )
+ {
+ case EPreferencesActivate:
+ {
+ // Topmost Window ONLY
+ if ( iCurrentWindow )
+ {
+ iCurrentWindow->iWindow->HandlePreferencesChangeL(
+ aEvent, aValues, aSettingType );
+ }
+ break;
+ }
+ case EPreferencesDeactivate:
+ case EPreferencesItemChange:
+ {
+ // All windows
+ CBrowserWindowQue *windowQue = iWindowQueue;
+ for( ; windowQue; windowQue = windowQue->Next() )
+ {
+ windowQue->iWindow->HandlePreferencesChangeL(
+ aEvent, aValues, aSettingType );
+ }
+ break;
+ }
+ default:
+ // don't do anything
+ break;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindowManager::SendCommandToAllWindowsL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::SendCommandToAllWindowsL(
+ TInt aCommand )
+ {
+LOG_ENTERFN("WindowManager::SendCommandToAllWindowsL");
+BROWSER_LOG( ( _L( "Command: %d" ), aCommand ) );
+
+ CBrowserWindowQue *windowQue = iWindowQueue;
+ for( ; windowQue; windowQue = windowQue->Next() )
+ {
+ windowQue->iWindow->BrCtlInterface().HandleCommandL(aCommand);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindowManager::SetCurrentWindowViewState()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::SetCurrentWindowViewState(TBrCtlDefs::TBrCtlState aViewState, TInt aValue)
+ {
+LOG_ENTERFN("WindowManager::SetCurrentWindowViewState");
+BROWSER_LOG( ( _L( "State: %d" ), aViewState ) );
+
+ TBool val(aValue > 0);
+ if (aViewState == TBrCtlDefs::EStateWmlView)
+ {
+ CurrentWindow()->SetWMLMode(val); // set current page has wml (true or false)
+ if (val)
+ {
+ CurrentWindow()->SetHasWMLContent(ETrue); // at least 1 page in window has/had wml
+ CurrentWindow()->SetCurrWinHasWMLContent(ETrue); // current page has wml content
+
+ }
+ else
+ {
+ CurrentWindow()->SetCurrWinHasWMLContent(EFalse);// current page isn't wml
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserWindowManager::CloseAllWindowsExceptCurrent()
+// ----------------------------------------------------------------------------
+//
+void CBrowserWindowManager::CloseAllWindowsExceptCurrent()
+ {
+ LOG_ENTERFN("WindowManager::CloseAllWindowsExceptCurrent");
+ CBrowserWindowQue* window = iWindowQueue;
+ for( ; window; window = window->Next() )
+ {
+ if(iCurrentWindow != window)
+ {
+ DeleteWindowL(window->iWindow->WindowId(), EFalse);
+ }
+ }
+ }
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserWindowSelectionContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,317 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserWindowSelectionContainer.
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "BrowserWindowSelectionContainer.h"
+#include "BrowserWindowSelectionView.h"
+#include "BrowserAppUi.h"
+#include "Display.h"
+#include "WindowInfoProvider.h"
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include <BrowserNG.rsg>
+#include <aknnavi.h>
+#include <akntabgrp.h>
+#include <aknnavide.h>
+#include <akntabgrp.h>
+#include <eikimage.h>
+#include <barsread.h>
+#include <brctldefs.h>
+#include <brctlinterface.h>
+#include <brctldefs.h>
+#include <browser.mbg>
+#include <gulicon.h>
+
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::ConstructL(const TRect& aRect)
+ {
+ CreateWindowL();
+ // Tabgroup has been read from resource and it were pushed to the navi pane.
+ // Get pointer to the navigation decorator with the ResourceDecorator() function.
+ // Application owns the decorator and it has responsibility to delete the object.
+ iNaviDecorator = iView->ApiProvider().Display().NaviPaneL()->CreateTabGroupL();
+ iTabGroup = (CAknTabGroup*)iNaviDecorator->DecoratedControl();
+ iTabGroup->SetObserver(this);
+
+ /*
+ // Create tab icon
+ iTabIcon = new (ELeave) CEikImage;
+ TResourceReader rr;
+ iCoeEnv->CreateResourceReaderLC( rr, R_BROWSER_ICON_PROP_FOLDER );
+ iTabIcon->ConstructFromResourceL( rr );
+ CleanupStack::PopAndDestroy(); // rr
+ */
+
+ SetRect(aRect);
+ ActivateL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::CBrowserWindowSelectionContainer
+// ---------------------------------------------------------
+//
+CBrowserWindowSelectionContainer::CBrowserWindowSelectionContainer( CBrowserWindowSelectionView *aView ) : iView( aView )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::~CBrowserWindowSelectionContainer
+// ---------------------------------------------------------
+//
+CBrowserWindowSelectionContainer::~CBrowserWindowSelectionContainer()
+ {
+ delete iNaviDecorator;
+ delete iThumbnail;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::ChangeTabL
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::ChangeTabL( CArrayFixFlat<HBufC*>* aTabTexts, TInt aActivateTab )
+ {
+ // If there are any tabs
+ if ( iTabGroup->TabCount() )
+ {
+ TInt tabCount = iTabGroup->TabCount();
+ // Delete all tabs
+ for ( TInt tabIndex = 0; tabIndex < tabCount; tabIndex++ )
+ {
+ // Delete the first tab until there is no more tab...
+ iTabGroup->DeleteTabL( iTabGroup->TabIdFromIndex( 0 ) );
+ }
+ }
+ // If only two tabs are needed, dont show more tabs.
+ if ( aTabTexts->Count() == 2 )
+ {
+ GetTabGroup()->SetTabFixedWidthL( EAknTabWidthWithTwoLongTabs );
+ }
+ // If more than two tabs are needed, maximum 3 tabs are visible
+ else
+ {
+ GetTabGroup()->SetTabFixedWidthL( EAknTabWidthWithThreeLongTabs );
+ }
+ // Add create the tabs
+ for ( TInt tabIndex = 0; tabIndex < aTabTexts->Count(); tabIndex++ )
+ {
+ iTabGroup->AddTabL( tabIndex, (*aTabTexts)[tabIndex]->Des() /*, iTabIcon->Bitmap(), iTabIcon->Mask()*/ );
+ }
+ // Set focus of the specified tab
+ iTabGroup->SetActiveTabByIndex( aActivateTab );
+ // Handle tab changes.
+ iView->ApiProvider().Display().NaviPaneL()->PushL( *iNaviDecorator );
+
+ // Draw the thumbnail by the window id.
+ GetWindowThumbnailL( iView->GetWindowIdFromTabIndex( GetTabGroup()->ActiveTabIndex() ) );
+ DrawNow();
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::SizeChanged
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::SizeChanged()
+ {
+ // TODO: Add here control resize code etc.
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::CountComponentControls
+// ---------------------------------------------------------
+//
+TInt CBrowserWindowSelectionContainer::CountComponentControls() const
+ {
+ return 0; // return nbr of controls inside this container
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CBrowserWindowSelectionContainer::ComponentControl(TInt aIndex) const
+ {
+ switch ( aIndex )
+ {
+ default:
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::Draw
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::Draw(const TRect& aRect) const
+ {
+ CWindowGc& gc = SystemGc();
+
+ // Create a gray background...
+ gc.SetPenColor(TRgb(45,44,50));
+ gc.SetPenStyle(CGraphicsContext::ESolidPen);
+ gc.SetBrushColor( KRgbDarkGray );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.DrawRect( aRect );
+
+ if ( iThumbnail )
+ {
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ TSize viewSize(aRect.Width(), aRect.Height());
+ int centerImageWidth(viewSize.iWidth*60/100);
+ int centerImageHeight(viewSize.iHeight*75/100);
+ int centerImageX(viewSize.iWidth*20/100);
+ int centerImageY(viewSize.iHeight*(100-75)/(2*100));
+ TPoint centerImageOrigin(centerImageX, centerImageY);
+#endif
+ // Put in center
+ // release
+ TSize bitmapSize = iThumbnail->Bitmap()->SizeInPixels();
+ // test
+ //TSize bitmapSize = iThumbnail->SizeInPixels();
+ TInt x = ( aRect.Width()-bitmapSize.iWidth ) / 2;
+ TInt y = ( aRect.Height()-bitmapSize.iHeight ) / 2;
+ // Draw thumbnail
+ // release
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+ gc.BitBlt( centerImageOrigin, iThumbnail->Bitmap(), TRect(0, 0, centerImageWidth, centerImageHeight) );
+#else
+ gc.BitBlt( TPoint(x,y), iThumbnail->Bitmap() );
+#endif
+ // test
+ // gc.BitBlt( TPoint(x,y), iThumbnail );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CBrowserWindowSelectionContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ // Handle if Ok key was pressed.
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyOK )
+ {
+ TInt windowId = iView->GetWindowIdFromTabIndex( GetTabGroup()->ActiveTabIndex() );
+ iView->ApiProvider().WindowMgr().SwitchWindowL( windowId );
+ //If the user switches window we reset the CalledFromAnotherApp status
+ if(iView->ApiProvider().CalledFromAnotherApp())
+ {
+ iView->ApiProvider().SetCalledFromAnotherApp(EFalse);
+ }
+ iView->ApiProvider().SetViewToBeActivatedIfNeededL( iView->GetPreviousViewID() );
+ return EKeyWasConsumed;
+ }
+
+ // Check if navipane has valid parameters.
+ if ( !iTabGroup )
+ {
+ return EKeyWasNotConsumed;
+ }
+ if ( !iTabGroup->TabCount() )
+ {
+ return EKeyWasNotConsumed;
+ }
+ if ( !iNaviDecorator )
+ {
+ return EKeyWasNotConsumed;
+ }
+ // Get tab group
+ CAknTabGroup* tabGroup = STATIC_CAST( CAknTabGroup*, iNaviDecorator->DecoratedControl() );
+ // If tab group was not created succesfully.
+ if ( !tabGroup )
+ {
+ return EKeyWasNotConsumed;
+ }
+ // If tab group has no tabs.
+ if ( !tabGroup->TabCount() )
+ {
+ return EKeyWasNotConsumed;
+ }
+ // Forward events to tabgroup.
+ const TKeyResponse result = tabGroup->OfferKeyEventL( aKeyEvent, aType );
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::HandleControlEventL
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::HandleControlEventL(
+ CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+ {
+ // TODO: Add your control event handler code here
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::GetWindowThumbnail
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::GetWindowThumbnailL( TInt aWindowId )
+ {
+ // Get window url
+ CBrowserWindow* window;
+ iView->ApiProvider().WindowMgr().Window( aWindowId, window );
+ HBufC* windowUrl = window->BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+
+ // Get thumbnail
+ // release
+ delete iThumbnail;
+ if (windowUrl)
+ {
+ iThumbnail = window->BrCtlInterface().GetBitmapData( windowUrl->Des(), TBrCtlDefs::EBitmapThumbnail );
+ }
+ else
+ {
+ iThumbnail = NULL;
+ }
+ // eof release
+
+
+ CleanupStack::PopAndDestroy(); // windowUrl
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::HandlePointerEventL
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ if (aPointerEvent.iType == TPointerEvent::EButton1Down)
+ {
+ iView->HandleCommandL(EAknCmdOpen);
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionContainer::TabChangedL
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionContainer::TabChangedL(TInt /*aIndex*/)
+ {
+ iView->UpdateTitleL();
+ iView->UpdateTumbnailL();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserWindowSelectionView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,370 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserWindowSelectionView.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknviewappui.h>
+#include <avkon.hrh>
+#include <BrowserNG.rsg>
+#include <FeatMgr.h>
+#include <avkon.RSG>
+#include <eikbtgpc.h>
+#include <akntabgrp.h>
+#include <aknnavi.h>
+#include <brctlinterface.h>
+#include <brctldefs.h>
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "BrowserWindowSelectionView.h"
+#include "BrowserWindowSelectionContainer.h"
+#include "Preferences.h"
+#include "Display.h"
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CBrowserWindowSelectionView::NewLC
+// ----------------------------------------------------------------------------
+//
+CBrowserWindowSelectionView* CBrowserWindowSelectionView::NewLC( MApiProvider& aApiProvider )
+ {
+ CBrowserWindowSelectionView* view = new (ELeave) CBrowserWindowSelectionView( aApiProvider );
+ CleanupStack::PushL( view );
+ view->ConstructL( );
+ return view;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::CBrowserWindowSelectionView
+// ---------------------------------------------------------
+//
+CBrowserWindowSelectionView::CBrowserWindowSelectionView( MApiProvider& aApiProvider ):
+CBrowserViewBase( aApiProvider )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::ConstructL(const TRect& aRect)
+// EPOC two-phased constructor
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::ConstructL()
+ {
+ BaseConstructL( R_BROWSERWINDOWSELECTION_VIEW );
+ iTitles = new (ELeave) CArrayFixFlat<HBufC*>( 2 );
+ iWindowIds = new (ELeave) CArrayFixFlat<TInt>( 2 );
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::~CBrowserWindowSelectionView()
+// destructor
+// ---------------------------------------------------------
+//
+CBrowserWindowSelectionView::~CBrowserWindowSelectionView()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ }
+
+ delete iContainer;
+ delete iWindowInfo;
+ delete iTitles;
+ delete iWindowIds;
+ }
+
+// ---------------------------------------------------------
+// TUid CBrowserWindowSelectionView::Id()
+//
+// ---------------------------------------------------------
+//
+TUid CBrowserWindowSelectionView::Id() const
+ {
+ return KUidBrowserWindowSelectionViewId;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserWindowSelectionView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CBrowserWindowSelectionView::CommandSetResourceIdL()
+ {
+ TInt commandSet = 0; // R_AVKON_SOFTKEYS_EMPTY;
+ return commandSet;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::HandleCommandL()
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::HandleCommandL(TInt aCommand)
+ {
+ switch ( aCommand )
+ {
+ case EAknCmdOpen:
+ {
+ TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() );
+ ApiProvider().WindowMgr().SwitchWindowL( windowId );
+ //If the user switches window we reset the CalledFromAnotherApp status
+ if(ApiProvider().CalledFromAnotherApp())
+ {
+ ApiProvider().SetCalledFromAnotherApp(EFalse);
+ }
+ ApiProvider().SetViewToBeActivatedIfNeededL( GetPreviousViewID() );
+ break;
+ }
+ case EWmlCmdCloseWindow:
+ {
+ TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() );
+ TInt newWindowId = ApiProvider().WindowMgr().DeleteWindowL( windowId, EFalse );
+
+ // Check if there is only one remaining window,
+ // after closing the window.
+ delete iWindowInfo;
+ iWindowInfo = NULL;
+ iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this );
+ if ( iWindowInfo->Count() < 2 )
+ {
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ ApiProvider().WindowMgr().SwitchWindowL( newWindowId );
+ }
+ break;
+ }
+ case EWmlCmdCloseAllWindowButThis:
+ {
+ iWindowEventsDisabled = ETrue;
+ // Get current window id.
+ TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() );
+ // Get all windows id.
+ delete iWindowInfo;
+ iWindowInfo = NULL;
+ iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this );
+
+ // Delete all windows except this.
+ for ( TInt i = 0; i < iWindowInfo->Count(); i++ )
+ {
+ if ( (*iWindowInfo)[i]->iWindowId != windowId )
+ {
+ ApiProvider().WindowMgr().DeleteWindowL( (*iWindowInfo)[i]->iWindowId, ETrue );
+ }
+ }
+ // Activate curent window.
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ ApiProvider().WindowMgr().SwitchWindowL( windowId );
+ iWindowEventsDisabled = EFalse;
+ break;
+ }
+ case EWmlCmdWindowSelectionCancel:
+ {
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::HandleClientRectChange()
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::HandleClientRectChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::DoActivateL(...)
+//
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::DoActivateL( const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/)
+ {
+ StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
+ StatusPane()->MakeVisible( ETrue );
+
+ iPreviousViewID = ApiProvider().LastActiveViewId( );
+ ApiProvider().SetLastActiveViewId( Id() );
+ iLastViewId = aPrevViewId;
+ if (!iContainer)
+ {
+ iContainer = new (ELeave) CBrowserWindowSelectionContainer( this );
+ iContainer->SetMopParent(this);
+ iContainer->ConstructL( ClientRect() );
+ AppUi()->AddToStackL( *this, iContainer );
+ UpdateTabsL();
+ }
+ ApiProvider().WindowMgr().AddObserverL( this );
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::DoDeactivate()
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::DoDeactivate()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ }
+
+ delete iContainer;
+ iContainer = NULL;
+ ApiProvider().WindowMgr().RemoveObserver( this );
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::CreateWindowInfoLC()
+// ---------------------------------------------------------
+//
+HBufC* CBrowserWindowSelectionView::CreateWindowInfoLC( const CBrowserWindow& aWindow )
+ {
+ HBufC* buf = aWindow.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoTitle );
+ if( !buf || !buf->Length() )
+ {
+ CleanupStack::PopAndDestroy( buf );
+ buf = aWindow.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ }
+ return buf;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::UpdateTabs()
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::UpdateTabsL()
+ {
+ delete iWindowInfo;
+ iWindowInfo = NULL;
+ iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this );
+
+ iTitles->Reset();
+ iWindowIds->Reset();
+ TInt activeTab = 0;
+ for ( TInt i = 0; i < iWindowInfo->Count(); i++ )
+ {
+ iTitles->AppendL( CONST_CAST( HBufC*, (*iWindowInfo)[i]->iWindowText ) );
+ iWindowIds->AppendL( (*iWindowInfo)[i]->iWindowId );
+ if ( (*iWindowInfo)[i]->iCurrent )
+ {
+ activeTab = i;
+ HBufC* title = CONST_CAST( HBufC*, (*iWindowInfo)[i]->iWindowText );
+ if ( title )
+ {
+ ApiProvider().Display().SetTitleL( title->Des() );
+ }
+ }
+ }
+ iContainer->ChangeTabL( iTitles, activeTab );
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::UpdateTabs()
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::UpdateTumbnailL()
+ {
+ TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() );
+ iContainer->GetWindowThumbnailL( windowId );
+ iContainer->DrawNow();
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::UpdateTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::UpdateTitleL( )
+ {
+ HBufC* title = GetWindowTitleFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() );
+ ApiProvider().Display().SetTitleL( (*title).Des( ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowSelectionView::GetWindowIdFromTabIndex
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserWindowSelectionView::GetWindowIdFromTabIndex( TInt aActiveTabIndex )
+ {
+ TInt windowId = 0;
+ for ( TInt i = 0; i < iWindowIds->Count(); i++ )
+ {
+ if ( i == aActiveTabIndex )
+ {
+ windowId = (*iWindowInfo)[i]->iWindowId;
+ }
+ }
+ return windowId;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserWindowSelectionView::GetWindowIdFromTabIndex
+// -----------------------------------------------------------------------------
+//
+HBufC* CBrowserWindowSelectionView::GetWindowTitleFromTabIndex( TInt aActiveTabIndex )
+ {
+ HBufC* windowText = NULL;
+ for ( TInt i = 0; i < iWindowInfo->Count(); i++ )
+ {
+ if ( i == aActiveTabIndex )
+ {
+ windowText = CONST_CAST( HBufC*, (*iWindowInfo)[i]->iWindowText );
+ }
+ }
+ return windowText;
+ }
+
+// ---------------------------------------------------------
+// CBrowserWindowSelectionView::WindowEventHandlerL
+// ---------------------------------------------------------
+//
+void CBrowserWindowSelectionView::WindowEventHandlerL( TWindowEvent aEvent, TInt /*aWindowId*/ )
+ {
+ if ( !iWindowEventsDisabled )
+ {
+ if ( aEvent == EWindowClose || aEvent == EWindowOpen )
+ {
+ delete iWindowInfo;
+ iWindowInfo = NULL;
+ iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this );
+ // Update tabs when there are more than one windows open.
+ if ( iWindowInfo->Count() > 1 )
+ {
+ UpdateTabsL();
+ }
+ }
+ if ( aEvent == EWindowLoadStart )
+ {
+ iEikonEnv->InfoMsg( _L("load start") );
+ }
+ if ( aEvent == EWindowLoadStop )
+ {
+ iEikonEnv->InfoMsg( _L("load stop") );
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/Logger.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implemented logger functionality of the module
+*
+*/
+
+
+#if defined( I__BROWSER_LOG_ENABLED )
+
+// INCLUDES
+
+#include "Logger.h"
+
+// CONSTANTS
+
+// the indentation value used in every function entry and exit points
+// use value 0 to switch indentation off
+const TInt KBrowserIndentValue = 0;
+
+// the left x character of this string is used to indent
+// function entry and exit points. DO NOT cut is smaller!
+// it has to be synched with the call stack level and KBrowserIndentValue:
+// .Length() / KBrowserIndentValue >= max size of callstack
+_LIT( KBrowserLoggerIndentString,
+" " );
+_LIT( KDebugLogEnterFn, "Browser: %S-> %S" );
+_LIT( KDebugLogLeaveFn, "Browser: %S<- %S" );
+
+// ---------------------------------------------------------------------------
+
+// initialize static member variable
+#if defined ( I__BROWSER_LOG_INDENT )
+TInt CBrowserLogger::iIndent( 0 );
+#endif
+
+// ---------------------------------------------------------------------------
+
+CBrowserLogger::CBrowserLogger( const TDesC& aFunc )
+ : iFunc( aFunc )
+#if ! defined ( I__BROWSER_LOG_INDENT )
+ , iIndent( 0 )
+#endif
+ {
+ TPtrC a = KBrowserLoggerIndentString().Left( iIndent );
+ iIndent += KBrowserIndentValue;
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile,
+ EFileLoggingModeAppend, KDebugLogEnterFn, &a, &iFunc );
+ }
+
+// ---------------------------------------------------------------------------
+
+CBrowserLogger::~CBrowserLogger()
+ {
+ iIndent -= KBrowserIndentValue;
+ TPtrC a = KBrowserLoggerIndentString().Left( iIndent );
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile,
+ EFileLoggingModeAppend, KDebugLogLeaveFn, &a, &iFunc );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CBrowserLogger::Write( TRefByValue<const TDesC16> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile,
+ EFileLoggingModeAppend, aFmt, list );
+ VA_END( list );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CBrowserLogger::Write( TRefByValue<const TDesC16> aFmt, VA_LIST& aList )
+ {
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile,
+ EFileLoggingModeAppend, aFmt, aList );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CBrowserLogger::Write(TRefByValue<const TDesC8> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile,
+ EFileLoggingModeAppend, aFmt, list );
+ VA_END( list );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CBrowserLogger::Write( TRefByValue<const TDesC8> aFmt, VA_LIST& aList )
+ {
+ RFileLogger::WriteFormat( KDebugLogDir, KDebugLogFile,
+ EFileLoggingModeAppend, aFmt, aList );
+ }
+
+
+// Code segment for displaying an info note dialog box. Can be used later as a debug aid.
+
+ /*
+ TInt width, height;
+ HBufC* header;
+ TBuf<100> message;
+
+ message.Format(_L("width: %d ; height: %d"), width, height );
+
+ header = StringLoader::LoadLC( R_WML_SECURITY_VIEW_TITLE );
+
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( message );
+
+ dlg->PrepareLC( R_BROWSER_SECURITY_INFO );
+ CAknPopupHeadingPane* hPane = dlg->QueryHeading();
+ if ( hPane )
+ {
+ hPane->SetTextL( *header );
+ }
+ dlg->RunLD();
+ CleanupStack::PopAndDestroy( 1 ); // header
+ */
+
+
+#endif // I__BROWSER_LOG_ENABLED
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/SessionAndSecurity.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,496 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CSessionAndSecurity
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "Browser.hrh"
+#include <es_sock.h>
+#include "SessionAndSecurity.h"
+#include <mconnection.h>
+#include <BrowserNG.rsg>
+#include <AknQueryDialog.h>
+#include <AknMessageQueryDialog.h>
+#include <StringLoader.h>
+#include <FeatMgr.h>
+
+#include "BrowserUtil.h"
+#include "ApiProvider.h"
+#include <ssl.h> // for TCertInfo
+#include <brctlinterface.h>
+
+// CONSTANTS
+const TInt KWmlSessionInfoMaxLength = 1000;
+const TInt KWmlSecurityInfoMaxLength = 1000;
+const TInt KMaxLengthTextDateString = 16;
+_LIT( KWmlConnSpeed9600, "9600" );
+_LIT( KWmlConnSpeed14400, "14400" );
+_LIT( KWmlConnSpeed19200, "19200" );
+_LIT( KWmlConnSpeed28800, "28800" );
+_LIT( KWmlConnSpeed38400, "38400" );
+_LIT( KWmlConnSpeed43200, "43200" );
+_LIT( KWmlNewLine, "\n" );
+_LIT( KWmlSeparatorComma, "," );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// CSessionAndSecurity::CSessionAndSecurity
+// ----------------------------------------------------
+//
+CSessionAndSecurity::CSessionAndSecurity(MApiProvider& aApiProvider)
+: iApiProvider(aApiProvider)
+ {
+ }
+
+//-----------------------------------------------------------------------------
+// CSessionAndSecurity::NewL
+//-----------------------------------------------------------------------------
+//
+CSessionAndSecurity* CSessionAndSecurity::NewL(MApiProvider& aApiProvider)
+ {
+ CSessionAndSecurity* self = CSessionAndSecurity::NewLC(aApiProvider);
+ CleanupStack::Pop();
+ return self;
+ }
+
+//-----------------------------------------------------------------------------
+// CSessionAndSecurity::NewLC
+//-----------------------------------------------------------------------------
+//
+CSessionAndSecurity* CSessionAndSecurity::NewLC(MApiProvider& aApiProvider)
+ {
+ CSessionAndSecurity* self = new(ELeave) CSessionAndSecurity(aApiProvider);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+//-----------------------------------------------------------------------------
+// CSessionAndSecurity::~CSessionAndSecurity
+//-----------------------------------------------------------------------------
+//
+CSessionAndSecurity::~CSessionAndSecurity()
+ {
+ }
+
+// ----------------------------------------------------
+// CSessionAndSecurity::ConstructL
+// ----------------------------------------------------
+//
+void CSessionAndSecurity::ConstructL()
+ {
+ }
+
+// ----------------------------------------------------
+// CSessionAndSecurity::ShowPageInfoL
+// ----------------------------------------------------
+//
+void CSessionAndSecurity::ShowPageInfoL()
+ {
+ HBufC* messagebody = NULL;
+ HBufC* header = StringLoader::LoadLC( R_BROWSER_QUERY_CURRENT_PAGE );
+ HBufC* urltxt = StringLoader::LoadLC( R_BROWSER_QUERY_CURRENT_PAGE_URL );
+ HBufC* currentUrl = ApiProvider().BrCtlInterface().
+ PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+ if( currentUrl == NULL )
+ {
+ CleanupStack::PopAndDestroy( currentUrl );
+ currentUrl = KNullDesC().AllocLC();
+ }
+ TInt length = currentUrl->Length();
+ messagebody = HBufC::NewLC( length + urltxt->Length()+2 + KWmlSecurityInfoMaxLength);
+ messagebody->Des().Append( *urltxt );
+ messagebody->Des().Append( KWmlNewLine() );
+ messagebody->Des().Append( *currentUrl );
+
+
+ // append security info
+ const TCertInfo* certInfo = ApiProvider().BrCtlInterface().CertInfo();
+ HBufC* message = HBufC::NewLC( KWmlSecurityInfoMaxLength );
+ HttpSecurityInfoL( certInfo, *message);
+ messagebody->Des().Append( KWmlNewLine() );
+ messagebody->Des().Append( KWmlNewLine() );
+ messagebody->Des().Append( *message );
+
+
+ // output page and security info to dialog
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *messagebody );
+ dlg->PrepareLC( R_BROWSER_PAGE_INFO );
+ CAknPopupHeadingPane* hPane = dlg->QueryHeading();
+ if ( hPane )
+ {
+ hPane->SetTextL( *header );
+ }
+ dlg->RunLD();
+ CleanupStack::PopAndDestroy( 5 ); // header, urltxt, currentUrl, messagebody, message
+ }
+
+// ----------------------------------------------------
+// CSessionAndSecurity::ShowSessionInfoL
+// ----------------------------------------------------
+//
+void CSessionAndSecurity::ShowSessionInfoL()
+ {
+ HBufC* header = StringLoader::LoadLC( R_WML_SESSION_VIEW_TITLE );
+ HBufC* message = HBufC::NewLC( KWmlSessionInfoMaxLength );
+
+ HBufC* value = StringLoader::LoadLC( R_WML_SESSION_VIEW_AP );
+ message->Des().Append( *value );
+ message->Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); // value
+
+ value = ApiProvider().Connection().CurrentApNameLC();
+ message->Des().Append( value->Des() );
+ message->Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); // value
+
+ //
+ // Bearer type
+ //
+ value = StringLoader::LoadLC( R_WML_SESSION_VIEW_BT );
+ message->Des().Append( *value );
+ message->Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); // value
+
+ TApBearerType bt = ApiProvider().Connection().CurrentBearerTypeL();
+ switch ( bt )
+ {
+ case EApBearerTypeCSD:
+ {
+ value = StringLoader::LoadLC( R_WML_BEARER_DATA_CALL );
+ break;
+ }
+ case EApBearerTypeGPRS:
+ {
+ value = StringLoader::LoadLC( R_WML_BEARER_PACKET_DATA );
+ break;
+ }
+ case EApBearerTypeHSCSD:
+ {
+ value = StringLoader::LoadLC( R_WML_BEARER_HSCSD );
+ break;
+ }
+ default:
+ value = HBufC::NewLC( 1 );
+ break;
+ }
+
+ message->Des().Append( value->Des() );
+ message->Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); // value
+
+ //
+ // Max conn. speed
+ //
+ value = StringLoader::LoadLC( R_WML_SESSION_VIEW_CS );
+ message->Des().Append( *value );
+ message->Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); // value
+ TApCallSpeed speed = ApiProvider().Connection().CurrentConnectionSpeed();
+ value = HBufC::NewLC( sizeof( KWmlConnSpeed43200 ) );
+ switch ( speed )
+ {
+ case KSpeed9600:
+ {
+ *value = KWmlConnSpeed9600();
+ break;
+ }
+ case KSpeed14400:
+ {
+ *value = KWmlConnSpeed14400();
+ break;
+ }
+ case KSpeed19200:
+ {
+ *value = KWmlConnSpeed19200();
+ break;
+ }
+ case KSpeed28800:
+ {
+ *value = KWmlConnSpeed28800();
+ break;
+ }
+ case KSpeed38400:
+ {
+ *value = KWmlConnSpeed38400();
+ break;
+ }
+ case KSpeed43200:
+ {
+ *value = KWmlConnSpeed43200();
+ break;
+ }
+ case KSpeedAutobaud: // default value
+ default:
+ {
+ CleanupStack::PopAndDestroy(); // value
+ value = StringLoader::LoadLC( R_WML_CONN_SPEED_AD );
+ break;
+ }
+ }
+
+ message->Des().Append( value->Des() );
+ message->Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); // value
+
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *message );
+ dlg->PrepareLC( R_BROWSER_SESSION_INFO );
+ CAknPopupHeadingPane* hPane = dlg->QueryHeading();
+ if ( hPane )
+ {
+ hPane->SetTextL( *header );
+ }
+ dlg->RunLD();
+ CleanupStack::PopAndDestroy( 2 ); // header, message
+ }
+
+// ----------------------------------------------------------------------------
+// CSessionAndSecurity::HttpSecurityInfoL
+// ----------------------------------------------------------------------------
+//
+void CSessionAndSecurity::HttpSecurityInfoL( const TCertInfo* aCertInfo,
+ HBufC& aMessage )
+ {
+ HBufC* value;
+ HBufC* prompt;
+
+ if ( !aCertInfo )
+ {
+ // Connection: Unsecure
+ value = StringLoader::LoadLC( R_WML_SECURITY_CONN_UNSECURE );
+ prompt = StringLoader::LoadLC( R_WML_SECURITY_CONN_TYPE, *value );
+ aMessage.Des().Append( *prompt );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(2); // value, prompt
+ }
+ else
+ {
+ // Connection: Secure
+ value = StringLoader::LoadLC( R_WML_SECURITY_CONN_SECURE );
+ prompt = StringLoader::LoadLC( R_WML_SECURITY_CONN_TYPE, *value );
+ aMessage.Des().Append( *prompt );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(2); // value, prompt
+
+ HBufC* buf2 = HBufC::NewMaxLC(256);
+
+ // Server authentication
+ value = StringLoader::LoadLC( R_WML_SECURITY_SERVER_AUT, KNullDesC );
+ aMessage.Des().Append( *value );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); //value
+
+ // Subject
+ FillDNinfoL( aCertInfo->iSubjectDNInfo, buf2 );
+ value = StringLoader::LoadLC( R_WML_SECURITY_CERT_OWNER, buf2->Des() );
+ aMessage.Des().Append( *value );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(2); //value, buf2
+
+ //Issuer
+ buf2 = HBufC::NewMaxLC(256);
+ FillDNinfoL( aCertInfo->iIssuerDNInfo, buf2 );
+ value = StringLoader::LoadLC( R_WML_SECURITY_INFO_ISSUER, buf2->Des() );
+ aMessage.Des().Append( *value );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(2); //value, buf2
+
+ // Valid from
+ TBuf< KMaxLengthTextDateString > validFromString;
+ HBufC* dateFormatString = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
+ aCertInfo->iStartValDate.FormatL( validFromString, *dateFormatString );
+ CleanupStack::PopAndDestroy(); //dateFormatString
+ value = StringLoader::LoadLC( R_WML_SECURITY_VALID_FROM, validFromString );
+ aMessage.Des().Append( *value );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); //value
+
+ // Valid to
+ dateFormatString = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
+ aCertInfo->iEndValDate.FormatL( validFromString, *dateFormatString );
+ CleanupStack::PopAndDestroy(); //dateFormatString
+ value = StringLoader::LoadLC( R_WML_SECURITY_VALID_TO, validFromString );
+ aMessage.Des().Append( *value );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy(); //value
+
+ // hex formatting
+ TBuf<2> buf;
+ _LIT( KHexFormat, "%02X");
+
+ // Serial number
+ HBufC* buffer = HBufC::NewLC( aCertInfo->iSerialNo.Length()*2 );
+ for (TInt i = 0; i < aCertInfo->iSerialNo.Length(); i++)
+ {
+ buf.Format( KHexFormat, aCertInfo->iSerialNo[i] );
+ buffer->Des().Append( buf );
+ }
+ value = StringLoader::LoadLC( R_WML_SECURITY_SERIALNO, *buffer );
+ aMessage.Des().Append( *value );
+ aMessage.Des().Append( TChar( '\n' ) );
+ aMessage.Des().Append( TChar( '\n' ) );
+ CleanupStack::PopAndDestroy( 2 ); // value, buffer
+
+ // Fingerprint
+ {
+ TInt emptyChars = aCertInfo->iFingerprint.Length()/2;
+ emptyChars++;
+ HBufC* buffer = HBufC::NewLC( aCertInfo->iFingerprint.Length()*2 + emptyChars );
+ TInt ind = 1;
+ for (TInt i = 0; i < aCertInfo->iFingerprint.Length(); i++)
+ {
+ buf.Format( KHexFormat, aCertInfo->iFingerprint[i] );
+ buffer->Des().Append( buf );
+ if ( ind == 2 )
+ {
+ buffer->Des().Append( TChar( ' ' ) );
+ ind = 0;
+ }
+ ind++;
+ }
+ value = StringLoader::LoadLC( R_WML_SECURITY_FINGERPRINT, *buffer );
+ aMessage.Des().Append( *value );
+ CleanupStack::PopAndDestroy( 2 ); // value, buffer
+ }
+ }
+
+ }
+
+// ----------------------------------------------------
+// CSessionAndSecurity::ConvertTDesC8ToHBufC16LC
+// ----------------------------------------------------
+//
+void CSessionAndSecurity::ConvertTDesC8ToHBufC16LC( TDesC8& aSource,
+ HBufC16*& aDestination)
+ {
+ const TInt length = aSource.Length(); // length of name
+ TPtrC8 ptr ( aSource.Ptr(), aSource.Length() );
+ aDestination = HBufC::NewLC( length );
+ aDestination->Des().Copy( ptr );
+ }
+
+// ----------------------------------------------------
+// CSessionAndSecurity::FillDNinfoL
+// ----------------------------------------------------
+//
+void CSessionAndSecurity::FillDNinfoL( TDNInfo aDNInfo, HBufC* aBuf )
+ {
+ HBufC16* buf2 = NULL;
+ TInt num = 0;
+ if ( aDNInfo.iCommonName.Length() )
+ {
+ aBuf->Des().Copy( aDNInfo.iCommonName );
+ num++;
+ }
+ if ( aDNInfo.iOrganization.Length() )
+ {
+ if ( !num )
+ {
+ aBuf->Des().Copy( aDNInfo.iOrganization );
+ }
+ else
+ {
+ aBuf->Des().Append( KWmlSeparatorComma() );
+ ConvertTDesC8ToHBufC16LC( aDNInfo.iOrganization, buf2 );
+ aBuf->Des().Append( buf2->Ptr(),aDNInfo.iOrganization.Length() );
+ CleanupStack::PopAndDestroy(); //buf2
+ }
+ num++;
+ }
+ if ( aDNInfo.iOrganizationUnit.Length() && num < 2 )
+ {
+ if ( !num )
+ {
+ aBuf->Des().Copy( aDNInfo.iOrganizationUnit );
+ }
+ else
+ {
+ aBuf->Des().Append( KWmlSeparatorComma() );
+ ConvertTDesC8ToHBufC16LC( aDNInfo.iOrganizationUnit, buf2 );
+ aBuf->Des().Append( buf2->Ptr(),aDNInfo.iOrganizationUnit.Length() );
+ CleanupStack::PopAndDestroy(); //buf2
+ }
+ num++;
+ }
+ if ( aDNInfo.iLocality.Length() && num < 2 )
+ {
+ if ( !num )
+ {
+ aBuf->Des().Copy( aDNInfo.iLocality );
+ }
+ else
+ {
+ aBuf->Des().Append( KWmlSeparatorComma() );
+ ConvertTDesC8ToHBufC16LC( aDNInfo.iLocality, buf2 );
+ aBuf->Des().Append( buf2->Ptr(),aDNInfo.iLocality.Length() );
+ CleanupStack::PopAndDestroy(); //buf2
+ }
+ num++;
+ }
+ if ( aDNInfo.iCountry.Length() && num < 2 )
+ {
+ if ( !num )
+ {
+ aBuf->Des().Copy( aDNInfo.iCountry );
+ }
+ else
+ {
+ aBuf->Des().Append( KWmlSeparatorComma() );
+ ConvertTDesC8ToHBufC16LC( aDNInfo.iCountry, buf2 );
+ aBuf->Des().Append( buf2->Ptr(),aDNInfo.iCountry.Length() );
+ CleanupStack::PopAndDestroy(); //buf2
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CSessionAndSecurity::ShowSecurityInfoL
+// ----------------------------------------------------
+//
+void CSessionAndSecurity::ShowSecurityInfoL()
+ {
+ const TCertInfo* certInfo = ApiProvider().BrCtlInterface().CertInfo();
+
+ HBufC* header;
+ HBufC* message = HBufC::NewLC( KWmlSecurityInfoMaxLength );
+
+ header = StringLoader::LoadLC( R_WML_SECURITY_VIEW_TITLE );
+ HttpSecurityInfoL( certInfo, *message);
+
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *message );
+
+ dlg->PrepareLC( R_BROWSER_SECURITY_INFO );
+ CAknPopupHeadingPane* hPane = dlg->QueryHeading();
+ if ( hPane )
+ {
+ hPane->SetTextL( *header );
+ }
+
+ dlg->RunLD();
+ CleanupStack::PopAndDestroy( 2 ); // header, message,
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/WlanObserver.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,116 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <e32cmn.h>
+#include <E32HAL.H>
+#include <wlaninternalpskeys.h> // For WLAN state checking
+
+
+#include "ApiProvider.h"
+#include "WlanObserver.h"
+#include "Display.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWlanObserver::CWlanObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CWlanObserver::CWlanObserver(MApiProvider& aApiProvider)
+ : CActive( EPriorityStandard ),
+ iApiProvider( aApiProvider )
+ {
+ CActiveScheduler::Add( this );
+ iWlanProperty.Attach( KPSUidWlan, KPSWlanIndicator );
+ iWlanProperty.Subscribe( iStatus );
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CWlanObserver::~CWlanObserver()
+// Destructor
+// -----------------------------------------------------------------------------
+CWlanObserver::~CWlanObserver()
+ {
+ Cancel();
+ iWlanProperty.Close();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CWlanObserver::GetCurrentState
+//
+// Retrieves current state of wireless lan connection
+// @param aWlanStateValue reference to current Wlan state value which is updated here
+// @return: EFalse if error condition (ignore aWlanStateValue in this case)
+// Etrue if no error (get updated value from aWlanStateValue)
+// -----------------------------------------------------------------------------
+TBool CWlanObserver::GetCurrentState(TInt &aWlanStateValue)
+ {
+ TInt value;
+ TInt errorval = iWlanProperty.Get( value );
+ if (!errorval )
+ {
+ aWlanStateValue = value;
+ return( ETrue );
+ }
+ else
+ {
+ return( EFalse );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CWlanObserver::RunL
+// -----------------------------------------------------------------------------
+void CWlanObserver::RunL()
+ {
+ if( iStatus==KErrNone )
+ {
+ iWlanProperty.Subscribe( iStatus );
+ SetActive();
+
+ TInt value;
+ if ( GetCurrentState(value) )
+ {
+ iApiProvider.Display().UpdateWlanIndicator( value );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CWlanObserver::RunError
+// -----------------------------------------------------------------------------
+TInt CWlanObserver::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CWlanObserver::DoCancel
+// -----------------------------------------------------------------------------
+void CWlanObserver::DoCancel()
+ {
+ iWlanProperty.Cancel();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserAdaptiveListPopup.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CBrowserPopupList and CBrowserAdaptiveListPopup
+*
+*
+*/
+
+#ifndef BROWSERADAPTIVELISTPOPUP_H
+#define BROWSERADAPTIVELISTPOPUP_H
+
+// INCLUDES
+#include <aknpopuplayout.h>
+#include <AknLists.h>
+
+//for testing purposes you can define fake ahle engine
+//wich will provide random results
+// CONSTANTS
+// UID of view
+const TUid KViewId = {1};
+
+enum TParentType
+ {
+ EGotoPane,
+ EBookmarksGotoPane
+ };
+
+class CRecentUrlStore;
+
+
+class CAknsListBoxBackgroundControlContext;
+
+// CLASS DECLARATION
+class CBrowserPopupList : public CAknSingleGraphicPopupMenuStyleListBox
+{
+public :
+ CBrowserPopupList(TParentType aParentType);
+ ~CBrowserPopupList();
+
+ void SetHighLight(TBool aHighLight);
+
+ TBool HighLightEnabled();
+
+ void ConstructL(const CCoeControl* aParent, TInt aFlags);
+
+ void SizeChanged();
+ void Draw(const TRect& /*aRect*/) const;
+
+protected :
+ TParentType iParentType;
+ TBool iOnePartFrameBitmapUsed;
+};
+
+
+
+/**
+* CBrowserAdaptiveListPopup view class.
+*
+*/
+class CBrowserAdaptiveListPopup :
+ public CCoeControl,
+ public MCoeControlObserver, public MEikListBoxObserver
+
+ {
+ public: // Constructors and destructor
+
+ /**
+ *C++ Constructor
+ */
+ CBrowserAdaptiveListPopup( CEikEdwin* aGotoPaneEdit,
+ CCoeControl* aParent,
+ TParentType aParentType,
+ TBool aSearchFeature = EFalse );
+
+ /**
+ * default constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserAdaptiveListPopup();
+
+
+ public: // Functions from base classes
+
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ void HidePopupL();
+
+ TBool IsInDirectoryMode();
+
+ void SetDirectoryModeL(TBool aDirMode);
+
+ TBool IsOpenDirToShow();
+
+ TBool IsPoppedUp();
+
+ void HandleResourceChange( TInt aType );
+
+ void HandleResourceChangeL( TInt aType );
+
+ void SetUrlSuffixList(HBufC* urlSuffixList);
+
+ void SetMaxRecentUrls (TInt maxRecentUrls);
+
+ /**
+ * Sets the OrdinalPosition of GotoPane
+ * @param aPos The OrdinalPosition
+ */
+ void SetOrdinalPosition( TInt aPos );
+ /**
+ * From CCoeControl.
+ * Handles pointer events
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+ void HandleListBoxEventL(CEikListBox* aListBox,TListBoxEvent aEventType);
+ private: // Functions from base classes
+
+ void HandleControlEventL(CCoeControl* aControl,enum MCoeControlObserver::TCoeEvent aEventType);
+
+ TInt CountComponentControls() const;
+
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ void SetIconsL();
+
+ void CreateURLCompletionListL();
+
+ private:
+
+ /**
+ * ShowPopupList handles displaying the adaptive list box
+ * @since
+ * @param aRelayout Whether or not this popup list is being displayed as the result
+ * of a layout changed event (in which case we need to make sure that the popup
+ * is redrawn in the correct position) Set to EFalse by default.
+ * @return void
+ */
+ void ShowPopupListL(TBool aRelayout = EFalse);
+ void UpdateScrollBarPositionL(const TInt aPosition);
+ void HandleItemClickedL(CEikListBox* aListBox );
+
+ static TInt ListScrollTimerCallBack(TAny* aAny);
+ void DoListScrolling();
+
+
+ private: // from CCoeControl
+
+ HBufC* iPrevGotoContent;//to compare if there were really any changes!
+
+ private: // private members
+
+ CBrowserPopupList* iList;//owned
+ CDesCArrayFlat* iItems;//owned
+ CDesCArrayFlat* iItemNames;//owned
+ CDesCArrayFlat* iItemNamesToShow;//owned
+ CEikEdwin* iEditor;//Editor of the GotoPane
+ TInt iItemNo;
+ TInt iPrevItem;
+ TBool iPoppedUp;//it shows wheter it is popped up
+ TAknPopupWindowLayoutDef iLayout;
+ HBufC* iFirstGotoContent;
+ CRecentUrlStore* iRecentUrlStore; // not owned
+ TBool iDirectoryMode;//this shows wheter it is in a directory
+ TBool iOpenCBA;//this shows whether Open directory shuold be showed
+ CCoeControl *iParent;
+ TAknLayoutRect iCover, iShadow, iOutline, iInside;
+ CFormattedCellListBoxItemDrawer *iItemDrawer;
+ TParentType iParentType;
+ TBool iUrlCompletionMode;
+ HBufC* iUrlSuffixBuf;
+ TBool iTouchSupported;
+ TInt iMaxRecentUrlsToShow;
+ // shows whether search feature is enabled or not.
+ TBool iSearchFeature;
+ CPeriodic* iListScrollTimer;
+ };
+
+#endif // BROWSERADAPTIVELISTPOPUP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,277 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserBookmarksContainer.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_CONTAINER_H
+#define BROWSER_BOOKMARKS_CONTAINER_H
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesContainer.h"
+#include <bldvariant.hrh>
+
+// FORWARD DECLARATION
+
+class CBrowserBookmarksGotoPane;
+
+// CLASS DECLARATION
+
+/**
+* Top-level control, which contains all component controls in the bookmarks view.
+*/
+class CBrowserBookmarksContainer : public CBrowserFavouritesContainer
+ {
+ public : // construction, destruction
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aRect Rectangle of the control (available client rect).
+ * @param aView The view to which this container belongs.
+ * @return The constructed container.
+ */
+ static CBrowserBookmarksContainer* NewL(
+ const TRect& aRect,
+ CBrowserFavouritesView& aView);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserBookmarksContainer();
+
+ public: // new methods
+
+ /**
+ * Activate Goto Mode
+ */
+
+ void SetGotoActiveL();
+
+ /**
+ * Activate Search Pane
+ */
+ void SetSearchActiveL();
+ /**
+ * Deactivate Goto Pane
+ */
+
+ void SetGotoInactiveL();
+
+ /**
+ * Deactivate Search Pane
+ */
+ void SetSearchInactiveL();
+ public: // access to components
+
+ /**
+ * Get the Goto Pane.
+ * @return The Goto Pane.
+ */
+ inline CBrowserBookmarksGotoPane* GotoPane() const;
+
+ /**
+ * Get the Search Pane.
+ * @return The Search Pane.
+ */
+ inline CBrowserBookmarksGotoPane* SearchPane() const;
+
+ /**
+ * Check if we are in Goto Mode
+ * @return ETrue if we are in Goto Mode; EFalse otherwise.
+ */
+ inline TBool GotoPaneActive() const;
+
+ /**
+ * Check if we are in Search Mode
+ * @return ETrue if we are in Search Mode; EFalse otherwise.
+ */
+ inline TBool SearchPaneActive() const;
+
+ public: // from CBrowserFavouritesContainer
+
+ /**
+ * Count component controls.
+ * @return Number of component controls.
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Get a component control by index.
+ * @param aIndex Index of component control to be returned.
+ * @return Component control or NULL.
+ */
+ virtual CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Handle size change, lay out and draw components.
+ */
+ virtual void SizeChanged();
+
+ /**
+ * Handle key event.
+ * @param aKeyEvent The key event.
+ * @param aType Key event type.
+ * @return Response (was the key event consumed?).
+ */
+ virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Handle cursor change.
+ * @param aListBox Listbox in which the cursor has changed.
+ */
+ void HandleCursorChangedL( CEikListBox* aListBox );
+
+ /**
+ * Check if some editing is in progress.
+ */
+ TBool IsEditing();
+
+ /**
+ * Check if some editing is in progress for Search Pane.
+ */
+ TBool IsEditingSearch();
+
+ /**
+ * Get tab index belonging to this view.
+ * @return The tab index.
+ */
+ TInt TabIndex();
+
+ /**
+ * Get resource id for text to be displayed in the empty listbox.
+ * @return Listbox empty text resource id.
+ */
+ TInt ListboxEmptyTextResourceId();
+
+ /**
+ * Get resource id for text to be displayed in the title.
+ * @return Listbox empty text resource id.
+ */
+ TInt TitleResourceId();
+
+ /**
+ * Handles focus changing
+ * @param aDrawNow
+ */
+ void FocusChanged( TDrawNow aDrawNow );
+
+
+ /**
+ * HandlePointerEventL
+ * From CCoeControl
+ *
+ */
+ void HandlePointerEventL(const TPointerEvent& /*aPointerEvent*/);
+
+ /**
+ * HandleResourceChange
+ * From CCoeControl
+ */
+ void HandleResourceChange(TInt aType);
+
+ protected: // Construct / destruct
+
+ /**
+ * Constructor.
+ */
+ CBrowserBookmarksContainer();
+
+ /**
+ * Called by ConstructL. Leaves on failure.
+ * Derived classes can override this to add more controls.
+ * @param aRect Rectangle of the control (available client rect).
+ * @param aView The view to which this container belongs.
+ * @return The constructed container.
+ */
+ virtual void ConstructComponentControlsL(
+ const TRect& aRect,
+ CBrowserFavouritesView& aView );
+
+ /**
+ * Called by ConstructComponentControlsL.
+ * Leaves on failure.
+ */
+ virtual void ConstructSearchPaneL();
+
+ protected: // from CBrowserFavouritesContainer
+
+ /**
+ * Create icon handler for the listbox.
+ * @return Icon handler for the listbox.
+ */
+ MBrowserFavouritesListboxIconHandler* CreateListboxIconHandlerL();
+#ifdef __SERIES60_HELP
+ private:
+ /**
+ * Get help context for the control.
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+#endif //__SERIES60_HELP
+
+ private: // data
+
+ /**
+ * Goto Pane.
+ */
+ CBrowserBookmarksGotoPane* iGotoPane;
+
+ /**
+ * Owned.
+ * Search Pane.
+ */
+ CBrowserBookmarksGotoPane* iSearchPane;
+
+ /**
+ * ETrue if Goto pane is active, EFalse by default
+ */
+ TBool iGotoPaneActive;
+
+ /**
+ * ETrue if Search pane is active, EFalse by default
+ */
+ TBool iSearchPaneActive;
+
+ TBool iSelectionKeyDownPressed;
+ TBool iSelectionKeyLongPress;
+
+ /**
+ * Default text in search editor
+ */
+ HBufC* iDefaultSearchText;
+
+ /**
+ * Saves Search Provider Icon Id,
+ * used for tracking changes to Icon.
+ */
+ TInt iSearchIconId;
+
+ /**
+ * Saves Search Icon File Path
+ * used for tracking changes to Icon.
+ */
+ TFileName iSearchIconFilePath;
+ };
+
+#include "BrowserBookmarksContainer.inl"
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksContainer.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserBookmarksContainer
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_CONTAINER_INL
+#define BROWSER_BOOKMARKS_CONTAINER_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::GotoPane
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane* CBrowserBookmarksContainer::GotoPane() const
+ {
+ return iGotoPane;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::GotoPaneActive
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarksContainer::GotoPaneActive() const
+ {
+ return iGotoPaneActive;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::SearchPane
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane* CBrowserBookmarksContainer::SearchPane() const
+ {
+ return iSearchPane;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::SearchPaneActive
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarksContainer::SearchPaneActive() const
+ {
+ return iSearchPaneActive;
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksEditDialog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserBookmarkEditDialog.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_EDIT_DIALOG_H
+#define BROWSER_BOOKMARKS_EDIT_DIALOG_H
+
+// INCLUDE FILES
+
+#include <AknForm.h>
+// #include <favouriteslimits.h>
+#include <bldvariant.hrh>
+
+// FORWARD DECLARATION
+
+class CFavouritesItem;
+class CBrowserFavouritesModel;
+class CBrowserBookmarksEditFormApModel;
+class MApiProvider;
+//class MCommsModel;
+// class CAknsListBoxBackgroundControlContext;
+class CAknNavigationControlContainer;
+
+
+// CLASS DECLARATION
+
+/**
+* Dialog to edit and save bookmark attributes.
+*/
+class CBrowserBookmarkEditDialog: public CAknForm
+ {
+ public: // construct / destruct
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aItem Item to edit. Not owned.
+ * @param aModel Model containing data (actual database handling).
+ * @param aUid Uid of the edited item. When it is KFavouritesNullUid, the
+ * item is new (not yet added to the database). Otherwise, it is the Uid
+ * of the existing item.
+ * @param aCommsModel Access Point model. Not owned.
+ * @return The constructed dialog.
+ */
+ static CBrowserBookmarkEditDialog* NewL
+ (
+ CFavouritesItem& aItem,
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ //MCommsModel& aCommsModel,
+ TInt aUid = KFavouritesNullUid
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserBookmarkEditDialog();
+
+ public: // from CAknForm
+
+ /**
+ * Handle menu commands.
+ * @param aCommandId Command to handle.
+ */
+ void ProcessCommandL( TInt aCommandId );
+
+ public: // from base classes
+ void HandleResourceChange( TInt aType );
+
+ void HandleResourceChangeL( TInt aType );
+
+
+ protected: // Construct / destruct
+
+ /**
+ * Constructor.
+ * @param aItem Item to edit. Not owned.
+ * @param aModel Model containing data (actual database handling).
+ * handling.
+ * @param aUid Uid of the edited item. When it is KFavouritesNullUid, the item
+ * is new (not yet added to the database). Otherwise, it is the Uid
+ * of the existing item.
+ * @return The constructed dialog.
+ */
+ CBrowserBookmarkEditDialog
+ (
+ CFavouritesItem& aItem,
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ TInt aUid
+ );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * @param aApModel Access Point model. Not owned.
+ */
+ void ConstructL( /*MCommsModel& aCommsModel*/ );
+
+ protected: // from CAknForm (CEikDialog)
+
+ /**
+ * Handle button press. Same as base class method, except displays note
+ * "Bookmark saved" or "Not saved", as appropriate, if exiting.
+ * @param aButtonId Button pressed.
+ * @return ETrue if the dialog should exit.
+ */
+ TBool OkToExitL( TInt aButtonId );
+
+ protected: // From CAknForm
+ /**
+ * Get data from the editor back to the item and try to save it
+ * to the database.
+ * @return ETrue if successfully saved, EFalse otherwise.
+ */
+ TBool SaveFormDataL() ;
+
+ /**
+ * Initialize context-sensitive menu.
+ * @param aResourceId Resource id of the menu pane.
+ * @param aMenuPane Menu pane object being initialized.
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) ;
+
+ private: // From CAknForm
+
+ /**
+ * Fill the dialog controls with data from the item.
+ */
+ void PreLayoutDynInitL();
+
+ private: // new methods
+
+ /**
+ * Fill the dialog controls with data from the item.
+ */
+ void LoadFormDataL();
+
+ /**
+ * Try to do the database update with the item.
+ * @return ETrue if successfully saved, EFalse otherwise.
+ */
+ TBool SaveItemL();
+
+ /**
+ * Check if host part of url is too long.
+ * Cant be over 255 characters.
+ * @return ETrue if 255 or under, EFalse otherwise.
+ */
+ TBool IsValidUrlHost( const TDesC& aUrl );
+
+ /**
+ * Get the text from an edwin control. This method is a workaround for
+ * an AVKON form bug; the form goes into read-only state BEFORE
+ * SaveFormDataL is called. So the control there is no longer edwin.
+ * *** Remove this method when forms are fixed. ***
+ * @param aText Buffer to receive text.
+ * @param aControlId Control id.
+ */
+ void GetEdwinText( TDes& aText, TInt aControlId );
+
+#ifdef __SERIES60_HELP
+
+ /**
+ * Get help context for the control.
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+#endif // __SERIES60_HELP
+
+ inline MApiProvider& ApiProvider() { return iApiProvider; }
+
+ private: // data
+
+ CFavouritesItem* iItem; ///< Item to edit. Not owned.
+ CBrowserFavouritesModel* iModel; ///< Model containing data.
+ TInt iUid; ///< Uid of the item. KFavouritesNullUid for new items.
+ TBool iExitDialog; ///< ETrue if the dialog must be dismissed.
+ CBrowserBookmarksEditFormApModel* iFormApModel; ///< AP model.
+ TInt iExitNoteResourceId; ///< Resource id to show at exit, or 0.
+ CAknNavigationControlContainer* iNaviPane;
+ CAknNavigationDecorator* iNaviDecorator; //Owned
+ MApiProvider& iApiProvider;
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksEditFormApModel.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserBookmarksEditFormApModel.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_EDIT_FORM_AP_MODEL_H
+#define BROWSER_BOOKMARKS_EDIT_FORM_AP_MODEL_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <bamdesca.h>
+#include <favouriteswapap.h>
+
+// FORWARD DECLARATION
+
+class CAknQueryValueText;
+class CAknQueryValueTextArray;
+class MCommsModel;
+class CApListItemList;
+
+// CLASS DECLARATION
+
+/**
+* Model for the WAP AP pop-up field in the Edit Bookmark form. It owns a list
+* of Access Points, gotten from the AP Model; and also holds a descriptor
+* array containing names of access points. The descriptor array always contains
+* string "Default" as first, unless there are no AP-s at all. In that case,
+* the array is empty.
+*/
+class CBrowserBookmarksEditFormApModel : public CBase
+ {
+ public: // construction
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aCOmmsModel Comms model to use for accessing AP-s. Not owned.
+ * @return The constructed model.
+ */
+ static CBrowserBookmarksEditFormApModel* NewL
+ ( MCommsModel& aCommsModel );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserBookmarksEditFormApModel();
+
+ public: // new methods
+
+ /**
+ * Get the query value.
+ * @return The query value.
+ */
+ inline CAknQueryValueText* QueryValue();
+
+ /**
+ * Get and store Access Point data from the AP Model.
+ */
+ void ReadApDataL();
+
+ /**
+ * Set the current WAP Access point.
+ * @param aAp Access Point to set as current.
+ */
+ void SetCurrentWapApL( const TFavouritesWapAp& aAp );
+
+ /**
+ * Get the current WAP Access point.
+ * @return The current WAP Access point.
+ */
+ TFavouritesWapAp CurrentWapAp() const;
+
+ /**
+ * Count WAP Access points.
+ * @return Number of WAP Access points.
+ */
+ TInt ApCount();
+
+
+ protected: // construction
+
+ /**
+ * Constructor.
+ * @param aCommsModel Comms model to use for accessing AP-s.
+ * Not owned.
+ */
+ CBrowserBookmarksEditFormApModel( MCommsModel& aCommsModel );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * @return The constructed model.
+ */
+ void ConstructL();
+
+ private: // data
+
+ CDesCArrayFlat* iDesCArrayText; ///< AP names as strings.
+ CAknQueryValueTextArray* iTextArray;///< Text array for the value.
+ CAknQueryValueText* iTextValue; ///< Value for pop-up query.
+ MCommsModel* iCommsModel; ///< AP data source. Not owned.
+ CApListItemList* iApList; ///< List of access points. Owned.
+ };
+
+#include "BrowserBookmarksEditFormApModel.inl"
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksEditFormApModel.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserBookmarksEditFormApModel
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_EDIT_FORM_AP_MODEL_INL
+#define BROWSER_BOOKMARKS_EDIT_FORM_AP_MODEL_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::QueryValue
+// ---------------------------------------------------------
+//
+CAknQueryValueText* CBrowserBookmarksEditFormApModel::QueryValue()
+ {
+ return iTextValue;
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksGotoPane.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserBookmarksGotoPane.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_GOTO_PANE_H
+#define BROWSER_BOOKMARKS_GOTO_PANE_H
+
+// INCLUDE FILES
+
+#include <coecntrl.h>
+#include "BrowserAdaptiveListPopup.h"
+// FORWARD DECLARATION
+
+class CEikEdwin;
+class CAknInputFrame;
+class CBrowserBookmarksGotoPane;
+class CAknsListBoxBackgroundControlContext;
+class CAknsFrameBackgroundControlContext;
+class CBrowserFavouritesView;
+
+
+// DEFINES
+#ifndef GOTOPANE_POPUPLIST_DISABLE
+#define GOTOPANE_POPUPLIST_DISABLE EFalse
+#endif
+
+#ifndef GOTOPANE_POPUPLIST_ENABLE
+#define GOTOPANE_POPUPLIST_ENABLE ETrue
+#endif
+
+
+// class CBrowserAdaptiveListPopup;
+// CLASS DECLARATION
+
+/**
+* Mixin class for handling Bookmark Goto Pane events.
+*/
+class MBookmarksGotoPaneObserver
+ {
+
+ public: // types
+
+ enum TEvent /// Goto Pane events.
+ {
+ EEventEditingModeChanged, ///< Editing mode changed.
+ EEventEnterKeyPressed ///< Enter key pressed during editing.
+ };
+
+ public: // new methods
+
+ /**
+ * Handle Goto Pane event. Derived classes must implement.
+ * @param aGotoPane The Goto Pane in which the event occurred.
+ * @param aEvent Goto Pane event.
+ */
+ virtual void HandleBookmarksGotoPaneEventL
+ ( CBrowserBookmarksGotoPane* aGotoPane, TEvent aEvent ) = 0;
+ };
+
+/**
+* Goto Pane for the WML Browser. It looks just like a search field.
+* It has two modes, Editing and Non-editing. In editing mode the user can edit
+* text and move the cursor. In non-editing mode any key/other event which
+* normally means editing enters editing mode automatically. When editing mode
+* is entered, existing text is replaced with a default text.
+* (Editing in fact corresponds to being focused or not; the two things go
+* together.)
+*/
+class CBrowserBookmarksGotoPane: public CCoeControl
+ {
+ public: // Construct / destruct
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aView Pointer to Favourites View
+ * @param aParent Parent control.
+ * @param aBitmapfile Icon File Path
+ * @param aIconBitmapId Icon to display.
+ * @param aIconMaskId Icon Mask
+ * @param aPopupListStatus True if the pane uses popuplist,
+ * otherwise false.
+ * @param aSearchPaneMode Set true if the pane is a Search pane.
+ * @return The constructed Goto Pane control
+ */
+ static CBrowserBookmarksGotoPane* NewL
+ (
+ const CCoeControl& aParent,
+ CBrowserFavouritesView* aView,
+ const TDesC& aBitmapfile,
+ TInt aIconBitmapId ,
+ TInt aIconMaskId ,
+ TBool aPopupListStatus = GOTOPANE_POPUPLIST_ENABLE,
+ TBool aSearchPaneMode = EFalse
+ );
+
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserBookmarksGotoPane();
+
+ /**
+ * SetupSkinContext Sets up the skin
+ * return None
+ */
+ void SetupSkinContextL();
+
+ public: // new methods (editing)
+
+ /**
+ * Check if we are editing.
+ * @since 1.2
+ * @return ETrue if editing, EFalse otherwise.
+ */
+ inline TBool IsEditing() const;
+
+ /**
+ * Begin editing the pane. Sets up the visibility, etc for editing
+ */
+ void BeginEditingL();
+
+
+ /**
+ * Cancel editing, but leave the text in place.
+ * @since 1.2
+ */
+ void CancelEditingL();
+
+ /**
+ * Set text. If editing, it is now cancelled.
+ * @since 1.2
+ * @param aText Text to set.
+ * @param aClipToFit If ETrue, text is clipped "..." if doesn't fit.
+ * @param aCancelEditing If EFalse, editing is not cancelled
+ */
+ void SetTextL( const TDesC& aText, TBool aClipToFit = ETrue, TBool aCancelEditing = ETrue );
+
+ /**
+ * Set Editor Font Posture to Italic.
+ */
+ void SetTextModeItalicL( );
+
+ /**
+ * Get text; ownership passed. The returned buffer is zero-terminated.
+ * @since 1.2
+ * @return Text in a buffer or NULL. Owner is the caller.
+ */
+ HBufC* GetTextL();
+
+ /**
+ * Freeze / unfreeze. If frozen, setting text by calling SetTextL or
+ * Cancelling is disallowed. Use with caution, don't let frozen state
+ * "stay in" due to some leave!
+ * (This is used when during dowload we want to protect Goto Pane from
+ * being updated if some notification kicks in).
+ * @since 1.2
+ * @param aFreeze ETrue for freeze, EFalse to unfreeze.
+ */
+ inline void Freeze( TBool aFreeze );
+
+ public: // observer support
+
+ /**
+ * Set observer. Pass NULL pointer to unset. Panics if already set.
+ * @since 1.2
+ * @param aObserver The observer to be notified about Goto Pane events.
+ */
+ void SetGPObserver( MBookmarksGotoPaneObserver* aObserver );
+
+ public: // Showing / hiding extra line
+
+ /**
+ * Set line state (show or hide line). Ugly stuff.
+ * @since 1.2
+ * @param aLineVisible ETrue for showing line, EFalse for hiding.
+ */
+ void SetLineState( TBool aLineVisible );
+
+ void HandleResourceChange( TInt aType );
+ public: // from CCoeControl
+
+ /**
+ * Handle key event.
+ * @param aKeyEvent The key event.
+ * @param aType Key event type.
+ * @return Response (was the key event consumed?).
+ */
+ virtual TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Count component controls.
+ * @return Number of component controls.
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Get a component control by index.
+ * @param aIndex Index of component control to be returned.
+ * @return Component control or NULL.
+ */
+ virtual CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Handle focus change.
+ * @param aDrawNow Draw now?
+ */
+ virtual void FocusChanged( TDrawNow aDrawNow );
+
+ /**
+ * Gives back a pointer to adaptivepopuplist
+ */
+ CBrowserAdaptiveListPopup* PopupList();
+
+ /**
+ * Mop supply
+ * @param TTypeUid aId
+ */
+ TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+
+ /**
+ * Returns editor control of goto pane.
+ * @since Series60 1.2
+ * @return editor control of goto pane
+ */
+ CEikEdwin* Editor() const;
+
+ /**
+ * HandlePointerEventL
+ * From CCoeControl
+ *
+ */
+ void HandlePointerEventL(const TPointerEvent& /*aPointerEvent*/);
+
+ /**
+ * Sets/Unsets Virtual Keyboard Flag.
+ * @param aVKBFlag - ETrue sets the flag, Unsets the flag if EFalse.
+ */
+ void SetVKBFlag( TBool aVKBFlag );
+
+ protected: // Construct / destruct
+
+ /**
+ * Constructor.
+ */
+ CBrowserBookmarksGotoPane(CBrowserFavouritesView* aView, TBool aSearchPaneMode );
+
+ /**
+ * Second-phase constructor. Leaves on failure.
+ * @param aParent Parent control.
+ */
+ void ConstructL( const CCoeControl& aParent, const TDesC& aBitmapfile, TInt aIconBitmapId,
+ TInt aIconMaskId, TBool aPopupListStatus );
+
+ protected: // from CCoeControl
+
+ /**
+ * Handle size change, lay out components.
+ */
+ virtual void SizeChanged();
+
+ private: // new methods
+
+ /**
+ * Change editing mode.
+ * @param aEditing ETrue for editing mode.
+ */
+ inline void SetEditingL( TBool aEditing );
+
+ /**
+ * Activates Virtual Keyboard.
+ */
+ void ActivateVkbL();
+
+ private: // data
+ CBrowserFavouritesView* iView; //Not owned.
+ /// Editor. Owned.
+ CEikEdwin* iEditor;
+ /// Input frame. Owned.
+ CAknInputFrame* iInputFrame;
+ /// Editing mode.
+ TBool iEditing;
+ /// Observer or NULL. Not owned.
+ MBookmarksGotoPaneObserver* iGPObserver;
+ /// ETrue if frozen.
+ TBool iFrozen;
+ /// ETrue if initial focusing was done
+ ///(needed for permanent selection to be working)
+ TBool iEverFocused;
+ /// adaptive popuplist
+ CBrowserAdaptiveListPopup* iBAdaptiveListPopup;
+ CAknsListBoxBackgroundControlContext* iSkinContext;
+ CAknsFrameBackgroundControlContext* iInputContext;
+ // If the control is in Search Pane Mode.
+ TBool iSearchPaneMode;
+ // Default text in search editor. Owned
+ HBufC* iDefaultSearchText;
+ };
+
+#include "BrowserBookmarksGotoPane.inl"
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksGotoPane.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserBookmarksGotoPane
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_GOTO_PANE_INL
+#define BROWSER_BOOKMARKS_GOTO_PANE_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::IsEditing
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarksGotoPane::IsEditing() const
+ {
+ return iEditing;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::Freeze
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::Freeze( TBool aFreeze )
+ {
+ iFrozen = aFreeze;
+ }
+
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksListboxIconHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class TBrowserBookmarksListboxIconHandler.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_LISTBOX_ICON_HANDLER_H
+#define BROWSER_BOOKMARKS_LISTBOX_ICON_HANDLER_H
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesListboxIconHandler.h"
+
+// CLASS DECLARATION
+
+/**
+* Icon handling in the WML Browser's Bookmark View listbox.
+* The following icons are presented:
+* - Mark icon
+* - Folder icon
+* - Homepage icon
+* - Last Visited Page icon
+* - Bookmark icon
+* - CSD bearer bookmark icon
+* - HSCSD bearer bookmark icon
+* - GPRS bearer bookmark icon
+* - SMS bearer bookmark icon
+*/
+
+class TBrowserBookmarksListboxIconHandler:
+ public MBrowserFavouritesListboxIconHandler
+ {
+ protected: // from MBrowserFavouritesListboxIconHandler
+
+ /**
+ * Get item icon index for this item (index into the array).
+ * @param aItem Item to get icon index for.
+ * @return Icon index for the item.
+ */
+ TInt ItemIconIndex( const CFavouritesItem& aItem,CBrowserFavouritesListbox* aListbox ) const;
+
+ /**
+ * Get bearer icon index for this access point (index into the array).
+ * @param aAccessPoint Access Points to get bearer icon for.
+ * @param aAccessPoints Access Points to use.
+ * @return Icon index for the access point.
+ */
+ TInt BearerIconIndex
+ (
+ const TFavouritesWapAp aAccessPoint,
+ const CApListItemList& aAccessPoints
+ ) const;
+ /**
+ * Dynamically load Icon from files (AVKON skin supported)
+ * @return pointer to the created icon array
+ */
+ CAknIconArray* LoadIconsL() const;
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksModel.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserBookmarksModel.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_MODEL_H
+#define BROWSER_BOOKMARKS_MODEL_H
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesModel.h"
+
+// CLASS DECLARATION
+class MApiProvider;
+
+/**
+* Model for the Bookmarks Views of the WML Browser.
+*/
+class CBrowserBookmarksModel : public CBrowserFavouritesModel
+ {
+ public:
+ /**
+ * Constructor.
+ * @param aApiProvider The API provider
+ */
+ CBrowserBookmarksModel( MApiProvider& aApiProvider );
+ // construction
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed model.
+ */
+ static CBrowserBookmarksModel* NewL( MApiProvider& aApiProvider );
+
+ public: // from CBrowserFavouritesModel
+
+ /**
+ * Get resource id of some text for an item.
+ * @param aItem The item to get resource id for.
+ * @param aType Type of resource text.
+ * @return Resource id of the text.
+ */
+ TInt StringResourceId
+ (
+ const CFavouritesItem& aItem,
+ CBrowserFavouritesModel::TTextResourceType aType
+ ) const;
+
+ MApiProvider& ApiProvider();
+
+
+
+ protected: // from CBrowserFavouritesModel
+
+ CFavouritesItemList* GetFoldersSortedLC();
+
+ private:
+ const TDesC& GetDBName();
+
+ private: //data members
+ MApiProvider& iApiProvider; // API provider
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksOrder.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include <e32base.h>
+#include <favouritesitemdata.h>
+
+class CBrowserBookmarksOrder : public MFavouritesItemData,
+ public CBase
+ {
+ public:
+
+ static CBrowserBookmarksOrder* NewLC();
+
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserBookmarksOrder();
+
+ const CArrayFixFlat<TInt>& GetBookMarksOrder();
+
+ void SetBookMarksOrderL(const CArrayFixFlat<TInt>& aBookMarksOrder);
+
+ public: //From MFavouritesItemData
+
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ void InternalizeL( RReadStream& aStream );
+
+ private: //Data members
+
+ CArrayFixFlat<TInt>* iBMOrderArray;
+ };
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,576 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserBookmarksView.
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_VIEW_H
+#define BROWSER_BOOKMARKS_VIEW_H
+
+// INCLUDE FILES
+#include "BrowserFavouritesView.h"
+#include "BrowserBookmarksGotoPane.h"
+#include "Preferences.h"
+#include <apchangeobserver.h>
+#include <brctlinterface.h>
+#include <AknToolbarObserver.h>
+
+
+// CONSTANTS
+
+//FORWARD DECLARATION
+
+class CBrowserBookmarksContainer;
+class CRecentUrlStore;
+class CAsyncDownloadsListExecuter;
+
+// CLASS DECLARATION
+
+/**
+* Bookmarks View of the WML browser. Derived from CBrowserFavouritesView;
+* new methods mostly process Bookmark View specific commands.
+*/
+class CBrowserBookmarksView:
+ public CBrowserFavouritesView,
+ public MBookmarksGotoPaneObserver,
+ public MApChangeObserver,
+ public MPreferencesObserver,
+ public MBrCtlLoadEventObserver,
+ public MAknToolbarObserver
+ {
+ public: // construction
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aApiProvider The API provider.
+ * @return The constructed view.
+ */
+ static CBrowserBookmarksView* NewLC( MApiProvider& aApiProvider, CRecentUrlStore& aRecentUrlStore, TInt aInitialFolderUid = KFavouritesRootUid);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserBookmarksView();
+
+ public: // new methods
+
+ /**
+ * Force updating the Goto Pane. Does nothing if Goto Pane is not
+ * visible.
+ * @since 1.2
+ */
+ void UpdateGotoPaneL();
+
+ /**
+ * Exits Adaptive Bookmarks folder. Called also from BrowserAppUi when a page is
+ * downloaded from Adaptive Bookmarks.
+ * @since 2.1
+ */
+ void ExitAdaptiveBookmarks();
+
+ /**
+ * Opens Adaptive Bookmarks folder.
+ * @since 3.1
+ */
+ inline void OpenAdaptiveBookmarksWhenActivated( )
+ { iOpenAdaptiveBookmarksWhenActivated = ETrue; }
+
+ /**
+ * Gets the status of selection of the adaptive bookmarks folder.
+ * @since 3.1
+ */
+ inline TBool GetAdaptiveBookmarksFolderSelected( )
+ { return iAdaptiveBookmarksFolderSelected; }
+
+ inline TBool GetAdaptiveBookmarksFolderWasActive( )
+ { return iAdaptiveBookmarksFolderWasActive; }
+
+ void DimToolbarButtons(TBool aDimButtons);
+
+ public: // public methods from CBrowserFavouritesView
+
+ /**
+ * Handle command.
+ * @since 1.2
+ * @param aCommand Command id.
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * Get view id.
+ * @since 1.2
+ * @return The view id for this view.
+ */
+ TUid Id() const;
+
+ public: // From MCbaSetter (CBrowserViewBase)
+
+ /**
+ * Return command set id, to be displayed.
+ * @since 1.2
+ * @return The command set's resource id.
+ */
+ virtual TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/);
+
+ /**
+ * Helper function to dynamically set LSK
+ * @since 5.0
+ */
+ void SetLSKDynL(TSKPair& aLsk,
+ CBrowserBookmarksGotoPane* aTheGotoPane);
+
+ /**
+ * Helper function to dynamically set RSK
+ * @since 5.0
+ */
+ void SetRSKDynL(TSKPair& aRsk,
+ CBrowserBookmarksGotoPane* aTheGotoPane);
+
+ /**
+ * Helper function to dynamically set MSK
+ * @since 5.0
+ */
+ void SetMSKDynL(TSKPair& aMsk, const TSKPair aLsk,
+ CBrowserFavouritesContainer* aTheContainer,
+ CBrowserBookmarksGotoPane* aTheGotoPane);
+
+
+ public: // from MBookmarksGotoPaneObserver
+
+ /**
+ * Handle Goto Pane event.
+ * @since 1.2
+ * @param aGotoPane The Goto Pane in which the event occurred.
+ * @param aEvent Goto Pane event.
+ */
+ virtual void HandleBookmarksGotoPaneEventL
+ (
+ CBrowserBookmarksGotoPane* aGotoPane,
+ MBookmarksGotoPaneObserver::TEvent aEvent
+ );
+
+ public: // MAknToolbarObserver
+ /**
+ * Called when toolbar events occur
+ *
+ * @since 5.0
+ * @return void
+ */
+ void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand); }
+
+ protected: // construction
+
+ /**
+ * Constructor.
+ * @param aApiProvider The API provider.
+ */
+ CBrowserBookmarksView( MApiProvider& aApiProvider, CRecentUrlStore& aRecentUrlStore, TInt aInitialFolderUid = KFavouritesRootUid );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * @param aViewResourceId Resource id for this view.
+ * Derived classes should call this first during construction.
+ */
+ void ConstructL( TInt aViewResourceId );
+
+ protected: // protected CBrowserFavouritesView
+
+ /**
+ * Handle listbox event.
+ * @since 1.2
+ * @param aListBox Listbox in which the event occurred.
+ * @param aEventType Event.
+ */
+ void HandleListBoxEventL(
+ CEikListBox* aListBox,
+ MEikListBoxObserver::TListBoxEvent aEventType );
+
+ /**
+ * Initialize context-sensitive menu.
+ * @since 1.2
+ * @param aResourceId Resource id of the menu pane.
+ * @param aMenuPane Menu pane object being initialized.
+ * @param aIndex Index into the visibility map.
+ * @param aState Selection state.
+ */
+ virtual void DynInitMenuPaneL
+ (
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane,
+ TCommandVisibility::TIndex /*aIndex*/,
+ const TBrowserFavouritesSelectionState& aState
+ );
+
+ /**
+ * Get resource id of text to be displayed in navi pane when
+ * root folder is shown (TBUF).
+ * @since 1.2
+ * @return Resource id.
+ */
+ TInt RootTitleResourceId() const;
+
+ /**
+ * Get resource id of Options menu (RESOURCE MENU_BAR).
+ * @since 1.2
+ * @return Resource id.
+ */
+ TInt OptionsMenuResourceId() const;
+
+ /**
+ * Get resource id of OK-Options menu (RESOURCE MENU_BAR).
+ * @since 1.2
+ * @return Resource id.
+ */
+ TInt OkOptionsMenuResourceId() const;
+
+ /**
+ * Create the model. Leave on failure. The model is owned by the
+ * caller (this view, base class). The created model is really
+ * a CBrowserBokmarksModel.
+ * @since 1.2
+ * @return The constructed model.
+ */
+ virtual CBrowserFavouritesModel* CreateModelL();
+
+ /**
+ * Create the container (the main control of the view). The container
+ * is owned by the caller (this view, base class). The created container
+ * is really a CBrowserBookmarksContainer.
+ * Leave on failure.
+ * @since 1.2
+ * @return The constructed main control.
+ */
+ virtual CBrowserFavouritesContainer* CreateContainerL();
+
+ /**
+ * Get items to be displayed in a folder. Expects the model's db be
+ * open.
+ * @since 1.2
+ * @param aFolder Folder which contains the items.
+ * @return List of items. Pushed on the cleanup stack.
+ */
+ virtual CFavouritesItemList* GetItemsLC( TInt aFolder );
+
+ /**
+ * Some displayed data has changed (Favourites database, AP-s, etc).
+ * Update the view so changes become visible. Safe to call if the view
+ * is not active; in this case it does nothing.
+ * This method should not be called if the data change is due to direct
+ * user activity (opening folders etc.); only for notification
+ * processing.
+ * (Same as base class method, except active Goto Pane is not reset if
+ * downloading is in progress.)
+ * @since 1.2
+ * @param aDbErrorNote If ETrue, unsuccesful database access will bring
+ * up an error note.
+ */
+ virtual void RefreshL( TBool aDbErrorNote = EFalse );
+
+ void HandleForegroundEventL( TBool aForeground );
+
+ protected: // protected methods from CAknView
+
+ /**
+ * Activate the view.
+ * @since 1.2
+ * @param aCustomMessageId Custom Message Id.
+ * @param aCustomMessage Custom Message.
+ */
+ virtual void DoActivateL
+ (
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage
+ );
+
+ /**
+ * Deactivate the view.
+ * @since 1.2
+ */
+ virtual void DoDeactivate();
+
+ private: // command handling (additional commands)
+
+ /**
+ * Available only to process EWmlCmdDelete and EWmlCmdDeleteItems commands.Command "Go to" when the user is editing in the Goto Pane.
+ */
+ void DeleteItems( TInt aCommand );
+
+ /**
+ * Command "Go to" when the user is editing in the Goto Pane.
+ * Go to the URL found in Goto Pane.
+ * Does nothing if no Goto Pane.
+ */
+ void GotoUrlInGotoPaneL();
+
+ /**
+ * Command "Activate". Activate highlighted bookmark.
+ * Does nothing if no bookmark is highlighted.
+ */
+ void ActivateCurrentBookmarkL();
+
+ /**
+ * Command "Add bookmark". Create new bookmark and launch
+ * Edit bookmark dialog.
+ */
+ void AddNewBookmarkL();
+
+ /**
+ * Command "Edit bookmark". Edit highlighted bookmark.
+ * Does nothing if no bookmark is highlighted.
+ */
+ void EditCurrentBookmarkL();
+
+
+ /**
+ * Command "Send via Unified Messaging".
+ * Send selected bookmark(s).
+ */
+ void SendBookmarksL( );
+
+
+ private: // new methods
+
+ /**
+ * Get the container (as CBrowserBookmarksContainer).
+ * @return The container.
+ */
+ CBrowserBookmarksContainer* TheContainer();
+
+ private: // from MApChangeObserver
+ /**
+ * Handle change in currently used Access Point.
+ */
+ void ApChangedL( TUint32 aNewAPId );
+
+ private: // from MPreferencesObserver
+
+ /**
+ * Handle preferences change.
+ */
+ void HandlePreferencesChangeL(
+ const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType );
+
+ private:
+
+ /**
+ * Create Start Page bookmark. Db needs not be open (not used).
+ * @return The Start Page bookmark, or NULL if no such.
+ * Ownership passed to caller.
+ */
+ CFavouritesItem* CreateStartPageBookmarkL();
+
+ private: // from MBrCtlLoadEventObserver
+
+ /**
+ * A load events notification
+ * @since 2.8
+ * @param aLoadEvent The load event
+ * @param aSize Size depends on the event
+ * @param aTransactionId The transaction id of the transaction that had this event
+ * @return void
+ */
+ void HandleBrowserLoadEventL( TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+ TUint aSize,
+ TUint16 aTransactionId );
+ private:
+
+ /**
+ * Clear all adaptive bookmarks
+ */
+ void ClearAdaptiveBookmarksL();
+
+ private:
+
+ /**
+ * To set empty text for folders. It is different in Adaptive Bookmarks
+ */
+ void SetEmptyTextL();
+
+ // from CBrowserFavouritesView
+ TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+//from CBrowserFavouritesView
+ /**
+ * Open next folder.
+ * @param aForward Open next folder if ETrue, previous if EFalse.
+ */
+ void OpenNextFolderL( TBool aForward );
+
+ /**
+ * Update and draw navi pane (show tabs for root, or "1/4" style text
+ * for subfolders).
+ * No sanity check; expects the model's table be open.
+ */
+ void UpdateNaviPaneL();
+
+ /**
+ * Sorts bookmark items into the saved manual order
+ * associated to the given folder
+ * @param aFolder The folder in which the items are stored
+ * @param aItems The bookmark item list to sort
+ */
+ TBool ManualBMSortL( TInt aFolder, CFavouritesItemList* aItems );
+
+ /**
+ * Starts 'item moving mode', when softkeys are ok/cancel
+ * and ok moves the selected items to the current position in
+ * bookmarks list
+ */
+ void StartMoveItemsL();
+
+ /**
+ * moves the selected items to the current position in
+ * bookmarks list
+ */
+ void MoveItemsL();
+
+ /**
+ * Cancels 'item moving mode', softkeys return to normal,
+ * focus returns to the first selected item
+ */
+ void CancelMoveItemsL();
+
+ /*
+ * Adds the given uid to the last place in bookmarks list
+ * @param aUid The uid to add
+ */
+ void AddUidToLastPlaceToCurrentListL( TInt aUid );
+
+ public:
+ /**
+ * Dim or Un-dim Toolbar buttons.
+ */
+ void UpdateToolbarButtonsState();
+
+ /**
+ * Check to show downloads.
+ */
+ void CheckForDownloads();
+
+ /**
+ * Initiates update for favicons
+ */
+ void UpdateFavIconsL();
+
+ private: // data
+ /**
+ * Callback for completing the Browser App init. Normally only
+ * BookmarksView is initialized first on startup. When bookmarks
+ * view is shown then this callback is scheduled to complete the
+ * remaining initialization.
+ */
+ static TInt CompleteAppInitCallback( TAny* aApiProvider );
+
+ /**
+ * Uid of AP which is to be used for creating Start Page bookmark.
+ */
+ TUint32 iStartPageApUid;
+
+ /**
+ * Storing current default AP, to be able to spot when it changes.
+ * (We get notification when preferences change; but don't know
+ * what changed in preferences. We are interested only in default AP
+ * change.)
+ */
+ TUint32 iCurrentDefaultAp;
+
+ /**
+ * This flag is used in fetch observing: this differentiates events from
+ * the newly started fetch from events of ongoing fetches (being
+ * cancelled by the new one). It is ETrue when new fetch has been
+ * initiated but not yet started (existing fetches will be cancelled
+ * during this time).
+ */
+ TBool iFetchInit;
+
+ HBufC* iDomainFolderName;
+ CRecentUrlStore& iRecentUrlStore;
+ TBool iInAdaptiveBookmarksFolder;
+
+ TWmlSettingsAdaptiveBookmarks iAdaptiveBookmarksCurrentSetting;
+
+
+ // For Adaptive Bookmarks - to refresh title when
+ // coming back from Preferences
+ TBool iPreferencesChanged;
+
+ // For Manual BM Sorting
+ // Indicates item moving mode
+ TBool iManualItemMovingGoingOn;
+
+ // list of uids of items to move
+ CArrayFixFlat<TInt>* iItemsToMove;
+
+ // Current order of bookmarks
+ CBrowserBookmarksOrder* iCurrentOrder;
+
+ // Flag to indicate that Adaptive BM folder has just been inserted to BM list
+ TBool iInsertAdaptiveBookmarksFolder;
+
+ // Flag to indicate that current BM order needs to be saved
+ TBool iSaveBMOrder;
+
+ // Flag to indicate the presence of Start Page item
+ TBool iStartPagePresent;
+
+ // Goto Pane's entered URL and cursor's position
+ HBufC* iEnteredURL;
+ TInt iCursorPos;
+
+ TUint16 iTrId;
+
+ CAsyncDownloadsListExecuter* iDownloadsListExecuter; // Owned.
+
+ // True if the view will show the adaptive bookmarks folder
+ // on activation, otherwise false.
+ TBool iOpenAdaptiveBookmarksWhenActivated;
+
+ // True if the user opned the Adaptive Bookmarks folder,
+ // from bookmarks items, otherwise false.
+ TBool iAdaptiveBookmarksFolderSelected;
+
+ // True if the view was changed, and the adaptive bookmarks folder
+ // was currently acive.
+ TBool iAdaptiveBookmarksFolderWasActive;
+
+ // Pen enabled flag
+ TBool iPenEnabled;
+
+ // Re-Entry Gate flag for Delete Bookmark routine
+ TBool iHandleDeleteInProgress;
+
+ // Async callback object for delayed App init
+ CIdle *iAsyncComplete;
+
+ TBool iShowDownlods;
+ };
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFaviconHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CBrowserFaviconHandler
+*
+*
+*/
+
+
+#ifndef __BROWSERFAVICONHANDLER_H
+#define __BROWSERFAVICONHANDLER_H
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <gulicon.h>
+#include "BrowserFaviconScaler.h"
+
+// CLASS DECLARATION
+class MApiProvider;
+class CFavouritesItemList;
+class CFavouritesItem;
+
+class MBrowserFaviconObserver
+ {
+ public:
+ virtual TInt DrawFavicons() = 0;
+ };
+
+/**
+* CBrowserFaviconHandler.
+*
+* @lib Browser.app
+* @since Series 60 3.1
+*/
+class CBrowserFaviconHandler : public CActive,
+ public MBrowserFaviconScalerCallback
+ {
+ public: // Constructors
+
+ /**
+ * @param aApiProvider access to AppUi functions
+ * @param aIconArray an array of icons
+ * @param aObserver observer for drawing favicons
+ * @param aFaviconSize size in pixels of the favicons
+ */
+ static CBrowserFaviconHandler* NewLC(
+ MApiProvider& aApiProvider,
+ CArrayPtr<CGulIcon>* aIconArray,
+ MBrowserFaviconObserver& aObserver,
+ TSize aFaviconSize );
+
+ /**
+ * @param aApiProvider access to AppUi functions
+ * @param aIconArray an array of icons
+ * @param aObserver observer for drawing favicons
+ * @param aFaviconSize size in pixels of the favicons
+ */
+ static CBrowserFaviconHandler* NewL(
+ MApiProvider& aApiProvider,
+ CArrayPtr<CGulIcon>* aIconArray,
+ MBrowserFaviconObserver& aObserver,
+ TSize aFaviconSize );
+
+ /**
+ * Destructor.
+ */
+ ~CBrowserFaviconHandler();
+
+ protected: // Constructor and destructor
+
+ /**
+ * @param aApiProvider access to AppUi functions
+ * @param aObserver observer for drawing favicons
+ * @param aFaviconSize size in pixels of the favicons
+ */
+ CBrowserFaviconHandler( MApiProvider& aApiProvider,
+ MBrowserFaviconObserver& aObserver,
+ TSize aFaviconSize );
+
+ public: // from MBrowserFaviconScalerCallback
+ void ScalingCompletedL(CFbsBitmap* aResult, const TRect& aTargetRect);
+
+ public: // from CActive
+
+ /**
+ * Cancel any outstanding requests
+ */
+ void DoCancel();
+
+ /**
+ * Handles object`s request completion event.
+ */
+ void RunL();
+
+ public: // New functions
+
+
+ /**
+ * Initiates decoding of favicons for the favourites list in browserengine.
+ * This will request icon database thread to start decoding requested icons in background.
+ * @param aFavItems a list of favourites items
+ */
+ void RequestFavicons( CFavouritesItemList* aFavItems );
+
+ /**
+ * This is async fetch operation from engine. One icon at a time is fetched and asynchronously
+ * scaled. E.g. if there are 5 icons to be fetched, then this will cause the BitmapScaler to be
+ * Active for 5 times.
+ * overall fetching is Async
+ * @param aFavItems a list of favourites items
+ */
+ void StartGetFaviconsL( CFavouritesItemList* aFavItems );
+
+ /**
+ * Appends the icon to the icon array
+ * @param aItem the favourites item which is being checked for favicons
+ * @return Index of favicon array in iIconArray
+ */
+ TInt GetFaviconArrayIndex( const CFavouritesItem& aItem );
+
+ /**
+ * Updates the handle to icon array
+ * @param aIconArray an array of icons
+ */
+
+ void UpdateIconArray(CArrayPtr<CGulIcon>* aIconArray);
+
+ protected: // New functions
+
+ /**
+ * Gets the favicon for a given url from the Favicon Engine
+ * @param aUrl a url to check if there is an associated favicon
+ */
+ void GetFaviconL();
+
+ /**
+ * Rescales a favicon to fit into the list box graphic pane
+ * and stores the result in iIconArray
+ */
+ void RescaleFaviconL();
+
+ /**
+ * Appends the icon to the icon array
+ * @return Leave code
+ */
+ TInt AppendToIconArray();
+
+
+ private: // New functions
+
+ void ConstructL( CArrayPtr<CGulIcon>* aIconArray );
+
+ // Structures
+ struct TFaviconIndex
+ {
+ TInt iFavouritesItemIndex;
+ TInt iIndex;
+ };
+
+ // Members
+ MApiProvider& iApiProvider; // NOT owned
+ MBrowserFaviconObserver& iObserver; // NOT owned
+
+ CArrayPtr<CGulIcon>* iIconArray; // NOT owned
+ CArrayFixFlat<TFaviconIndex>* iFaviconArrayIndices; // owned
+
+ CFavouritesItemList* iFavItems; // NOT owned
+ TSize iFaviconSize;
+
+ CGulIcon* iFavicon; // NOT owned
+ HBufC* iUrl; // owned
+
+ // Counters
+ TInt iFavItemsCurrentIndex; // position in the favourites item list
+ TInt iFaviconsFound; // counter for number of favicon which have been found
+
+ TBool iWasLastItemFavicon;
+ CBrowserFaviconScaler* iBmpScaler; // owned
+ TBool iHasMask;
+ };
+
+
+
+#endif // __BROWSERFAVICONHANDLER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFaviconScaler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,116 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+#ifndef CBROWSERFAVICONSCALER_H
+#define CBROWSERFAVICONSCALER_H
+
+// INCLUDES
+
+#include <e32base.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+class CBitmapScaler;
+class CFbsBitmap;
+
+// CLASS DECLARATION
+
+class MBrowserFaviconScalerCallback
+ {
+ public:
+ virtual void ScalingCompletedL(CFbsBitmap* aResult, const TRect& aTargetRect) = 0;
+ };
+
+
+// CLASS DECLARATION
+
+/**
+*
+*
+* @lib pagescaler.dll
+* @since 3.1
+*/
+class CBrowserFaviconScaler : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CBrowserFaviconScaler* NewL(MBrowserFaviconScalerCallback& aCallback);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFaviconScaler();
+
+ public: // New functions
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void StartScalingL(CFbsBitmap &aSource, const TRect& aTargetRect, TBool aIsMask);
+
+
+ private: // Functions from CActive
+
+ void RunL();
+
+ void DoCancel();
+
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CBrowserFaviconScaler(MBrowserFaviconScalerCallback& aCallback);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ void DeleteResultBitmap();
+
+ private: // Data
+
+ MBrowserFaviconScalerCallback* iCallback;
+
+ CFbsBitmap* iResultBitmap; // owned
+ CBitmapScaler* iScaler; // owned
+
+ TRect iTargetRect;
+
+ };
+
+#endif // CBROWSERFAVICONSCALER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserFavouritesContainer.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_CONTAINER_H
+#define BROWSER_FAVOURITES_CONTAINER_H
+
+// INCLUDE FILES
+#include <coecntrl.h>
+#include <akntabobserver.h>
+#include "BrowserFavouritesListboxCursorObserver.h"
+#include <aknnavidecoratorobserver.h>
+
+// FORWARD DECLARATION
+class CBrowserFavouritesView;
+class CBrowserFavouritesListbox;
+class CAknNavigationDecorator;
+class CAknSearchField;
+class MBrowserFavouritesListboxIconHandler;
+class CAknsListBoxBackgroundControlContext;
+
+// CLASS DECLARATION
+
+/**
+* Top-level control, which contains all component controls in the favourites
+* view.
+* Manages (destroys/creates) component controls.
+* Handles key events and forwards them to the appropriate component control.
+* Pure virtual.
+*/
+class CBrowserFavouritesContainer:
+ public CCoeControl,
+ public MBrowserFavouritesListboxCursorObserver,
+ public MAknNaviDecoratorObserver
+{
+public : // construction, destruction
+
+ /**
+ * Default destructor.
+ */
+ virtual ~CBrowserFavouritesContainer();
+
+public: // new methods
+
+
+ /**
+ * Show the tabs in the navi pane.
+ * @since 1.2
+ */
+ void ShowRootNaviPane();
+
+ /**
+ * Show folder info in navi pane.
+ * @since 1.2
+ * @param aFolderIndex Index of the current folder.
+ * @param aFolderCount Total number of folders.
+ */
+ void ShowFolderNaviPaneL( TInt aFolderIndex, TInt aFolderCount );
+
+ /**
+ * Get tab index belonging to this view.
+ * Derived classes must provide this method.
+ * @since 1.2
+ * @return The tab index.
+ */
+ virtual TInt TabIndex() = 0;
+
+ /**
+ * Get resource id for text to be displayed in the empty listbox.
+ * Derived classes must provide this method.
+ * @since 1.2
+ * @return Listbox empty text resource id.
+ */
+ virtual TInt ListboxEmptyTextResourceId() = 0;
+
+ /**
+ * Get resource id for text to be displayed in the title.
+ * Derived classes must provide this method.
+ * @since 1.2
+ * @return Listbox empty text resource id.
+ */
+ virtual TInt TitleResourceId() = 0;
+
+
+public: // access to components
+
+ /**
+ * Get the creating view.
+ * @since 1.2
+ * @return The creating view.
+ */
+ inline CBrowserFavouritesView& View() const;
+
+ /**
+ * Get the browsing listbox.
+ * @since 1.2
+ * @return The browsing listbox.
+ */
+ inline CBrowserFavouritesListbox* Listbox() const;
+
+
+public: // from CCoeControl
+
+ /**
+ * Handle resource change.
+ * @param aType Event type.
+ */
+ void HandleResourceChange( TInt aType );
+
+ /**
+ * Count component controls.
+ * @return Number of component controls.
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * Get a component control by index.
+ * @param aIndex Index of component control to be returned.
+ * @return Component control or NULL.
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Handle size change, lay out and draw components.
+ */
+ void SizeChanged();
+
+ /**
+ * Handle key event. Forwards all key events to the listbox, if present.
+ * @param aKeyEvent The key event.
+ * @param aType Key event type.
+ * @return Response (was the key event consumed?).
+ */
+ TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Handles focus changing
+ * @param aDrawNow
+ */
+ void FocusChanged( TDrawNow aDrawNow );
+
+public: // from MWmlBrowserFavouritesListboxCursorObserver
+
+ /**
+ * Handle cursor change.
+ * @param aListBox Listbox in which the cursor has changed.
+ */
+ virtual void HandleCursorChangedL( CEikListBox* aListBox );
+
+public: // from MAknNaviDecoratorObserver
+ virtual void HandleNaviDecoratorEventL( TInt aEventID );
+
+protected: // construction
+
+ /**
+ * Called by ConstructL. Leaves on failure.
+ * Derived classes can override this to add more controls.
+ * @param aRect Rectangle of the control (available client rect).
+ * @param aView The view to which this container belongs.
+ */
+ virtual void ConstructComponentControlsL
+ (
+ const TRect& aRect,
+ CBrowserFavouritesView& aView
+ );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * Do not override this method in derived classes. Use this one,
+ * and override ConstructComponentControlsL.
+ * @param aRect Rectangle of the control (available client rect).
+ * @param aView The view to which this container belongs.
+ */
+ void ConstructL
+ (
+ const TRect& aRect,
+ CBrowserFavouritesView& aView
+ );
+
+ /**
+ * Called by ConstructComponentControlsL. Leaves on failure.
+ * Derived classes must provide this to create own icon handler.
+ * @return Icon handler for the listbox.
+ */
+ virtual MBrowserFavouritesListboxIconHandler*
+ CreateListboxIconHandlerL() = 0;
+
+private: // from MObjectProvider
+TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+
+
+private: // data
+
+ /// The creating view. Not owned.
+ CBrowserFavouritesView* iView;
+ /// Browsing listbox. Owned.
+ CBrowserFavouritesListbox* iListbox;
+
+ /// Navi Pane tabgroup. Owned.
+ CAknNavigationDecorator* iNaviPaneTabsRoot;
+
+ /// Navi Pane text. Owned.
+ CAknNavigationDecorator* iNaviPaneTabsFolder;
+ /// Icon handler. Owned.
+ MBrowserFavouritesListboxIconHandler* iIconHandler;
+ CAknsListBoxBackgroundControlContext* iSkinContext;
+
+};
+
+#include "BrowserFavouritesContainer.inl"
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesContainer.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserFavouritesContainer
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_CONTAINER_INL
+#define BROWSER_FAVOURITES_CONTAINER_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesContainer::View
+// ---------------------------------------------------------
+
+CBrowserFavouritesView& CBrowserFavouritesContainer::View() const
+ {
+ return *iView;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesContainer::Listbox
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListbox* CBrowserFavouritesContainer::Listbox() const
+ {
+ return iListbox;
+ }
+
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesFolderListboxIconHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class TBrowserFavouritesFolderListboxIconHandler.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_FOLDER_LISTBOX_ICON_HANDLER_H
+#define BROWSER_FAVOURITES_FOLDER_LISTBOX_ICON_HANDLER_H
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesListboxIconHandler.h"
+
+// CLASS DECLARATION
+
+/**
+* Icon handling in the WML Browser's Favourites Views Folder Select listboxes.
+* This one presents only folder icons:
+* - Mark icon (not used but safer this way)
+* - Folder icon
+* - Root folder icon
+*/
+
+class TBrowserFavouritesFolderListboxIconHandler:
+ public MBrowserFavouritesListboxIconHandler
+ {
+ public:
+ /**
+ * Get the icon indexes for this item (index into the array).
+ * @param aItem Item to get icon indexes for.
+ * @param aAccessPoints Access Points to use (if bearer info is needed).
+ * May be NULL.
+ * @return Icon indexes for the item.
+ */
+ TBrowserFavouritesIconIndexes IconIndexes
+ (
+ const CFavouritesItem& aItem
+ /* const CApListItemList* aAccessPoints,*/
+ ) const;
+
+ protected: // from MBrowserFavouritesListboxIconHandler
+
+ /**
+ * Get resource id for the iconarray.
+ * @return The resource id for the iconarray.
+ */
+ TInt IconArrayResourceId() const;
+
+ /**
+ * Get item icon index for this item (index into the array).
+ * @param aItem Item to get icon index for.
+ * @return Icon index for the item.
+ */
+ TInt ItemIconIndex( const CFavouritesItem& aItem ,CBrowserFavouritesListbox* aListbox ) const;
+
+ TInt ItemIconIndex( const CFavouritesItem& aItem ) const;
+
+
+ /**
+ * Dynamically load Icon from files (AVKON skin supported)
+ * @return pointer to the created icon array
+ */
+ CAknIconArray* LoadIconsL() const;
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesFolderSelector.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserFavouritesFolderSelector.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_FOLDER_SELECTOR_H
+#define BROWSER_FAVOURITES_FOLDER_SELECTOR_H
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesFolderListboxIconHandler.h"
+#include <AknLists.h>
+// FORWARD DECLARATION
+
+// class CBrowserFavouritesFolderListbox;
+class CBrowserFavouritesModel;
+class MApiProvider;
+class CFavouritesItemList;
+class CBrowserFavouritesIconIndexArray;
+// class CAknSingleGraphicPopupMenuStyleListBox;
+// class MBrowserFavouritesListboxIconHandler;
+// CLASS DECLARATION
+
+class CBrowserFavouritesFolderSelectorListbox : public CAknSingleGraphicPopupMenuStyleListBox
+{
+public :
+ /**
+ * Constructor.
+ * @param aIconHandler Pointer to the iconhandler class. Not owned.
+ */
+ CBrowserFavouritesFolderSelectorListbox( const TBrowserFavouritesFolderListboxIconHandler* aIconHandler );
+ /**
+ * This function is called externally when skin is changed.
+ * This reloads the icons when skin change happens.
+ * @param aType Type of the resource change
+ */
+ void HandleResourceChange( TInt aType );
+
+protected:
+ /// Icon handler for the listbox.
+ const TBrowserFavouritesFolderListboxIconHandler* iIconHandler;
+};
+
+/**
+* Folder selector. Contains a popup list to display all folders in a flat list.
+*/
+class CBrowserFavouritesFolderSelector:
+ public CBase
+ {
+ public: // construct / destruct
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aModel Model to be used for reading folder data. Not owned.
+ * @param aApiProvider Api provider. Not owned.
+ * @param aExcludeFolder Folder to be excluded from display.
+ */
+ static CBrowserFavouritesFolderSelector* NewL
+ (
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ TInt aExcludeFolder
+ );
+
+ protected: // construct / destruct
+
+ /**
+ * Constructor.
+ * @param aModel Model to be used for reading folder data. Not owned.
+ * Must remain intact while the dialog exists.
+ * @param aApiProvider Api provider. Not owned.
+ * @param aExcludeFolder Folder to be excluded from display.
+ */
+ CBrowserFavouritesFolderSelector(
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ TInt aExcludeFolder );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesFolderSelector();
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL();
+
+ public: // new methods
+
+ /**
+ * Launch popup folder selector, return the selected folder's Uid then
+ * delete the selector. Must not be on the cleanup stack when called
+ * (this method pushes).
+ * @return Uid of selectd folder (or KFavouritesNullUid).
+ */
+ TInt ExecuteLD();
+
+ private: // new methods
+
+ /**
+ * Get data (items and icon indexes) of folders.
+ */
+ void GetDataL();
+
+ /**
+ * Fill listbox.
+ */
+ void FillListboxL();
+
+ /**
+ * Get folders to be displayed (all except aFolder).
+ * @return List of items. Pushed on the cleanup stack.
+ */
+ CFavouritesItemList* GetItemsLC();
+
+ /**
+ * Return icon indexes to be displayed in a list. Owner is the caller.
+ * The returned list must have exactly as much items as aItems.
+ * @param aItems Item list.
+ * @return Icon index array.
+ */
+ CBrowserFavouritesIconIndexArray* GetIconIndexesLC
+ ( CFavouritesItemList& aItems );
+
+ private: // data
+
+ /// Used for reading folder data. Not owned.
+ CBrowserFavouritesModel* iModel;
+ /// Api provider. Not owned.
+ MApiProvider* iApiProvider;
+ /// Folder to be excluded from display.
+ TInt iExcludeFolder;
+
+ /// Real data for this listbox, array of items. Owned.
+ CFavouritesItemList* iItems;
+ /// Icon indexes for the items. Owned.
+ CBrowserFavouritesIconIndexArray* iIconIndexes;
+ /// Popup list. Owned.
+ CAknPopupList* iPopupList;
+ /// Listbox containing data. Owned.
+ CAknSingleGraphicPopupMenuStyleListBox* iListbox;
+ /// Listbox item array. Owned.
+ CDesCArrayFlat* iListboxItemArray;
+ /// Icon handler for the listbox.
+ const TBrowserFavouritesFolderListboxIconHandler iIconHandler;
+
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesIconIndexArray.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesIconIndexArray and
+* class TWmlBrowserFavouritesIconIndexes.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_ICON_INDEX_ARRAY_H
+#define BROWSER_FAVOURITES_ICON_INDEX_ARRAY_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// CONSTANTS
+
+/// No bearer icon for this item.
+LOCAL_C const TInt KBrowserFavouritesNoBearerIcon = -1;
+
+// CLASS DECLARATION
+
+/**
+* Icon indexes for one listbox item. There are two icons, one in the left
+* (item/folder/homepage/last visited); and a bearer icon on the right.
+* If the WAP AP is not a concrete value, there is no bearer icon.
+*/
+struct TBrowserFavouritesIconIndexes
+ {
+ public: // data
+
+ /**
+ * Item icon index (item/folder/last visited/homepage).
+ */
+ TInt iItemIcon;
+ /**
+ * Bearer icon index; can be KBrowserFavouritesNoBearerIcon.
+ */
+ TInt iBearerIcon;
+ };
+
+/**
+* An array of icon indexes for the listbox.
+*/
+class CBrowserFavouritesIconIndexArray:
+ public CArrayFixFlat<TBrowserFavouritesIconIndexes>
+ {
+ public: // construct / destruct
+
+ /**
+ * Constructor (no code).
+ */
+ inline CBrowserFavouritesIconIndexArray( TInt aGranularity );
+ };
+
+#include "BrowserFavouritesIconIndexArray.inl"
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesIconIndexArray.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserFavouritesIconIndexArray and
+* TWmlBrowserFavouritesIconIndexes.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_ICON_INDEX_ARRAY_INL
+#define BROWSER_FAVOURITES_ICON_INDEX_ARRAY_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIconIndexArray::CBrowserFavouritesIconIndexArray
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIconIndexArray::CBrowserFavouritesIconIndexArray
+( TInt aGranularity )
+: CArrayFixFlat<TBrowserFavouritesIconIndexes>( aGranularity )
+ {
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesIncrementalDelete.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesIncrementalDelete.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_INCREMENTAL_DELETE
+#define BROWSER_FAVOURITES_INCREMENTAL_DELETE
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesIncrementalOp.h"
+
+// CLASS DECLARATION
+
+/**
+* Incremental delete operation. One step deletes one bookmark. Before deleting
+* a folder, its contents are deleted manually one-by-one. (Using DeleteL of
+* Bookmark Engine for a full folder would delete the folder along with its
+* contents in one call. This can be too long if the folder contains many items.
+* Therefore this operation deletes the folder contents manually before deleting
+* the (already emptied) folder, to keep one StepL short.)
+*/
+class CBrowserFavouritesIncrementalDelete:
+ public CBrowserFavouritesIncrementalOp
+ {
+ public: // construct / destruct
+
+ /**
+ * Two phased constructor. Leaves on failure.
+ * @param aModel Data model.
+ * @param aUids Uids to delete. Ownership not taken, must remain
+ * intact during operation.
+ * @param aNotDeletedUids Uids of items which could not be deleted
+ * will be appended to this list. Ownership not taken, must remain
+ * intact during operation.
+ * @param aPriority Active Object priority.
+ * @return The constructed incremental delete operation.
+ */
+ static CBrowserFavouritesIncrementalDelete* NewL
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aNotDeletedUids,
+ TInt aPriority = CActive::EPriorityStandard
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesIncrementalDelete();
+
+ protected: // construct / destruct
+
+ /**
+ * Constructor.
+ * @param aModel Data model.
+ * @param aUids Uids to delete. Ownership not taken, must remain
+ * intact during operation.
+ * @param aNotDeletedUids Uids of items which could not be deleted
+ * will be appended to this list. Ownership not taken, must remain
+ * intact during operation.
+ * @param aPriority Active Object priority.
+ */
+ CBrowserFavouritesIncrementalDelete
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aNotDeletedUids,
+ TInt aPriority
+ );
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL();
+
+ protected: // from WmlBrowserFavouritesIncrementalOp
+
+ /**
+ * Perform next step (delete one item).
+ * @return Number of steps to come (0 if done).
+ */
+ TInt StepL();
+
+ /**
+ * Create and prepare the wait note.
+ */
+ void CreateWaitNoteLC();
+
+ private: // data
+
+ /// Uids to delete. Not owned.
+ CArrayFix<TInt>* iUids;
+ /// Not deleted uids. Not owned.
+ CArrayFix<TInt>* iNotDeletedUids;
+ /// Uids from folder being deleted. Owned.
+ CArrayFix<TInt>* iFolderContents;
+ /// ETrue if deleting folder contents (the folder itself comes next).
+ TBool iFolderPending;
+ /// Index of item being deleted.
+ TInt iIndex;
+
+ };
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesIncrementalMove.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesIncrementalMove.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_INCREMENTAL_MOVE
+#define BROWSER_FAVOURITES_INCREMENTAL_MOVE
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesIncrementalOp.h"
+
+// FORWARD DECLARATION
+
+class CFavouritesItem;
+
+// CLASS DECLARATION
+
+/**
+* Incremental move operation.
+*/
+class CBrowserFavouritesIncrementalMove:
+ public CBrowserFavouritesIncrementalOp
+ {
+ public: // construct / destruct
+
+ /**
+ * Two phased constructor. Leaves on failure.
+ * @param aModel Data model.
+ * @param aUids Uids to move. Ownership not taken, must remain
+ * intact during operation.
+ * @param aUnmovableUids Uids of items which could not be moved (due to
+ * any other reason than name conflict) will be appended to this list.
+ * Ownership not taken, must remain intact during operation.
+ * @param aConflictingNameUids Uids of items which could not be moved
+ * (due to name conflict) will be appended to this list.
+ * Ownership not taken, must remain intact during operation.
+ * @param aPriority Active Object priority.
+ * @param aTargetFolder Uid of the target folder. Nothing is checked.
+ * @return The constructed incremental move operation.
+ */
+ static CBrowserFavouritesIncrementalMove* NewL
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aUnmovableUids,
+ CArrayFix<TInt>& aConflictingNameUids,
+ TInt aTargetFolder,
+ TInt aPriority = CActive::EPriorityStandard
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesIncrementalMove();
+
+ protected: // construct / destruct
+
+ /**
+ * Constructor.
+ * @param aModel Data model.
+ * @param aUids Uids to move. Ownership not taken, must remain
+ * intact during operation.
+ * @param aUnmovableUids Uids of items which could not be moved (due to
+ * any other reason than name conflict) will be appended to this list.
+ * Ownership not taken, must remain intact during operation.
+ * @param aConflictingNameUids Uids of items which could not be moved
+ * (due to name conflict) will be appended to this list.
+ * Ownership not taken, must remain intact during operation.
+ * @param aTargetFolder Uid of the target folder. Nothing is checked.
+ * @param aPriority Active Object priority.
+ */
+ CBrowserFavouritesIncrementalMove
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aUnmovableUids,
+ CArrayFix<TInt>& aConflictingNameUids,
+ TInt aTargetFolder,
+ TInt aPriority = CActive::EPriorityStandard
+ );
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL();
+
+ protected: // from WmlBrowserFavouritesIncrementalOp
+
+ /**
+ * Perform next step (move one item).
+ * @return Number of steps to come (0 if done).
+ */
+ TInt StepL();
+
+ /**
+ * Create and prepare the wait note.
+ */
+ void CreateWaitNoteLC();
+
+ private: // data
+
+ /// Uids to delete. Not owned.
+ CArrayFix<TInt>* iUids;
+ /// Unmovable uids. Not owned.
+ CArrayFix<TInt>* iUnmovableUids;
+ /// Conflicting name uids. Not owned.
+ CArrayFix<TInt>* iConflictingNameUids;
+ /// Target folder Uid.
+ TInt iTargetFolder;
+ /// Favourites item used in database updates. Owned.
+ CFavouritesItem* iItem;
+ /// Index of item being moved.
+ TInt iIndex;
+
+ };
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesIncrementalOp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesIncrementalOp.
+*
+*
+*/
+
+
+#ifndef WML_BROWSER_FAVOURITES_INCREMENTAL_OP
+#define WML_BROWSER_FAVOURITES_INCREMENTAL_OP
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <AknProgressDialog.h>
+
+// FORWARD DECLARATION
+
+class CBrowserFavouritesModel;
+class CAknWaitDialog;
+
+// CLASS DECLARATION
+
+/**
+* Base incremental operation with a wait dialog; an Active Object.
+* Pure virtual.
+*/
+class CBrowserFavouritesIncrementalOp:
+ public CAsyncOneShot, public MProgressDialogCallback
+ {
+ public: // construct / destruct
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesIncrementalOp();
+
+ public: // new methods
+
+ /**
+ * Start the operation and exclude the caller from the Active Scheduler
+ * until done (this method returns when the operation is done).
+ */
+ void ExecuteL();
+
+ protected: // construct / destruct
+
+ /**
+ * Constructor.
+ * @param aPriority Active Object priority.
+ * @param aModel Data model.
+ */
+ CBrowserFavouritesIncrementalOp
+ (
+ CBrowserFavouritesModel& aModel,
+ TInt aPriority = CActive::EPriorityStandard
+ );
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL();
+
+ protected: // new methods
+
+ /**
+ * Perform next step. Derived classes must provide this method.
+ * @return Number of steps to come (0 if done).
+ */
+ virtual TInt StepL() = 0;
+
+ /**
+ * Create and prepare the wait note.
+ */
+ virtual void CreateWaitNoteLC() = 0;
+
+ /**
+ * Called when all steps successfully executed; wait note is finished,
+ * but waiting has not been ended. Not called if cancelled or in case of
+ * any error. After this call ExecuteL returns.
+ * Empty implementation provided.
+ */
+ virtual void DoneL();
+
+ protected: // from CActive
+
+ /**
+ * Perform one step (or quit if finished).
+ */
+ void RunL();
+
+ /**
+ * Cancel protocol implementation.
+ */
+ void DoCancel();
+
+ /**
+ * Error handling: abandon operation.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // from MProgressDialogCallback
+
+ /**
+ * Callback method; gets called when a dialog is dismissed.
+ * (This is where iWait is stopped - we wait for the dialog).
+ * @param aButtonId Button id.
+ */
+ void DialogDismissedL( TInt aButtonId );
+
+ protected: // data
+
+ CBrowserFavouritesModel* iModel; ///< Data model. Not owned.
+ CAknWaitDialog* iWaitNote; ///< Wait note. Owned.
+
+ private: // data
+
+ CActiveSchedulerWait* iWait; ///< Wait object. Owned.
+
+ };
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListbox.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,476 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserFavouritesListbox.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_H
+#define BROWSER_FAVOURITES_LISTBOX_H
+
+// INCLUDES
+#include <aknlists.h>
+#include "BrowserFavouritesSelectionState.h"
+#include "BrowserFaviconHandler.h"
+
+// FORWARD DECLARATIONS
+class CFavouritesItem;
+class CFavouritesItemList;
+class CBrowserFavouritesIconIndexArray;
+class MBrowserFavouritesListboxIconHandler;
+class CBrowserFavouritesListboxModel;
+class MBrowserFavouritesListboxCursorObserver;
+class CBrowserFavouritesListboxState;
+class MApiProvider;
+
+// MACROS
+
+// CLASS DECLARATION
+
+/**
+* Listbox to display and browse bookmarks and folders.
+* Display is sorted: Homepage first, Last Visited next, bookmarks sorted
+* alphabetically, folders come last alphabetically. Markable single-graphics
+* style listbox.
+*/
+struct TBrowserFavouritesListboxDefaultDatas
+ {
+ TInt iPreferedId;
+ TBool iInSeamlessFolder;
+ };
+
+
+/**
+* Listbox to display and browse bookmarks and folders.
+* Display is sorted: Homepage first, Last Visited next, bookmarks sorted
+* alphabetically, folders come last alphabetically. Markable single-graphics
+* style listbox.
+*/
+class CBrowserFavouritesListbox : public CAknSingleGraphicStyleListBox
+ ,public MBrowserFaviconObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aParent Parent control.
+ * @param aIconHandler The icon handler. Not owned.
+ * @return The constructed listbox.
+ */
+ static CBrowserFavouritesListbox* NewL
+ (
+ MApiProvider& aApiProvider,
+ const CCoeControl* aParent,
+ const MBrowserFavouritesListboxIconHandler& aIconHandler
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesListbox();
+
+ public: // new methods
+
+ /**
+ * Set listbox observer.
+ * @param Observer for this listbox.
+ */
+ void SetListboxCursorObserver
+ ( MBrowserFavouritesListboxCursorObserver* aObserver );
+
+ /**
+ * Set new data to listbox.
+ * @param aItems Items to display. Ownership is taken. Should not be on
+ * cleanup stack when calling this (this method will push).
+ * @param aCommsModel to be used when setting bearer icons.
+ * (Ownership not taken.)
+ * @param aKeepState If ETrue, try to keep current state (marks etc.).
+ */
+ void SetDataL
+ (
+ CFavouritesItemList* aItems,
+ TBool aKeepState
+ );
+
+ /**
+ * Get selection state.
+ * @return Selection state.
+ */
+ TBrowserFavouritesSelectionState SelectionStateL() const;
+
+ /**
+ * Get currently highlighted item.
+ * @return Pointer to highlighted object or NULL.
+ */
+ const CFavouritesItem* CurrentItem() const;
+
+ /**
+ * Get currently marked one item (if more is marked, or nothing
+ * is marked, return NULL).
+ * @return Pointer to marked one object or NULL.
+ */
+ const CFavouritesItem* MarkedItemL() const;
+
+ /**
+ * Highlight the item having uid aUid. Does nothing
+ * if no item in the listbox has this uid.
+ * @param aUid Uid of item to highlight.
+ * @return ETrue if the item was found and highlighted; EFalse if not.
+ */
+ TBool HighlightUidNow( TInt aUid );
+
+ /**
+ * Handle markable list command. Does nothing
+ * if listbox is not markable or empty.
+ */
+ void HandleMarkableListCommandL( TInt aCommand );
+
+ /**
+ * Return Uids of marked items.
+ * @return Array of Uids. The array has been placed on the cleanup
+ * stack. The caller must destroy it and pop after no longer needed.
+ */
+ CArrayFix<TInt>* MarkedUidsLC() const;
+
+ /**
+ * Return Uids of selected items. These are the marked ones, if no marks
+ * then the highlighted one.
+ * @return Array of Uids. The array has been placed on the cleanup
+ * stack. The caller must destroy it and pop after no longer needed.
+ */
+ CArrayFix<TInt>* SelectedUidsLC() const;
+
+ /**
+ * Return a list of pointers to selected items. These are the marked
+ * ones, if no marks then the highlighted one.
+ * Note that the items exist within the listbox,
+ * and may be updated! So if you do something with the list which
+ * can be interrupted by some (other) active objects, copy the items
+ * first.
+ * Owner of the items is still the listbox, the owner of the list is
+ * the caller (i.e. you should delete the list, but not ResetAndDestroy
+ * it).
+ * @param aIncludeSpecialItems When ETrue, everything is included. When EFalse,
+ * homepage, last visited and folder types are excluded.
+ * @return Array of pointers to items. Items are owned by the listbox.
+ * The array has been placed on the cleanup stack. The caller must
+ * destroy it and pop after no longer needed.
+ */
+ CArrayPtr<const CFavouritesItem>* SelectedItemsLC(TBool aIncludeSpecialItems=ETrue) const;
+
+ /**
+ * Return a pointer to item having aUid. Note that the item exists
+ * within the listbox, and may be deleted! So if you do something with
+ * it which can be interrupted by some (other) active objects, copy the
+ * item first.
+ * @param aUid Uid of item to look for.
+ * @return Pointer to item (owned by the listbox), having this uid; or
+ * NULL if no such item is found.
+ */
+ const CFavouritesItem* ItemByUid( TInt aUid ) const;
+
+ /**
+ * Return number of items in the listbox, not considering filters.
+ */
+ TInt UnfilteredNumberOfItems();
+
+
+ /**
+ * Return number of filtered items in the listbox
+ */
+ TInt FilteredNumberOfItems();
+
+
+ /**
+ * Update filtering (e.g. item array changed, or filter text changed
+ * from outside).
+ */
+ void UpdateFilterL();
+
+ /**
+ * Query if there is any folder in the listbox.
+ * @return ETrue if there is any folder.
+ */
+ TBool AnyFoldersL();
+
+ /*
+ * Return real indexes of selected items. These are the marked
+ * ones, if no marks then the highlighted one.
+ * @param aIncludeCurrent When ETrue, highlighted item is included, even
+ * if not marked.
+ * @return Array of view indexes. The array has been placed on the
+ * cleanup stack. The caller must destroy it and pop after no longer
+ * needed.
+ */
+ CArrayFix<TInt>* SelectedRealIndexesLC() const;
+
+ /**
+ * Get the real index of current item (index into the model).
+ * @return View index or KErrNotFound if no current item.
+ */
+ TInt CurrentItemRealIndex() const;
+
+ /**
+ * Set highlight / marks / top item index state.
+ * @param aState State to restore from.
+ */
+ void SetStateL( const CBrowserFavouritesListboxState& aState );
+
+
+ public: // Functions from CAknSingleGraphicStyleListBox
+
+ /**
+ * Handle key event.
+ * @param aKeyEvent The key event.
+ * @param aType Key event type.
+ * @return Response (was the key event consumed?).
+ */
+ TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Handle focus change.
+ * @param aDrawNow Draw now?
+ */
+ void FocusChanged( TDrawNow aDrawNow );
+
+ /*
+ * Create listbox model.
+ * @return The model for this listbox.
+ */
+ void CreateModelL();
+
+ /**
+ * Create listbox view.
+ * @return The view for this listbox.
+ */
+ CListBoxView* MakeViewClassInstanceL();
+
+ /**
+ * Create item drawer.
+ */
+ void CreateItemDrawerL();
+
+ void HandleResourceChange( TInt aType );
+
+ public: // from MBrowserFaviconObserver
+ TInt DrawFavicons();
+
+ public: // defualt item access
+ inline TBrowserFavouritesListboxDefaultDatas& GetDefaultData()
+ { return iDefaultDatas; }
+
+ inline CBrowserFaviconHandler* FaviconHandler()
+ { return iFaviconHandler; }
+
+ inline TBool IsSkinUpdated ()
+ { return iSkinUpdated; }
+
+ void SetSkinUpdated(TBool aSkinUpdated);
+
+ /**
+ * Italicizes listbox row at index aRowIndex
+ *
+ * @param aRowIndex - index of row to be italicized
+ */
+ void ItalicizeRowItemL(TInt aRowIndex);
+
+ /**
+ * Updates the favourites icons in the list. Initiates async operation
+ * to fetch and draw icons in background during idle time.
+ */
+ void UpdateFavIconsL();
+
+
+ protected: // Construct / destruct
+
+ /**
+ * Constructor.
+ */
+ CBrowserFavouritesListbox( MApiProvider& aApiProvider );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * @param aParent Parent control.
+ * @param aIconHandler The icon handler. Not owned.
+ */
+ void ConstructL
+ (
+ const CCoeControl* aParent,
+ const MBrowserFavouritesListboxIconHandler& aIconHandler
+ );
+
+ /**
+ * Get listbox flags (markable etc.).
+ * @return listbox flags.
+ */
+ virtual TInt ListboxFlags();
+
+ private: // new methods, getting listbox data
+
+ /**
+ * Return items to be displayed in a list. Owner is the caller.
+ * The returned list must have exactly as much items as aItems.
+ * @param aCommsModel Comms model to be used for getting AP data.
+ * @param aItems Item list.
+ * @return Icon index array.
+ */
+ CBrowserFavouritesIconIndexArray* GetIconIndexesLC
+ ( CFavouritesItemList& aItems );
+
+ /**
+ * Based on existing items and listbox state, calculate the new
+ * state which will be applied if items are replaced with new ones.
+ * @param aNewItems New item list.
+ * @return The new state. Owner is the caller, it must free the
+ * returned state.
+ */
+ void CalcNewStateL( CFavouritesItemList& aNewItems );
+
+ /**
+ * Callback for fetching and drawing favicons
+ */
+ static TInt UpdateFavIconsCallback( TAny* aParam );
+
+
+ private: // new methods: index <--> Uid conversion
+
+ /**
+ * Convert Uid to index.
+ * @param aUid Uid to convert.
+ * @return View index of item having aUid, or KErrNotFound.
+ */
+ TInt UidToViewIndex( TInt aUid ) const;
+
+ /**
+ * Convert Uids to view indexes on the list. If any Uid is not found,
+ * it is removed from the list (list may contain less elements
+ * after calling).
+ * @param aList List of Uids to convert.
+ */
+ void UidsToViewIndexes( CArrayFix<TInt>& aList ) const;
+
+ /**
+ * Convert real indexes to Uids on the list.
+ * @param aList List of indexes to convert.
+ */
+ void RealIndexesToUids( CArrayFix<TInt>& aList ) const;
+
+ /**
+ * Return real indexes of marked items.
+ * @param aIncludeCurrent When ETrue, highlighted item is included, even
+ * if not marked.
+ * @return Array of view indexes. The array has been placed on the
+ * cleanup stack. The caller must destroy it and pop after no longer
+ * needed.
+ */
+ CArrayFix<TInt>* MarkedRealIndexesLC() const;
+
+
+
+ private: // Conversion between uid <--> view index <--> real index.
+
+ // Note: there are two kinds of indexes in the listbox. One set is
+ // what is visible in the view (called View index), and the other
+ // what data is actually stored in the model (called Real index).
+ // When filtering kicks in, the two kind of indexes do not necessarily
+ // match, and a mapping between the two must be established.
+
+
+ /**
+ * Convert view index to real index.
+ * @param aViewlIndex View index (indexing to the visible elements).
+ * @return Real index or KErrNotFound if not found / not visible.
+ */
+ TInt RealIndex( TInt aViewIndex ) const;
+
+ /**
+ * Convert view indexes to real indexes on the list. If any index is
+ * not found / not visible, it is removed from the list (list may
+ * contain less elements after calling).
+ * @param aList List of indexes to convert.
+ */
+ void RealIndexes( CArrayFix<TInt>& aList ) const;
+
+ /**
+ * Get flags for constructing selection state.
+ * @param aItem Extract flags from this item.
+ * @return Flags originating from the item.
+ */
+ TInt SelectionFlags( const CFavouritesItem& aItem ) const;
+
+ /**
+ * Convenience method; return the model.
+ * @return The model.
+ */
+ CBrowserFavouritesListboxModel* TheModel() const;
+
+ protected: // data
+
+ /**
+ * Icon handler (this creates icons and calculates icon indexes).
+ */
+ const MBrowserFavouritesListboxIconHandler* iIconHandler;
+
+ protected: // data
+
+ /**
+ * Real data for this listbox, array of items. Owned.
+ */
+ CFavouritesItemList* iItems;
+
+ /**
+ * Icon indexes for the items. Owned.
+ */
+ CBrowserFavouritesIconIndexArray* iIconIndexes;
+
+ /**
+ * Skin updated status
+ */
+ TBool iSkinUpdated;
+
+ private: // data
+
+ MApiProvider& iApiProvider; // not owned
+
+ /**
+ * Observer for cursor changes.
+ */
+ MBrowserFavouritesListboxCursorObserver* iCursorObserver;
+
+ /**
+ * Placeholder for new listbox state, when listbox content changes.
+ * This should really be a local variable, but it just cannot be done!
+ * because the cleanup stack cannot be managed (can't swap items in
+ * the stack).
+ */
+ CBrowserFavouritesListboxState* iNewState;
+ TBrowserFavouritesListboxDefaultDatas iDefaultDatas;
+ CBrowserFaviconHandler* iFaviconHandler;
+
+ /**
+ * Italicized font for setting listbox rows to italics font.
+ */
+ CFbsFont *iFontItalic;
+
+ CIdle *iIconUpdateCallback;
+
+
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxCursorObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class MWmlBrowserFavouritesListboxCursorObserver.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_CURSOR_OBSERVER_H
+#define BROWSER_FAVOURITES_LISTBOX_CURSOR_OBSERVER_H
+
+// FORWARD DECLARATION
+
+class CEikListBox;
+
+// CLASS DECLARATION
+
+/**
+* Observer class for CBrowserFavouritesListbox. Classes implementing
+* this protocol will be notified about cursor changes.
+*/
+class MBrowserFavouritesListboxCursorObserver
+ {
+ public: // new methods
+
+ /**
+ * Handle cursor change.
+ * @param aListBox Listbox in which the cursor has changed.
+ */
+ virtual void HandleCursorChangedL( CEikListBox* aListBox ) = 0;
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxIconHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class MWmlBrowserFavouritesListboxIconHandler.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_ICON_HANDLER_H
+#define BROWSER_FAVOURITES_LISTBOX_ICON_HANDLER_H
+
+// INCLUDE FILES
+
+#include <e32def.h>
+// #include <AknIconArray.h>
+
+// FORWARD DECLARATION
+
+class CAknIconArray;
+class CFavouritesItem;
+class CBrowserFavouritesListbox;
+class CApListItemList;
+class TFavouritesWapAp;
+struct TBrowserFavouritesIconIndexes;
+
+// CLASS DECLARATION
+
+/**
+* Icon handling in the WML Browser's Favourites Views listboxes.
+* The problem with listbox icons is that iconarray is held by the listbox's
+* itemdrawer, while their indexes are used in the model; and there is no safe
+* way to enforce that the indexes used are really exist. So this class was
+* introduced to make it safe: an instance is given to the listbox upon
+* creation; the listbox uses the factory to create the iconarray for the
+* itemdrawer, and setting icon indexes for items. This way, creating the
+* iconarray and indexing to it is in the same class.
+* Pure virtual.
+*/
+
+class MBrowserFavouritesListboxIconHandler
+ {
+ public: // new methods
+
+ /**
+ * Create the iconarray. Derived classes please don't forget that the
+ * 0th icon must be the markable listbox's mark icon.
+ * @return The created iconarray. Owner is the caller.
+ */
+ CAknIconArray* CreateIconArrayL() const;
+
+ /**
+ * Get the icon indexes for this item (index into the array).
+ * @param aItem Item to get icon indexes for.
+ * @param aAccessPoints Access Points to use (if bearer info is needed).
+ * May be NULL.
+ * @return Icon indexes for the item.
+ */
+ TBrowserFavouritesIconIndexes IconIndexes
+ (
+ const CFavouritesItem& aItem,
+ /* const CApListItemList* aAccessPoints,*/
+ CBrowserFavouritesListbox* aListbox
+ ) const;
+
+ protected: // new methods
+
+ /**
+ * Get item icon index for this item (index into the array).
+ * Derived classes must implement this method.
+ * @param aItem Item to get icon index for.
+ * @return Icon index for the item.
+ */
+ virtual TInt ItemIconIndex( const CFavouritesItem& aItem ,CBrowserFavouritesListbox* aListbox ) const = 0;
+
+ /**
+ * Get bearer icon index for this access point (index into the array).
+ * Derived classes may override this method; current
+ * implementation returns KBrowserFavouritesNoBearerIcon.
+ * @param aAccessPoint Access Points to get bearer icon for.
+ * @param aAccessPoints Access Points to use.
+ * @return Icon index for the access point.
+ */
+ virtual TInt BearerIconIndex
+ (
+ const TFavouritesWapAp aAccessPoint,
+ const CApListItemList& aAccessPoints
+ ) const;
+
+ /**
+ * Dynamically load Icon from files (AVKON skin supported)
+ * @return pointer to the created icon array
+ */
+ virtual CAknIconArray* LoadIconsL( ) const = 0;
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxItemDrawer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesListboxItemDrawer.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_ITEM_DRAWER_H
+#define BROWSER_FAVOURITES_LISTBOX_ITEM_DRAWER_H
+
+// INCLUDES
+
+#include <eikclb.h>
+
+// CLASS DECLARATION
+
+/**
+* Custom item drawer, to support the "no-folders-marked" feature.
+*/
+class CBrowserFavouritesListboxItemDrawer: public CColumnListBoxItemDrawer
+ {
+ public: // construction
+
+ /**
+ * Constructor.
+ * @param aTextListBoxModel Listbox model.
+ * @param aFont Font.
+ * @param aColumnData Listbox column data.
+ */
+ CBrowserFavouritesListboxItemDrawer
+ (
+ MTextListBoxModel* aTextListBoxModel,
+ const CFont* aFont,
+ CColumnListBoxData* aColumnData
+ );
+
+ public: // from CColumnListBoxItemDrawer
+
+ /**
+ * Get item properties for a listbox item. Same as base class behaviour,
+ * but marking is masked out for folders.
+ * @param aItemIndex Index of listbox item to get properties of.
+ * @return Properties of listbox item.
+ */
+ TListItemProperties Properties( TInt aItemIndex ) const;
+
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxModel.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserFavouritesListboxModel.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_MODEL_H
+#define BROWSER_FAVOURITES_LISTBOX_MODEL_H
+
+// INCLUDE FILES
+// #include <e32base.h>
+// #include <eiktxlbm.h>
+#include <calslbs.h>
+#include "Browser.hrh"
+
+// CONSTANTS
+
+/**
+* Buffer size for formatting listbox text. Maximum item name
+* plus listbox internals (tabulators for icons etc.) must fit into it.
+* The format is "<icon index max 3 char>\t<name>\t<mark 1 char>\t",
+* so the added length is 7.
+*/
+const TInt KMaxFavouritesItemListboxName =
+ KFavouritesMaxBookmarkNameDefine + 7;
+
+// FORWARD DECLARATION
+
+class CFavouritesItemList;
+class CBrowserFavouritesListboxModel;
+class CBrowserFavouritesIconIndexArray;
+// class CAknListBoxFilterItems;
+// class CAknSearchField;
+// class CEikListBox;
+
+// CLASS DECLARATION
+
+/**
+* Item text array for the favourites view listbox; converts item data
+* to format what the listbox needs. (This means the returned text includes
+* listbox internals (tabulators, icon numbers).
+*/
+class TBrowserFavouritesListboxItemTextArray: public MDesCArray
+ {
+ public: // from MDesCArray
+
+ /**
+ * Get number of items in the array.
+ * @return Number of items.
+ */
+ TInt MdcaCount() const;
+
+ /**
+ * Text to be displayed for this item.
+ * @param aIndex Index of item.
+ * @return TPtrC for this item text.
+ */
+ TPtrC MdcaPoint( TInt aIndex ) const;
+
+ /**
+ * The model uses this class.
+ */
+ friend class CBrowserFavouritesListboxModel;
+
+ private: // data
+
+ /**
+ * Pointer to real data. Not owned.
+ */
+ const CFavouritesItemList* iItems;
+
+ /**
+ * Icon indexes. Not owned.
+ */
+ const CBrowserFavouritesIconIndexArray* iIconIndexes;
+
+ /**
+ * MdcaPoint() cannot leave, so this buffer is allocated
+ * to allow formatting. Fortunately, doesn't have to be very
+ * large.
+ * We have to use MUTABLE CAST, as MdcaPoint is const (odd enough),
+ * so wouldn't allow formatting the text in a member...
+ */
+ __MUTABLE TBuf<KMaxFavouritesItemListboxName> iBuf;
+ };
+
+/**
+* Item text array for the favourites view listbox filtering; converts item data
+* to format what the filter needs. (This means the returned text is what the
+* user sees, and does not include listbox internals (tabulators, icon numbers).
+*/
+class TBrowserFavouritesListboxFilterTextArray: public MDesCArray
+ {
+ public: // from MDesCArray
+
+ /**
+ * Get number of items in the array.
+ * @return Number of items.
+ */
+ TInt MdcaCount() const;
+
+ /**
+ * Text to be displayed for this item.
+ * @param aIndex Index of item.
+ * @return TPtrC for this item text.
+ */
+ TPtrC MdcaPoint( TInt aIndex ) const;
+
+ /**
+ * The model uses this class.
+ */
+ friend class CBrowserFavouritesListboxModel;
+
+ private: // data
+
+ /**
+ * Pointer to real data. Not owned.
+ */
+ const CFavouritesItemList* iItems;
+
+ };
+
+/**
+* Model for the bookmark item listbox. Contains an array of
+* CBrowserFavouritesItem pointers; items are owned.
+*/
+class CBrowserFavouritesListboxModel: public CAknFilteredTextListBoxModel
+ {
+ public: // Construct / destruct
+
+ /**
+ * Two-phase constructor. Leaves on failure.
+ * The two arrays passed must have the same number of items.
+ * @param aItems Itemarray; not owned.
+ * @param aIconIndexes Icon index array, not owned.
+ */
+ static CBrowserFavouritesListboxModel* NewL
+ (
+ const CFavouritesItemList& aItems,
+ const CBrowserFavouritesIconIndexArray& aIconIndexes
+ );
+
+ /**
+ * Overcoming base class bugs. Need to set itemarray after the whole
+ * listbox has been constructed; as the listbox construction
+ * overwrites itemarray to NULL. To be called as part of the
+ * construction ("third phase constructor"), AFTER the listbox's
+ * ConstructL.
+ */
+ void SetItemArray();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesListboxModel();
+
+ public: // new methods
+
+ /**
+ * Set new data into the model.
+ * The two arrays passed must have the same number of items.
+ * @param aItems Itemarray; not owned.
+ * @param aIconIndexes Icon index array, not owned.
+ */
+ void SetData
+ (
+ const CFavouritesItemList& aItems,
+ const CBrowserFavouritesIconIndexArray& aIconIndexes
+ );
+
+ /**
+ * Returns pointer to item list.
+ * @return Pointer to item list.
+ */
+ inline const CFavouritesItemList* Items() const;
+
+ public: // from CTextListBoxModel
+
+ /**
+ * Get matchable text array (for filtering).
+ * @return The matchable text array.
+ */
+ const MDesCArray* MatchableTextArray() const;
+
+ protected: // Construct / destruct
+
+ /**
+ * Constructor.
+ * The two arrays passed must have the same number of items.
+ * @param aItems Itemarray; not owned.
+ * @param aIconIndexes Icon index array, not owned.
+ */
+ CBrowserFavouritesListboxModel
+ (
+ const CFavouritesItemList& aItems,
+ const CBrowserFavouritesIconIndexArray& aIconIndexes
+ );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ private: // data
+
+ /**
+ * The item array (real data, array of CFavouritesItem-s). Not owned.
+ */
+ const CFavouritesItemList* iItems;
+
+ /**
+ * Icon indexes. Not owned.
+ */
+ const CBrowserFavouritesIconIndexArray* iIconIndexes;
+
+ /**
+ * The item text array (formatting for listbox).
+ */
+ TBrowserFavouritesListboxItemTextArray iItemTexts;
+
+ /**
+ * The filter text array (formatting for filtering).
+ */
+ TBrowserFavouritesListboxFilterTextArray iFilterTexts;
+
+ };
+
+#include "BrowserFavouritesListboxModel.inl"
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxModel.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserFavouritesListboxModel
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_MODEL_INL
+#define BROWSER_FAVOURITES_LISTBOX_MODEL_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::Items
+// ---------------------------------------------------------
+//
+const CFavouritesItemList* CBrowserFavouritesListboxModel::Items() const
+ {
+ return iItems;
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxState.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesListboxState.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_STATE_H
+#define BROWSER_FAVOURITES_LISTBOX_STATE_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* Listbox state. This contains highlighted item Uid, marked item Uids
+* and top item Uid. When swithching views or there is a database update,
+* the listbox state is saved, and after update an attempt is made to
+* restore the listbox in a way so the display is same (or at least similar to)
+* as it was before the change.
+* Data to this class is fed by CBrowserFavouritesListbox.
+* All attributes are public.
+*/
+class CBrowserFavouritesListboxState: public CBase
+ {
+ friend class CBrowserFavouritesListbox;
+ friend class CBrowserFavouritesView;
+ public: // construct / destruct
+
+ /**
+ * Constructor.
+ */
+ CBrowserFavouritesListboxState();
+
+ /**
+ * Destructor.
+
+ */
+ ~CBrowserFavouritesListboxState();
+
+ protected: // data
+
+ TInt iHighlightUid; ///< Uid of highlighted item.
+ CArrayFix<TInt>* iMarkUids; ///< Uids of marked items.
+ TInt iTopItemUid; ///< Uid of top item.
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesListboxView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesListboxView.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_LISTBOX_VIEW_H
+#define BROWSER_FAVOURITES_LISTBOX_VIEW_H
+
+// INCLUDE FILES
+#include <aknlists.h>
+
+// FORWARD DECLARATION
+
+class MBrowserFavouritesListboxCursorObserver;
+
+// CLASS DECLARATION
+
+/**
+* Listbox view, which notifies its observer about cursor movements.
+*/
+class CBrowserFavouritesListboxView: public CAknColumnListBoxView
+ {
+ public:
+
+ /**
+ * Constructor.
+ * @param aListbox Listbox which has this view.
+ */
+ CBrowserFavouritesListboxView( CEikListBox& aListbox );
+
+ public: // new methods.
+
+ /**
+ * Set cursor observer. Can be set to NULL.
+ * @param aCursorObserver This observer (if any) will be
+ * notified about cursor changes.
+ */
+ void SetCursorObserver
+ ( MBrowserFavouritesListboxCursorObserver* aCursorObserver );
+
+ /**
+ * Move the cursor. Execute base class's method and notify observer.
+ * @param aCursorMovement Movement occurred in the listbox.
+ * @param aSelectionMode Selection mode.
+ */
+ void MoveCursorL( CListBoxView::TCursorMovement aCursorMovement,
+ TSelectionMode aSelectionMode );
+
+ /**
+ * Select / highlight items witout moving the cursor.
+ * @param aSelectionMode Selection mode.
+ */
+ void UpdateSelectionL( TSelectionMode aSelectionMode );
+
+ private: // data
+
+ /// The listbox.
+ CEikListBox* iListbox;
+ /// The cursor movement observer. Can be NULL.
+ MBrowserFavouritesListboxCursorObserver* iCursorObserver;
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesModel.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,445 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserFavouritesModel.
+*
+*
+*/
+
+#ifndef BROWSER_FAVOURITES_MODEL_H
+#define BROWSER_FAVOURITES_MODEL_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <favouritesdbobserver.h>
+#include "BrowserBookmarksOrder.h"
+#include <favouritesdb.h>
+#include <favouritesfile.h>
+#include "ApiProvider.h"
+
+// FORWARD DECLARATION
+
+class CFavouritesItemList;
+class CActiveFavouritesDbNotifier;
+class MBrowserFavouritesModelObserver;
+class CFavouritesItem;
+
+// CLASS DECLARATION
+
+/**
+* Model for the Favourites Views of the WML Browser.
+* This is a layer above the actual engines that do the data manipulation;
+* and provides UI support for that (i.e. dialogs, notes etc.)
+* Pure virtual.
+*/
+class CBrowserFavouritesModel: public CBase, public MFavouritesDbObserver
+ {
+
+ public: // types
+
+ /**
+ * Answer for database queries.
+ */
+ enum TDbQuery
+ {
+ EYes, ///< Answer to query is yes.
+ ENo, ///< Answer to query is no.
+ EError ///< Could not get answer (i.e. database is busy etc.).
+ };
+
+ /**
+ * Rename mode for adding / updating items (what to do if an item
+ * to be added / updated in the database has a conflicting name).
+ */
+ enum TRenameMode
+ {
+ EAutoRename, ///< Rename silently.
+ EDontRename, ///< Do not rename (quit operation).
+ EAskIfRename ///< Ask user.
+ };
+
+ public: // construction
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesModel();
+
+ public: // string resources
+
+ /**
+ * Resource selector type for strings.
+ */
+ enum TTextResourceType
+ {
+ EDefaultName, ///< Default name (e.g. "New Bookmark").
+ ERenamePrompt, ///< Rename prompt (e.g. "New Folder:").
+ ENewPrompt, ///< New prompt (e.g. "Folder name:").
+ ESaved, ///< Saved note (e.g. "Bookmark saved").
+ ENotSaved ///< Not saved note (e.g. "Bookmark not saved").
+ };
+
+ /**
+ * Get resource id of some text for an item.
+ * @param aItem The item to get resource id for.
+ * @param aType Type of resource text.
+ * @return Resource id of the text.
+ */
+ virtual TInt StringResourceId
+ (
+ const CFavouritesItem& aItem,
+ TTextResourceType aType
+ ) const = 0;
+
+ /**
+ * Set the name of this item to default (e.g. "New Bookmark",
+ * "New Folder" etc.). The name that is set is read from resource,
+ * the resource id is StringResourceId( EDefaultName ).
+ * @param aItem The item to set default name for.
+ */
+ void SetNameToDefaultL( CFavouritesItem& aItem ) const;
+
+ public: // database opening / closing / access
+
+ /**
+ * Open the database.
+ * After succesful open, notifications to observer may come.
+ * Safe to call if already open.
+ * @param aDbErrorNote If ETrue, unsuccesful open will bring up an
+ * error note.
+ * @return Error code.
+ */
+ TInt OpenDbL( TBool aDbErrorNote = ETrue );
+
+ /**
+ * Close the database. No further notification may come to the
+ * observer.
+ */
+ void CloseDb();
+
+ /**
+ * Start a transaction.
+ * @param aWrite If ETrue, the table is opened with write-lock on.
+ * @param aDbErrorNote If ETrue, unsuccesful open will bring up an
+ * error note.
+ * @param aLffsCheck If ETrue (the default), free disk space is
+ * checked to be above critical level (only if aWrite==ETrue).
+ * Always use the default (except for deleting)!
+ * @return Error code.
+ */
+ TInt BeginL
+ ( TBool aWrite, TBool aDbErrorNote, TBool aLffsCheck = ETrue);
+
+ /**
+ * Commit the transaction.
+ * Safe to call if not open.
+ */
+ void CommitL();
+
+ /**
+ * Add an observer.
+ * @param aObserver Observer to be notified about database-related
+ * events.
+ */
+ void AddObserverL( MBrowserFavouritesModelObserver& aObserver );
+
+ /**
+ * Remove an observer. Panic if not added.
+ * @param aObserver The observer.
+ */
+ void RemoveObserver( MBrowserFavouritesModelObserver& aObserver );
+
+ /**
+ * Get the database.
+ * @return The actual database.
+ */
+ inline RFavouritesDb Database() const;
+
+ /**
+ * Opens an item associated with aUid in aFavFile.
+ * @return Error code.
+ */
+
+ TInt OpenFavouritesFile ( RFavouritesFile & aFavFile, TInt aUid );
+
+ /**
+ * Opens an item associated with aUid in aFavFile for replacement.
+ * @return Error code.
+ */
+
+ TInt ReplaceFavouritesFile ( RFavouritesFile & aFavFile, TInt aUid );
+
+
+ public: // database query / update
+
+ /**
+ * Add an item (folder or bookmark) to the database.
+ * @param aItem Item to add.
+ * @param aDbErrorNote If ETrue, unsuccesful database open will bring up an
+ * error note.
+ * @param aRenameMode What to do in case of the name is conflicting.
+ * @return Error code.
+ */
+ TInt AddL
+ (
+ CFavouritesItem& aItem,
+ TBool aDbErrorNote,
+ TRenameMode aRenameMode
+ );
+
+ /**
+ * Update an item (folder or bookmark) in the database.
+ * @param aItem Item data.
+ * @param aUid Uid of item to be updated.
+ * @param aDbErrorNote If ETrue, unsuccesful database open will bring up
+ * an error note.
+ * @param aRenameMode What to do in case of the name is conflicting.
+ * @return Error code.
+ */
+ TInt UpdateL
+ (
+ CFavouritesItem& aItem,
+ TInt aUid,
+ TBool aDbErrorNote,
+ TRenameMode aRenameMode
+ );
+
+ /**
+ * Set Homepage.
+ * @param aItem Item containing Homepage data.
+ * @param aDbErrorNote If ETrue, unsuccesful database open will bring up an
+ * error note.
+ * @param aRenameMode What to do in case of the name is conflicting.
+ * @return Error code.
+ */
+ TInt SetHomepageL
+ (
+ CFavouritesItem& aItem,
+ TBool aDbErrorNote,
+ TRenameMode aRenameMode
+ );
+
+ /**
+ * Set Last Visited Page.
+ * @param aItem Item containing Homepage data.
+ * @param aDbErrorNote If ETrue, unsuccesful database open will bring up
+ * an error note.
+ * @param aRenameMode What to do in case of the name is conflicting.
+ * @return Error code.
+ */
+ TInt SetLastVisitedL
+ (
+ CFavouritesItem& aItem,
+ TBool aDbErrorNote,
+ TRenameMode aRenameMode
+ );
+
+ /**
+ * Check if there are any folders (except the root).
+ * @return EYes, ENo or EError (if could not access the database).
+ */
+ TDbQuery AnyFoldersL();
+
+ /**
+ * Check if the given list of uids contains
+ * any folders that are not empty.
+ * @param aUids List of Uids to check.
+ * @return EYes if there are non-empty folder(s), ENo if not,
+ * EError if could not access the database.
+ */
+ TDbQuery AnyNonEmptyFoldersL( CArrayFix<TInt>& aUids );
+
+ /**
+ * Get the ordinal number of this folder in the alphabetically sorted
+ * list of folders. Expects a transaction.
+ * @param aFolder The folder to find.
+ * @param aFolderCount On successful return, this will be set to the
+ * number of folders.
+ * @param On successful return, this will be set to the ordinal number
+ * of the given folder.
+ * @return Error code.
+ */
+ TInt FolderInfoL
+ ( TInt aFolder, TInt& aFolderCount, TInt& aFolderIndex );
+
+ /**
+ * In the alphabetically sorted list of folders, get Uid of folder next
+ * to aFolder. Expects a transaction.
+ * @param aFolder Folder to start from.
+ * @param aForward If ETrue, get next; if EFalse, get previous.
+ * @return Uid of the next folder or KFavouritesNullUid in case of any
+ * error.
+ */
+ TInt NextFolderL( TInt aFolder, TBool aForward );
+
+ /**
+ * Display a query for renaming this item. If the query is accepted,
+ * the item is renamed.
+ * @param aItem The item to rename.
+ * @param aItem New item, we do not rename.
+ * @return ETrue if the query is accepted and the item is renamed.
+ */
+ TBool RenameQueryL( CFavouritesItem& aItem, TBool aNewItem );
+
+ /**
+ * Sort items in a list.
+ * @param aList List to sort.
+ */
+ void SortL( CFavouritesItemList& aList );
+
+ public: // convenience methods
+
+ /**
+ * Check if aItem has a unique name (in its parent folder), and if
+ * not, make its name unique.
+ * @param aItem Item to set a unique name for.
+ * @return Error code.
+ */
+ TInt MakeUniqueNameL( CFavouritesItem& aItem );
+
+ protected: // new functions
+
+ //MApiProvider& ApiProvider() const;
+
+ public: // from MFavouritesDbObserver
+
+ /**
+ * Handle database event.
+ * @param aEvent Database event.
+ */
+ void HandleFavouritesDbEventL( RDbNotifier::TEvent aEvent );
+
+ void ManualSortL(TInt aFolder, CBrowserBookmarksOrder* aBMOrder, CArrayFixFlat<TInt>* aOrderArray, CFavouritesItemList* aItems);
+
+ /**
+ * Adds the given uid to the last place in bookmarks list
+ * @param aUid The uid to add
+ * @param aOrderArray the array that stores uids in manual order
+ * @param aCurrentOrder the object that stores manual sorting data
+ */
+
+ void AddUidToLastPlaceL( TInt aUid , CArrayFixFlat<TInt>* aOrderArray, CBrowserBookmarksOrder* aCurrentOrder);
+
+ protected : // construction
+
+ /**
+ * Constructor.
+ */
+ CBrowserFavouritesModel( MApiProvider& aApiProvider );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ /**
+ * Returns with the underlying database's name.
+ * Derived classes must provide this method.
+ * @return The Database Engine's name.
+ */
+ virtual const TDesC& GetDBName();
+
+ private: // implementation details
+
+ /**
+ * Open the database. If unsuccesful, retry two more times in
+ * 0.2 secs interval.
+ * @return Error code.
+ */
+ TInt TimedOpenDbL();
+
+ /**
+ * Start a transaction. If unsuccesful, retry two more times in
+ * 0.2 secs interval.
+ * @param aWrite If ETrue, the table is opened with write-lock on.
+ * @return Error code.
+ */
+ TInt TimedBeginL( TBool aWrite );
+
+ /**
+ * Add/update an item (folder or item) in the database; factoring out
+ * the common code.
+ * @param aItem Item data.
+ * @param aUid
+ * - When KFavouritesNullUid, the item is added.
+ * - Otherwise, Uid of the item to be updated.
+ * @param aDbErrorNote If ETrue, unsuccesful database open will bring up
+ * an error note.
+ * @param aRenameMode What to do in case of the name is conflicting.
+ * @return Error code.
+ */
+ TInt AddUpdateL
+ (
+ CFavouritesItem& aItem,
+ TInt aUid,
+ TBool aDbErrorNote,
+ TRenameMode aRenameMode
+ );
+
+ /**
+ * Compare two descriptors (case insensitive).
+ * @since 3.2
+ * @param aFirst first descriptor
+ * @param aSecond second descriptor
+ * @return ETrue if strings match, EFalse otherwise
+ */
+ TBool CompareIgnoreCase( const TDesC& aFirst, const TDesC& aSecond );
+
+
+ protected:
+ /**
+ * Get all folders in the root, sorted, and push it on the cleanup
+ * stack. No sanity check. Expects a transaction.
+ * @return List of folders. Owner is the caller.
+ */
+ virtual CFavouritesItemList* GetFoldersSortedLC();
+
+ private: // observer support
+
+ /**
+ * Call each observer's HandleFavouritesModelChangeL().
+ */
+ void NotifyObserversL();
+
+ private: // types
+
+ enum TState ///< Database state.
+ {
+ EClosed, ///< Database is closed.
+ EOpen, ///< Database is open.
+ ECorrupt ///< Database is corrupted (and is closed)
+ };
+
+ private: // data
+
+ /// Used database object. Owned.
+
+ RFavouritesDb iDb;
+ RFavouritesSession iFavouritesSess;
+ /// Notifier object. Owned.
+ CActiveFavouritesDbNotifier* iNotifier;
+ /// Observers. Array owned, contents not.
+ CArrayPtrFlat<MBrowserFavouritesModelObserver>* iObservers;
+ /// Database state.
+ TState iState;
+
+ MApiProvider& iApiProvider;
+ };
+
+#include "BrowserFavouritesModel.inl"
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesModel.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserFavouritesModel
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_MODEL_INL
+#define BROWSER_FAVOURITES_MODEL_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::Database
+// ---------------------------------------------------------
+//
+RFavouritesDb CBrowserFavouritesModel::Database() const
+ {
+ return iDb;
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesModelObserver.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesModelObserver.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_MODEL_OBSERVER_H
+#define BROWSER_FAVOURITES_MODEL_OBSERVER_H
+
+// CLASS DECLARATION
+
+/**
+* Mixin protocol, observing model changes of a CBrowserFavouritesModel.
+*/
+class MBrowserFavouritesModelObserver
+ {
+
+ public: // new methods
+
+ /**
+ * Derived classes should implement this method, and act accordingly.
+ */
+ virtual void HandleFavouritesModelChangeL() = 0;
+
+ };
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesSelectionState.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CWmlBrowserFavouritesSelectionState.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_SELECTION_STATE_H
+#define BROWSER_FAVOURITES_SELECTION_STATE_H
+
+// INCLUDES
+
+#include <e32def.h>
+
+// CLASS DECLARATION
+
+/**
+* Selection state in the Favourites Views.
+*/
+struct TBrowserFavouritesSelectionState
+ {
+ public: // types
+
+ /**
+ * Flags for storing listbox highlighted and marked item state. They
+ * have has slightly different meaning for the two flags. For marking,
+ * most of the flags mean that the marking *includes* that; for the
+ * current, most of the flags mean that the current *is* that.
+ * For example, EHomepage in the marking flags means "Marking includes
+ * Homepage", while in current flag means "Current is the Homepage".
+ */
+ enum
+ {
+ ENone = 0x0, ///< No items.
+ EAny = 0x1, ///< At least one (marking only).
+ EAll = 0x2, ///< All (marking only).
+ ECurrent = 0x4, ///< Current (marking only).
+ EHomepage = 0x8, ///< Homepage.
+ EStartPage = 0x10, ///< Start Page.
+ ELastVisited = 0x20, ///< Last Visited Page.
+ EItem = 0x40, ///< Any kind of item (incl. specials).
+ EPlainItem = 0x80, ///< Plain (non-special) item.
+ EFolder = 0x100 ///< Folder.
+ };
+
+ public: // constructor
+
+ /**
+ * Constructor. Initialize with 0.
+ */
+ inline TBrowserFavouritesSelectionState();
+
+ public: // new methods
+
+ /**
+ * Return ETrue if listbox is empty.
+ * @return ETrue if listbox is empty.
+ */
+ inline TBool IsEmpty() const;
+
+ /**
+ * Return ETrue if any item is marked.
+ * @return ETrue if any item is marked.
+ */
+ inline TBool AnyMarked() const;
+
+ /**
+ * Return ETrue if the current item is marked.
+ * @return ETrue if the current item is marked.
+ */
+ inline TBool CurrentIsMarked() const;
+
+ /**
+ * Return ETrue if the all items are marked.
+ * @return ETrue if the all items are marked.
+ */
+ inline TBool AllIsMarked() const;
+
+ /**
+ * Return ETrue if the no items are marked.
+ * @return ETrue if the no items are marked.
+ */
+ inline TBool NoneIsMarked() const;
+
+ /**
+ * Return ETrue if the no items are marked.
+ * @return ETrue if the no items are marked.
+ */
+ inline TBool NoItemsMarked() const;
+
+ /**
+ * Return ETrue if the no folders are marked.
+ * @return ETrue if the no folders are marked.
+ */
+ inline TBool NoFoldersMarked() const;
+
+ /**
+ * Count marked items (items + folders).
+ * @return Count of marked items (items + folders).
+ */
+ inline TInt MarkedCount() const;
+
+ /**
+ * Return ETrue if the current item is item.
+ * @return ETrue if the current item is item.
+ */
+ inline TBool CurrentIsItem() const;
+
+ /**
+ * Return ETrue if the current item is folder.
+ * @return ETrue if the current item is folder.
+ */
+ inline TBool CurrentIsFolder() const;
+
+ /**
+ * Return ETrue if selection allows deleting:
+ * - Marked items contain something deletable, or
+ * - No marking, highlighted item is deletable.
+ * @return ETrue if selection allows deleting.
+ */
+ inline TBool AnyDeletable() const;
+
+ /**
+ * Return ETrue if selection contains at least one non-special item:
+ * - Marked items contain one non-special item, or
+ * - No marking, highlighted item is non-special item.
+ * @return ETrue if selection allows deleting.
+ */
+ inline TBool AnyPlainItem() const;
+
+ /**
+ * Return ETrue if current item is Homepage, Start Page or Last Visited.
+ * @return ETrue if current is Homepage, Start Page or Last Visited.
+ */
+ inline TBool CurrentIsSpecial() const;
+
+ /**
+ * Return ETrue if Homepage, Start Page and/or Last Visited is marked.
+ * @return ETrue if Homepage, Start Page and/or Last Visited is marked.
+ */
+ inline TBool AnyMarkedSpecial() const;
+
+ /**
+ * Return ETrue if the current item is start page.
+ * @return ETrue if the current item is start page.
+ */
+ inline TBool CurrentIsStartPage() const;
+
+ public: // data
+
+ TInt iCurrentFlags; ///< Flags showing the highlighted one.
+ TInt iMarkFlags; ///< Flags showing marking state.
+ TInt iMarkedItemCount; ///< Count of marked items.
+ TInt iMarkedFolderCount; ///< Count of marked folders.
+ TInt iVisibleItemCount; ///< Count of visible items (not folders).
+ TInt iVisibleFolderCount; ///< Count of visible folders (not items).
+ };
+
+#include "BrowserFavouritesSelectionState.inl"
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesSelectionState.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CWmlBrowserFavouritesSelectionState.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_SELECTION_STATE_INL
+#define BROWSER_FAVOURITES_SELECTION_STATE_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::TBrowserFavouritesSelectionState
+// ---------------------------------------------------------
+//
+TBrowserFavouritesSelectionState::TBrowserFavouritesSelectionState()
+ {
+ iCurrentFlags = 0;
+ iMarkFlags = 0;
+ iMarkedItemCount = 0;
+ iMarkedFolderCount = 0;
+ iVisibleItemCount = 0;
+ iVisibleFolderCount = 0;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::IsEmpty
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::IsEmpty() const
+ {
+ return !(iCurrentFlags & EAny);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::AnyMarked
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::AnyMarked() const
+ {
+ return iMarkFlags & EAny;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::CurrentIsMarked
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::CurrentIsMarked() const
+ {
+ return iMarkFlags & ECurrent;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::AllIsMarked
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::AllIsMarked() const
+ {
+ return iMarkFlags & EAll;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::NoneIsMarked
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::NoneIsMarked() const
+ {
+ return !AnyMarked();
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::NoItemsMarked
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::NoItemsMarked() const
+ {
+ return !(iMarkFlags & EItem);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::NoFoldersMarked
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::NoFoldersMarked() const
+ {
+ return !(iMarkFlags & EFolder);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::MarkedCount
+// ---------------------------------------------------------
+//
+TInt TBrowserFavouritesSelectionState::MarkedCount() const
+ {
+ return iMarkedItemCount + iMarkedFolderCount;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::CurrentIsItem
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::CurrentIsItem() const
+ {
+ return iCurrentFlags & EItem;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::CurrentIsFolder
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::CurrentIsFolder() const
+ {
+ return iCurrentFlags & EFolder;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::AnyDeletable
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::AnyDeletable() const
+ {
+ return (EPlainItem | EFolder | ELastVisited) &
+ (AnyMarked() ? iMarkFlags : iCurrentFlags);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::AnyPlainItem
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::AnyPlainItem() const
+ {
+ return EPlainItem & (AnyMarked() ? iMarkFlags : iCurrentFlags);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::CurrentIsSpecial
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::CurrentIsSpecial() const
+ {
+ return iCurrentFlags & (EHomepage | EStartPage | ELastVisited);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::AnyMarkedSpecial
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::AnyMarkedSpecial() const
+ {
+ return iMarkFlags & (EHomepage | EStartPage | ELastVisited);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesSelectionState::CurrentIsStartPage
+// ---------------------------------------------------------
+//
+TBool TBrowserFavouritesSelectionState::CurrentIsStartPage() const
+ {
+ return iCurrentFlags & EStartPage;
+ }
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,579 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class CBrowserFavouritesView.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_VIEW_H
+#define BROWSER_FAVOURITES_VIEW_H
+
+// INCLUDE FILES
+#include <eiklbo.h>
+
+#include "BrowserFavouritesModelObserver.h"
+#include "BrowserAppViewBase.h"
+#include "CommandVisibility.h"
+#include "CommsModel.h"
+#include "BrowserFavouritesModel.h"
+#include <favouriteslimits.h>
+
+// FORWARD DECLARATION
+class CFavouritesItemList;
+class CBrowserFavouritesContainer;
+class CBrowserFavouritesModel;
+class CBrowserFavouritesIncrementalOp;
+class CBrowserFavouritesListboxState;
+
+// CLASS DECLARATION
+
+/**
+* Base class for Bookmarks View and Saved Decks View of the WML Browser.
+* The common behaviour of these views is collected here. This includes:
+* Handling view activation / decativation;
+* Interpreting (common) commands;
+* Providing context-specific menus.
+* Pure virtual; derived classes must provide model and control components
+* and items to display. A number of methods can be overridden.
+*/
+class CBrowserFavouritesView:public CBrowserViewBase,
+ public MEikListBoxObserver,
+ public MBrowserFavouritesModelObserver,
+ public MCommsModelObserver
+ {
+ public: // construction
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserFavouritesView();
+
+ public: // From MCbaSetter (CBrowserViewBase)
+
+ /**
+ * Return command set id, to be displayed.
+ * @since 1.2
+ * @return The command set's resource id.
+ */
+ virtual TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ /**
+ * Return the resource ID of the seamless folder.
+ * @param aContextID Context ID of the seamless folder.
+ * @return The resource ID of the seamless folder or zero if it is not
+ * seamless.
+ */
+ static TInt GetSeamlessFolderResourceID( TInt aContextID );
+
+ /**
+ * Return the resource ID of the seamless folder title.
+ * @param aContextID Context ID of the seamless folder.
+ * @return The resource ID of the seamless folder title or zero if it is not
+ * seamless.
+ */
+ static TInt GetSeamlessFolderTitleResourceID( TInt aContextID );
+
+ /**
+ * Examines if the given ID is an ID of a seamless folder.
+ * @param aContextID Context ID of the folder.
+ * @return The ETrue if the given ID is a seamless ID otherwise EFalse.
+ * seamless.
+ */
+ static TBool IsSeamlessFolder( TInt aContextID );
+
+
+ /**
+ * Configure Context Menu Resource
+ *
+ * context-sensitive menu when item(s) marked
+ */
+ void ConfigContextMenu();
+
+ static TInt RefeshFavoriteListBox( TAny* aFavouritesView );
+
+ public: // public methods from CAknView (CBrowserViewBase)
+
+ /**
+ * Handle command.
+ * @since 1.2
+ * @param aCommand Command id.
+ */
+ virtual void HandleCommandL( TInt aCommand );
+
+ /**
+ * Get view id. Derived classes must provide this method.
+ * @return The view id for this view.
+ */
+ virtual TUid Id() const = 0;
+
+ void OpenFixedFolderL(TInt aUid);
+
+ protected :
+
+ // For Adaptive bookmarks folder navigation, used in Bookmarks View
+
+ void SetRootFolderForAdaptiveBookmarks();
+
+ protected : // construction
+
+ /**
+ * Constructor.
+ * @param aApiProvider The API provider.
+ */
+ CBrowserFavouritesView( MApiProvider& aApiProvider, TInt aInitialFolderId = KFavouritesRootUid );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * @param aViewResourceId Resource id for this view.
+ * Derived classes should call this first during construction.
+ */
+ void ConstructL( TInt aViewResourceId );
+
+ protected: // menu initialization
+
+ /**
+ * Initialize context-sensitive menu.
+ * @param aResourceId Resource id of the menu pane.
+ * @param aMenuPane Menu pane object being initialized.
+ * @param aIndex Index into the visibility map.
+ * @param aState Selection state.
+ */
+ virtual void DynInitMenuPaneL
+ (
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane,
+ TCommandVisibility::TIndex aIndex,
+ const TBrowserFavouritesSelectionState& aState
+ ) = 0;
+
+ protected: // new methods
+
+ /**
+ * Get resource id of text to be displayed in navi pane when
+ * root folder is shown (TBUF).
+ * Derived classes must provide this method.
+ * @since 1.2
+ * @return Resource id.
+ */
+ virtual TInt RootTitleResourceId() const = 0;
+
+ /**
+ * Get resource id of Options menu (RESOURCE MENU_BAR).
+ * Derived classes must provide this method.
+ * @since 1.2
+ * @return Resource id.
+ */
+ virtual TInt OptionsMenuResourceId() const = 0;
+
+ /**
+ * Get resource id of OK-Options menu (RESOURCE MENU_BAR).
+ * Derived classes must provide this method.
+ * @since 1.2
+ * @return Resource id.
+ */
+ virtual TInt OkOptionsMenuResourceId() const = 0;
+
+ protected: // component creation
+
+ /**
+ * Create the model. Leave on failure. The model is owned by the
+ * caller (this view).
+ * Derived classes must provide this method.
+ * @return The constructed model.
+ */
+ virtual CBrowserFavouritesModel* CreateModelL() = 0;
+
+ /**
+ * Create the container (the main control of the view). The container
+ * is owned by the caller (this view).
+ * Leave on failure.
+ * Derived classes must provide this method.
+ * @return The constructed main control.
+ */
+ virtual CBrowserFavouritesContainer* CreateContainerL() = 0;
+
+ protected: // data retrieval
+
+ /**
+ * Get items to be displayed in a folder. Expects the model's db be
+ * open.
+ * @param aFolder Folder which contains the items.
+ * @return List of items. Pushed on the cleanup stack.
+ */
+ virtual CFavouritesItemList* GetItemsLC( TInt aFolder );
+
+ public:
+
+ /**
+ * Get the model.
+ * @return The model.
+ */
+ inline CBrowserFavouritesModel& Model() const;
+
+ inline void ShowNextFolerL(TBool aNext) { OpenNextFolderL(aNext); }
+
+ protected: // component retrieval
+
+ /**
+ * Get the container (the view's main control).
+ * @return The container. Can be NULL (when view is not activated,
+ * container does not exist).
+ */
+ inline CBrowserFavouritesContainer* Container() const;
+
+ /**
+ * Get Uid of the folder shown.
+ * @return Current folder's Uid.
+ */
+ inline TInt CurrentFolder() const;
+
+
+ protected: // new methods
+
+ /**
+ * If there is a preferred highlight uid, attempt to highlight that.
+ * If succeeded, preferred highlight uid is cleared ("used up").
+ * Otherwise do nothing.
+ */
+ void HighlightPreferredL();
+
+ /**
+ * Some displayed data has changed (Favourites database, AP-s, etc).
+ * Update the view so changes become visible. Safe to call if the view
+ * is not active; in this case it does nothing.
+ * This method should not be called if the data change is due to direct
+ * user activity (opening folders etc.); only for notification
+ * processing.
+ * @param aDbErrorNote If ETrue, unsuccesful database access will bring
+ * up an error note.
+ */
+ virtual void RefreshL( TBool aDbErrorNote = EFalse );
+
+ /**
+ * Redraw.
+ */
+ void HandleClientRectChange();
+
+ protected: // from CAknView
+
+ /**
+ * Activate the view. Open the database. If it was activated
+ * previously, try to restore the view as it was before deactivation.
+ * @param aPrevViewId Previous View Id.
+ * @param aCustomMessageId Custom Message Id.
+ * @param aCustomMessage Custom Message.
+ */
+ void DoActivateL
+ (
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage
+ );
+
+ /**
+ * Deactivate the view. Close the database. Save the view state,
+ * so it can be restored on future activations.
+ */
+ void DoDeactivate();
+
+ /**
+ * Initialize context-sensitive menu. Do not override this one;
+ * override the other.
+ * @param aResourceId Resource id of the menu pane.
+ * @param aMenuPane Menu pane object being initialized.
+ */
+ void DynInitMenuPaneL
+ ( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * Handle foreground event.
+ * @param aForeground ETrue if foreground.
+ */
+ virtual void HandleForegroundEventL( TBool aForeground );
+
+ protected: // from MEikListBoxObserver
+
+ /**
+ * Handle listbox event.
+ * @param aListBox Listbox in which the event occurred.
+ * @param aEventType Event.
+ */
+ virtual void HandleListBoxEventL
+ ( CEikListBox* aListBox,
+ MEikListBoxObserver::TListBoxEvent aEventType );
+
+ private: // command handling
+
+ /**
+ * Command "Back", when showing a folder. Open the parent folder.
+ * of the currently shown folder. Highlight the folder just closed.
+ */
+ void CloseCurrentFolderL();
+
+ /**
+ * Command "Open (folder)". Open the highlighted folder.
+ * Does nothing if no folder is highlighted.
+ */
+ void OpenCurrentFolderL();
+
+ /**
+ * Command "Open (folder)" from OK-Options menu. Open the marked folder.
+ * Does nothing if no folder is marked or more is marked.
+ */
+ void OpenMarkedFolderL();
+
+ /**
+ * Command "Remove" or "Erase". Delete marked item(s).
+ * Does nothing if no item is highlighted / marked.
+ */
+ virtual void DeleteMarkedItemsL();
+
+ protected:
+ /**
+ * Command "New folder". New folders are alwas created in the root
+ * folder.
+ * @return The uid of the newly created folder, or KFavouritesNullUid
+ * (if not created).
+ */
+ TInt AddNewFolderL();
+
+ private:
+
+ /**
+ * Command "Move To Folder". Launch target folder selection dialog and
+ * move marked item(s).
+ */
+ void MoveMarkedItemsL();
+
+
+ /**
+ * Command "Rename". Rename current item.
+ * Does nothing if no item is highlighted.
+ */
+ void RenameCurrentItemL();
+
+ protected: // implementation details.
+
+ /**
+ * Open a folder by Uid and display its contents. Expects the
+ * model's db be open.
+ * @param aFolder Folder to open.
+ */
+ void OpenFolderL( TInt aFolder );
+
+ /**
+ * Open next folder.
+ * @param aForward Open next folder if ETrue, previous if EFalse.
+ */
+ virtual void OpenNextFolderL( TBool aForward );
+
+ private:
+
+ /**
+ * Fill listbox with folder contents. Expects the model's db be open.
+ * @param aFolder Folder to display.
+ * @param aKeepState If ETrue, try to restore marks/highlight/top item
+ * position.
+ */
+ void FillListboxL( TInt aFolder, TBool aKeepState );
+
+ /**
+ * Display confirmation dialog before deleting items. The dialog
+ * displayed is context-dependent (different dialog for one/more
+ * items, and for non-empty folders).
+ * @param aUids List of Uids (both item & folder) about to be deleted.
+ * @param aFolderUids List of folder uids about to be deleted. These
+ * uids are also in aUids, and are needed only to improve performance.
+ * (The non-empty folder checking, which is the only database query in
+ * this method, is performed only for folders. The effect of this is
+ * visible only if many items are selected.)
+ * @return ETrue if delete was confirmed; EFalse if not, or in case of
+ * any error (e.g. database error).
+ */
+ TBool ConfirmDeleteL
+ ( CArrayFix<TInt>& aUids, CArrayFix<TInt>& aFolderUids );
+
+ /**
+ * After deleting items, display appropriate note about the outcome.
+ * @param aUids List of Uids that were selected for deletion.
+ * @param aNotDeletedUids List of Uids which are not deleted.
+ */
+ void DisplayResultOfDeleteL
+ (
+ const CArrayFix<TInt>& aUids,
+ const CArrayFix<TInt>& aNotDeletedUids
+ );
+
+ /**
+ * Launch target folder selection dialog and return uid of selected
+ * folder (or KFavouritesNullUid if cancelled or in case of any error).
+ * If no folders exist, user is prompted to create one.
+ * @param aExcludeFolder Exclude this folder from selection (current
+ * folder).
+ * @return Uid of selected folder, or KFavouritesNullUid.
+ */
+ TInt SelectTargetFolderL( TInt aExcludeFolder );
+
+ /**
+ * "First pass" of moving is done; items that could be moved without
+ * user intervention, has been moved. Some of them may be still there,
+ * because it is unmovable (e.g. Homepage), or conflicts with a name in
+ * the target folder. For the latter ones, ask for each if replace the
+ * old ones, and act accordingly.
+ * Display appropriate note about what happened.
+ * @param aFolder The target folder.
+ * @param aUids List of Uids that were selected for moving.
+ * @param aUnmovableUids List of Uids which could never be moved.
+ * @param aConflictingNameUids List of conflicting name Uids.
+ */
+ void HandleMoveResultL
+ (
+ TInt aFolder,
+ const CArrayFix<TInt>& aUids,
+ const CArrayFix<TInt>& aUnmovableUids,
+ const CArrayFix<TInt>& aConflictingNameUids
+ );
+
+ /**
+ * For each of the items in the list, display a rename dialog before
+ * moving them into the folder.
+ * @param aFolder The target folder.
+ * @param aUids List of Uids that were selected for moving.
+ */
+ void RenameAndMoveItemsL
+ ( const CArrayFix<TInt>& aUids, TInt aFolder );
+ protected: // new methods
+
+ /**
+ * Update and draw navi pane (show tabs for root, or "1/4" style text
+ * for subfolders).
+ * No sanity check; expects the model's table be open.
+ */
+ virtual void UpdateNaviPaneL();
+
+ private: // new methods
+
+ /**
+ * The container passes back key events to the view first, to
+ * allow moving between folders. (The container does not know
+ * anything about folders.)
+ */
+ friend class CBrowserFavouritesContainer;
+
+ protected:
+ /**
+ * Handle key event (called from the container, to allow moving between
+ * folders.
+ * @param aKeyEvent The key event.
+ * @param aType Key event type.
+ * @return Response (was the key event consumed?).
+ */
+ virtual TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Reset state with deactivation event
+ */
+ void ResetStateInDeActivation();
+
+ /**
+ * Needed for updating tool bar buttons when there is a up/down arrow key events received.
+ **/
+ virtual void UpdateToolbarButtonsState();
+
+ private: // from MWmlBrowserFavouritesModelObserver
+
+ /**
+ * Handle model change.
+ */
+ void HandleFavouritesModelChangeL();
+
+ private: // from MCommsModelObserver
+
+ /**
+ * Handle Comms Model change (AP update).
+ */
+ void HandleCommsModelChangeL();
+
+ private: // default item settings
+
+ /**
+ * Set Prefered the current item
+ */
+ void SetPreferedCurrentItemL();
+
+ /**
+ * Set Prefered the current item
+ */
+ void SetUnPreferedCurrentItemL();
+
+
+ protected: // data
+
+ /// Preferred highlight uid.
+ TInt iPreferredHighlightUid;
+
+ /// If ETrue, OK-Options menu is shown instead of normal Options menu.
+ TBool iShowOkOptions;
+
+ /// Top-level control of the view. Owned
+ CBrowserFavouritesContainer* iContainer;
+
+ /// Uid of the current folder.
+ TInt iCurrentFolder;
+
+ /// ETrue between DoActivateL() and DoDeactivate().
+ TBool iIsActivated;
+
+ private: // data
+
+ /// The model (data handling). Owned.
+ CBrowserFavouritesModel* iModel;
+ TInt iLastSelection;
+ /// Incremental operation, or NULL if no such. Owned.
+ CBrowserFavouritesIncrementalOp* iIncrementalOp;
+ /// ETrue if data update is missed due to incremental operation.
+ TBool iUpdatePending;
+ /// Asynchronously update the favourite item's List Box
+ CIdle* iFavViewRefresh;
+ protected:
+
+ TBool iRefresh; // Flag to indicate that Bookmarks list should be refreshed.
+ // ETrue by default, turned off only in cases we want to avoid
+ // double refresh. Checked in HandleFavouritesModelChangeL.
+
+ TInt iInitialFolder; //Folder to which browser is launched in embedded mode
+
+ // Flag to indicate that we are about to open Preferences view,
+ // in order not to return to root folder afterwards.
+ TBool iSaveStateOnDeactivate;
+
+ CBrowserFavouritesListboxState* iSavedListboxState;
+ };
+
+#include "BrowserFavouritesView.inl"
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserFavouritesView.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Inline methods for CBrowserFavouritesView.
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_VIEW_INL
+#define BROWSER_FAVOURITES_VIEW_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::Model
+// ---------------------------------------------------------
+//
+CBrowserFavouritesModel& CBrowserFavouritesView::Model() const
+ {
+ return *iModel;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::Container
+// ---------------------------------------------------------
+//
+CBrowserFavouritesContainer* CBrowserFavouritesView::Container() const
+ {
+ return iContainer;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::CurrentFolder
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesView::CurrentFolder() const
+ {
+ return iCurrentFolder;
+ }
+
+#endif
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/CommandVisibility.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of class TCmdVisibility.
+*
+*
+*/
+
+
+#ifndef COMMAND_VISIBILITY_H
+#define COMMAND_VISIBILITY_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATION
+
+struct TBrowserFavouritesSelectionState;
+
+// CLASS DECLARATION
+
+/**
+* Visibility info on one menu command. Unfortunately this cannot be put into
+* a class, since it is initialized statically. Commands of menu panes are
+* put into TCommandVisibilityMap-s (an array of TCommandVisibilityInfo).
+* One TCommandVisibilityInfo contains the following information:
+* 0. TInt The command.
+* 1-5. Visibility under different selection conditions.
+* TCommandVisibility::TIndex is used to index into the array.
+*/
+typedef const TInt TCommandVisibilityInfo[6];
+
+/**
+* Variable length array of TCommandVisibilityInfo (i.e. commands and their
+* visibility); the array is terminated with -1. This array is handled by
+* TCommandVisibility.
+*/
+typedef const TCommandVisibilityInfo* TCommandVisibilityMap;
+
+/*
+* This struct provides a way to initialize menu panes with using visibility
+* info arrays.
+*/
+class TCommandVisibility
+ {
+ public: // types
+
+ /*
+ * Indexes into the visibility info.
+ */
+ enum TIndex
+ {
+ ECommand = 0, ///< The command.
+ ENothing, ///< (0) Visibility (nothing is selected).
+ EOneItem, ///< (1i) Visibility (one item is selected).
+ EOneFolder, ///< (1f) Visibility (one folder is selected).
+ EMoreItems, ///< (*i) Visibility (more selected no folders).
+ EItemsFolders, ///< (*) Visibility (more selected, incl folders).
+ EInvalid = -1 ///< Unused (sanity checking).
+ };
+
+ public: // new methods
+
+ /**
+ * Apply visibility to this menu pane (dim commands).
+ * @param aMenuPane Menu pane to dim.
+ * @param aCommandInfo Command visibility info to apply.
+ * @param aIndex Index to use.
+ */
+ static void Apply
+ (
+ CEikMenuPane* aMenuPane,
+ TCommandVisibilityMap aCommandInfo,
+ TIndex aIndex
+ );
+
+ /**
+ * Checks whether the menu item can be shown. As this method does not
+ * get any menu panes, it will not dim menu items.
+ * @param aCommandInfo Command visibility info to apply.
+ * @param aIndex Index to use.
+ * @return EFalse if the menu item for the appropriate command is not
+ * to be shown. This method returns EFalse otherwise.
+ */
+ static TBool Apply
+ (
+ const TCommandVisibilityInfo& aCommandInfo,
+ TIndex aIndex
+ );
+
+ /**
+ * Calculate index into the visibility info, based on selection state.
+ * @param aSelectionState Selection state.
+ * @param aMarkedOnly If ETrue, consider only marked items.
+ * @return The index.
+ */
+ static TIndex Index
+ (
+ const TBrowserFavouritesSelectionState& aSelectionState,
+ TBool aMarkedOnly
+ );
+ };
+
+
+// CONSTANTS
+
+// Controlling the visibility.
+#define SHOW ETrue ///< Show this command (do not dim).
+#define DIM EFalse ///< Dim this command.
+#define CUSTOM ETrue ///< Custom handling (for the moment, do not dim).
+#define VOID ETrue ///< Never evaluated.
+
+#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserAdaptiveListPopup.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1330 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserPopupList and CBrowserAdaptiveListPopup
+*
+*
+*/
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <AknPopup.h>
+#include <AknListQueryDialog.h>
+#include <AknIconArray.h>
+#include <recenturlstore.h>
+#include <AknsUtils.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <AppApacLayout.cdl.h>
+#include <AppLayout.cdl.h>
+#include <AknLayout.cdl.h>
+#include <SkinLayout.cdl.h>
+#include <AknLayout2ScalableDef.h>
+#include <AknLayoutScalable_Avkon.cdl.h>
+#include <AknLayoutScalable_Apps.cdl.h>
+#include <LayoutMetaData.cdl.h>
+#include <AknEnv.h>
+#include <aknsdrawutils.h>
+#include <browser.mbg>
+#include "BrowserContentView.h"
+#include "BrowserAdaptiveListPopup.h"
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "BrowserAppViewBase.h"
+#include <data_caging_path_literals.hrh>
+#include <Uri8.h>
+#include <utf.h>
+
+#include "eikon.hrh"
+
+// CONSTANTS
+const TInt KMaxIcons = 2;
+const TInt KListLengthToShow = 64;//the length of the string in the list
+_LIT( KItemTab, "1\t");//prefix for items
+_LIT( KDirTab, "0\t");//prefix for directories
+const TInt KArrayGranularity = 10;
+_LIT( KProtocolIdentifier,"://" );
+const TUint KSlash('/');
+const TUint KPeriod('.');
+const TInt KListHeight = 36;
+const TInt KLandscapeListItems = 5;
+const TInt KFontHeight = 150;
+
+static void TextPos(TPoint *aResultArray, const TAknTextLineLayout
+&aLayout, TSize aItemSize)
+ {
+ TRect itemRect(TPoint(0,0), aItemSize);
+ TAknLayoutText textLayout;
+ textLayout.LayoutText(itemRect, aLayout);
+ aResultArray[0] = textLayout.TextRect().iTl;
+ aResultArray[1] = textLayout.TextRect().iTl +
+textLayout.TextRect().Size();
+ }
+
+static void GfxPos(TPoint *aResultArray, const TAknWindowLineLayout
+&aLayout, TSize aItemSize)
+ {
+ TRect itemRect(TPoint(0,0), aItemSize);
+ TAknLayoutRect layout;
+ layout.LayoutRect(itemRect, aLayout);
+ aResultArray[0] = layout.Rect().iTl;
+ aResultArray[1] = layout.Rect().iTl + layout.Rect().Size();
+ }
+
+TSize ListBoxItemSize(CEikListBox &aListBox, CFormattedCellListBoxItemDrawer *aItemDrawer)
+ {
+ TSize size = TSize( aItemDrawer->LafItemSize().iWidth, aListBox.View()->ItemSize().iHeight );
+ return size;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserPopupList::CBrowserPopupList()
+//
+// ---------------------------------------------------------
+//
+CBrowserPopupList::CBrowserPopupList(TParentType aParentType):CAknSingleGraphicPopupMenuStyleListBox()
+ {
+ iParentType = aParentType;
+ }
+
+// ---------------------------------------------------------
+// CBrowserPopupList::~CBrowserPopupList()
+//
+// ---------------------------------------------------------
+//
+CBrowserPopupList::~CBrowserPopupList()
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserPopupList::ConstructL
+//
+// ---------------------------------------------------------
+//
+void CBrowserPopupList::ConstructL(const CCoeControl* aParent, TInt aFlags)
+ {
+ CAknSingleGraphicPopupMenuStyleListBox::ConstructL( aParent, aFlags);
+ }
+
+// ---------------------------------------------------------
+// CBrowserPopupList::SetHighLight
+// Sets the highlight of the list
+// ---------------------------------------------------------
+//
+void CBrowserPopupList::SetHighLight(TBool aHighLight)
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ iItemDrawer->SetFlags( CListItemDrawer::ESingleClickEnabled );
+#endif
+ iListBoxFlags = ( aHighLight ? iListBoxFlags &~ CEikListBox::EDisableHighlight : iListBoxFlags | CEikListBox::EDisableHighlight );
+ if ( aHighLight )
+ {
+ iItemDrawer->ClearFlags( CListItemDrawer::EDisableHighlight );
+ }
+ else
+ {
+ iItemDrawer->SetFlags( CListItemDrawer::EDisableHighlight );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserPopupList::HighLightEnabled()
+// Enables the highlight in the list
+// ---------------------------------------------------------
+//
+TBool CBrowserPopupList::HighLightEnabled()
+ {
+ return !( iItemDrawer->Flags() & CListItemDrawer::EDisableHighlight );
+ }
+
+// ---------------------------------------------------------
+// CBrowserPopupList::SizeChanged()
+// sets the inner layout
+// ---------------------------------------------------------
+//
+void CBrowserPopupList::SizeChanged()
+ {
+ CAknSingleGraphicPopupMenuStyleListBox::SizeChanged();
+ TAknWindowLineLayout windowLineLayout;
+ TAknWindowLineLayout windowLineLayoutTmp;
+ TAknWindowLineLayout windowLineLayoutTmp2;
+ TAknLayoutRect layoutRect;
+ TPoint area[2] ;
+ TRgb color;
+ CEikFormattedCellListBox &aListBox = *this;
+ CFormattedCellListBoxItemDrawer *itemDrawer = aListBox.ItemDrawer();
+ AknListBoxLayouts::SetupStandardListBox(aListBox);
+
+ AknListBoxLayouts::SetupListboxPos( aListBox, AppLayout::list_single_graphic_popup_wml_pane( 0 ));
+
+ GfxPos(area,
+ AknLayoutScalable_Apps::list_single_graphic_popup_wml_pane_g1(),
+ ListBoxItemSize(*this, ItemDrawer()) );
+
+ AknListBoxLayouts::SetupFormGfxCell(aListBox,
+ itemDrawer,
+ 0,
+ AknLayoutScalable_Apps::list_single_graphic_popup_wml_pane_g2(),
+ area[0],
+ area[1]);
+
+ //sets the rectangle of the text
+ TextPos(area,
+ AknLayoutScalable_Apps::list_single_graphic_popup_wml_pane_t1( ),
+ ListBoxItemSize(*this, ItemDrawer()) );
+ AknListBoxLayouts::SetupFormAntiFlickerTextCell(aListBox,
+ itemDrawer,
+ 1,
+ AknLayoutScalable_Apps::list_single_graphic_popup_wml_pane_t1( ),
+ area[0],
+ area[1]);
+ }
+
+// ---------------------------------------------------------
+// CBrowserPopupList::Draw()
+// ---------------------------------------------------------
+//
+void CBrowserPopupList::Draw(const TRect& /*aRect*/) const
+ {
+ TRect windowRect = this->Rect();
+ CEikFormattedCellListBox::Draw( windowRect );
+ return;
+ }
+
+
+// ================= CBrowserAdaptiveListPopup =======================
+
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::CBrowserAdaptiveListPopup()
+// ---------------------------------------------------------
+//
+CBrowserAdaptiveListPopup::CBrowserAdaptiveListPopup( CEikEdwin* aGotoPaneEdit,
+ CCoeControl* aParent, TParentType aParentType, TBool aSearchFeature):
+ iEditor( aGotoPaneEdit ), iParent( aParent ),
+ iParentType( aParentType ), iSearchFeature( aSearchFeature )
+ {
+ iTouchSupported = AknLayoutUtils::PenEnabled();
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::ConstructL(const TRect& aRect)
+// EPOC two-phased constructor
+// ---------------------------------------------------------
+void CBrowserAdaptiveListPopup::ConstructL( )
+ {
+ CreateWindowL();
+//-------- list ------
+ iList = new(ELeave) CBrowserPopupList( iParentType );
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ iList->ConstructL( this , CEikListBox::EDisableItemSpecificMenu );
+#else
+ iList->ConstructL( this , CEikListBox::ELeftDownInViewRect );
+#endif
+ iList->SetContainerWindowL( *this );
+ if (iTouchSupported)
+ {
+ iList->SetListBoxObserver( this );
+ }
+ iList->CreateScrollBarFrameL( ETrue );
+ iList->SetMopParent(iParent);
+ iList->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto);
+ iList->ScrollBarFrame()->SetTypeOfVScrollBar( CEikScrollBarFrame::EDoubleSpan );
+ iList->UpdateScrollBarsL();
+ iList->SetBorder(TGulBorder::ESingleBlack);
+ iList->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue );
+//---------- items storing arrays ---------
+ iItems = new(ELeave) CDesCArrayFlat(KArrayGranularity);
+ iItemNames = new(ELeave) CDesCArrayFlat(KArrayGranularity);
+ iItemNamesToShow = new(ELeave) CDesCArrayFlat(KArrayGranularity);
+//---------- model ----------
+ CTextListBoxModel* model = iList->Model();
+ model->SetItemTextArray( iItemNamesToShow );
+ model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+//---------- icons -----------
+ SetIconsL();
+//--------- other --------
+ iFirstGotoContent = KNullDesC().AllocL();
+ iPrevGotoContent = KNullDesC().AllocL();
+ iPoppedUp = EFalse;
+ iDirectoryMode = ETrue;
+ iOpenCBA=EFalse;
+ iItemDrawer = iList->ItemDrawer();
+ iPrevItem = -2;
+ iUrlCompletionMode = EFalse;
+ iRecentUrlStore = CBrowserAppUi::Static()->RecentUrlStore();
+ if (!iRecentUrlStore)
+ {
+ User::Leave(KErrCouldNotConnect);
+ }
+ iListScrollTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::~CBrowserAdaptiveListPopup()
+// Destructor
+// ---------------------------------------------------------
+CBrowserAdaptiveListPopup::~CBrowserAdaptiveListPopup()
+ {
+ delete iList;
+ delete iItems;
+ delete iItemNames;
+ delete iItemNamesToShow;
+ delete iPrevGotoContent;
+ delete iFirstGotoContent;
+ if(iListScrollTimer)
+ {
+ iListScrollTimer->Cancel();
+ delete iListScrollTimer;
+ }
+}
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::SetOrdinalPosition
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::SetOrdinalPosition( TInt aPos )
+ {
+ Window().SetOrdinalPosition( aPos );
+ }
+
+void CBrowserAdaptiveListPopup::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ if (iList && iTouchSupported)
+ {
+ //using ComponentControl(0) instead of iList because need access to a
+ //protected function
+ ComponentControl(0)->HandlePointerEventL( aPointerEvent );
+ }
+ }
+
+void CBrowserAdaptiveListPopup::HandleListBoxEventL(CEikListBox* aListBox,TListBoxEvent aEventType)
+ {
+ if (iList && aListBox == iList && iTouchSupported)
+ {
+ switch (aEventType)
+ {
+ case MEikListBoxObserver::EEventItemDoubleClicked:
+ {
+ TKeyEvent keyEvent;
+ keyEvent.iModifiers = 0;
+ keyEvent.iRepeats = 0;
+ keyEvent.iCode = EKeyDevice3;
+ keyEvent.iScanCode = EStdKeyDevice3;
+ if ( iParentType == EBookmarksGotoPane )
+ {
+ CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKeyDown );
+ }
+ CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey );
+ if ( iParentType == EBookmarksGotoPane )
+ {
+ CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKeyUp );
+ }
+ }
+ break;
+ case MEikListBoxObserver::EEventItemClicked:
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ case MEikListBoxObserver::EEventItemSingleClicked:
+#endif
+ HandleItemClickedL( aListBox );
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+void CBrowserAdaptiveListPopup::HandleItemClickedL( CEikListBox* aListBox )
+ {
+ //the first time
+ if ( !iList->HighLightEnabled() )
+ {
+ iList->SetHighLight( ETrue );
+
+ //save the original content
+ if ( !iFirstGotoContent )
+ {
+ delete iFirstGotoContent;
+ iFirstGotoContent = NULL;
+ }
+ iFirstGotoContent = iEditor->GetTextInHBufL();
+ if ( !iFirstGotoContent )
+ {
+ iFirstGotoContent = KNullDesC().AllocL();
+ }
+ }
+ TInt index = aListBox->CurrentItemIndex();
+ index = iItems->Count() - index - 1;
+ TPtrC16 item((*iItems)[ index ] );
+ TPtrC rightSide;
+
+ //cut the slash from the end if needed
+ //permanent sollution until AHLE does not
+ //solve this problem related to ID: TMCN-5TTRXV error
+ if ( item[item.Length() - 1] != KSlash )
+ {
+ rightSide.Set( item.Left( item.Length() ) );
+ }
+ else
+ {
+ rightSide.Set( item.Left( item.Length() - 1 ) );
+ }
+
+ //if true then append the suffix(rightSide), to the
+ //user-typed data
+ //else just use the recent URLs text(rightSide) only
+ if ( iUrlCompletionMode )
+ {
+ HBufC* currentCompletion = HBufC::NewLC(
+ iFirstGotoContent->Des().Length() + rightSide.Length() + 1 );
+ TPtr currentCompletionPtr = currentCompletion->Des();
+
+ currentCompletionPtr.Copy( iFirstGotoContent->Des() );
+ currentCompletionPtr.Append( rightSide );
+ currentCompletionPtr.ZeroTerminate();
+ iEditor->SetTextL( currentCompletion );
+ iEditor->SetCursorPosL( currentCompletionPtr.Length(), EFalse );
+ CleanupStack::PopAndDestroy( currentCompletion );
+ }
+ else
+ {
+ iEditor->SetTextL( &rightSide );
+ iEditor->SetCursorPosL( rightSide.Length(), EFalse );
+ }
+ iEditor->HandleTextChangedL();
+
+ delete iPrevGotoContent;
+ iPrevGotoContent = NULL;
+ iPrevGotoContent = item.AllocL();
+ iEditor->DrawNow();
+ //change the CBA depending on whether the highlight is
+ //on url or domain
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+
+
+//------------------------------------------------------------------
+// CBrowserAdaptiveListPopup::ShowSingleItemPopupListWithGraphicsL(TBool aShowTitle)
+// shows "List pane for single item with graphic"
+//------------------------------------------------------------------
+void CBrowserAdaptiveListPopup::ShowPopupListL(TBool aRelayout)
+ {
+ TAknWindowLineLayout windowLineLayout;
+ TAknWindowLineLayout windowLineLayoutTmp;
+ TAknWindowLineLayout windowLineLayoutMain;
+ TAknWindowLineLayout windowLineLayoutMainTmp;
+ TAknWindowLineLayout windowLineLayoutLW;
+ TAknWindowLineLayout windowLineLayoutLWTmp;
+ TAknWindowLineLayout windowLineLayoutSLW;
+ TAknWindowLineLayout windowLineLayoutSLWTmp;
+ TAknLayoutRect layoutRect;
+ TAknLayoutRect layoutMainRect;
+ TAknLayoutRect layoutLWRect;
+ TAknLayoutRect layoutSLWRect;
+
+ //turn of the highlight
+ iList->SetHighLight( EFalse );
+ //clear arrays
+ iItems->Reset();
+ iItemNames->Reset();
+ iItemNamesToShow->Reset();
+
+ TInt offset;
+ HBufC* newText;
+ //get create and get the string from the edit field
+ if ( iEditor->TextLength() > 0 )
+ {
+ newText = iEditor->GetTextInHBufL();
+ CleanupStack::PushL( newText );
+ //cut the protokolidentifier from the string
+ offset = newText->Find( KProtocolIdentifier );
+ if ( offset == KErrNotFound )
+ {
+ offset = newText->Length();
+ }
+ else
+ {
+ offset = newText->Length() - offset - 3;
+ }
+ }
+ else
+ {
+ offset = 0;
+ newText = KNullDesC().AllocLC();
+ }
+ TPtrC trimmedContent( newText->Right( offset ) );
+ TBuf<KListLengthToShow> buf;
+
+ //find out if the user typed a ".", if so, bring up the url completion list
+ TInt periodPos = trimmedContent.LocateReverse( TChar(KPeriod) );
+ if ((periodPos != KErrNotFound) && ((periodPos + 1) == trimmedContent.Length()))
+ {
+ //add the url completion entries to the popup list
+ iUrlCompletionMode = ETrue;
+ CreateURLCompletionListL();
+ }
+ else
+ {
+ iUrlCompletionMode = EFalse;
+ //only include recent URLs if not including the url completion items
+ iRecentUrlStore->GetData( *iItems, *iItemNames, trimmedContent );
+
+ //sort alphabetically and...
+ for(TInt i=0; i<iItems->Count(); i++)
+ {
+ for(TInt j=0; j<iItems->Count()-1; j++)
+ {
+ if ((*iItems)[j].CompareF((*iItems)[j+1]) > 0)
+ {
+ RBuf tmp;
+ CleanupClosePushL(tmp);
+ tmp.Create((*iItems)[j]);
+ iItems->Delete(j);
+ iItems->InsertL( j+1, tmp );
+ tmp.Close();
+ tmp.Create((*iItemNames)[j]);
+ iItemNames->Delete(j);
+ iItemNames->InsertL( j+1, tmp );
+ CleanupStack::PopAndDestroy( &tmp );
+ }
+ }
+ }
+ //and move url with params i.e google.fi/m=q?xyz do the back of list
+ TInt i = 0; //iterator
+ TInt j = 0; //counter
+ while (i < (iItems->Count()-1) && j < iItems->Count())
+ {
+ TUriParser8 parser;
+ RBuf8 out;
+ CleanupClosePushL( out );
+ out.Create( (*iItems)[i].Length() );
+ RBuf in;
+ CleanupClosePushL( in );
+ in.Create( (*iItems)[i] );
+
+ CnvUtfConverter::ConvertFromUnicodeToUtf8(out, in );
+
+ if (( parser.Parse( out ) == KErrNone ) && //if parse ok and
+ ( parser.Extract( EUriPath ).Length() > 0 || //url contains path
+ parser.Extract( EUriQuery ).Length() > 0 )) //or query item
+ {
+ iItems->AppendL( (*iItems)[i] );//move item to back of the list
+ iItems->Delete( i );
+ iItemNames->AppendL( (*iItemNames)[i] );
+ iItemNames->Delete( i );
+ }
+ else
+ {
+ i++;
+ }
+ j++;
+
+ CleanupStack::PopAndDestroy( &in );
+ CleanupStack::PopAndDestroy( &out );
+ };
+
+
+ }
+ iDirectoryMode = EFalse;
+ CleanupStack::PopAndDestroy();//newText
+ TInt k;
+ k = iItems->Count();
+ iItemNo = k;
+ TInt length = KListLengthToShow - 2;
+ if ( k > 0 )
+ {
+ TInt j;
+ TPtrC textToShow;
+ TPtrC itemJ;
+ //changeing the order
+ for (j=k-1; j>-1; j--)
+ {
+ itemJ.Set( (*iItems)[j] );
+ textToShow.Set( itemJ.Left( length ) );
+ if ( iDirectoryMode )
+ {
+ //directories and items
+ if ( itemJ[ itemJ.Length() - 1 ] == KSlash )
+ {
+ //item
+ buf.Format( _L( "%S%S" ), &KItemTab, &textToShow );
+ }
+ else
+ {
+ //directory
+ buf.Format( _L( "%S%S" ), &KDirTab, &textToShow );
+ }
+ }
+ else
+ {
+ //items only
+ buf.Format( _L( "%S%S" ), &KItemTab, &textToShow );
+ }
+ iItemNamesToShow->AppendL( buf );
+ }
+ //set how many item will be shown
+
+#ifdef BRDO_TOUCH_ENABLED_FF
+ TInt appWidth = iEikonEnv->EikAppUi()->ApplicationRect().Width();
+ TInt appHeight = iEikonEnv->EikAppUi()->ApplicationRect().Height();
+ //For landscape mode only 5 items can be shown on the screen
+ if(appWidth > appHeight)
+ iMaxRecentUrlsToShow = KLandscapeListItems;
+#endif
+ TInt itemstoshow;
+ if ( k > iMaxRecentUrlsToShow)
+ {
+ itemstoshow = iMaxRecentUrlsToShow;
+ }
+ else
+ {
+ itemstoshow = k;
+ }
+ //resetting to original value
+ iMaxRecentUrlsToShow = CBrowserAppUi::Static()->ContentView()->ApiProvider().Preferences().MaxRecentUrls();
+
+ //set the main rect of the window
+ // fixing bug RFON-7E2PPV, don't use ApplicationRect()
+ TRect rect;
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
+ windowLineLayoutMain = AknLayout::main_pane( rect, 0, 2, 1 );
+ windowLineLayoutMainTmp = windowLineLayoutMain;
+ layoutMainRect.LayoutRect( rect, windowLineLayoutMainTmp );
+
+
+ windowLineLayoutLW = AppLayout::popup_wml_address_window( 1, itemstoshow );
+
+ windowLineLayoutLWTmp = windowLineLayoutLW;
+ layoutLWRect.LayoutRect( layoutMainRect.Rect(), windowLineLayoutLWTmp );
+ windowLineLayoutSLW = AknLayoutScalable_Apps::listscroll_popup_wml_pane();
+ windowLineLayoutSLWTmp = windowLineLayoutSLW;
+ layoutSLWRect.LayoutRect( layoutLWRect.Rect(), windowLineLayoutSLWTmp );
+ windowLineLayout = AppLayout::list_wml_pane( itemstoshow - 1 );
+ windowLineLayoutTmp = windowLineLayout;
+ layoutRect.LayoutRect( layoutLWRect.Rect(), windowLineLayoutTmp );
+
+ TRect rectTemp(layoutSLWRect.Rect());
+ // force listbox on top of goto pane
+ rectTemp.iBr.iY = iParent->PositionRelativeToScreen().iY;
+ rectTemp.iTl.iX = iParent->PositionRelativeToScreen().iX;
+ // shrink list box to size of list
+#ifdef BRDO_TOUCH_ENABLED_FF
+ TInt listH = KListHeight;
+#else
+ TInt listH = AppLayout::list_single_graphic_popup_wml_pane( 0 ).iH;
+#endif
+ rectTemp.iTl.iY = rectTemp.iBr.iY - (listH * itemstoshow);
+ // set bottom right x axis to full width
+ rectTemp.iBr.iX = rect.iBr.iX;
+
+ // we only want to call SetRect() when we have a relayout, otherwise just
+ // scroll the list to the correct position. Doing this will reduce the amount
+ // of flicker seen while typing into the gotopane
+ if ((rectTemp.Size() != Rect().Size()) || aRelayout)
+ {
+ //set the window rect
+ SetRect( rectTemp );
+ }
+ rectTemp = TRect( 0, 0, Rect().Width(), Rect().Height() );
+ if ( rectTemp!=iList->Rect() )
+ {
+ //set the rect of the list
+ iList->SetRect( rectTemp );
+ }
+ else
+ {
+ // this scrolls list to the correct position, probably still does too much work
+ AknListBoxLayouts::SetupListboxPos( *iList, AppLayout::list_single_graphic_popup_wml_pane( 0 ));
+ }
+ //the last item is visible
+ //ScrollToMakeItemVisible scrolls only after some delay
+ if(!iListScrollTimer->IsActive())
+ {
+ iListScrollTimer->Start(20, 0,
+ TCallBack(ListScrollTimerCallBack, this));
+ }
+
+#ifdef BRDO_TOUCH_ENABLED_FF
+ const CFont* pFont = AknLayoutUtils::FontFromId(EAknLogicalFontPrimaryFont);
+ TFontSpec fontSpec = pFont->FontSpecInTwips();
+ fontSpec.iHeight =KFontHeight;
+
+ CFont* fontNew;
+ CEikonEnv::Static()->ScreenDevice()->GetNearestFontInTwips( ( CFont*&)fontNew, fontSpec );
+ CFormattedCellListBoxData *pLBData = iList->ItemDrawer()->ColumnData();
+ iList->SetItemHeightL(KListHeight);
+
+ if(pLBData && pFont)
+ {
+ pLBData->SetSubCellFontL(1,fontNew);
+ }
+
+ CEikonEnv::Static()->ScreenDevice()->ReleaseFont(fontNew);
+#endif
+
+ MakeVisible( ETrue );
+ iPoppedUp = ETrue;
+ DrawNow();
+ iList->Draw(rectTemp);
+ }
+ else
+ {
+ MakeVisible( EFalse );
+ iPoppedUp = EFalse;
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ if (!IsActivated())
+ {
+ ActivateL();
+ }
+ iPrevItem = -2;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::CreateURLCompletionListL
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::CreateURLCompletionListL()
+ {
+ _LIT(KSeparator, ",");
+
+ if (iUrlSuffixBuf)
+ {
+ TPtrC urlSuffix(iUrlSuffixBuf->Des());
+ TInt index(urlSuffix.FindF(KSeparator));
+ TInt offset = 0;
+
+ while (index != KErrNotFound)
+ {
+ // Omit empty string
+ if (index > 0)
+ {
+ iItems->AppendL( urlSuffix.Mid(offset,index) );
+ }
+
+ offset += (index + 1);
+ TPtrC remainder(urlSuffix.Mid(offset));
+ index = remainder.FindF(KSeparator);
+ }
+
+ // Cover the cases where we only have one suffix in the list and/or
+ // the last suffix in the list does not have a comma
+ if (offset < urlSuffix.Length())
+ {
+ TPtrC remainderB(urlSuffix.Mid(offset, urlSuffix.Length() - offset));
+ iItems->AppendL( remainderB );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::HandleControlEventL
+// if the content of the edit box changes
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::HandleControlEventL(CCoeControl* aControl,enum MCoeControlObserver::TCoeEvent aEventType)
+ {
+ CEikEdwin* edwin = ( CEikEdwin* )aControl;
+ // the content of the edit box changes
+ if ( MCoeControlObserver::EEventStateChanged == aEventType )
+ {
+ HBufC* newText = edwin->GetTextInHBufL();
+ if (!newText)
+ {
+ newText = KNullDesC().AllocL();
+ }
+ CleanupStack::PushL( newText );
+ //check whether the last content is different to the one in the editbox
+ if ( !iPrevGotoContent || iPrevGotoContent->Compare( *newText ) )
+ {
+ ShowPopupListL();
+ delete iPrevGotoContent;
+ iPrevGotoContent = NULL;
+ iPrevGotoContent = newText;
+ CleanupStack::Pop( newText );//ownership is taken
+ }
+ else
+ {
+ if ( !iPrevGotoContent )
+ {
+ CleanupStack::PopAndDestroy( newText );
+ }
+ else
+ {
+ ShowPopupListL();
+ delete iPrevGotoContent;
+ iPrevGotoContent = NULL;
+ iPrevGotoContent = newText;
+ CleanupStack::Pop( newText );//ownership is taken
+ }
+ }
+ //change the CBA
+ if ( iOpenCBA )
+ {
+ iOpenCBA = EFalse;
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::CountComponentControls
+//
+// ---------------------------------------------------------
+//
+TInt CBrowserAdaptiveListPopup::CountComponentControls() const
+ {
+ if ( iList == NULL )
+ {
+ return 0;
+ }
+ return 1;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::ComponentControl
+//
+// ---------------------------------------------------------
+//
+CCoeControl* CBrowserAdaptiveListPopup::ComponentControl(TInt aIndex) const
+ {
+ if (aIndex==0)
+ {
+ return iList;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::OfferKeyEventL
+// Handles key events
+// ---------------------------------------------------------
+//
+TKeyResponse CBrowserAdaptiveListPopup::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse resp = EKeyWasNotConsumed;
+ if (( iPoppedUp &&
+ !CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->IsVisible() &&
+ (CBrowserAppUi::Static()->LastActiveViewId() == KUidBrowserContentViewId) ) || (( iPoppedUp ) &&
+ (CBrowserAppUi::Static()->LastActiveViewId() != KUidBrowserContentViewId)))
+ {
+ TInt currIndex = iItems->Count() - iList->CurrentItemIndex() - 1;
+
+ //the joystick is pressed
+ if ( aKeyEvent.iCode == EKeyOK )
+ {
+ if ( ( iList->HighLightEnabled() )
+ && ( iDirectoryMode )
+ && ( (*iItems)[ currIndex ][(*iItems)[ currIndex ].Length() - 1] != KSlash ) )
+ {
+ SetDirectoryModeL( EFalse );
+ resp = EKeyWasConsumed;
+ }
+ else
+ {
+ if (iEditor->TextLength()!=0)
+ {
+ HidePopupL();
+ }
+ }
+ }
+
+ //the joystick is pressed up
+ else if ( aKeyEvent.iCode == EKeyLeftUpArrow // Northwest
+ || aKeyEvent.iCode == EStdKeyDevice10 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyUpArrow // North
+ || aKeyEvent.iCode == EKeyRightUpArrow // Northeast
+ || aKeyEvent.iCode == EStdKeyDevice11 ) // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ resp = EKeyWasConsumed;
+ //the first time
+ if ( !iList->HighLightEnabled() )
+ {
+ iList->SetHighLight( ETrue );
+ currIndex = iList->Model()->NumberOfItems()-1;
+ iList->ScrollToMakeItemVisible( currIndex );
+ iList->SetCurrentItemIndex( currIndex );
+ DrawNow();
+ //save the original content
+ if ( iFirstGotoContent != NULL )
+ {
+ delete iFirstGotoContent;
+ iFirstGotoContent = NULL;
+ }
+ iFirstGotoContent = iEditor->GetTextInHBufL();
+ if (iFirstGotoContent == NULL)
+ {
+ iFirstGotoContent = KNullDesC().AllocL();
+ }
+ }
+ else
+ {
+ if( iSearchFeature )
+ {
+ if( iList->CurrentItemIndex() == 0 )
+ {
+ resp = EKeyWasConsumed;
+ return resp;
+ }
+ }
+ resp=iList->OfferKeyEventL( aKeyEvent, aType );
+ }
+ if ( currIndex > -1 )
+ {
+ //copy the selected item to edit field
+ TPtrC16 item;
+ TPtrC rightSide;
+ TInt newIndex;
+ newIndex = iItems->Count() - iList->CurrentItemIndex() - 1;
+ item.Set( (*iItems)[ newIndex ] );
+ //cut the slash from the end if needed
+ //permanent sollution until AHLE does not
+ //solve this problem related to ID: TMCN-5TTRXV error
+
+ //if URL completion, then we want to append the item to the item in the edit field
+ if (iUrlCompletionMode)
+ {
+ TPtr16 ptr = iFirstGotoContent->Des();
+
+ HBufC* buf = HBufC::NewLC(ptr.Length() + item.Length() + 1);
+
+ buf->Des().Copy(ptr);
+ buf->Des().Append(item);
+ buf->Des().ZeroTerminate();
+
+
+ rightSide.Set(buf->Des());
+
+ iEditor->SetTextL( &rightSide );
+ iEditor->SetCursorPosL( rightSide.Length(), EFalse );
+
+ CleanupStack::PopAndDestroy(); //buf
+ }
+ else
+ {
+ if ( (*iItems)[ newIndex ][(*iItems)[ newIndex ].Length() - 1] != KSlash )
+ {
+ rightSide.Set( item.Left( item.Length() ) );
+ }
+ else
+ {
+ rightSide.Set( item.Left( item.Length() - 1 ) );
+ }
+ iEditor->SetTextL( &rightSide );
+ iEditor->SetCursorPosL( rightSide.Length(), EFalse );
+ }
+ delete iPrevGotoContent;
+ iPrevGotoContent = NULL;
+ iPrevGotoContent = item.AllocL();
+ iEditor->DrawNow();
+ //change the CBA depending on whether the highlight is
+ //on url or domain
+ if ( ( (*iItems)[ newIndex ][(*iItems)[ newIndex ].Length() - 1] != KSlash ) && iDirectoryMode )
+ {
+ iOpenCBA = ETrue;
+ }
+ else
+ {
+ iOpenCBA = EFalse;
+ }
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ }
+
+ //the joystisk is pressed down
+ else if ( aKeyEvent.iCode == EKeyLeftDownArrow // Southwest
+ || aKeyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
+ || aKeyEvent.iCode == EKeyDownArrow // South
+ || aKeyEvent.iCode == EKeyRightDownArrow // Southeast
+ || aKeyEvent.iCode == EStdKeyDevice12 ) // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ resp = EKeyWasConsumed;
+ if( iSearchFeature )
+ {
+ if ( iPrevItem <= 0 )
+ {
+ if(! iList->HighLightEnabled() )
+ {
+ resp = EKeyWasNotConsumed;
+ return resp;
+ }
+ }
+ }
+ //it was the last item
+ if ( iPrevItem == 0 )
+ {
+ //write back the original string
+ iList->SetHighLight( EFalse );
+ iEditor->SetTextL( iFirstGotoContent );
+ iEditor->HandleTextChangedL();
+ iEditor->SetCursorPosL( iFirstGotoContent->Length(), EFalse );
+ delete iPrevGotoContent;
+ iPrevGotoContent = NULL;
+ iPrevGotoContent = iFirstGotoContent->AllocL();
+ iEditor->DrawNow();
+ DrawNow();
+ //change the CBA
+ if ( iOpenCBA )
+ {
+ iOpenCBA = EFalse;
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ return resp;
+ }
+ else if ( ( currIndex > -1 ) && iList->HighLightEnabled() )
+ {
+ //write the selected items string to the editor
+ TPtrC16 item;
+ TPtrC rightSide;
+ TInt newIndex;
+ resp = iList->OfferKeyEventL( aKeyEvent, aType );
+ newIndex = iItems->Count() - iList->CurrentItemIndex() - 1;
+ item.Set( (*iItems)[ newIndex ] );
+ //cut the slash from the end if needed
+ //permanent sollution until AHLE does not
+ //solve this problem related to ID: TMCN-5TTRXV error
+ if ( (*iItems)[ newIndex ][(*iItems)[ newIndex ].Length() - 1] != KSlash )
+ {
+ rightSide.Set( item.Left( item.Length() ) );
+ }
+ else
+ {
+ rightSide.Set( item.Left( item.Length() - 1 ) );
+ }
+
+ //if true then append the suffix (rightSide), to the
+ //user-typed data
+ //else just use the recent URLs text(rightSide) only
+ if ( iUrlCompletionMode )
+ {
+ HBufC* currentCompletion = HBufC::NewLC(
+ iFirstGotoContent->Des().Length() + rightSide.Length() + 1 );
+ TPtr currentCompletionPtr = currentCompletion->Des();
+
+ currentCompletionPtr.Copy( iFirstGotoContent->Des() );
+ currentCompletionPtr.Append( rightSide );
+ currentCompletionPtr.ZeroTerminate();
+ iEditor->SetTextL( currentCompletion );
+ iEditor->SetCursorPosL( currentCompletionPtr.Length(), EFalse );
+ CleanupStack::PopAndDestroy( currentCompletion );
+ }
+ else
+ {
+ iEditor->SetTextL( &rightSide );
+ iEditor->SetCursorPosL( rightSide.Length(), EFalse );
+ }
+ iEditor->HandleTextChangedL();
+
+ if ( iPrevGotoContent != NULL )
+ {
+ delete iPrevGotoContent;
+ iPrevGotoContent = NULL;
+ }
+ iPrevGotoContent = item.AllocL();
+ iEditor->DrawNow();
+ //change the CBA depending on whether the highlight is
+ //on url or domain
+ if ( ( (*iItems)[ newIndex ][(*iItems)[ newIndex ].Length() - 1] != KSlash ) && iDirectoryMode )
+ {
+ iOpenCBA = ETrue;
+ }
+ else
+ {
+ iOpenCBA = EFalse;
+ }
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ }
+
+ if ( iList->HighLightEnabled() )
+ {
+ iPrevItem = currIndex;
+ }
+ }
+ return resp;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::HidePopupL
+// Hides the popup list
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::HidePopupL()
+ {
+ //clear the lists
+ if ( iPoppedUp )
+ {
+ HBufC* newText = HBufC::NewLC( iEditor->TextLength() );
+ TPtr newTextDes = newText->Des();
+ iEditor->GetText( newTextDes );
+ iEditor->ClearSelectionL();
+ iEditor->SetTextL( newText );
+ iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+ CleanupStack::PopAndDestroy( newText );
+ iItemNames->Reset();
+ iList->Reset();
+ if (!IsActivated())
+ {
+ ActivateL();
+ }
+ MakeVisible(EFalse);
+ DrawNow();
+ iPrevItem = -2;
+ iPoppedUp = EFalse;
+ // highlight a directory, cancel goto pane
+ // activate goto pane again -> softkey problem
+ iOpenCBA = EFalse;
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::IsInDirectoryMode
+// gives back the directory mode
+// ---------------------------------------------------------
+//
+TBool CBrowserAdaptiveListPopup::IsInDirectoryMode()
+ {
+ return iDirectoryMode;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::SetDirectoryMode
+// Sets the directory mode
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::SetDirectoryModeL(TBool aDirMode)
+ {
+ iDirectoryMode = aDirMode;
+ if ( aDirMode == EFalse )
+ {
+ //put the slash to the back of the editor fileds string
+ //it will show the directory mode
+ TInt length;
+ length = iEditor->TextLength() + 1;
+ HBufC* newText = HBufC::NewLC( length );
+ TPtr newTextDes = newText->Des();
+ iEditor->GetText( newTextDes );
+ newTextDes.Append( TChar(KSlash) );
+ iEditor->SetTextL( newText );
+ iEditor->SetCursorPosL( length, EFalse );
+ CleanupStack::PopAndDestroy( newText );
+ iEditor->DrawNow();
+ ShowPopupListL();
+ //change the CBA
+ if ( iOpenCBA )
+ {
+ iOpenCBA = EFalse;
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ }
+ return;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::IsOpenDirToShow
+// Show which CBA is about to show
+// ---------------------------------------------------------
+//
+TBool CBrowserAdaptiveListPopup::IsOpenDirToShow()
+{
+ return iOpenCBA;
+}
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::IsPoppedUp
+// Show whether the list is popped up or not
+// ---------------------------------------------------------
+//
+TBool CBrowserAdaptiveListPopup::IsPoppedUp()
+{
+ return iPoppedUp;
+}
+
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::HandleResourceChange
+// If new skin is set the icons will be reloaded
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::HandleResourceChange( TInt aType )
+ {
+ TRAP_IGNORE( HandleResourceChangeL( aType ) );
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::HandleResourceChangeL
+// If new skin is set the icons will be reloaded
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::HandleResourceChangeL( TInt aType )
+ {
+ if (( aType == KAknsMessageSkinChange )||
+ ( aType == KEikDynamicLayoutVariantSwitch ) )
+ {
+ CArrayPtr<CGulIcon>* array =
+ iList->ItemDrawer()->ColumnData()->IconArray();
+
+ array->ResetAndDestroy();
+ delete array;
+ SetIconsL();
+ }
+
+ CCoeControl::HandleResourceChange(aType);
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+ if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect))
+ {
+ SetRect(rect);
+ }
+ }
+
+ if ( ( aType == KEikDynamicLayoutVariantSwitch ) && ( iPoppedUp ) )
+ {
+
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ SetOrdinalPosition( 0 );
+ }
+
+ TInt selectionIndex = -1;
+ HBufC* originalText = NULL;
+ TInt popitem( 0 );
+ if ( iList->HighLightEnabled() )
+ {
+ selectionIndex = iList->CurrentItemIndex();
+ //save the editors content
+ originalText = iEditor->GetTextInHBufL();
+ if (originalText == NULL)
+ {
+ originalText = KNullDesC().AllocL();
+ }
+ CleanupStack::PushL( originalText );
+ ++popitem;
+ //write back the first string
+ iEditor->SetTextL( iFirstGotoContent );
+ iEditor->HandleTextChangedL();
+ }
+ ShowPopupListL(ETrue);
+ if ( selectionIndex > -1)
+ {
+ iEditor->SetTextL( originalText );
+ iEditor->SetCursorPosL( originalText->Length(), EFalse );
+ iEditor->HandleTextChangedL();
+ iList->SetHighLight( ETrue );
+ iList->ScrollToMakeItemVisible( selectionIndex );
+ iList->SetCurrentItemIndex( selectionIndex );
+ DrawNow();
+ iEditor->DrawNow();
+ }
+ if ( popitem )
+ {
+ CleanupStack::PopAndDestroy( popitem ); // originalText
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::SetIconsL()
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::SetIconsL()
+{
+ CArrayPtr<CGulIcon>* icons =
+ new(ELeave) CAknIconArray( KMaxIcons );
+ CleanupStack::PushL(icons); // PUSH Icon
+ CGulIcon* newIcon;
+ CFbsBitmap *newIconBmp;
+ CFbsBitmap *newIconMaskBmp;
+
+ TParse* fp = new(ELeave) TParse();
+ CleanupStack::PushL(fp);
+ TInt err = fp->Set(KBrowserDirAndFile, &KDC_APP_BITMAP_DIR, NULL);
+ if (err != KErrNone)
+ {
+ User::Leave(err);
+ }
+ TBuf<KMaxFileName> iconFile= fp->FullName();
+ CleanupStack::PopAndDestroy(fp);
+
+ MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlFolderAdap,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFile,
+ EMbmBrowserQgn_prop_wml_folder_adap,
+ EMbmBrowserQgn_prop_wml_folder_adap_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlBmAdap,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFile,
+ EMbmBrowserQgn_prop_wml_bm_adap,
+ EMbmBrowserQgn_prop_wml_bm_adap_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ iList->ItemDrawer()->FormattedCellData()->SetIconArrayL(icons);
+ CleanupStack::Pop(); // POP Icon
+}
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::SetUrlSuffixList()
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::SetUrlSuffixList(HBufC* urlSuffixList)
+ {
+ iUrlSuffixBuf = urlSuffixList;
+ }
+
+// ---------------------------------------------------------
+// CBrowserAdaptiveListPopup::SetMaxRecentUrls()
+// ---------------------------------------------------------
+//
+void CBrowserAdaptiveListPopup::SetMaxRecentUrls (TInt maxRecentUrls)
+ {
+ iMaxRecentUrlsToShow = maxRecentUrls;
+ }
+
+TInt CBrowserAdaptiveListPopup::ListScrollTimerCallBack(TAny* aAny)
+ {
+ CBrowserAdaptiveListPopup* self = static_cast<CBrowserAdaptiveListPopup*>( aAny );
+ self->DoListScrolling();
+ self->iListScrollTimer->Cancel();
+ return KErrNone;
+ }
+
+void CBrowserAdaptiveListPopup::DoListScrolling()
+ {
+ iList->ScrollToMakeItemVisible( iList->Model()->NumberOfItems()-1 );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,888 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserBookmarksContainer.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknViewAppUi.h>
+#include <aknsfld.h>
+#include <avkon.mbg>
+#include <BrowserNG.rsg>
+#include <favouritesitem.h>
+#include <FeatMgr.h>
+#include "BrowserBookmarksView.h"
+
+#include "CommonConstants.h"
+#include "BrowserFavouritesView.h"
+#include "BrowserBookmarksContainer.h"
+#include "BrowserBookmarksGotoPane.h"
+#include "BrowserFavouritesListbox.h"
+#include "BrowserUtil.h"
+#include "BrowserAppUi.h"
+#include "BrowserBookmarksListboxIconHandler.h"
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include "BrowserApplication.h"
+#include <csxhelp/browser.hlp.hrh>
+#endif // __SERIES60_HELP
+#include "Logger.h"
+#include <e32event.h>
+#include <browseruisdkcrkeys.h>
+#include <StringLoader.h>
+
+// CONSTANTS
+
+/// Tab index for Bookmarks View.
+LOCAL_D const TInt KBookmarkTabIndex = 0;
+const TInt KMaxTitleLength = 512;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::NewL
+// ---------------------------------------------------------
+//
+CBrowserBookmarksContainer* CBrowserBookmarksContainer::NewL(
+ const TRect& aRect,
+ CBrowserFavouritesView& aView)
+ {
+ CBrowserBookmarksContainer* container =
+ new (ELeave) CBrowserBookmarksContainer;
+ CleanupStack::PushL( container );
+ container->ConstructL( aRect, aView );
+ CleanupStack::Pop(); // container
+ return container;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::~CBrowserBookmarksContainer
+// ---------------------------------------------------------
+//
+CBrowserBookmarksContainer::~CBrowserBookmarksContainer()
+ {
+ delete iGotoPane;
+ delete iSearchPane;
+ delete iDefaultSearchText;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::SetGotoActiveL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::SetGotoActiveL()
+ {
+ if( !iGotoPaneActive)
+ {
+ iGotoPaneActive = ETrue;
+
+ Listbox()->UpdateFilterL();
+ if( iSearchPane )
+ {
+ iGotoPane->SetVKBFlag( EFalse );
+ // Check for Search Configuration Changes //
+ if( View().ApiProvider().Preferences().GetIntValue( KBrowserSearchIconId )
+ != iSearchIconId )
+ {
+ ConstructSearchPaneL();
+ }
+
+ iSearchPane->SetFocus( EFalse );
+ // only one editor can be active at a time //
+ iSearchPaneActive = EFalse;
+ // we still need to display search, when showing for first time //
+ iSearchPane->MakeVisible(ETrue);
+ iSearchPane->CancelEditingL();
+ }
+
+ // redraw
+ SizeChanged();
+
+ // It is important to set the Text and Italic property after SizeChanged, because
+ // iInputFrame->SetRect() event on GoTo/Search Pane calls the scalable version
+ // ( AknLayoutUtils::LayoutEdwinScalable ) which overwrites all the properties for
+ // Char and Para Formats.
+ if( iSearchPane )
+ {
+ iSearchPane->SetTextModeItalicL();
+ HBufC* text = iSearchPane->GetTextL();
+ CleanupStack::PushL( text );
+ if ( !text->Length() )
+ {
+ //TODO: read possible title valu from cenrep, if not found seyt the default text
+ HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
+ TPtr searchProviderPtr = searchProvider->Des();
+
+ View().ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
+ KMaxTitleLength , searchProviderPtr);
+ if( searchProvider->Length() == 0 )
+ {
+ iSearchPane->SetTextL( *iDefaultSearchText );
+ }
+ else
+ {
+ iSearchPane->SetTextL( searchProviderPtr );
+ }
+ CleanupStack::PopAndDestroy(searchProvider);
+
+ }
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ iGotoPane->BeginEditingL();
+ DrawDeferred();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::SetSearchActiveL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::SetSearchActiveL()
+ {
+ if( ! iSearchPaneActive )
+ {
+ // Check for Search Configuration Changes //
+ if( View().ApiProvider().Preferences().GetIntValue( KBrowserSearchIconId )
+ != iSearchIconId )
+ {
+ ConstructSearchPaneL();
+ }
+
+ iSearchPane->SetVKBFlag( EFalse );
+ iSearchPane->SetFocus( ETrue );
+ iSearchPaneActive = ETrue;
+
+ Listbox()->UpdateFilterL();
+ // only one editor can be active at a time
+ iGotoPaneActive = EFalse;
+ iGotoPane->MakeVisible(ETrue);
+ iGotoPane->SetFocus( EFalse );
+ iGotoPane->CancelEditingL();
+
+ // redraw
+ SizeChanged();
+
+ // Not Focused, so set the current Text Mode to italics.
+ iGotoPane->SetTextModeItalicL();
+ // if gotopane is empty add default text
+ HBufC* text = iGotoPane->GetTextL();
+ CleanupStack::PushL( text );
+ if ( !text->Length() )
+ {
+ iGotoPane->SetTextL( KWWWString );
+ }
+ CleanupStack::PopAndDestroy( text );
+
+ iSearchPane->BeginEditingL();
+ DrawDeferred();
+ }
+
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::SetGotoInactiveL();
+// ---------------------------------------------------------
+//
+
+void CBrowserBookmarksContainer::SetGotoInactiveL()
+ {
+ if( iGotoPaneActive || iSearchPaneActive )
+ {
+
+ if( iSearchPane )
+ {
+ /* In Search Feature we have to move between the editors preserving the
+ * text added, clear the text when cancel is pressed.
+ */
+ iGotoPane->SetTextL( KNullDesC , ETrue );
+ SetSearchInactiveL();
+ }
+ // Deactivate GoTo Pane
+ iGotoPaneActive = EFalse;
+
+ // Deactivate GoTo Pane
+ iGotoPane->MakeVisible( EFalse );
+ iGotoPane->CancelEditingL();
+ iGotoPane->SetFocus( EFalse );
+
+ // redraw
+ Listbox()->UpdateFilterL();
+ SizeChanged();
+ DrawDeferred();
+ }
+ }
+
+void CBrowserBookmarksContainer::SetSearchInactiveL()
+ {
+ iSearchPaneActive = EFalse;
+ iSearchPane->SetTextL( KNullDesC , ETrue);
+ iSearchPane->MakeVisible( EFalse );
+ iSearchPane->CancelEditingL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::CountComponentControls
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksContainer::CountComponentControls() const
+ {
+ return (Listbox() ? 1 : 0) + (iGotoPane ? 1 : 0) + (iSearchPane? 1 : 0) ;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CBrowserBookmarksContainer::ComponentControl
+( TInt aIndex ) const
+ {
+ switch (aIndex)
+ {
+ case 0:
+ {
+ return Listbox();
+ }
+
+ case 1:
+ {
+ return iGotoPane;
+ }
+ case 2:
+ {
+ return iSearchPane;
+ }
+ default:
+ {
+ return NULL;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::SizeChanged
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::SizeChanged()
+ {
+ TRect rect = Rect();
+ TInt unfilteredNumberOfItems = Listbox()->UnfilteredNumberOfItems();
+
+ // if goto pane is active
+ if( iGotoPaneActive || iSearchPaneActive )
+ {
+ if( iSearchPane )
+ {
+ TAknWindowLineLayout findPane = AknLayout::find_pane();
+
+ // Enable / disable line in Goto Pane (hide if listbox is empty).
+ iGotoPane->SetLineState( unfilteredNumberOfItems > 0 );
+
+ TAknWindowLineLayout listLayout = AknLayout::list_gen_pane( 1 );
+
+ TRect listBoxRect = AknLayoutUtils::RectFromCoords( rect,listLayout.il,
+ listLayout.it, listLayout.ir, listLayout.ib, listLayout.iW, listLayout.iH);
+
+ /* Now we need to make room for both Goto and Search Pane.
+ * No layout specification was suitable for this case, so
+ * substracting the height of pane.
+ */
+ listBoxRect.iBr.iY -= findPane.iH;
+
+ // In Goto Mode, the listbox is laid out leaving space for Goto Pane.
+ Listbox()->SetRect( listBoxRect );
+
+
+ // Now Lay out Search Pane as if it was the old Find Pane.
+ AknLayoutUtils::LayoutControl( iSearchPane, rect, findPane );
+
+ TRect gotoRect = AknLayoutUtils::RectFromCoords( rect,findPane.il, findPane.it,
+ findPane.ir, findPane.ib, findPane.iW, findPane.iH);
+
+ // Calculate the new position for GoToPane.
+ gotoRect.iTl.iY -= ( findPane.iH );
+ gotoRect.iBr.iY -= ( findPane.iH );
+ iGotoPane->SetRect( gotoRect );
+
+ }
+ else
+ {
+ // Enable / disable line in Goto Pane (hide if listbox is empty).
+ iGotoPane->SetLineState( unfilteredNumberOfItems > 0 );
+
+ // In Goto Mode, the listbox is laid out leaving space for Goto Pane.
+ AknLayoutUtils::LayoutControl( Listbox(), rect, AknLayout::list_gen_pane( 1 ));
+
+ // Lay out Goto Pane as if it was the old Find Pane.
+ AknLayoutUtils::LayoutControl( iGotoPane, rect, AknLayout::find_pane() );
+ }
+ }
+ else
+ {
+ // Fall back upon default behavior in base-class, which lays out the bookmarks list only
+ CBrowserFavouritesContainer::SizeChanged();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CBrowserBookmarksContainer::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+/*
+LOG_ENTERFN( "BookmarksContainer::OfferKeyEventL" );
+BROWSER_LOG( ( _L("aType: %d, aKeyEvent.iCode: %d, iScanCode: %d, iRepeats: %d"),
+ aType, aKeyEvent.iCode, aKeyEvent.iScanCode, aKeyEvent.iRepeats ) );
+*/
+ TKeyResponse result = EKeyWasNotConsumed;
+ TKeyEvent keyEvent( aKeyEvent );
+
+ // Selection Key handling
+ if( keyEvent.iScanCode == EStdKeyDevice3 )
+ {
+ // it is possible to activate BookmarksView from ContentView
+ // via a long press of Selection key, so here we must capture
+ // the KeyDown. Long press processing will be done only if key
+ // was pressed originally in this view.
+ if( aType == EEventKeyDown )
+ {
+ iSelectionKeyDownPressed = ETrue;
+ result = EKeyWasConsumed;
+ }
+ else if( aType == EEventKeyUp )
+ {
+ if( !iSelectionKeyLongPress && iSelectionKeyDownPressed )
+ {
+ // short press of Selection key, pass it to GotoPane
+ keyEvent.iCode = EKeyOK;
+ result = EKeyWasNotConsumed;
+ }
+ else
+ {
+ // long press of Selection key was already processed
+ result = EKeyWasConsumed;
+ }
+ iSelectionKeyDownPressed = EFalse;
+ iSelectionKeyLongPress = EFalse;
+ }
+ else if( aType == EEventKey )
+ {
+ if( keyEvent.iRepeats && iSelectionKeyDownPressed )
+ {
+ const CFavouritesItem* item = Listbox()->CurrentItem();
+ if ( item )
+ {
+ // The option for the user to download the page in new window is disabled
+ CBrowserAppUi::Static()->FetchBookmarkL( *item );
+ }
+ iSelectionKeyLongPress = ETrue;
+ iSelectionKeyDownPressed = EFalse;
+ }
+
+ if ( (aKeyEvent.iScanCode == EStdKeyHash) ||
+ ( aKeyEvent.iModifiers &
+ ( EModifierShift | EModifierLeftShift | EModifierRightShift |
+ EModifierCtrl | EModifierLeftCtrl | EModifierRightCtrl ) ) )
+ {
+
+ // Hash key press will be used for Mark/UnMark functionality
+ // Let Platform Listbox handle this.
+ result = EKeyWasNotConsumed;
+ }
+ else
+ {
+ result = EKeyWasConsumed;
+ }
+ }
+ }
+
+ // If the Goto Pane exists and we're not fetching, decide
+ // if we should pass key event to the goto pane
+ if ( iGotoPane && ( !CBrowserAppUi::Static()->Fetching() || iGotoPaneActive ) )
+ {
+ // If the key hadn't been consumed, so far, determine if the keystroke
+ // should be handled by goto pane
+ if ( ( result == EKeyWasNotConsumed ) || iSearchPaneActive )
+ {
+ // Goto pane has highest priority; if it's active, arrow keys go there.
+ // If fetching is in progress, no key events are offered, to prevent it
+ // from getting the focus and popping up a new CBA.
+
+ // Enter Key now handled through HandleCommand in BrowserBookmarksView like MSK
+ // This change affects the enter key on the QWERTY keyboard when we run emulator
+ if ( EStdKeyEnter == aKeyEvent.iScanCode && EEventKey == aType &&
+ AknLayoutUtils::MSKEnabled() &&
+ ( iGotoPaneActive || iSearchPaneActive ) )
+ {
+ // Handle MSK press
+ CEikButtonGroupContainer* myCba = CEikButtonGroupContainer::Current();
+ if ( myCba != NULL )
+ {
+ TInt cmdId = myCba->ButtonGroup()->CommandId(CEikButtonGroupContainer::EMiddleSoftkeyPosition);
+ View().HandleCommandL(cmdId);
+ result = EKeyWasConsumed;
+ }
+ }
+ else
+ {
+ if ( iSearchPane && iSearchPaneActive)
+ {
+ // Process separately for Search Feature
+ if ( iGotoPaneActive )
+ {
+ result = iGotoPane->OfferKeyEventL( keyEvent, aType );
+ }
+ else
+ {
+ result = iSearchPane->OfferKeyEventL( keyEvent, aType );
+ }
+ }
+ else
+ {
+ if ( iGotoPaneActive )
+ {
+ // Once activated let goto pane handle all the keys
+ result = iGotoPane->OfferKeyEventL( keyEvent, aType );
+ }
+ else // if ( !iGotoPaneActive )
+ {
+ // Only a valid digit or character should popup the goto pane.
+ // We will ignore h/w key events, i.e. camera cover, camera
+ // shutter, zoom, etc... iCode is only valid for EEventKey,
+ // not EEventKeyDown, so we have to use iScanCode. because
+ // the goto pane decides to popup on EEventKeyDown. Use
+ // upper case of iScanCode since there is no overlap of
+ // h/w scan codes and uppercase letters.
+ TChar inputCharCode( aKeyEvent.iScanCode );
+ TBool isDigit = inputCharCode.IsDigit();
+ TUint upperCase = inputCharCode.GetUpperCase();
+ if ( isDigit ||
+ (( upperCase >= 0x41 /*A*/ ) && ( upperCase <= 0x5A /*Z*/ )) )
+ {
+ // Valid digit or character was entered, let goto pane
+ // determine if it handles the keys from here on.
+ result = iGotoPane->OfferKeyEventL( aKeyEvent, aType );
+ if ( result == EKeyWasConsumed )
+ {
+ // goto pane is not active, make it active now
+ SetGotoActiveL();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if ( iSearchPane )
+ {
+ if ( ( iGotoPaneActive || iSearchPaneActive) &&
+ result == EKeyWasNotConsumed )
+ {
+
+ if ( aKeyEvent.iCode == EKeyUpArrow )
+ {
+ result = EKeyWasConsumed;
+ if ( iSearchPaneActive )
+ {
+ SetGotoActiveL();
+ iGotoPane->SetVKBFlag( ETrue );
+ }
+ }
+
+ if ( aKeyEvent.iCode == EKeyDownArrow )
+ {
+ result = EKeyWasConsumed;
+ if ( iGotoPaneActive )
+ {
+ SetSearchActiveL();
+ iSearchPane->SetVKBFlag( ETrue );
+ }
+ }
+ }
+ }
+ }
+
+ // For handling Enter key in emulator / Keyboard ( Enter key should behave similar to MSK )
+ if ( EStdKeyEnter == keyEvent.iScanCode && EEventKey == aType &&
+ AknLayoutUtils::MSKEnabled() && result == EKeyWasNotConsumed )
+ {
+ CEikButtonGroupContainer* myCba = CEikButtonGroupContainer::Current();
+ if(myCba != NULL)
+ {
+ TInt cmdId = myCba->ButtonGroup()->CommandId(CEikButtonGroupContainer::EMiddleSoftkeyPosition);
+ if(EAknSoftkeyContextOptions == cmdId)
+ {
+ View().MenuBar()->TryDisplayContextMenuBarL();
+ result = EKeyWasConsumed;
+ }
+ else if(Listbox()->Model()->ItemTextArray()->MdcaCount() == 0)
+ {
+ View().HandleCommandL(cmdId);
+ result = EKeyWasConsumed;
+ }
+ }
+ }
+
+ if ( result == EKeyWasNotConsumed )
+ {
+ // Otherwise, base class handles Find pane, arrows between folders and
+ // the listbox.
+ result = CBrowserFavouritesContainer::OfferKeyEventL( keyEvent, aType );
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::HandleCursorChangedL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::HandleCursorChangedL
+( CEikListBox*
+#ifdef _DEBUG
+ aListBox // used only for debugging purposes
+#endif
+ )
+ {
+#ifdef _DEBUG
+ __ASSERT_DEBUG( aListBox == Listbox(),
+ Util::Panic( Util::EFavouritesBadListbox ) );
+#endif
+
+ if ( iGotoPane->IsVisible() )
+ {
+ // Set Goto Pane text (URL or default http text) - this will cancel
+ // Goto Pane editing.
+ TPtrC url( KWWWString );
+ TBrowserFavouritesSelectionState selection =
+ Listbox()->SelectionStateL();
+ if ( !selection.AnyMarked() && selection.CurrentIsItem() )
+ {
+ // Exactly one item is selected.
+ const CFavouritesItem* item = Listbox()->CurrentItem();
+ if ( item ) // Sanity check.
+ {
+ // If one item is highlighted, set to current URL.
+ url.Set( Util::StripUrl( item->Url() ) );
+ }
+ }
+ iGotoPane->SetTextL( url, ETrue );
+ iGotoPane->SetFocus ( EFalse );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::IsEditing
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarksContainer::IsEditing()
+ {
+ TBool editing = EFalse;
+ editing = iGotoPane->IsEditing();
+ return editing;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::IsEditingSearch
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarksContainer::IsEditingSearch()
+ {
+ TBool editing = EFalse;
+ if( iSearchPane )
+ {
+ editing = iSearchPane->IsEditing();
+ }
+ return editing;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::TabIndex
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksContainer::TabIndex()
+ {
+ return KBookmarkTabIndex;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::ListboxEmptyTextResourceId
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksContainer::ListboxEmptyTextResourceId()
+ {
+ return R_BROWSER_BOOKMARKS_TEXT_NO_BOOKMARKS;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::TitleResourceId
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksContainer::TitleResourceId()
+ {
+ return R_BROWSER_OPTION_BOOKMARKS;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::CBrowserBookmarksContainer
+// ---------------------------------------------------------
+//
+CBrowserBookmarksContainer::CBrowserBookmarksContainer()
+ : iGotoPaneActive( EFalse ),
+ iSearchPaneActive(EFalse)
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::ConstructComponentControlsL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::ConstructComponentControlsL(
+ const TRect& aRect,
+ CBrowserFavouritesView& aView )
+ {
+ CBrowserFavouritesContainer::ConstructComponentControlsL
+ ( aRect, aView );
+
+
+ // Construct Goto Pane.
+
+ //pass view to bookmarks goto pane
+ iGotoPane = CBrowserBookmarksGotoPane::NewL( *this, &aView, KAvkonBitmapFile,
+ EMbmAvkonQgn_indi_find_goto,
+ EMbmAvkonQgn_indi_find_goto_mask);
+ iGotoPane->SetFocus( EFalse );
+
+ if( View().ApiProvider().Preferences().SearchFeature() )
+ {
+ ConstructSearchPaneL();
+ iSearchPane->SetFocus( EFalse );
+ iDefaultSearchText = StringLoader::LoadL( R_IS_WEB_SEARCH );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::CreateListboxIconHandlerL
+// ---------------------------------------------------------
+//
+MBrowserFavouritesListboxIconHandler*
+CBrowserBookmarksContainer::CreateListboxIconHandlerL()
+ {
+ return new (ELeave) TBrowserBookmarksListboxIconHandler;
+ }
+
+#ifdef __SERIES60_HELP
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::GetHelpContext()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KUidBrowserApplication;
+ aContext.iContext = KOSS_HLP_BM_MAIN;
+ }
+#endif // __SERIES60_HELP
+
+// ---------------------------------------------------------
+// CBrowserBookmarksContainer::FocusChanged()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksContainer::FocusChanged( TDrawNow aDrawNow )
+ {
+ if ( IsEditing() )
+ {
+ iGotoPane->SetFocus( IsFocused(), aDrawNow );
+ }
+ else if( IsEditingSearch() )
+ {
+ iSearchPane->SetFocus( IsFocused(), aDrawNow );
+ }
+ else if ( Listbox() && Listbox()->IsVisible() )
+ {
+ Listbox()->SetFocus( IsFocused(), aDrawNow );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksContainer::HandlePointerEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ if (AknLayoutUtils::PenEnabled())
+ {
+ // if goto is active, if a pointer event falls within its rect,
+ // pass all pointer events to it (such as, to bring up the editor's letter-entry)
+ //
+ // otherwise, if it falls within the listbox's rect
+ //
+
+ // Now we have two different panes so we have to check explicitly before passing controls
+ // to any panes.
+ if( iGotoPane && ( iGotoPaneActive || iSearchPaneActive) )
+ {
+ if( iSearchPane )//implies presence of search feature.
+ {
+ if( iGotoPane->Rect().Contains( aPointerEvent.iPosition) )
+ {
+ if( !iGotoPaneActive )
+ {
+ SetGotoActiveL();
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ else
+ {
+#endif
+ iGotoPane->HandlePointerEventL(aPointerEvent);
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ }
+#endif
+
+ iGotoPane->SetVKBFlag( ETrue );
+ }
+ else if( iSearchPane->Rect().Contains( aPointerEvent.iPosition) )
+ {
+ if( !iSearchPaneActive )
+ {
+ SetSearchActiveL();
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ else
+ {
+#endif
+ iSearchPane->HandlePointerEventL(aPointerEvent);
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ }
+#endif
+
+ iSearchPane->SetVKBFlag( ETrue );
+ }
+ else
+ {
+ if(aPointerEvent.iType == TPointerEvent::EButton1Down )
+ {
+ CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneCancel);
+ SetGotoInactiveL();
+ }
+ }
+ }
+ else
+ {
+ iGotoPane->HandlePointerEventL(aPointerEvent);
+ }
+ }
+ else
+ {
+ // normally, pass all pointer events down to the listbox
+ Listbox()->HandlePointerEventL(aPointerEvent);
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksContainer::ConstructSearchPaneL
+// ----------------------------------------------------------------------------
+//
+
+void CBrowserBookmarksContainer::ConstructSearchPaneL()
+ {
+ TFileName iconFile;
+ MPreferences& preferences = View().ApiProvider().Preferences();
+
+ TInt iconId = preferences.GetIntValue( KBrowserSearchIconId );
+ // Get the Search Icon File Path.
+ preferences.GetStringValueL( KBrowserSearchIconPath, KMaxFileName, iconFile );
+
+ // If Icon File Path Changed or Icon Id Changed, Refresh the Icon for Search Pane.
+ // Comparing Icon File path as well, because it may be possible that two different
+ // Icon files have same icon id.
+ if( iconId != iSearchIconId
+ || iSearchIconFilePath.Compare( iconFile ) != 0 )
+ {
+
+ TInt iconMaskId = preferences.GetIntValue( KBrowserSearchIconMaskId );
+
+ // Save IconId
+ iSearchIconId = iconId;
+ // Save Icon File
+ iSearchIconFilePath = iconFile;
+
+
+ // No Icon file or IconId or IconMaskId set , then it means no search provider is still
+ // selected and set by search application, in that case we use the default icon for Search.
+ if( ! iconFile.Length()
+ || iconId == -1
+ || iconMaskId == -1 )
+ {
+ iconId = EMbmAvkonQgn_indi_find_glass;
+ iconMaskId = EMbmAvkonQgn_indi_find_glass_mask;
+ iconFile = KAvkonBitmapFile;
+ }
+
+ if( iSearchPane )
+ {
+ delete iSearchPane;
+ iSearchPane = NULL;
+ }
+
+
+ // iSearchPane != NULL, implies presence of search feature, hence it can be
+ // used to validate search feature avoiding repetative calls to utils and
+ // avoiding need of separate variable.
+ iSearchPane = CBrowserBookmarksGotoPane::NewL( *this,
+ &(View()),
+ iconFile,
+ iconId,
+ iconMaskId,
+ GOTOPANE_POPUPLIST_DISABLE,
+ ETrue
+ );
+
+ CBrowserBookmarksView* bookmarkView = REINTERPRET_CAST( CBrowserBookmarksView* , &( View() ));
+ // Set Pane observer
+ iSearchPane->SetGPObserver( bookmarkView );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksContainer::HandleResourceChange
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksContainer::HandleResourceChange(TInt aType)
+ {
+ CBrowserFavouritesContainer::HandleResourceChange( aType);
+ if( aType == KEikDynamicLayoutVariantSwitch)
+ {
+ // If search feature exsist
+ if( iSearchPane )
+ {
+ if( iSearchPaneActive )
+ {
+ iGotoPane->SetTextModeItalicL( );
+ }
+ else
+ {
+ iSearchPane->SetTextModeItalicL( );
+ }
+ }
+ }
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksEditDialog.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,523 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserBookmarkEditDialog.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <BrowserNG.rsg>
+#include <eikmenup.h>
+#include <eikseced.h>
+#include <eikenv.h>
+#include <avkon.hrh>
+#include <AknQueryDialog.h>
+#include <eikcapc.h>
+#include <AknPopupField.h>
+#include <AknQueryValueText.h>
+#include <AknKeys.h>
+#include <favouritesitem.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+
+#include <aknconsts.h>
+#include <akneditstateindicator.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <Uri16.h> // TUriParser
+
+#include "BrowserBookmarksEditFormApModel.h"
+#include "BrowserBookmarksEditDialog.h"
+#include "BrowserFavouritesModel.h"
+#include "BrowserDialogs.h"
+#include "BrowserAppUi.h"
+#include "BrowserAppViewBase.h"
+#include "commonconstants.h"
+#include "Browser.hrh"
+#include "BrowserUtil.h"
+
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include "BrowserApplication.h"
+#include <csxhelp/browser.hlp.hrh>
+#endif // __SERIES60_HELP
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::NewL
+// ---------------------------------------------------------
+//
+CBrowserBookmarkEditDialog* CBrowserBookmarkEditDialog::NewL
+ (
+ CFavouritesItem& aItem,
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ //MCommsModel& aCommsModel,
+ TInt aUid /* = KFavouritesNullUid */
+ )
+ {
+ CBrowserBookmarkEditDialog* form =
+ new (ELeave) CBrowserBookmarkEditDialog(
+ aItem,
+ aModel,
+ aApiProvider,
+ aUid
+ );
+ CleanupStack::PushL( form );
+ form->ConstructL( /* aApiProvider.CommsModel() */ );
+ CleanupStack::Pop(); // form
+ return form;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::~CBrowserBookmarkEditDialog
+// ---------------------------------------------------------
+//
+CBrowserBookmarkEditDialog::~CBrowserBookmarkEditDialog()
+ {
+ delete iFormApModel;
+ delete iNaviDecorator;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::ProcessCommandL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::ProcessCommandL( TInt aCommandId )
+ {
+ switch ( aCommandId )
+ {
+ case EAknCmdExit:
+ {
+ // Custom added commands. Forward to view.
+ // Note that we respond to EAknCmdExit, not CEikCmdExit; it's
+ // because we don't get it through the AppUi framework (instead,
+ // we forward it there now).
+ CBrowserAppUi::Static()->HandleCommandL(EWmlCmdUserExit);
+ break;
+ }
+
+#ifdef __SERIES60_HELP
+
+ case EAknCmdHelp:
+ {
+ CBrowserAppUi::Static()->HandleCommandL(EAknCmdHelp);
+ break;
+ }
+
+#endif //__SERIES60_HELP
+
+ default:
+ {
+ // Standard form commands.
+ CAknForm::ProcessCommandL( aCommandId );
+ if ( iExitDialog )
+ {
+ TryExitL( EAknSoftkeyBack );
+ }
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::CBrowserBookmarkEditDialog
+// ---------------------------------------------------------
+//
+CBrowserBookmarkEditDialog::CBrowserBookmarkEditDialog
+ (
+ CFavouritesItem& aItem,
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ TInt aUid
+ )
+ : iItem( &aItem ),
+ iModel( &aModel ),
+ iUid( aUid ),
+ iExitDialog( EFalse ),
+ iExitNoteResourceId( 0 ), // By default do not show any note.
+ iApiProvider( aApiProvider )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::ConstructL( /*MCommsModel& aCommsModel*/ )
+ {
+ CAknForm::ConstructL();
+ iFormApModel = CBrowserBookmarksEditFormApModel::NewL( ApiProvider().CommsModel()/*aCommsModel*/ );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarkEditDialog::OkToExitL
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserBookmarkEditDialog::OkToExitL( TInt aButtonId )
+ {
+ TBool ret = CAknForm::OkToExitL( aButtonId );
+ if ( ret && iExitNoteResourceId )
+ {
+ // Exiting; show appropriate note if applicable.
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_INFO_NOTE, iExitNoteResourceId );
+ }
+ //pop empty label from navipane
+ if ( ret )
+ iNaviPane->Pop();
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::SaveFormDataL
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarkEditDialog::SaveFormDataL()
+ {
+ // Of KWmlFavouritesMaxUrlDefine, KWmlFavouritesMaxUsernameDefine, KWmlFavouritesMaxPasswordDefine
+ // and KWmlFavouritesMaxBookmarkNameDefine the biggest is KWmlFavouritesMaxUrlDefine.
+ TBuf<KFavouritesMaxUrlDefine> buf;
+
+ // Get title.
+ GetEdwinText( buf, EWmlControlEditBmEditTitle );
+ iItem->SetNameL( buf.Left(KFavouritesMaxName) );
+
+ // Get address.
+ GetEdwinText( buf, EWmlControlEditBmEditAddress );
+ HBufC* text = HBufC::NewL(KFavouritesMaxUrlDefine);
+
+ // Do not check return value from Parse(). If the user wants to create a
+ // badly formed url then let them do so.
+ TUriParser url;
+ url.Parse( buf );
+
+ // Add a default scheme if it is not already present.
+ if( !url.IsPresent( EUriScheme ) )
+ {
+ _LIT( KBookmarkDefaultScheme, "http://" );
+
+ text->Des().Copy( KBookmarkDefaultScheme );
+ }
+ // Error prone code. If user enters the whole KFavouritesMaxUrlDefine(1024) amount of
+ // characters with out the http:// infront, well have a USER:23 here.
+ // Hack aplied for now and included in FIX: EKDN-7P64KZ
+ // Needs a proper error raised and a fix.
+ //
+ // Check if long enough and append, if not we dont add http://
+ // and alert user in SaveItemL() with popup that there must be an url
+ // NOTICE: THIS NEEDS A PROPER FIX - THIS IS A TEMP WORKAROUND
+ if( ( buf.Length() + text->Length() ) <= KFavouritesMaxUrlDefine )
+ {
+ text->Des().Append( buf );
+ }
+ else
+ {
+ text->Des().Copy( buf );
+ }
+
+
+ Util::EncodeSpaces(text);
+ CleanupStack::PushL(text);// push after encode because the pointer may change
+ iItem->SetUrlL( text->Des() );
+ CleanupStack::PopAndDestroy();// text
+
+ // Get username.
+ GetEdwinText( buf, EWmlControlEditBmEditUsername );
+ iItem->SetUserNameL( buf );
+
+ // Get password.
+ STATIC_CAST( CEikSecretEditor*, Control( EWmlControlEditBmEditPassword ) )
+ ->GetText( buf );
+ iItem->SetPasswordL( buf );
+
+ // Get WAP Access point.
+ TFavouritesWapAp ap = iFormApModel->CurrentWapAp();
+ if ( !ap.IsNull() )
+ {
+ // We set it back only if not NULL.
+ // AP is NULL if invalid (bookmark was edited, but the ap was not and
+ // it is left "Invalid". In that case we leave ap as-is.
+ iItem->SetWapAp( ap );
+ }
+
+ return SaveItemL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::DynInitMenuPaneL
+( TInt aResourceId, CEikMenuPane* aMenuPane )
+ {
+ CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane );
+ if ( aResourceId == R_AVKON_FORM_MENUPANE )
+ {
+ // Disallow user addition / deletion / labeling.
+ aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue );
+ aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue );
+ aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue );
+ // Add "Exit".
+ aMenuPane->AddMenuItemsL
+ ( R_BROWSER_BOOKMARKS_MENU_PANE_EDIT_BOOKMARK );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::PreLayoutDynInitL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::PreLayoutDynInitL()
+ {
+ LoadFormDataL();
+ CAknForm::PreLayoutDynInitL();
+
+ CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane();
+ // Fetch pointer to the default navi pane control
+ iNaviPane =
+ (CAknNavigationControlContainer*)sp->ControlL(
+ TUid::Uid( EEikStatusPaneUidNavi ) );
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL( _L("") );
+
+ // push empty label, to avoid tab group visibility in BookmarkEditor.
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::LoadFormDataL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::LoadFormDataL()
+ {
+
+ // Set title.
+ const TPtrC tptrcName = iItem->Name();
+ STATIC_CAST( CEikEdwin*, Control( EWmlControlEditBmEditTitle ) )->
+ SetTextL( &(tptrcName) );
+
+ // Set address.
+ const TPtrC tptrcUrl = iItem->Url();
+ STATIC_CAST( CEikEdwin*, Control( EWmlControlEditBmEditAddress ) )->
+ SetTextL( &(tptrcUrl) );
+
+ // Set username.
+ const TPtrC tptrcUserName = iItem->UserName();
+ STATIC_CAST( CEikEdwin*, Control( EWmlControlEditBmEditUsername ) )->
+ SetTextL( &(tptrcUserName) );
+
+ // Set password.
+ STATIC_CAST( CEikSecretEditor*,Control( EWmlControlEditBmEditPassword ) )->
+ SetText( iItem->Password() );
+
+ // Set WAP Access Point popup field's query value.
+ CAknPopupField* wapApSelector = STATIC_CAST
+ ( CAknPopupField*, Control( EWmlControlEditBmWapApSelector ) );
+ wapApSelector->SetQueryValueL( iFormApModel->QueryValue() );
+ // Set current WAP Access Point.
+ iFormApModel->SetCurrentWapApL( iItem->WapAp() );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::SaveItemL
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarkEditDialog::SaveItemL()
+ {
+ TInt res;
+ CBrowserFavouritesModel::TRenameMode renameMode =
+ CBrowserFavouritesModel::EDontRename;
+
+ iExitNoteResourceId = 0; // By default, do not show any note.
+
+ if ( !iItem->Name().Length() )
+ {
+ // No title for this item. Make a default name and ensure auto renaming
+ // to non-conflicting name (without user interaction).
+ iModel->SetNameToDefaultL( *iItem );
+ renameMode = CBrowserFavouritesModel::EAutoRename;
+ }
+
+ if ( iItem->Url().Length() && iItem->Url() != KHttpString && IsValidUrlHost( iItem->Url() ) )
+ {
+ if ( iUid == KFavouritesNullUid )
+ {
+ // This is a new item. Add it.
+ res = iModel->AddL( *iItem, /*aDbErrorNote=*/ETrue, renameMode );
+ }
+ else
+ {
+ // Editing an existing item. Update now.
+ res = iModel->UpdateL
+ ( *iItem, iUid, /*aDbErrorNote=*/ETrue, renameMode );
+ }
+ switch ( res )
+ {
+ case KErrNone:
+ {
+ iExitDialog = ETrue;
+ break;
+ }
+ case KErrAlreadyExists:
+ {
+ // Name conflicts. Let the user know.
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ R_BROWSER_BOOKMARKS_NAME_ALREADY_USED
+ );
+ // Set focus to name field and keep editing.
+ TryChangeFocusToL( EWmlControlEditBmEditTitle );
+ // Select all, cursor is at end.
+ CEikEdwin* nameEditor = STATIC_CAST
+ ( CEikEdwin*, Control( EWmlControlEditBmEditTitle ) );
+ nameEditor->SetSelectionL( nameEditor->TextLength(), 0 );
+ nameEditor->DrawDeferred();
+ iExitDialog = EFalse;
+ break;
+ }
+ default:
+ {
+ iExitDialog = EFalse;
+ break;
+ }
+ }
+ }
+ else
+ {
+ // No Address. Cannot save this bookmark.
+ res = TBrowserDialogs::ConfirmQueryYesNoL(
+ R_BROWSER_BOOKMARKS_TEXT_QUERY_ADDRESS );
+ if ( !res /*res == EAknSoftkeyNo*/ )
+ {
+ // User decided not to save the bookmark. Exit now.
+ iExitNoteResourceId = iModel->StringResourceId
+ ( *iItem, CBrowserFavouritesModel::ENotSaved );
+ iExitDialog = ETrue;
+ }
+ else
+ {
+ // Set focus to address field and keep editing.
+ TryChangeFocusToL( EWmlControlEditBmEditAddress );
+ CEikEdwin* urlEditor = STATIC_CAST
+ ( CEikEdwin*, Control( EWmlControlEditBmEditAddress ) );
+ // Select none, cursor is at end.
+ urlEditor->SetSelectionL
+ ( urlEditor->TextLength(), urlEditor->TextLength() );
+ urlEditor->DrawDeferred();
+ iExitDialog = EFalse;
+ }
+ }
+ return iExitDialog;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::IsValidUrlHost
+// ---------------------------------------------------------
+//
+TBool CBrowserBookmarkEditDialog::IsValidUrlHost( const TDesC& aUrl )
+ {
+ TBool isValid = EFalse;
+ _LIT(KHttpMark, "://");
+ // Get the position of end of protocol definition
+ TInt position = aUrl.Find( KHttpMark );
+ if ( position != KErrNotFound )
+ {
+ TPtrC16 url = aUrl.Right( aUrl.Length() - position - KHttpMark().Length() );
+ // Locate the next slash which is the end of host part of url
+ TInt slashLocation = url.Locate('/');
+ // We check the total length of host part of url.
+ // If over 255 we return EFalse
+ if ( slashLocation == KErrNotFound )
+ {
+ if ( ( url.Length() + position + KHttpMark().Length() ) <= 255 )
+ {
+ isValid = ETrue;
+ }
+ }
+ else
+ {
+ if ( ( position + slashLocation + KHttpMark().Length() ) <= 255 )
+ {
+ isValid = ETrue;
+ }
+ }
+ }
+ return isValid;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::GetEdwinText
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::GetEdwinText
+( TDes& aText, TInt aControlId )
+ {
+ STATIC_CAST( CEikEdwin*, Line( aControlId )->iControl )->GetText( aText );
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::HandleResourceChange( TInt aType )
+ {
+ TRAP_IGNORE( HandleResourceChangeL( aType ) );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::HandleResourceChangeL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::HandleResourceChangeL( TInt aType )
+ {
+ CAknForm::HandleResourceChange(aType);
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+ if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect))
+ {
+ SetRect(rect);
+ }
+ }
+ }
+
+#ifdef __SERIES60_HELP
+// ---------------------------------------------------------
+// CBrowserBookmarkEditDialog::GetHelpContext()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarkEditDialog::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KUidBrowserApplication;
+ if ( iUid == KFavouritesNullUid )
+ {
+ // Add bookmark help
+ aContext.iContext = KOSS_HLP_BM_ADDBM;
+ }
+ else
+ {
+ // Edit bookmark help
+ aContext.iContext = KOSS_HLP_BM_EDIT;
+ }
+ }
+#endif // __SERIES60_HELP
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksEditFormApModel.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserBookmarksEditFormApModel.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <coemain.h>
+#include <ApListItem.h>
+#include <ApListItemList.h>
+#include <AknQueryValueText.h>
+#include "BrowserBookmarksEditFormApModel.h"
+#include "CommsModel.h"
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+
+// CONSTANTS
+
+/// Granularity of iDesCArrayText.
+LOCAL_D const TInt KGranularity = 4;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::NewL
+// ---------------------------------------------------------
+//
+CBrowserBookmarksEditFormApModel*
+CBrowserBookmarksEditFormApModel::NewL( MCommsModel& aCommsModel )
+ {
+ CBrowserBookmarksEditFormApModel* model =
+ new (ELeave) CBrowserBookmarksEditFormApModel( aCommsModel );
+ CleanupStack::PushL( model );
+ model->ConstructL();
+ CleanupStack::Pop(); // model
+ return model;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::~CBrowserBookmarksEditFormApModel
+// ---------------------------------------------------------
+//
+CBrowserBookmarksEditFormApModel::~CBrowserBookmarksEditFormApModel()
+ {
+ delete iTextValue;
+ delete iTextArray;
+ delete iDesCArrayText;
+ delete iApList;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::ReadApDataL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksEditFormApModel::ReadApDataL()
+ {
+ // Work on new lists, until they are fully created.
+ CApListItemList* apList = iCommsModel->CopyAccessPointsL();
+ //CApListItemList* apList = new (ELeave) CApListItemList(); // Test empty.
+ CleanupStack::PushL( apList );
+ CDesCArrayFlat* desCArrayText =
+ new (ELeave) CDesCArrayFlat( KGranularity );
+ CleanupStack::PushL( desCArrayText );
+
+ TInt count = apList->Count();
+ if ( count )
+ {
+ // We have some access points; fill iDesCArray with names (otherwise
+ // it stays empty).
+
+ // Add "Default" first.
+ HBufC* defaultApName = CCoeEnv::Static()->AllocReadResourceLC
+ ( R_BROWSER_BOKMARKS_TEXT_DEFAULT_WAPAP );
+ desCArrayText->AppendL( *defaultApName );
+ CleanupStack::PopAndDestroy(); // defaultApName
+
+ // Then continue with real AP names.
+ TInt i;
+ TPtrC apName;
+ for ( i = 0; i < count; i++ )
+ {
+ apName.Set( apList->At( i )->Name() );
+ if ( apName.Length() > KBrowserMaxWapApName )
+ {
+ // Since AP names are of unlimited length, we might have to
+ // trim.
+ apName.Set( apName.Left( KBrowserMaxWapApName ) );
+ }
+ desCArrayText->AppendL( apName );
+ }
+ }
+
+ // Replace inst vars with new lists only after success.
+ CleanupStack::Pop( 2 ); // desCArrayText, apList: become members
+ delete iDesCArrayText; // (does not leave)
+ iDesCArrayText = desCArrayText; // (does not leave)
+ delete iApList; // (does not leave)
+ iApList = apList; // (does not leave)
+ iTextArray->SetArray( *iDesCArrayText );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::SetCurrentWapApL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksEditFormApModel::SetCurrentWapApL
+( const TFavouritesWapAp& aAp )
+ {
+ TInt count = iApList->Count();
+
+ if ( count )
+ {
+ // Default value index is KErrNotFound ("Invalid" is displayed).
+ // If AP is Null, or specified but does not exist, this value is used.
+ TInt index = KErrNotFound;
+ if ( aAp.IsDefault() )
+ {
+ // For "Default" Ap-s, highlight 0th element "Default".
+ index = 0;
+ }
+ else if ( !aAp.IsNull() )
+ {
+ // Get index of element having this ApId. If not found, index stays
+ // KErrNotFound (That will display the "Invalid" text).
+ //
+ // "Null" and "Default" checks already done: call to ApId is safe.
+ TUint32 apId = aAp.ApId();
+ TInt i;
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iApList->At( i )->Uid() == apId )
+ {
+ // Got it; i is the index of the AP in the array. Add 1
+ // to it, since 0th element is "Default".
+ index = i + 1;
+ break;
+ }
+ }
+ }
+ iTextValue->SetCurrentValueIndex( index );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::CurrentWapAp
+// ---------------------------------------------------------
+//
+TFavouritesWapAp CBrowserBookmarksEditFormApModel::CurrentWapAp() const
+ {
+ TFavouritesWapAp ap;
+
+ ap.SetNull(); // "Null" value used if no AP-s exist or AP is "Invalid".
+
+ TInt count = iApList->Count();
+ if ( count )
+ {
+ TInt index = iTextValue->CurrentValueIndex();
+ if ( index == 0 )
+ {
+ // Oth element ("Default").
+ ap.SetDefault();
+ }
+ else if ( index > 0 && index <= count )
+ {
+ // "Index-1" is a valid index into array (real AP).
+ //
+ // (CurrentValueIndex may return an out-of-bounds value, if AP is
+ // "Invalid". This value is -1; but is not well published; so
+ // instead of testing for -1, we do proper range checking. That
+ // is the safest we can do, and adds minuscule overhead.)
+ ap.SetApId( iApList->At( index - 1 )->Uid() );
+ }
+ }
+
+ return ap;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::ApCount
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksEditFormApModel::ApCount()
+ {
+ return iApList->Count();
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::CBrowserBookmarksEditFormApModel
+// ---------------------------------------------------------
+//
+CBrowserBookmarksEditFormApModel::CBrowserBookmarksEditFormApModel
+( MCommsModel& aCommsModel )
+: iCommsModel( &aCommsModel )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksEditFormApModel::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksEditFormApModel::ConstructL()
+ {
+ iApList = new (ELeave) CApListItemList();
+ iDesCArrayText = new (ELeave) CDesCArrayFlat( KGranularity );
+ iTextArray = CAknQueryValueTextArray::NewL();
+ iTextArray->SetArray( *iDesCArrayText );
+ iTextValue = CAknQueryValueText::NewL();
+ iTextValue->SetArrayL( iTextArray );
+
+ ReadApDataL();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksGotoPane.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,858 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserBookmarksGotoPane.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <Browser_Platform_Variant.hrh>
+
+#include <akninfrm.h>
+#include <eikedwin.h>
+#include <favouriteslimits.h>
+
+#include <aknconsts.h>
+#include <akneditstateindicator.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <AknsFrameBackgroundControlContext.h>
+
+#include <BrowserNG.rsg>
+
+#include <AknsUtils.h>
+#include <AppApacLayout.cdl.h>
+#include <AppLayout.cdl.h>
+#include <AknLayout.cdl.h>
+
+#include "BrowserBookmarksGotoPane.h"
+#include "BrowserUtil.h"
+#include "commonconstants.h"
+#include "BrowserAdaptiveListPopup.h"
+#include "WmlBrowserBuild.h" //feature manager
+#include "browser.hrh"
+#include "BrowserAppUi.h"
+#include "BrowserFavouritesView.h"
+#include "Preferences.h"
+#include <Featmgr.h>
+#include "BrowserUiSDKCRKeys.h"
+
+#include <eikpriv.rsg>
+#include <BARSREAD.H>
+
+#include <AknLayout2ScalableDef.h>
+#include <aknlayoutfont.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include <StringLoader.h>
+#include <skinlayout.cdl.h>
+using namespace SkinLayout;
+
+// CONSTANTS
+const TInt EUseSkinContext = 0x01;
+const TInt EParentAbsolute = 0x02;
+const TInt KRightSpace = 10; //space in pixels left at the end of text editor.
+// CONSTANTS
+const TInt KMaxTitleLength = 512;
+_LIT(KAddressText,"http://www.");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::NewL
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane* CBrowserBookmarksGotoPane::NewL
+ (
+ const CCoeControl& aParent,
+ CBrowserFavouritesView* aContentView,
+ const TDesC& aBitmapfile,
+ TInt aIconBitmapId,
+ TInt aIconMaskId,
+ TBool aPopupListStatus,
+ TBool aSearchPaneMode
+ )
+ {
+ CBrowserBookmarksGotoPane* gotoPane =
+ new(ELeave) CBrowserBookmarksGotoPane(aContentView, aSearchPaneMode);
+ CleanupStack::PushL( gotoPane );
+ gotoPane->ConstructL( aParent, aBitmapfile, aIconBitmapId, aIconMaskId, aPopupListStatus );
+ CleanupStack::Pop(); // gotoPane
+ return gotoPane;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::~CBrowserBookmarksGotoPane
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane::~CBrowserBookmarksGotoPane()
+ {
+ delete iEditor;
+ delete iInputFrame;
+ delete iSkinContext;
+ delete iInputContext;
+ delete iBAdaptiveListPopup;
+ delete iDefaultSearchText;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::BeginEditingL()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::BeginEditingL()
+ {
+ if ( !iFrozen )
+ {
+ // If its a GoTo Pane Mode.
+ if( !iSearchPaneMode )
+ {
+ if( iView->ApiProvider().Preferences().SearchFeature() )
+ {
+ // If there is no text, then we need to place back
+ // the default text, else preserve the previously
+ // typed text.
+ HBufC* text = iEditor->GetTextInHBufL();
+ if( !text )
+ {
+ SetTextL( KWWWString );
+ }
+ else
+ {
+ delete text;
+ }
+ }
+ else
+ SetTextL( KWWWString );
+ }
+ else
+ {
+ if( iView->ApiProvider().Preferences().SearchFeature() )
+ {
+ //Clear searchpane on focus if default text is there
+ HBufC* text = iEditor->GetTextInHBufL();
+ if ( text )
+ {
+ CleanupStack::PushL( text );
+ if ( !text->Compare( iDefaultSearchText->Des() ) )
+ {
+ iEditor->SetTextL( &KNullDesC );
+ }
+ CleanupStack::PopAndDestroy( text );
+ }
+ }
+ }
+
+ MakeVisible( ETrue );
+ SetEditingL( ETrue );
+ iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+ if (AknLayoutUtils::PenEnabled()
+ && ( !iView->ApiProvider().Preferences().SearchFeature()) )
+ {
+ ActivateVkbL();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::CancelEditingL()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::CancelEditingL()
+ {
+ if ( !iFrozen )
+ {
+ // Clear selection when focus moved, only
+ // affects when both the editors are visible.
+ // no need for condition.
+ TInt pos = iEditor->CursorPos();
+ iEditor->SetSelectionL(pos,pos);
+ SetEditingL( EFalse );
+
+ // Cancel Adaptive List popup if its active
+ if ( NULL != iBAdaptiveListPopup)
+ {
+ iBAdaptiveListPopup->SetDirectoryModeL( ETrue );
+ iBAdaptiveListPopup->HidePopupL();
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetTextL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetTextL
+( const TDesC& aText, TBool aClipToFit /*=ETrue*/, TBool aCancelEditing )
+ {
+
+ CFbsFont * font = NULL;
+
+ if ( !iFrozen )
+ {
+ if ( aClipToFit && aText.Length() )
+ {
+ // Allocate 3 chars more (make sure "..." fits).
+ HBufC* buf = HBufC::NewLC( aText.Length() + 3 );
+ *buf = aText;
+ TPtr ptr( buf->Des() );
+ CTextView* textView = iEditor->TextView();
+ if ( textView )
+ {
+ //The Textview does not use the iConEnv->NormalFont() for drawing so we can not use it for measurement.
+ //Textview uses the default char format font for drawing. See bug: EHCN-6U59SN
+ TBuf<KMaxTypefaceNameLength> typeface;
+ CEikonEnv::Static()->ReadResource(typeface,R_EIK_DEFAULT_CHAR_FORMAT_TYPEFACE);
+ TResourceReader reader;
+ CEikonEnv::Static()->CreateResourceReaderLC(reader,R_EIK_DEFAULT_CHAR_FORMAT_HEIGHT);
+ TInt height = reader.ReadInt16();
+ CleanupStack::PopAndDestroy(); // reader
+
+ TFontSpec fontSpec(typeface, height);
+ CEikonEnv::Static()->ScreenDevice()->GetNearestFontInTwips((CFont*&)font, fontSpec);
+
+ AknTextUtils::ClipToFit
+ (
+ ptr,
+ *font,
+ textView->ViewRect().Width() - KRightSpace
+ );
+ }
+ iEditor->SetTextL( &ptr );
+ CleanupStack::PopAndDestroy(); // buf
+ }
+ else
+ {
+ if( iSearchPaneMode )
+ {
+ iEditor->SetTextL( &aText );
+ }
+ else
+ {
+ if ( aText.Length() )
+ {
+ iEditor->SetTextL( &aText );
+ }
+ else
+ {
+ TBufC<16> buf(KAddressText);
+ HBufC* tmpBuf = NULL;
+ tmpBuf = buf.AllocLC();
+ iEditor->SetTextL( tmpBuf );
+ CleanupStack::PopAndDestroy(); // tmpBuf
+ }
+ }
+ }
+
+ iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+ if ( !iEverFocused )
+ {
+ iEditor->SetFocus( ETrue );
+ }
+
+ if ( !iEverFocused )
+ {
+ iEditor->SetFocus( IsFocused() );
+ iEverFocused = ETrue;
+ }
+ SetEditingL( !aCancelEditing );
+ DrawDeferred();
+ }
+
+ // release font if it was used
+ if (font != NULL)
+ {
+ CEikonEnv::Static()->ScreenDevice()->ReleaseFont(font);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::GetTextL
+// ---------------------------------------------------------
+//
+HBufC* CBrowserBookmarksGotoPane::GetTextL()
+ {
+ HBufC* text = HBufC::NewL( iEditor->TextLength() + 1 );
+ TPtr ptr = text->Des();
+ iEditor->GetText( ptr );
+ ptr.ZeroTerminate();
+ if( !iSearchPaneMode )
+ {
+ Util::EncodeSpaces(text);
+ }
+
+ return text;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetObserver
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetGPObserver
+( MBookmarksGotoPaneObserver* aObserver )
+ {
+ /*__ASSERT_DEBUG( !iGPObserver, \
+ Util::Panic( Util::EGotoPaneObserverAlreadySet ) );*/
+ iGPObserver = aObserver;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetLineState
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetLineState( TBool aLineVisible )
+ {
+ iInputFrame->SetLineState( aLineVisible );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::OfferKeyEventL
+// ---------------------------------------------------------
+//
+// Note:
+//
+// Below, there are several keys in the ISO-Latin-1 range that we
+// exclude from use in a URL:
+//
+// - EStdKeyDevice10 0xC9 E-accent acute Northwest
+// - EStdKeyDevice11 0xCA E-accent circumflex Northeast
+// - EStdKeyDevice12 0xCB E-umlaut Southeast
+// - EStdKeyDevice13 0xCC I-accent grave Southwest
+//
+// While these ought to be vaguely acceptable in certain parts of a URL,
+// they are also used by some navigation drivers as our "diagonal event"
+// codes so turn up as the user navigates the cursor. Because of this,
+// today, we prevent them from being inserted as characters. There's
+// a second set of code ranges (in the 0x8XXX range) that's also defined
+// for these events; if the driver writers ever manage to get all of
+// the navigation drivers using this "out-of-band" range, we can
+// eliminate filtering the ISO-Latin-1 range of characters that we
+// do here.
+//
+//
+
+TKeyResponse CBrowserBookmarksGotoPane::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse response = EKeyWasNotConsumed;
+ TChar iInputChar = TChar( aKeyEvent.iScanCode );
+
+
+ if ( iBAdaptiveListPopup )
+ {
+ response = iBAdaptiveListPopup->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ if ( iEditing && response != EKeyWasConsumed)
+ {
+ // Editing; most keys simply forwarded to the editor.
+ switch ( aKeyEvent.iCode )
+ {
+ case EKeyOK:
+ {
+ response = EKeyWasConsumed; // MSK is now handled through HandleCommand in BrowserBookmarksView
+ break;
+ }
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ { // Here, "eat" all of the diagonals so they have no effect...
+ response = EKeyWasConsumed;
+ break;
+ }
+
+ case EKeyEnter:
+ // Handle EnterKey as "GOTO" for Touch, VKB's enter key
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneGoTo);
+ // In case of search feature, we need to pass EKeyWasConsumed for EKeyEnter
+ if ( iView->ApiProvider().Preferences().SearchFeature() )
+ {
+ response = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ // Else *FALL THROUGH* to default in case Pen is not enabled.
+ default:
+ {
+ response = iEditor->OfferKeyEventL(aKeyEvent, aType );
+ break;
+ }
+ }
+
+ // In the absence of search feature
+ // Force key event to be consumed if you're editing
+ // regardless of what's happened to it.
+ //
+ // This forces user to press cancel to continue other tasks
+ if ( !iView->ApiProvider().Preferences().SearchFeature() )
+ {
+ response = EKeyWasConsumed;
+ }
+ }
+ else if ( response != EKeyWasConsumed )
+ {
+ // Key consumed yet? If not, process onwards...
+ if ( (aKeyEvent.iScanCode == EStdKeyHash) ||
+ ( aKeyEvent.iModifiers &
+ ( EModifierShift | EModifierLeftShift | EModifierRightShift |
+ EModifierCtrl | EModifierLeftCtrl | EModifierRightCtrl ) ) )
+ {
+
+ // Hash key press will be used for Mark/UnMark functionality
+ // Let Platform Listbox handle this.
+ response = EKeyWasNotConsumed;
+ }
+
+ //
+ // Not currently editing the GoTo pane.
+ // Catch alpha and numeric to pop
+ // up goto pane
+ //
+ // Only popup the GoTo Pane with a KeyDown event.
+ // Otherwise, if browser is pushed to the backround (but still active)
+ // in favor of the App Shell, A long "0" press will reactivate the browser and
+ // leave a KeyUp to (wrongly) pop the pane up
+ //
+ // Note that we exclude Unicode 0xC4 and 0xC5 which
+ // are defined as EStdkeyYes and EStdkeyNo. These
+ // map to the Send and End keys respectively. Normally,
+ // 0xC4 and 0xC5 can be considered alpha digits, but we
+ // exclude them so that they will not pop the GoTo pane
+ //
+ // We do the same thing for all of the diagonal motion events
+ // so they have no effect either.
+ //
+ // Otherwise, key event is generated again (to channel through FEP)
+ //
+ else if ( !iFrozen
+ && aType == EEventKeyDown
+ && iInputChar.IsAlphaDigit() // We want alpha numeric keys to popup goto pane
+ && iInputChar != EStdKeyYes // Ignore Send (green key)
+ && iInputChar != EStdKeyNo // Ignore End (red key)
+ && iInputChar != EKeyRightUpArrow // Ignore Northeast
+ && iInputChar != EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
+ && iInputChar != EKeyRightDownArrow // Ignore Southeast
+ && iInputChar != EStdKeyDevice12 // : Extra KeyEvent supports diagonal event simulator wedge
+ && iInputChar != EKeyLeftDownArrow // Ignore Southwest
+ && iInputChar != EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
+ && iInputChar != EKeyLeftUpArrow // Ignore Northwest
+ && iInputChar != EStdKeyDevice10 ) // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ // These keys activate the Goto Pane.
+ // We'll consume the key event so it ends here
+ response = EKeyWasConsumed;
+
+ BeginEditingL();
+
+ iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+ iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+ iCoeEnv->SimulateKeyEventL( aKeyEvent, aType );
+ }
+ else
+ {
+ // Other keys do not activate the Goto Pane.
+ // Let someone else take the key event
+ response = EKeyWasNotConsumed;
+ }
+ }
+ return response;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::CountComponentControls
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksGotoPane::CountComponentControls() const
+ {
+ return 2;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CBrowserBookmarksGotoPane::ComponentControl
+( TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ {
+ return iInputFrame;
+ }
+
+ case 1:
+ {
+ return iEditor;
+ }
+
+ default:
+ {
+ return NULL;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::FocusChanged
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::FocusChanged( TDrawNow aDrawNow )
+ {
+ iEditor->SetFocus( IsFocused(), aDrawNow );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::CBrowserBookmarksGotoPane
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane::CBrowserBookmarksGotoPane(CBrowserFavouritesView* aView, TBool aSearchPaneMode)
+: iView( aView ),
+ iEditing( EFalse ),
+ iFrozen( EFalse ),
+ iBAdaptiveListPopup( NULL ),
+ iSearchPaneMode( aSearchPaneMode )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::ConstructL ( const CCoeControl& aParent, const TDesC& aBitmapfile,
+ TInt aIconBitmapId, TInt aIconMaskId, TBool aPopupListStatus )
+
+ {
+ SetContainerWindowL( aParent ); // This is now non-window owning control
+ SetMopParent(const_cast<CCoeControl*>(&aParent));
+ iEditor = new (ELeave) CEikEdwin;
+ iInputFrame = CAknInputFrame::NewL( iEditor, EFalse, aBitmapfile,
+ aIconBitmapId, aIconMaskId, 0 );
+ iInputFrame->SetContainerWindowL( *this );
+ iEditor->SetContainerWindowL( *this );
+ AknEditUtils::ConstructEditingL(iEditor, KFavouritesMaxUrlGotoPaneDefine, 1, EAknEditorCharactersLowerCase, EAknEditorAlignRight, EFalse, ETrue, EFalse);
+ iEditor->AddFlagToUserFlags( CEikEdwin::EAlwaysShowSelection );
+ iEditor->SetBorder( TGulBorder::ENone );
+ iEditor->SetAknEditorCase( EAknEditorLowerCase );
+ iEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
+ iEditor->SetSkinBackgroundControlContextL(NULL);
+ if (AVKONAPAC)
+ {
+ // Disallow chinese input.
+ iEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode | EAknEditorNumericInputMode );
+ }
+
+ // In Search Mode we allow all types of inputs
+ TInt editorFlags( (iSearchPaneMode ? EAknEditorFlagDefault : EAknEditorFlagLatinInputModesOnly) | EAknEditorFlagUseSCTNumericCharmap );
+
+ // Always disable T9 input for goto url
+ editorFlags = (editorFlags | EAknEditorFlagNoT9);
+
+ iEditor->SetAknEditorFlags( editorFlags );
+
+
+ iEditor->SetAknEditorPermittedCaseModes( EAknEditorUpperCase | EAknEditorLowerCase );
+
+ iEditor->CreateTextViewL();
+ SetupSkinContextL();
+ iEditing = EFalse;
+ TBool searchFeature = iView->ApiProvider().Preferences().SearchFeature();
+ if ( searchFeature )
+ {
+ HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
+ TPtr searchProviderPtr = searchProvider->Des();
+
+ iView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
+ KMaxTitleLength , searchProviderPtr);
+ if( searchProvider->Length() == 0 )
+ {
+ iDefaultSearchText = StringLoader::LoadL( R_IS_WEB_SEARCH );
+ }
+ else
+ {
+ iDefaultSearchText = searchProvider->AllocL();
+ }
+ CleanupStack::PopAndDestroy(searchProvider);
+ }
+
+ //adaptive popuplist
+ iBAdaptiveListPopup = NULL;
+ if( aPopupListStatus && AUTOCOMP ) //ask the feature manager
+ {
+ iBAdaptiveListPopup= new (ELeave) CBrowserAdaptiveListPopup(
+ iEditor, this, EBookmarksGotoPane, searchFeature);
+ iBAdaptiveListPopup->ConstructL();
+ iEditor->SetObserver( iBAdaptiveListPopup );
+ if (iView)
+ {
+ iBAdaptiveListPopup->SetUrlSuffixList(iView->ApiProvider().Preferences().URLSuffixList());
+ iBAdaptiveListPopup->SetMaxRecentUrls(iView->ApiProvider().Preferences().MaxRecentUrls());
+ }
+ }
+
+ ActivateL();
+ MakeVisible( EFalse );
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SizeChanged
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SizeChanged()
+ {
+ TAknLayoutRect layoutRectTemp;
+ TAknWindowLineLayout windowLayoutTmp, windowLayoutTmp2;
+
+ windowLayoutTmp = AknLayout::Find_pane_elements_Line_4();
+ windowLayoutTmp2 = windowLayoutTmp;
+ layoutRectTemp.LayoutRect( Rect(), windowLayoutTmp2 );
+ iEditor->SetRect( layoutRectTemp.Rect() );
+ iInputFrame->SetRect( Rect() );
+ TRAP_IGNORE(SetupSkinContextL());
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetEditingL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetEditingL( TBool aEditing )
+ {
+ if ( aEditing != iEditing )
+ {
+ iEditing = aEditing;
+ SetFocus( iEditing );
+ if ( iGPObserver )
+ {
+ iGPObserver->HandleBookmarksGotoPaneEventL
+ (
+ this,
+ MBookmarksGotoPaneObserver::EEventEditingModeChanged
+ );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::PopupList
+// ---------------------------------------------------------
+//
+CBrowserAdaptiveListPopup* CBrowserBookmarksGotoPane::PopupList()
+ {
+ return iBAdaptiveListPopup;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::HandleResourceChange( TInt aType )
+ {
+ CCoeControl::HandleResourceChange( aType );
+
+ if ( iBAdaptiveListPopup )
+ {
+ iBAdaptiveListPopup->HandleResourceChange( aType );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::MopSupplyObject
+// ---------------------------------------------------------
+//
+TTypeUid::Ptr CBrowserBookmarksGotoPane::MopSupplyObject( TTypeUid aId )
+ {
+ return MAknsControlContext::SupplyMopObject( aId, iSkinContext );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::Editor
+// ----------------------------------------------------------------------------
+CEikEdwin* CBrowserBookmarksGotoPane::Editor() const
+ {
+ return iEditor;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::HandlePointerEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ if (AknLayoutUtils::PenEnabled())
+ {
+ if(iEditor && Rect().Contains(aPointerEvent.iPosition))
+ {
+ iEditor->HandlePointerEventL(aPointerEvent);
+ if ( !iEditing )
+ {
+ SetEditingL( ETrue );
+ iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+ }
+ else
+ {
+ if(aPointerEvent.iType == TPointerEvent::EButton1Down)
+ {
+ // pointer outside of control
+ CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneCancel);
+ }
+ }
+ }
+ }
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetupSkinContextL
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::SetupSkinContextL()
+ {
+ TAknsItemID tileIID = KAknsIIDQsnBgColumnA;
+
+ TAknWindowLineLayout tile =
+ Column_background_and_list_slice_skin_placing_Line_2();
+
+ TAknLayoutRect mainPane;
+ mainPane.LayoutRect(
+ iAvkonAppUi->ApplicationRect(),
+ AKN_LAYOUT_WINDOW_main_pane( iAvkonAppUi->ApplicationRect(),
+ 0, 0, 1) );
+ TAknLayoutRect listRect;
+ listRect.LayoutRect( mainPane.Rect(), AknLayout::list_gen_pane(0) );
+
+ TAknLayoutRect tileRect;
+ tileRect.LayoutRect(mainPane.Rect(), tile);
+
+ if ( !iSkinContext )
+ {
+ iSkinContext = CAknsListBoxBackgroundControlContext::NewL(
+ KAknsIIDQsnBgAreaMainListGene,
+ listRect.Rect(),
+ EUseSkinContext & EParentAbsolute,
+ tileIID,
+ tileRect.Rect() );
+ }
+ else
+ {
+ iSkinContext->SetRect( listRect.Rect() );
+ }
+
+
+ if ( !iInputContext )
+ {
+ iInputContext = CAknsFrameBackgroundControlContext::NewL(
+ KAknsIIDQsnFrInput, TRect(0,0,0,0),TRect(0,0,0,0),EFalse );
+ }
+
+ iInputFrame->SetInputContext(iInputContext);
+ iEditor->SetSkinBackgroundControlContextL(iInputContext);
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::ActivateVkbL
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::ActivateVkbL()
+ {
+ if (iEditor && iEditor->TextView())
+ {
+ // make sure observer is set
+ iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+
+ // simulate pointer event to force VKB
+
+ // first get point at cursor location
+ TInt pos = iEditor->CursorPos();
+ CTextView* textView = iEditor->TextView();
+ TPoint curPos;
+ textView->DocPosToXyPosL(pos, curPos);
+
+ TPointerEvent pe;
+ pe.iPosition = curPos;
+
+ pe.iType = TPointerEvent::EButton1Down;
+ iEditor->HandlePointerEventL(pe);
+
+ // VKB will only activate if nothing selected
+ iEditor->SetSelectionL(pos, pos);
+
+ pe.iType = TPointerEvent::EButton1Up;
+ iEditor->HandlePointerEventL(pe);
+ iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetTextModeItalic
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::SetTextModeItalicL( )
+ {
+
+ // Editor Control is laid in a scalable way, so we need to get the correct font
+ // specification for setting CharFormatLayer, We could have used GetNearestFontInTwips,
+ // as done above in SetTextL() but it does not provide correct fonts for editor.
+ // We do not need to set the FontPosture back to EPostureUpright ( Normal ), as it
+ // is automatically handled by AknLayoutUtils::LayoutEdwinScalable called by
+ // iInputFrame->SetRect(), which overwrites all the properties for Editor.
+
+ TAknTextComponentLayout editorLayout;
+ TBool apac( AknLayoutUtils::Variant() == EApacVariant && ( CAknInputFrame::EShowIndicators ) );
+ editorLayout = AknLayoutScalable_Avkon::input_find_pane_t1( apac ? 1: 0 );
+ TAknTextLineLayout lineLayout = editorLayout.LayoutLine();
+ TInt fontid = lineLayout.FontId();
+ const CAknLayoutFont *font = AknLayoutUtils::LayoutFontFromId( fontid );
+
+ TCharFormat charFormat;
+ TCharFormatMask charFormatMask;
+ charFormat.iFontSpec = font->FontSpecInTwips();
+ charFormat.iFontSpec.iFontStyle.SetPosture( EPostureItalic );
+ charFormatMask.SetAttrib(EAttFontTypeface);
+ charFormatMask.SetAttrib(EAttFontHeight);
+ charFormatMask.SetAttrib(EAttFontStrokeWeight);
+ charFormatMask.SetAttrib(EAttFontPosture);
+
+ // Owner ship of charFormatLayer is taken by Editor
+ CCharFormatLayer* charFormatLayer = NULL;
+ charFormatLayer = CCharFormatLayer::NewL(charFormat,charFormatMask);
+ iEditor->SetCharFormatLayer(charFormatLayer);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetVKBFlag
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::SetVKBFlag( TBool aVKBFlag )
+ {
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ if( aVKBFlag )
+ {
+ iEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
+ }
+ else
+ {
+ iEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableVKB );
+ }
+#endif
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksListboxIconHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,398 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of TBrowserBookmarksListboxIconHandler.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <Browser_Platform_Variant.hrh>
+#include <ApListItem.h>
+#include <ApListItemList.h>
+#include <ApEngineConsts.h>
+#include <favouritesitem.h>
+#include <favouriteswapap.h>
+#include <BrowserNG.rsg>
+#include "BrowserBookmarksListboxIconHandler.h"
+#include "BrowserFavouritesListbox.h"
+#include "BrowserFavouritesIconIndexArray.h"
+#include "BrowserFavouritesView.h"
+#include <AknsUtils.h>
+#include <avkon.mbg>
+#include <gulicon.h>
+#include <AknIconArray.h>
+#include <browser.mbg>
+
+#include "CommonConstants.h"
+#include <data_caging_path_literals.hrh>
+
+// LOCAL TYPES
+
+/**
+* Icon indexes. Numeric values MUST match the resource definition order.
+*/
+enum
+ {
+ EIconIndexListboxMark = 0, ///< Listbox mark icon index.
+ EIconIndexFolder = 1, ///< Folder icon index.
+ EIconIndexHomepage = 2, ///< Homepage icon index.
+ EIconIndexLastVisitedPage = 3, ///< Last Visited icon index.
+ EIconIndexBookmark = 4, ///< Bookmark icon index.
+ EIconIndexCsdBearer = 5, ///< CSD bearer icon index.
+ EIconIndexHscsdBearer = 6, ///< HSCSD bearer icon index.
+ EIconIndexGprsBearer = 7, ///< GPRS bearer icon index.
+ EIconIndexSeamlessLinksFolder = 8, ///< Seamless links icon index
+ EIconIndexAdaptiveFolder = 9, ///< Adaptive Bookmarks domain folder icon index
+ EIconIndexAdaptiveBookmark = 10, ///< Adaptive Bookmarks bookmark icon index
+ EIconIndexDefaultBookmark = 11, ///< Adaptive Bookmarks bookmark icon index
+ EIconIndexRSSFolder = 12, ///< RSS Folder icon index
+ EIconIndexService = 13 ///< service icon
+ };
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TBrowserBookmarksListboxIconHandler::ItemIconIndex
+// ---------------------------------------------------------
+//
+TInt TBrowserBookmarksListboxIconHandler::ItemIconIndex
+( const CFavouritesItem& aItem ,CBrowserFavouritesListbox* aListbox ) const
+ {
+ if ( aItem.Uid() == KFavouritesHomepageUid )
+ {
+ return EIconIndexHomepage;
+ }
+ if ( aItem.Uid() == KFavouritesStartPageUid )
+ {
+ return EIconIndexHomepage;
+ }
+ if ( aItem.Uid() == KFavouritesLastVisitedUid )
+ {
+ return EIconIndexLastVisitedPage;
+ }
+ //service icon
+ if( aItem.ContextId() == KFavouritesServiceContextId )
+ {
+ return EIconIndexService;
+ }
+
+ //seamless links folders have a different icon
+ if( CBrowserFavouritesView::IsSeamlessFolder( aItem.ContextId() ) )
+ {
+ return EIconIndexSeamlessLinksFolder;
+ }
+
+ // recent url folder
+ if ( aItem.Uid() == KFavouritesAdaptiveItemsFolderUid )
+ {
+ return EIconIndexAdaptiveFolder;
+ }
+
+ /// RSS folder handling
+
+ if (aItem.Uid()==KFavouritesRSSItemUid)
+ {
+ return EIconIndexRSSFolder;
+ }
+
+ /// The order is important, because Adaptive bookmarks folder accidentally has a context id
+ /// and acts like a seamless folder
+ if( aListbox->GetDefaultData().iPreferedId == aItem.Uid() && aListbox->GetDefaultData().iInSeamlessFolder)
+ {
+ return EIconIndexDefaultBookmark;
+ }
+
+ return aItem.IsItem() ? EIconIndexBookmark : EIconIndexFolder;
+ }
+
+// ---------------------------------------------------------
+// TBrowserBookmarksListboxIconHandler::BearerIconIndex
+// ---------------------------------------------------------
+//
+TInt TBrowserBookmarksListboxIconHandler::BearerIconIndex
+ (
+ const TFavouritesWapAp aAccessPoint,
+ const CApListItemList& aAccessPoints
+ ) const
+ {
+ if ( !aAccessPoint.IsNull() && !aAccessPoint.IsDefault() )
+ {
+ // Set an invalid bearer type value.
+ TApBearerType bearer = EApBearerTypeAll;
+ // Get access point with this uid.
+ TUint32 apUid = aAccessPoint.ApId();
+ TInt i;
+ TInt count = aAccessPoints.Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( aAccessPoints.At( i )->Uid() == apUid )
+ {
+ // Got the AP, set bearer type to its bearer.
+ bearer = aAccessPoints.At( i )->BearerType();
+ break;
+ }
+ }
+ // If the bearer type is set, get icon index for it.
+ switch( bearer )
+ {
+ case EApBearerTypeCSD:
+ {
+ return EIconIndexCsdBearer;
+ }
+
+ case EApBearerTypeGPRS:
+ {
+ return EIconIndexGprsBearer;
+ }
+
+ case EApBearerTypeHSCSD:
+ {
+ return EIconIndexHscsdBearer;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+ // Access Point is "Null", "Default", or just not found.
+ return KBrowserFavouritesNoBearerIcon;
+ }
+
+// ---------------------------------------------------------
+// TBrowserBookmarksListboxIconHandler::LoadIconsL
+// ---------------------------------------------------------
+//
+CAknIconArray* TBrowserBookmarksListboxIconHandler::LoadIconsL() const
+{
+ CAknIconArray* icons =
+ new(ELeave) CAknIconArray( 20 );
+ CleanupStack::PushL(icons); // PUSH Icon
+ CGulIcon* newIcon;
+ CFbsBitmap *newIconBmp;
+ CFbsBitmap *newIconMaskBmp;
+
+ TBuf<KMaxFileName> iconFileAvkon= KAvkonMbmPath();
+ TParse* fp = new(ELeave) TParse();
+ CleanupStack::PushL(fp);
+ TInt err = fp->Set(KBrowserDirAndFile, &KDC_APP_BITMAP_DIR, NULL);
+ if (err != KErrNone)
+ {
+ User::Leave(err);
+ }
+ TBuf<KMaxFileName> iconFileBrowser= fp->FullName();
+ CleanupStack::PopAndDestroy(fp);
+
+ MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+ //EMbmAvkonQgn_indi_marked_add
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiMarkedAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileAvkon,
+ EMbmAvkonQgn_indi_marked_add,
+ EMbmAvkonQgn_indi_marked_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmAvkonQgn_prop_folder_small
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropFolderSmall,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileAvkon,
+ EMbmAvkonQgn_prop_folder_small,
+ EMbmAvkonQgn_prop_folder_small_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //"z:\\system\\apps\\browser\\Browser.mbm";
+ //EMbmBrowserQgn_prop_wml_home
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlHome,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_home,
+ EMbmBrowserQgn_prop_wml_home_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_bm_last
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlBmLast,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_bm_last,
+ EMbmBrowserQgn_prop_wml_bm_last_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_bm
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlBm,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_bm,
+ EMbmBrowserQgn_prop_wml_bm_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_indi_wml_csd_add
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiWmlCsdAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_indi_wml_csd_add,
+ EMbmBrowserQgn_indi_wml_csd_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_indi_wml_hscsd_add
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiWmlHscsdAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_indi_wml_hscsd_add,
+ EMbmBrowserQgn_indi_wml_hscsd_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_indi_wml_gprs_add
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiWmlGprsAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_indi_wml_gprs_add,
+ EMbmBrowserQgn_indi_wml_gprs_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_folder_link_seamless
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlFolderLinkSeamless,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_folder_link_seamless,
+ EMbmBrowserQgn_prop_wml_folder_link_seamless_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_folder_adap
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlFolderAdap,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_folder_adap,
+ EMbmBrowserQgn_prop_wml_folder_adap_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+
+ //EMbmBrowserQgn_prop_wml_bm_adap
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlBmAdap,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_bm_adap,
+ EMbmBrowserQgn_prop_wml_bm_adap_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+
+ //EMbmBrowserQgn_prop_psln_active
+
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropPslnActive,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_psln_active,
+ EMbmBrowserQgn_prop_psln_active_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+
+ //EMbmBrowserQgn_prop_folder_rss
+
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropFolderRss,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_folder_rss,
+ EMbmBrowserQgn_prop_folder_rss_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+ //Browser service
+
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropBrowserInfoSmall,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_browser_info_small,
+ EMbmBrowserQgn_prop_browser_info_small_mask );
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp );
+ CleanupStack::Pop(2);
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+#endif
+
+ CleanupStack::Pop(); // POP Icon
+ return icons;
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksModel.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserBookmarksModel.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BrowserBookmarksModel.h"
+#include "BrowserUtil.h"
+#include <BrowserNG.rsg>
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include <StringLoader.h>
+#include <FeatMgr.h>
+#include "ApiProvider.h"
+#include "Preferences.h"
+#include "CommonConstants.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::CBrowserBookmarksModel
+// ---------------------------------------------------------
+//
+CBrowserBookmarksModel::CBrowserBookmarksModel( MApiProvider& aApiProvider )
+ : CBrowserFavouritesModel( aApiProvider ), iApiProvider( aApiProvider )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::ApiProvider
+// ---------------------------------------------------------
+//
+MApiProvider& CBrowserBookmarksModel::ApiProvider()
+ {
+ return iApiProvider;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::NewL
+// ---------------------------------------------------------
+//
+CBrowserBookmarksModel* CBrowserBookmarksModel::NewL( MApiProvider& aApiProvider )
+ {
+ CBrowserBookmarksModel* model =
+ new (ELeave) CBrowserBookmarksModel( aApiProvider );
+ CleanupStack::PushL( model );
+ model->ConstructL();
+ CleanupStack::Pop();
+ return model;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::StringResourceId
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksModel::StringResourceId
+ (
+ const CFavouritesItem& aItem,
+ CBrowserFavouritesModel::TTextResourceType aType
+ ) const
+ {
+ switch ( aType )
+ {
+ case CBrowserFavouritesModel::EDefaultName:
+ {
+ if ( aItem.IsFolder() )
+ {
+ return R_BROWSER_FAVOURITES_TEXT_FLDR_NAME_DEFAULT;
+ }
+ else
+ {
+ return R_BROWSER_BOOKMARKS_TEXT_DEFAULT_BM_TITLE;
+ }
+ }
+
+ case CBrowserFavouritesModel::ERenamePrompt:
+ {
+ if ( aItem.IsFolder() )
+ {
+ return R_BROWSER_FAVOURITES_TEXT_FLDR_ITEM_NAME_PRMPT;
+ }
+ else
+ {
+ return R_BROWSER_FAVOURITES_TEXT_PRMPT_EDIT_NAME;
+ }
+ }
+
+ case CBrowserFavouritesModel::ENewPrompt:
+ {
+ if ( aItem.IsFolder() )
+ {
+ return R_BROWSER_FAVOURITES_TEXT_FLDR_NAME_PRMPT;
+ }
+ else
+ {
+ return R_BROWSER_FAVOURITES_TEXT_PRMPT_EDIT_NAME;
+ }
+ }
+
+ case CBrowserFavouritesModel::ESaved:
+ {
+ return R_BROWSER_BOOKMARKS_TEXT_BM_SAVED;
+ }
+
+ case CBrowserFavouritesModel::ENotSaved:
+ {
+ return R_BROWSER_BOOKMARKS_TEXT_BM_NOT_SAVED;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ Util::Panic( Util::EUnExpected );
+ /*NOTREACHED*/
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::GetFoldersSortedLC
+// ---------------------------------------------------------
+//
+CFavouritesItemList* CBrowserBookmarksModel::GetFoldersSortedLC()
+ {
+ CFavouritesItemList* folders = new (ELeave) CFavouritesItemList();
+ CleanupStack::PushL( folders );
+
+ if ((ADAPTIVEBOOKMARKS)&&(ApiProvider().Preferences().AdaptiveBookmarks()==EWmlSettingsAdaptiveBookmarksOn ))
+ {
+ CFavouritesItem* adaptiveItemsFolder = Database().CreateAdaptiveItemsFolderL();
+ CleanupStack::PushL(adaptiveItemsFolder);
+ HBufC* folderName=StringLoader::LoadLC(R_BROWSER_ADAPTIVE_BOOKMARKS_FOLDER);
+ adaptiveItemsFolder->SetNameL(*folderName);
+ CleanupStack::PopAndDestroy();//folderName
+ folders->AppendL( adaptiveItemsFolder );
+ CleanupStack::Pop(); // adaptiveItemsFolder: owner is the list now.
+ }
+
+ // Get all folders.
+ Database().GetAll( *folders, KFavouritesRootUid, CFavouritesItem::EFolder );
+ // Sort folders,
+ CBrowserBookmarksOrder* currentOrder = CBrowserBookmarksOrder::NewLC();
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL(orderArray);
+ if( Database().GetData( KFavouritesRootUid ,*currentOrder ) == KErrNone )
+ {
+ if( currentOrder->GetBookMarksOrder().Count() > 0 )
+ {
+ orderArray->AppendL( &( currentOrder->GetBookMarksOrder()[0] ), currentOrder->GetBookMarksOrder().Count());
+ ManualSortL(KFavouritesRootUid, currentOrder, orderArray, folders);
+ }
+ }
+ CleanupStack::PopAndDestroy(2); //currentOrder, orderArray
+
+ return folders;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::GetDBName
+// ---------------------------------------------------------
+//
+const TDesC& CBrowserBookmarksModel::GetDBName()
+ {
+ return KBrowserBookmarks;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksOrder.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include <s32strm.h>
+#include "BrowserBookmarksOrder.h"
+#include "Commonconstants.h"
+
+_LIT( KBrowserBMOrderDataBegin, "BMOrderDataBegin" );
+_LIT( KBrowserBMOrderDataEnd, "BMOrderDataEnd" );
+
+
+// ---------------------------------------------------------
+// CBrowserBookmarksOrder::NewLC()
+// ---------------------------------------------------------
+//
+
+CBrowserBookmarksOrder* CBrowserBookmarksOrder::NewLC()
+ {
+ CBrowserBookmarksOrder* order =
+ new (ELeave) CBrowserBookmarksOrder();
+ CleanupStack::PushL(order);
+ order->ConstructL();
+ return order;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksOrder::ConstructL()
+// ---------------------------------------------------------
+//
+
+void CBrowserBookmarksOrder::ConstructL()
+ {
+ iBMOrderArray = new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ }
+
+CBrowserBookmarksOrder::~CBrowserBookmarksOrder()
+ {
+ delete iBMOrderArray;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksOrder::InternalizeL
+// ---------------------------------------------------------
+//
+
+void CBrowserBookmarksOrder::InternalizeL( RReadStream& aStream )
+ {
+ iBMOrderArray->Reset();
+ HBufC* tag = HBufC::NewLC(sizeof (KBrowserBMOrderDataBegin));
+ TInt err = 0;
+ TPtr des = tag->Des();
+
+ TRAP(err, aStream>>des );
+ if ( (err == KErrNone) && (tag->Des() == KBrowserBMOrderDataBegin ) )
+ {
+ TInt count = aStream.ReadInt16L();
+ for (TInt i=0; i<count; i++)
+ {
+ TInt value;
+ TRAP(err, value = aStream.ReadInt16L());
+ if (err == KErrNone)
+ {
+ iBMOrderArray->AppendL(value);
+ }
+ else
+ if (err != KErrEof)
+ {
+ User::Leave(err);
+ }
+ }
+
+ TRAP(err, aStream>>des );
+ if (tag->Des() != KBrowserBMOrderDataEnd)
+ {
+ iBMOrderArray->Reset();
+ }
+ }
+ CleanupStack::PopAndDestroy(tag);
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksOrder::ExternalizeL
+// ---------------------------------------------------------
+//
+
+void CBrowserBookmarksOrder::ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream<<KBrowserBMOrderDataBegin;
+ aStream.WriteInt16L(iBMOrderArray->Count());
+ for (TInt i=0; i<iBMOrderArray->Count(); i++)
+ {
+ aStream.WriteInt16L((*iBMOrderArray)[i]);
+ }
+ aStream<<KBrowserBMOrderDataEnd;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksOrder::GetBookMarksOrder()
+// ---------------------------------------------------------
+//
+
+const CArrayFixFlat<TInt>& CBrowserBookmarksOrder::GetBookMarksOrder()
+ {
+ return *iBMOrderArray;
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksOrder::SetBookMarksOrderL
+// ---------------------------------------------------------
+//
+
+void CBrowserBookmarksOrder::SetBookMarksOrderL(const CArrayFixFlat<TInt>& aBookMarksOrder)
+ {
+
+ iBMOrderArray->Reset();
+ if ( aBookMarksOrder.Count() )
+ {
+ iBMOrderArray->AppendL(&(aBookMarksOrder[0]), aBookMarksOrder.Count());
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,2997 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CBrowserBookmarksView.
+*
+*/
+
+// INCLUDE FILES
+#include <cdownloadmgruidownloadslist.h>
+#include <cdownloadmgruidownloadmenu.h>
+#include <eikmenup.h>
+#include <aknsfld.h>
+#include <smut.h>
+#include <IrcMTM.h>
+
+#ifndef AVERELL2_BLUETOOTH_MISSING
+ #include <btmsgtypeuid.h>
+#endif
+
+#include <irmsgtypeuid.h>
+#include <favouritesdb.h>
+
+#include <BrowserNG.rsg>
+
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include <ApEngineConsts.h>
+#include <ApListItem.h>
+#include <ApListItemList.h>
+#include <StringLoader.h>
+#include <FeatMgr.h>
+#include <Uri16.h>
+#include <akntoolbar.h>
+#ifdef RD_SCALABLE_UI_V2
+#include <akntoolbarextension.h>
+#endif
+
+
+#include "BrowserDialogs.h"
+#include "BrowserBookmarksView.h"
+#include "BrowserBookmarksContainer.h"
+#include "BrowserBookmarksModel.h"
+#include "BrowserFavouritesListbox.h"
+#include "BrowserBookmarksEditDialog.h"
+#include "BrowserBookmarksGotoPane.h"
+#include "CommonConstants.h"
+#include "BrowserUtil.h"
+#include "BrowserAppUi.h"
+#include "Browser.hrh"
+#include "CommandVisibility.h"
+#include "BrowserBmOTABinSender.h"
+#include "CommsModel.h"
+#include <mconnection.h>
+#include "BrowserUiVariant.hrh"
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include "BrowserDownloadUtil.h"
+#include "Display.h"
+#include "logger.h"
+
+#include "eikon.hrh"
+
+
+// CONSTANTS
+const TInt KAdaptiveBookmarksFirstPositionInBMView = 0;
+const TInt KAdaptiveBookmarksSecondPositionInBMView = 1;
+
+const TInt KBrowserDesCArrayGranularity = 8;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::NewLC
+// ----------------------------------------------------------------------------
+//
+CBrowserBookmarksView* CBrowserBookmarksView::NewLC(
+ MApiProvider& aApiProvider,
+ CRecentUrlStore& aRecentUrlStore,
+ TInt aInitialFolderUid )
+ {
+ CBrowserBookmarksView* view = new (ELeave) CBrowserBookmarksView( aApiProvider,
+ aRecentUrlStore,
+ aInitialFolderUid );
+ CleanupStack::PushL( view );
+
+ view->ConstructL( R_BROWSER_BOOKMARKS_VIEW );
+
+ return view;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::~CBrowserBookmarksView
+// ----------------------------------------------------------------------------
+//
+CBrowserBookmarksView::~CBrowserBookmarksView()
+ {
+LOG_ENTERFN("CBrowserBookmarksView::~CBrowserBookmarksView");
+ delete iDownloadsListExecuter;
+ iDownloadsListExecuter = 0;
+
+ if ( !ApiProvider().ExitInProgress() )
+ {
+ // Remove observers only in destructor. See comment in ConstructL why.
+ ApiProvider().Preferences().RemoveObserver( this );
+ ApiProvider().Connection().UnsetApChangeObserver();
+ }
+ CBrowserBookmarksContainer* container = TheContainer();
+ if ( container )
+ {
+ container->GotoPane()->SetGPObserver( NULL );
+ if( ApiProvider().Preferences().SearchFeature() )
+ container->SearchPane()->SetGPObserver( NULL );
+ }
+ delete iDomainFolderName;
+ delete iItemsToMove;
+ delete iCurrentOrder;
+ delete iEnteredURL;
+ delete iAsyncComplete;
+BROWSER_LOG( ( _L("delete iEnteredUrl 1") ) );
+ iCursorPos = -1;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::UpdateGotoPaneL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::UpdateGotoPaneL()
+ {
+LOG_ENTERFN("BookmarksView::UpdateGotoPaneL");
+ // Simulate cursor movement; that will cancel editing (if editing)
+ // and refresh Goto Pane.
+ if ( Container() )
+ {
+ if ( iEnteredURL )
+ {
+ BROWSER_LOG( ( _L("iEnteredUrl exists") ) );
+ if ( iCursorPos >=0 ) // update pane only once!
+ {
+ TheContainer()->GotoPane()->SetTextL( iEnteredURL->Des(),
+ EFalse,
+ EFalse );
+
+ CEikEdwin* editor = STATIC_CAST( CEikEdwin*,
+ TheContainer()->GotoPane()->ComponentControl( 1 ) );
+ editor->SetCursorPosL( iCursorPos, EFalse );
+ iCursorPos = -1;
+ TheContainer()->GotoPane()->SetFocus( ETrue );
+ }
+ }
+ else
+ {
+ Container()->HandleCursorChangedL( Container()->Listbox() );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------------
+// CBrowserBookmarksView::DeleteItems
+// --------------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::DeleteItems( TInt aCommand )
+ {
+
+ if (iHandleDeleteInProgress)
+ return;
+
+ iHandleDeleteInProgress = ETrue;
+
+ const CFavouritesItem* item = Container()->Listbox()->CurrentItem();
+
+ if (!item)
+ {
+ return;
+ }
+
+ if ( item->ParentFolder() == KFavouritesAdaptiveItemsFolderUid )
+ {
+ TBool confirm;
+ CArrayPtr<const CFavouritesItem>* items = Container()->Listbox()->SelectedItemsLC();
+
+ if ( items->Count() == 1 )
+ {
+ confirm = TBrowserDialogs::ConfirmQueryYesNoL( R_BROWSER_FAVOURITES_TEXT_QUERY_COMMON_CONF_DELETE, (*items)[0]->Name());
+ }
+ else if (items->Count() > 1)
+ {
+ confirm = TBrowserDialogs::ConfirmQueryYesNoL( R_BROWSER_FAVOURITES_TEXT_DEL_ITEMS_QUERY, items->Count());
+ }
+ else
+ {
+ confirm = EFalse;
+ }
+
+ if (confirm)
+ {
+ for ( TInt i = 0; i < items->Count(); i++ )
+ {
+ iRecentUrlStore.DeleteData(items->At( i )->Url());
+ }
+ Container()->Listbox()->View()->ClearSelection();
+ iSaveBMOrder = ETrue;
+ RefreshL();
+ }
+
+ CleanupStack::PopAndDestroy();//items
+ }
+ else
+ {
+ iSaveBMOrder = ETrue;
+ CBrowserFavouritesView::HandleCommandL( aCommand );
+ }
+
+ iHandleDeleteInProgress = EFalse;
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::HandleCommandL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::HandleCommandL( TInt aCommand )
+ {
+LOG_ENTERFN("BookmarksView::HandleCommandL");
+ //
+ // FIRST SWITCH Generic CBA commands to original commands
+ // use ProcessCommandL to route through akn to make sure
+ // command gets routed to the right place
+ //
+ //
+
+ // Assume generic command unless default case, below.
+ TBool genericCmdHandled = ETrue;
+
+ switch ( aCommand )
+ {
+ case EBrowserBookmarksCmdCancel:
+ {
+ if ( iManualItemMovingGoingOn )
+ {
+ ProcessCommandL(EWmlCmdMoveCancel);
+ }
+ else if( TheContainer()
+ && ( TheContainer()->GotoPane()->IsEditing()
+ || TheContainer()->SearchPane()->IsEditing()))
+ {
+ ProcessCommandL(EWmlCmdGotoPaneCancel);
+ }
+ break;
+ }
+ case EBrowserBookmarksCmdOpen:
+ {
+ const CFavouritesItem* item = NULL;
+ if (Container())
+ {
+ item = Container()->Listbox()->CurrentItem();
+ }
+
+ if ( item && item->IsFolder() )
+ {
+ ProcessCommandL(EWmlCmdOpenFolder);
+ }
+ else
+ {
+ ProcessCommandL(EWmlCmdDownload);
+ }
+
+ break;
+ }
+ case EBrowserBookmarksCmdBack:
+ {
+ // default remap is to say back from folder
+ TInt cmd = EWmlCmdBackFromFolder;
+
+ // unless we have these conditions
+ if ( !iInAdaptiveBookmarksFolder )
+ {
+ if ( iCurrentFolder == KFavouritesRootUid )
+ {
+ if ( ApiProvider().IsPageLoaded() || ApiProvider().Fetching() )
+ {
+ cmd = EWmlCmdBackToPage;
+ }
+ }
+ }
+ ProcessCommandL(cmd);
+ break;
+ }
+ default:
+ {
+ genericCmdHandled = EFalse;
+ break;
+ }
+ }
+
+ if (genericCmdHandled)
+ {
+ return;
+ }
+
+ //
+ // EXISTING (regular) command set
+ //
+ if ( TheContainer() )
+ {
+ switch ( aCommand )
+ {
+ // CBA commands.
+ case EWmlCmdGotoPaneGoTo:
+ {
+ if( TheContainer()->GotoPaneActive() )
+ {
+ if (TheContainer()->GotoPane()->Editor()->TextLength()!= 0)
+ {
+ // Cancel editing and sets Goto Pane text back.
+ if (TheContainer()->GotoPane()->PopupList() != NULL)
+ {
+ TheContainer()->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ TheContainer()->GotoPane()->PopupList()->HidePopupL();
+ }
+ GotoUrlInGotoPaneL();
+ }
+ }
+ else // it was from searchpane
+ {
+ if (TheContainer()->SearchPane()->Editor()->TextLength()!= 0)
+ {
+ // Launch Search application with search parameters
+ // and cancel editing of search and goto.
+ // Dim Toolbar buttons
+ DimToolbarButtons(EFalse);
+ HBufC* searchString = TheContainer()->SearchPane()->GetTextL();
+ CleanupStack::PushL( searchString );
+ if( searchString )
+ {
+ UpdateCbaL();
+ // Set GoTo/Search Inactive
+ TheContainer()->SetGotoInactiveL();
+ LaunchSearchApplicationL( *searchString );
+ }
+ CleanupStack::PopAndDestroy( searchString );
+ }
+ // set LSK to GOTO now
+ UpdateCbaL();
+ }
+ break;
+ }
+ case EWmlCmdGotoPaneSelect:
+ {
+ if (TheContainer()->GotoPane()->Editor()->TextLength()!= 0)
+ {
+ // Cancel editing and sets Goto Pane text back.
+ if (TheContainer()->GotoPane()->PopupList() != NULL)
+ {
+ TheContainer()->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ TheContainer()->GotoPane()->PopupList()->HidePopupL();
+ }
+ // set LSK to GOTO now
+ UpdateCbaL();
+ }
+ break;
+ }
+
+
+ case EWmlCmdNewFolder:
+ {
+ TInt uid = CBrowserFavouritesView::AddNewFolderL( );
+
+ AddUidToLastPlaceToCurrentListL(uid);
+ iRefresh = EFalse;
+ Model().Database().SetData( CurrentFolder() , *iCurrentOrder );
+ break;
+ }
+ case EWmlCmdMove:
+ {
+ StartMoveItemsL();
+ break;
+ }
+ case EWmlCmdMoveOk:
+ {
+ MoveItemsL();
+ break;
+ }
+ case EWmlCmdMoveCancel:
+ {
+ CancelMoveItemsL();
+ break;
+ }
+
+ case EWmlCmdMoveToFolder:
+ {
+ iSaveBMOrder = ETrue;
+ CBrowserFavouritesView::HandleCommandL(aCommand);
+ break;
+ }
+
+ case EWmlCmdGotoPaneCancel:
+ {
+ // Cancel editing and sets Goto Pane text back.
+ if (TheContainer()->GotoPane()->PopupList() != NULL)
+ {
+ TheContainer()->GotoPane()->PopupList()->SetDirectoryModeL( ETrue );
+ TheContainer()->GotoPane()->PopupList()->HidePopupL();
+ }
+ delete iEnteredURL;
+ iEnteredURL = NULL;
+ BROWSER_LOG( ( _L("delete iEnteredUrl 2") ) );
+ iCursorPos = -1;
+
+ TheContainer()->SetGotoInactiveL();
+
+ DimToolbarButtons(EFalse);
+
+ break;
+ }
+
+ // Menu commands.
+ case EWmlCmdFavourites:
+ {
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ ExitAdaptiveBookmarks();
+ }
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ break;
+ }
+
+ case EWmlCmdBackToPage:
+ {
+ ApiProvider().SetViewToReturnOnClose( KUidBrowserBookmarksViewId );
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ break;
+ }
+
+ case EWmlCmdDownload:
+ case EWmlCmdDownloadPage:
+ {
+ ActivateCurrentBookmarkL();
+ break;
+ }
+
+#ifdef __RSS_FEEDS
+ case EWmlCmdOpenFeedsFolder:
+ {
+ //complete remaining startup in Browser and then proceed
+ if ( !ApiProvider().StartedUp() )
+ ApiProvider().CompleteDelayedInit();
+ ApiProvider().FeedsClientUtilities().ShowFolderViewL();
+ break;
+ }
+#endif // __RSS_FEEDS
+
+
+ case EWmlCmdLaunchHomePage:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+
+ case EWmlCmdOpenItem:
+ {
+ // re-handle the open item command depending on whether a folder or an
+ // item is selected.
+ if ( Container() && Container()->Listbox() )
+ {
+ const CFavouritesItem* item = Container()->Listbox()->CurrentItem();
+ if ( item && item->IsFolder() )
+ {
+ HandleCommandL(EWmlCmdOpenFolder);
+ }
+ else
+ {
+ HandleCommandL(EWmlCmdDownload);
+ }
+ }
+ break;
+ }
+
+ case EWmlCmdAddBookmark:
+ {
+ AddNewBookmarkL();
+ break;
+ }
+
+ case EWmlCmdGoToAddressAndSearch:
+ case EWmlCmdGoToAddress: // MSK for Recent Url page
+ case EWmlCmdSwitchToGotoActive:
+ {
+ DimToolbarButtons(ETrue);
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ CEikButtonGroupContainer* cba = Cba()->Current();
+ CEikCba* eikCba = static_cast<CEikCba*>( cba->ButtonGroup() );
+ if( eikCba )
+ {
+ eikCba->EnableItemSpecificSoftkey( EFalse );
+ }
+#endif
+ TheContainer()->SetGotoActiveL();
+ break;
+ }
+
+ case EIsCmdSearchWeb:
+ {
+ DimToolbarButtons(ETrue);
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ CEikButtonGroupContainer* cba = Cba()->Current();
+ CEikCba* eikCba = static_cast<CEikCba*>( cba->ButtonGroup() );
+ if( eikCba )
+ {
+ eikCba->EnableItemSpecificSoftkey( EFalse );
+ }
+#endif
+ TheContainer()->SetSearchActiveL();
+ break;
+ }
+
+ case EWmlCmdEditBookmark:
+ {
+ EditCurrentBookmarkL();
+ break;
+ }
+
+ case EWmlCmdSetAsHomePage:
+ {
+ if ( Container() && Container()->Listbox() )
+ {
+ const CFavouritesItem* item =
+ Container()->Listbox()->CurrentItem();
+ if ( item && item->IsItem() &&
+ TBrowserDialogs::ConfirmQueryYesNoL(
+ R_QTN_BROWSERBM_QUERY_SET_AS_HOME_PAGE ) )
+ {
+ ApiProvider().Preferences().SetHomePageUrlL( item->Url() );
+ ApiProvider().Preferences().SetHomePageTypeL( EWmlSettingsHomePageAddress );
+ }
+ }
+ break;
+ }
+
+ case EWmlCmdPreferences:
+ {
+ CBrowserFavouritesView::HandleCommandL( aCommand );
+ break;
+ }
+
+ case EWmlCmdCopyToBookmarks:
+ {
+ CArrayPtr<const CFavouritesItem>* items =
+ Container()->Listbox()->SelectedItemsLC();
+ if (items->Count())
+ {
+ // Set WAP AP.
+ CFavouritesItem* item;
+ for (TInt i=0;i<items->Count();i++)
+ {
+ item = CFavouritesItem::NewL();
+ *item = *( items->At( i ) );
+ CleanupStack::PushL( item );
+ item->SetParentFolder( KFavouritesRootUid );
+ Model().AddL( *item, EFalse, CBrowserFavouritesModel::EAutoRename );
+ AddUidToLastPlaceToCurrentListL( item->Uid() );
+ CleanupStack::PopAndDestroy();//item
+ }
+ iRefresh = EFalse;
+ Model().Database().SetData( CurrentFolder() , *iCurrentOrder );
+ Container()->Listbox()->View()->ClearSelection();
+ if (items->Count()==1)
+ {
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ R_BROWSER_ADAPTIVE_BOOKMARKS_ADAPTIVE_BOOKMARK_COPIED
+ );
+ }
+ else
+ {
+ TBrowserDialogs::InfoNoteL(
+ R_BROWSER_INFO_NOTE,
+ R_BROWSER_ADAPTIVE_BOOKMARKS_ADAPTIVE_BOOKMARKS_COPIED,
+ items->Count() );
+ }
+ }
+ CleanupStack::PopAndDestroy();//items
+ break;
+ }
+
+ case EWmlCmdRename:
+ {
+ // NO rename on menu
+ {
+ CBrowserFavouritesView::HandleCommandL( aCommand );
+ }
+ break;
+ }
+
+ case EWmlCmdDelete:
+ {
+ DeleteItems( aCommand );
+ break;
+ } // case
+
+
+ case EWmlCmdClearAdaptiveBookmarks:
+ {
+ if ( TBrowserDialogs::ConfirmQueryYesNoL(
+ R_BROWSER_ADAPTIVE_BOOKMARKS_DELETE_ALL_ADAPTIVE_BOOKMARKS) )
+ {
+ ClearAdaptiveBookmarksL();
+ }
+ break;
+ }
+
+ case EWmlCmdClearAdaptiveBookmarksNoPrompt:
+ {
+ ClearAdaptiveBookmarksL();
+ break;
+ }
+
+ case EWmlCmdOpenFolder:
+ {
+ if ( TheContainer()->GotoPane()->PopupList() )
+ {
+ if ( TheContainer()->GotoPane()->PopupList()->IsPoppedUp() )
+ {
+ TheContainer()->GotoPane()->PopupList()->SetDirectoryModeL(
+ EFalse );
+ break; // This case is supposed to fall through into the next case in certain
+ // conditions.
+ }
+ }
+ }
+
+ case EWmlCmdOpenMarkedFolder:
+ {
+ SetEmptyTextL();
+ if (Container()->Listbox()->CurrentItem()->Uid() ==
+ KFavouritesAdaptiveItemsFolderUid )
+ {
+ iAdaptiveBookmarksFolderSelected = ETrue;
+ iInAdaptiveBookmarksFolder = ETrue;
+ SetEmptyTextL();
+ RefreshL();
+ }
+ else
+ {
+ CBrowserFavouritesView::HandleCommandL( aCommand );
+ UpdateToolbarButtonsState();
+ }
+ break;
+ }
+
+ case EWmlCmdBackFromFolder:
+ {
+ Container()->Listbox()->ClearSelection();
+ if ( iDomainFolderName )
+ {
+ HBufC* domainFolderNameToHighlight;
+ domainFolderNameToHighlight = HBufC::NewL(
+ iDomainFolderName->Length() );
+ CleanupStack::PushL( domainFolderNameToHighlight );
+
+ domainFolderNameToHighlight->Des().Append( *iDomainFolderName );
+ delete iDomainFolderName;
+ iDomainFolderName = NULL;
+
+ CFavouritesItemList* items =
+ GetItemsLC( KFavouritesAdaptiveItemsFolderUid );
+ TInt indexToHighlight = 0;
+
+ for ( TInt i = 0; i < items->Count(); i++ )
+ {
+ if ( (*items)[i]->Name() == (*domainFolderNameToHighlight) )
+ {
+ indexToHighlight = i;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // items
+ CleanupStack::PopAndDestroy(); // domainFolderNameToHighlight
+
+ HBufC* title;
+ title=iCoeEnv->AllocReadResourceLC(
+ R_BROWSER_ADAPTIVE_BOOKMARKS_TITLE );
+ ApiProvider().Display().SetTitleL( *title );
+ CleanupStack::PopAndDestroy(); // title
+ RefreshL();
+ Container()->Listbox()->SetCurrentItemIndexAndDraw(
+ indexToHighlight );
+ }
+ else
+ {
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ iAdaptiveBookmarksFolderSelected = EFalse;
+ iInAdaptiveBookmarksFolder=EFalse;
+ SetEmptyTextL();
+ HBufC* title;
+ title=iCoeEnv->AllocReadResourceLC(
+ TheContainer()->TitleResourceId() );
+ UpdateNaviPaneL();
+ ApiProvider().Display().SetTitleL( *title );
+ iPreferredHighlightUid=KFavouritesAdaptiveItemsFolderUid;
+ CleanupStack::PopAndDestroy(); // title
+ RefreshL();
+ }
+ else
+ {
+ CBrowserFavouritesView::HandleCommandL( aCommand );
+ }
+ }
+ // Back from a folder may require change in toolbar button state
+ UpdateToolbarButtonsState();
+ break;
+ }
+
+ case EWmlCmdSendBookmarkViaUnifiedMessage:
+ {
+ // Both case can be handled alike - SendBookmarksL
+ // uses SelectedItemsLC - this always what we want (if there is
+ // something marked, those; if no marked, the highlighted one).
+ SendBookmarksL( );
+ break;
+ }
+
+
+#ifdef __SERIES60_HELP
+ case EAknCmdHelp:
+ {
+ STATIC_CAST(CBrowserAppUi*, AppUi())->HandleCommandL(EAknCmdHelp);
+ break;
+ }
+#endif //__SERIES60_HELP
+
+ case EWmlCmdDownloads:
+ {
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowDownloads +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+ }
+
+ case EWmlCmdDownloadPageNewWindow:
+ {
+ const CFavouritesItem* item = Container()->Listbox()->CurrentItem();
+ if ( item )
+ {
+ CBrowserAppUi::Static()->OpenLinkInNewWindowL( *item );
+ }
+ break;
+ }
+
+ default:
+ {
+ if (aCommand == EWmlCmdDelete &&
+ (Container()->Listbox()->CurrentItem()->ParentFolder()==KFavouritesAdaptiveItemsFolderUid))
+ {
+ DeleteItems( aCommand );
+ break;
+ }
+ CBrowserFavouritesView::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::SetEmptyTextL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::SetEmptyTextL()
+ {
+ HBufC* buf;
+ if (iInAdaptiveBookmarksFolder)
+ {
+ HBufC* title;
+ if (iDomainFolderName != NULL)
+ {
+ ApiProvider().Display().SetTitleL( *iDomainFolderName );
+ }
+ else
+ {
+ title=iCoeEnv->AllocReadResourceLC( R_BROWSER_ADAPTIVE_BOOKMARKS_TITLE );
+ ApiProvider().Display().SetTitleL( *title );
+ CleanupStack::PopAndDestroy(); // title
+ }
+ buf = iCoeEnv->AllocReadResourceLC( R_BROWSER_ADAPTIVE_BOOKMARKS_NO_ADAPTIVE_BOOKMARKS );
+ }
+ else
+ {
+ buf = iCoeEnv->AllocReadResourceLC( TheContainer()->ListboxEmptyTextResourceId() );
+ }
+ TheContainer()->Listbox()->View()->SetListEmptyTextL( *buf );
+ CleanupStack::PopAndDestroy(); // buf
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::Id
+// ----------------------------------------------------------------------------
+//
+TUid CBrowserBookmarksView::Id() const
+ {
+ return KUidBrowserBookmarksViewId;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CommandSetResourceIdL
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserBookmarksView::CommandSetResourceIdL()
+ {
+ // massive re-work for 5.0, to dynamically assign CBA
+ return(R_BROWSER_BUTTONS_CBA_DYNAMIC);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CommandSetResourceDynL
+// ----------------------------------------------------------------------------
+//
+
+void CBrowserBookmarksView::CommandSetResourceDynL(TSKPair& aLsk, TSKPair& aRsk, TSKPair& aMsk)
+{
+ //
+ // Get gotoPane pointer and appropriate Container pointer.
+ //
+ // These are passed in to the LSK, RSK, MSK dynamic setting functions
+ // and used to help chose the appropriate softkeys
+ //
+ CBrowserBookmarksGotoPane* gotoPanePtr = NULL;
+ CBrowserBookmarksContainer* theContainer = TheContainer();
+
+ // if the container doesn't exist, leave gotoPanePtr at NULL
+ if (theContainer)
+ {
+ gotoPanePtr = theContainer->GotoPane();
+ }
+
+ // set LSK, RSK, MSK respectively
+ SetLSKDynL(aLsk, gotoPanePtr);
+ SetRSKDynL(aRsk, gotoPanePtr);
+ SetMSKDynL(aMsk, aLsk, theContainer, gotoPanePtr);
+
+ //
+ // Finally, if the contextual menu command was assigned to the MSK,
+ // we need to set up the menu now
+ //
+ if ( aMsk.id() == EAknSoftkeyContextOptions )
+ {
+ ConfigContextMenu();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::SetLSKDynL
+// ----------------------------------------------------------------------------
+//
+
+void CBrowserBookmarksView::SetLSKDynL(TSKPair& aLsk,
+ CBrowserBookmarksGotoPane* aGotoPane)
+{
+ CBrowserBookmarksContainer* theContainer = TheContainer();
+ CBrowserBookmarksGotoPane* searchPane = NULL;
+ if( theContainer )
+ {
+ searchPane = theContainer->SearchPane();
+ }
+ // Default lsk is option
+ aLsk.setPair(EAknSoftkeyOptions, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_OPTION);
+
+ if ( iManualItemMovingGoingOn )
+ {
+ aLsk.setPair(EWmlCmdMoveOk, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_OK);
+ }
+ else if ( aGotoPane && aGotoPane->IsEditing() )
+ {
+ // default for goto is go
+ aLsk.setPair(EWmlCmdGotoPaneGoTo, R_BROWSER_BOOKMARKS_DYN_SK_QTN_WML_SOFTK_GO);
+
+ if (aGotoPane->PopupList() &&
+ aGotoPane->PopupList()->IsOpenDirToShow() )
+ {
+ aLsk.setPair(EBrowserBookmarksCmdOpen, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_OPEN);
+ }
+ else if (aGotoPane->PopupList() &&
+ aGotoPane->PopupList()->IsPoppedUp() &&
+ !iPenEnabled)
+ {
+ // LSK Select is only for non-touch devices
+ aLsk.setPair(EWmlCmdGotoPaneSelect, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_SELECT);
+ }
+ }
+ else if( searchPane && searchPane->IsEditing() )
+ {
+ aLsk.setPair(EWmlCmdGotoPaneGoTo, R_BROWSER_BOOKMARKS_DYN_SK_QTN_IS_SOFTK_SEARCH);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::SetRSKDynL
+// ----------------------------------------------------------------------------
+//
+
+void CBrowserBookmarksView::SetRSKDynL(TSKPair& aRsk,
+ CBrowserBookmarksGotoPane* aGotoPane)
+{
+ CBrowserBookmarksContainer* theContainer = TheContainer();
+ CBrowserBookmarksGotoPane* searchPane = NULL;
+ if( theContainer )
+ {
+ searchPane = theContainer->SearchPane();
+ }
+ if ( iManualItemMovingGoingOn )
+ {
+ aRsk.setPair(EBrowserBookmarksCmdCancel, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_CANCEL);
+ }
+ else if( (aGotoPane && aGotoPane->IsEditing()) || (searchPane && searchPane->IsEditing()) )
+ {
+ // default for goto is cancel
+ aRsk.setPair(EBrowserBookmarksCmdCancel, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_CANCEL);
+ }
+ else
+ {
+ // default case for everything else is Back
+ aRsk.setPair(EBrowserBookmarksCmdBack, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_BACK);
+
+ // OR, it could be exit under these conditions
+ if ( (!iInAdaptiveBookmarksFolder && !ApiProvider().IsPageLoaded() && !ApiProvider().Fetching()) )
+ {
+ if ( iCurrentFolder == KFavouritesRootUid )
+ {
+ aRsk.setPair(EAknSoftkeyExit, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_EXIT);
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::SetMSKDynL
+// ----------------------------------------------------------------------------
+//
+
+void CBrowserBookmarksView::SetMSKDynL(TSKPair& aMsk, const TSKPair aLsk,
+ CBrowserFavouritesContainer* aContainer,
+ CBrowserBookmarksGotoPane* aGotoPane)
+ {
+ // setup any marked items flag for convenience
+ // also verify that container is defined
+ TBool anyMarkedItems = EFalse;
+ if ( aContainer)
+ {
+ anyMarkedItems = aContainer->Listbox()->SelectionStateL().AnyMarked();
+ }
+ else
+ {
+ return;
+ }
+
+ //
+ // Usually, MSK is context menu if marked items.
+ // The exception is if moving is in progress (and marked items).. then its the dot (in place of OK).
+ // Otherwise, the Open Command is thrown.
+ //
+ if ( anyMarkedItems )
+ {
+ if ( iManualItemMovingGoingOn )
+ {
+ aMsk.setPair(EWmlCmdMoveOk, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_OK);
+ }
+ else
+ {
+ aMsk.setPair(EAknSoftkeyContextOptions, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_OPTION);
+ }
+ }
+ else
+ {
+ aMsk.setPair(EBrowserBookmarksCmdOpen, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_OPEN);
+ }
+
+ CBrowserBookmarksContainer* theContainer = TheContainer();
+ CBrowserBookmarksGotoPane* searchPane = NULL;
+ if( theContainer )
+ {
+ searchPane = theContainer->SearchPane();
+ }
+ //
+ // UNDER these special conditions, the msk is set differently:
+ //
+ if ( aGotoPane && aGotoPane->IsEditing() )
+ {
+ // follow whatever the lsk is set to
+ aMsk = aLsk;
+ }
+ else if( searchPane && searchPane->IsEditing() )
+ {
+ // follow whatever the lsk is set to
+ aMsk = aLsk;
+ }
+ else
+ {
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ if ( aContainer->Listbox()->UnfilteredNumberOfItems() <= 0 )
+ {
+ aMsk.setPair( EWmlCmdGoToAddress, R_BROWSER_BOOKMARKS_DYN_SK_QTN_BROWSER_MSK_GOTO );
+ }
+ }
+ else
+ {
+ if ( (reinterpret_cast <CBrowserAppUi*>(AppUi())->IsEmbeddedModeOn()) ||
+ iCurrentFolder == KFavouritesRootUid )
+ {
+ if ( aContainer->Listbox()->UnfilteredNumberOfItems() <= 0 )
+ {
+ aMsk.setPair( EWmlCmdAddBookmark, R_BROWSER_BOOKMARKS_DYN_SK_QTN_MSK_ADD );
+ }
+ }
+ else
+ {
+ if ( aContainer->Listbox()->UnfilteredNumberOfItems() <= 0 )
+ {
+ aMsk.setPair( EWmlCmdAddBookmark, R_BROWSER_BOOKMARKS_DYN_SK_QTN_MSK_ADD );
+ }
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::HandleBookmarksGotoPaneEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::HandleBookmarksGotoPaneEventL
+ (
+ CBrowserBookmarksGotoPane*
+#ifdef _DEBUG
+ aGotoPane // used only for debugging purposes
+#endif
+ ,
+ MBookmarksGotoPaneObserver::TEvent aEvent
+ )
+ {
+#ifdef _DEBUG
+ __ASSERT_DEBUG( aGotoPane == TheContainer()->GotoPane() ||
+ aGotoPane == TheContainer()->SearchPane(), \
+ Util::Panic( Util::EFavouritesInternal ) );
+#endif
+
+ switch ( aEvent )
+ {
+ case MBookmarksGotoPaneObserver::EEventEnterKeyPressed:
+ {
+ HandleCommandL( EWmlCmdGotoPaneGoTo );
+ break;
+ }
+
+ case MBookmarksGotoPaneObserver::EEventEditingModeChanged:
+ {
+ UpdateCbaL();
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CBrowserBookmarksView
+// ----------------------------------------------------------------------------
+//
+CBrowserBookmarksView::CBrowserBookmarksView ( MApiProvider& aApiProvider,
+ CRecentUrlStore& aRecentUrlStore,
+ TInt aInitialFolderUid )
+ : CBrowserFavouritesView( aApiProvider, aInitialFolderUid ),
+ iFetchInit( EFalse ),
+
+ iRecentUrlStore (aRecentUrlStore)
+
+
+
+ {
+ // Initially start with default AP as Start Page AP.
+ iCurrentDefaultAp = iStartPageApUid =
+ ApiProvider().Preferences().DefaultAccessPoint();
+ iPenEnabled = AknLayoutUtils::PenEnabled();
+ iHandleDeleteInProgress = EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::ConstructL( TInt aViewResourceId )
+ {
+LOG_ENTERFN("BookmarksView::ConstructL");
+ CBrowserFavouritesView::ConstructL( aViewResourceId );
+ // Begin observing changes in active AP and default AP. Note that we
+ // set/unset observers here, not in DoActivateL/DoDeactivate: we do the
+ // observing even if the view is not active. This is needed, because
+ // preferences and the active AP can be changed from other views also.
+ // If notification kicks in when the view is not active, display RefreshL
+ // is, of course, suppressed (in base class).
+ ApiProvider().Preferences().AddObserverL( this );
+ ApiProvider().Connection().SetApChangeObserver( *this );
+ iOpenAdaptiveBookmarksWhenActivated = EFalse;
+ iAdaptiveBookmarksFolderSelected = EFalse;
+ iInAdaptiveBookmarksFolder=EFalse;
+ iAdaptiveBookmarksCurrentSetting =
+ ApiProvider().Preferences().AdaptiveBookmarks();
+ iEnteredURL = NULL;
+BROWSER_LOG( ( _L("delete iEnteredUrl 3") ) );
+ iCursorPos = -1;
+
+ //Since the webcore will be reading the bookmark information in background
+ //thread, its important to refresh when the thread notifies the fresh data.
+ //Call to GetItemsLC above, which inturn calls ManualBMSortL will set iRefresh to false
+ //Make it true so that latest FavIcon db info is shown
+ iRefresh = ETrue;
+
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ if ( ApiProvider().Preferences().SearchFeature() ) // hide the button which is not needed
+ Toolbar()->HideItem( EWmlCmdGoToAddress, ETrue , EFalse);
+ else
+ Toolbar()->HideItem( EWmlCmdGoToAddressAndSearch, ETrue , EFalse);
+#else
+ Toolbar()->HideItem( EWmlCmdAddBookmark, ETrue , EFalse);
+
+ //disable both the goto items and activate one of them depending on availability of search feature during bookmarks activation
+ Toolbar()->HideItem( EWmlCmdGoToAddress, ETrue , EFalse);
+ Toolbar()->HideItem( EWmlCmdGoToAddressAndSearch, ETrue , EFalse );
+
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ Toolbar()->HideItem( EWmlCmdDelete, ETrue , EFalse);
+#else
+ Toolbar()->HideItem( EWmlCmdPreferences, ETrue , EFalse);
+#endif
+
+ Cba()->MakeVisible( EFalse);
+ StatusPane()->MakeVisible( EFalse );
+#endif
+
+ if (iPenEnabled)
+ {
+ Toolbar()->SetToolbarObserver(this);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::HandleListBoxEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::HandleListBoxEventL(
+ CEikListBox* aListBox,
+ MEikListBoxObserver::TListBoxEvent aEventType )
+ {
+ if ( aListBox == Container()->Listbox() )
+ {
+ switch ( aEventType )
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ case MEikListBoxObserver::EEventEmptyListClicked:
+ return;
+#endif
+ case MEikListBoxObserver::EEventEnterKeyPressed:
+ case MEikListBoxObserver::EEventItemDoubleClicked:
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ case MEikListBoxObserver::EEventItemSingleClicked:
+#endif
+ {
+ if ( iManualItemMovingGoingOn )
+ {
+ MoveItemsL();
+ return;
+ }
+ else if ( Container()->Listbox()->CurrentItem() )
+ {
+ //complete remaining startup in Browser and then proceed
+ if ( !ApiProvider().StartedUp() )
+ ApiProvider().CompleteDelayedInit();
+
+ if ( Container()->Listbox()->CurrentItem()->IsItem())
+ {
+ ActivateCurrentBookmarkL();
+ return;
+ }
+ else
+ {
+ if (Container()->Listbox()->CurrentItem()->Uid()==KFavouritesAdaptiveItemsFolderUid)
+ {
+ iAdaptiveBookmarksFolderSelected = ETrue;
+ iInAdaptiveBookmarksFolder=ETrue;
+ SetEmptyTextL();
+ RefreshL();
+
+ iPreviousViewID = KUidBrowserBookmarksViewId;
+ return;
+ }
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ if ( TheContainer()->Listbox()->CurrentItem() && TheContainer()->Listbox()->CurrentItem()->IsFolder() )
+ {
+ SetEmptyTextL();
+ }
+
+ CBrowserFavouritesView::HandleListBoxEventL( aListBox, aEventType );
+ UpdateToolbarButtonsState();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::DynInitMenuPaneL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::DynInitMenuPaneL
+ (
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane,
+ TCommandVisibility::TIndex /*aIndex */,
+ const TBrowserFavouritesSelectionState& aState
+ )
+ {
+ LOG_ENTERFN("CBrowserBookmarksView::DynInitMenuPaneL");
+
+ __ASSERT_DEBUG( (aMenuPane != NULL), Util::Panic( Util::EUninitializedData ));
+
+ const CFavouritesItem* item = TheContainer()->Listbox()->CurrentItem();
+
+ switch ( aResourceId )
+ {
+ case R_BROWSER_BOOKMARKS_MENU_PANE:
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ if(iItemsToMove )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMove, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdDelete, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdSendAddressViaUnifiedMessage, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdSetAsHomePage, ETrue );
+ }
+ else
+ {
+ if ( ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserUiHomePageSetting ) )
+ {
+ TBool dimSaveAsHomePage = EFalse;
+
+ if ( (item && (item->IsFolder() ||
+ item->Uid() == KFavouritesAdaptiveItemsFolderUid ||
+ item->ContextId())))
+ {
+ dimSaveAsHomePage = ETrue;
+ }
+ else
+ {
+ dimSaveAsHomePage = ApiProvider().IsEmbeddedModeOn() || !aState.CurrentIsItem()
+ || ( aState.MarkedCount() > 1 );
+ }
+
+ aMenuPane->SetItemDimmed( EWmlCmdSetAsHomePage, dimSaveAsHomePage );
+ }
+ if (!item)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue );
+ }
+ else if ( (item && (item->IsFolder() ||
+ item->Uid() == KFavouritesAdaptiveItemsFolderUid ||
+ item->ContextId())))
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue );
+ }
+ }
+
+ aMenuPane->SetItemDimmed( EWmlCmdSendAddressViaUnifiedMessage, ETrue );
+
+ if(iInAdaptiveBookmarksFolder)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMove, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ }
+ if ( ( item ) &&
+ ( ( item->Uid() == KFavouritesAdaptiveItemsFolderUid ) ||
+ ( item->ContextId() != NULL ) ||
+ (item->IsReadOnly()) ) //If the bookmarks are the default provided by operator
+ )
+ {
+ // We can't delete adaptive bookmarks folder,
+ // or seamless folders
+ aMenuPane->SetItemDimmed( EWmlCmdDelete, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ }
+ if( item && item->IsFolder())
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ }
+
+#endif
+ // downloads
+ if(ApiProvider().StartedUp())
+ aMenuPane->SetItemDimmed( EWmlCmdDownloads, !ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ) );
+
+ // edit
+ if ( !item || (iInAdaptiveBookmarksFolder && aState.IsEmpty() ))
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdManageBookmarks, ETrue );
+ }
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ // add bookmark
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdAddBookmark, ETrue );
+ }
+
+ // create folder
+ if ( iCurrentFolder != KFavouritesRootUid || iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdNewFolder, ETrue );
+ }
+#endif
+
+ if ( iInAdaptiveBookmarksFolder && aState.IsEmpty() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdBmActions, ETrue );
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ if (!item)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMarkUnmark, ETrue );
+ }
+#endif
+/*
+ if (BRDO_BROWSER_UPDATE_UI_FF)
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdHelpMenu, ETrue );
+ }
+*/
+ break;
+ }
+ case R_GOTO_SUBMENU:
+ {
+ // back to page
+ if ( !ApiProvider().IsPageLoaded() && !ApiProvider().Fetching())
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdBackToPage, ETrue );
+ }
+
+ // bookmarks
+ aMenuPane->SetItemDimmed( EWmlCmdFavourites, ETrue );
+
+ // web feeds
+ if (ApiProvider().IsEmbeddedModeOn())
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdOpenFeedsFolder, ETrue );
+ }
+
+ // history
+ aMenuPane->SetItemDimmed( EWmlCmdHistory, ETrue );
+
+ // home
+ aMenuPane->SetItemDimmed( EWmlCmdLaunchHomePage, ETrue );
+ //search
+ if ( ! ApiProvider().Preferences().SearchFeature() )
+ {
+ aMenuPane->SetItemDimmed( EIsCmdSearchWeb, ETrue );
+ }
+ break;
+ }
+ case R_BMACTIONS_SUBMENU:
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ // send
+ aMenuPane->SetItemDimmed( EWmlCmdSendAddressViaUnifiedMessage, ETrue );
+
+ if (!item)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue );
+ }
+ else if ( (item && (item->IsFolder() ||
+ item->Uid() == KFavouritesAdaptiveItemsFolderUid ||
+ item->ContextId())))
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue );
+ }
+#endif
+ // copy to bookmarks
+ if ( !iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdCopyToBookmarks, ETrue );
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ // set as homepage
+ if ( ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserUiHomePageSetting ) )
+ {
+ TBool dimSaveAsHomePage = EFalse;
+
+ if ( (item && (item->IsFolder() ||
+ item->Uid() == KFavouritesAdaptiveItemsFolderUid ||
+ item->ContextId())))
+ {
+ dimSaveAsHomePage = ETrue;
+ }
+ else
+ {
+ dimSaveAsHomePage = ApiProvider().IsEmbeddedModeOn() || !aState.CurrentIsItem()
+ || ( aState.MarkedCount() > 1 );
+ }
+
+ aMenuPane->SetItemDimmed( EWmlCmdSetAsHomePage, dimSaveAsHomePage );
+ }
+ // add bookmark
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdAddBookmark, ETrue );
+ }
+#endif
+ // set preferred/unpreferred
+ if ( !iContainer->Listbox()->CurrentItem() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSetPreferredBookmark, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdSetUnPreferredBookmark, ETrue );
+ }
+ else
+ {
+ if ( ( iCurrentFolder == KFavouritesRootUid )||
+ !iContainer->Listbox()->GetDefaultData().iInSeamlessFolder ||
+ ( iContainer->Listbox()->GetDefaultData().iPreferedId ==
+ iContainer->Listbox()->CurrentItem()->Uid() )
+ )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSetPreferredBookmark, ETrue );
+ }
+
+ if ( ( iCurrentFolder == KFavouritesRootUid ) ||
+ !iContainer->Listbox()->GetDefaultData().iInSeamlessFolder ||
+ !( iContainer->Listbox()->GetDefaultData().iPreferedId ==
+ iContainer->Listbox()->CurrentItem()->Uid() )
+ )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSetUnPreferredBookmark,
+ ETrue );
+ }
+ }
+
+ break;
+ }
+ case R_BOOKMARKS_EDIT_SUBMENU:
+ {
+ // edit bookmark
+ if (!item || aState.MarkedCount() > 0)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdEditBookmark, ETrue );
+ }
+ else if (( (item && (item->IsFolder() ||
+ item->Uid() == KFavouritesAdaptiveItemsFolderUid ||
+ item->ContextId() || aState.CurrentIsSpecial() || iInAdaptiveBookmarksFolder)))
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ ||(item->IsReadOnly())//If the bookmarks are readonly(set by the operator)
+#endif
+ )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdEditBookmark, ETrue );
+ }
+
+ // rename
+
+ // Can't rename recent urls and seamless folders - can only rename basic folders
+ if ( item->IsFolder() &&
+ (item->Uid() != KFavouritesAdaptiveItemsFolderUid) &&
+ (item->ContextId() == NULL) )
+ {
+ // more item is marked -> dim rename
+ if ( aState.MarkedCount() > 0 )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdRename, ETrue );
+ }
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdRename, ETrue );
+ }
+
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ // delete
+ if (!item)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdDelete, ETrue );
+ }
+ else if ( item->Uid() == KFavouritesAdaptiveItemsFolderUid ||
+ item->ContextId() ||
+ !aState.AnyDeletable() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdDelete, ETrue );
+ }
+
+ // move
+ if ( iInAdaptiveBookmarksFolder || (TheContainer()->Listbox()->UnfilteredNumberOfItems() < 2 ) )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMove, ETrue );
+ }
+
+ // move to folder
+ if ( !aState.AnyPlainItem() || (iCurrentFolder == KFavouritesRootUid &&
+ iContainer && iContainer->Listbox() && !iContainer->Listbox()->AnyFoldersL()) )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ }
+ // create folder
+ if ( iCurrentFolder != KFavouritesRootUid || iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdNewFolder, ETrue );
+ }
+#endif
+
+ break;
+ }
+ case R_BROWSER_FAVOURITES_MENU_PANE_MARK_UNMARK:
+ {
+ // For items and folders, show "Mark" or "Unmark".
+ aMenuPane->SetItemDimmed ( aState.CurrentIsMarked() ? EWmlCmdMark : EWmlCmdUnmark, ETrue );
+ #ifndef SHOW_UNMARK_ALL_ALWAYS
+
+ // We must show "Unmark all", even if nothing is marked.
+ //
+ // The case when there are no items at all, is not handled here:
+ // in that case we don't have "Edit list" menu.
+ if ( aState.NoneIsMarked() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdUnmarkAll, ETrue );
+ }
+ #endif // SHOW_UNMARK_ALL_ALWAYS
+
+ #ifndef SHOW_MARK_ALL_ALWAYS
+ // As for "mark all", consider items only.
+ if ( (aState.iVisibleItemCount == aState.iMarkedItemCount) && (aState.iVisibleFolderCount == aState.iMarkedFolderCount) )
+ {
+ //Checking for both items and folders
+ aMenuPane->SetItemDimmed( EWmlCmdMarkAll, ETrue );
+ }
+ else if( (aState.iVisibleItemCount == 0) && (aState.iVisibleFolderCount < 2))//Only one folder is present and no items
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMarkAll, ETrue );
+ }
+ #endif // SHOW_MARK_ALL_ALWAYS
+ break;
+ }
+ case R_BROWSER_BOOKMARKS_MENU_PANE_OK:
+ {
+ // Bookmark-specific handling.
+ if ( aState.IsEmpty() || (TheContainer()->Listbox()->UnfilteredNumberOfItems() < 2)||iInAdaptiveBookmarksFolder)
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMove, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMove, EFalse );
+ }
+
+ //Disable MoveToFolder option if you are in RecentlyVisitedUrl folder
+ if( iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ // These options are not required when user press MSK
+ aMenuPane->SetItemDimmed( EWmlCmdAddBookmark, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdCopyToBookmarks, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdSwitchToGotoActive, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdNewFolder, ETrue );
+ }
+
+ if( iContainer && iContainer->Listbox() && !iContainer->Listbox()->AnyFoldersL() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ }
+ const CFavouritesItem* item = NULL;
+ if(TheContainer() && TheContainer()->Listbox())
+ item = TheContainer()->Listbox()->CurrentItem();
+
+ if ( ( item ) &&
+ ( ( item->Uid() == KFavouritesAdaptiveItemsFolderUid ) ||
+ ( item->ContextId() != NULL ) )
+ )
+ {
+ // We can't delete adaptive bookmarks folder,
+ // or seamless folders
+ aMenuPane->SetItemDimmed( EWmlCmdDelete, ETrue );
+ aMenuPane->SetItemDimmed( EWmlCmdMoveToFolder, ETrue );
+ }
+
+ //Enable CopyToBookmarks option if you are in RecentlyVisitedUrl folder
+ if( iInAdaptiveBookmarksFolder )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdCopyToBookmarks, EFalse );
+ }
+ //judge the selected items include RecentlyVisitedUrl folder or not, if include set "copy to bookmarks" dim
+ CArrayPtr<const CFavouritesItem>* items = Container()->Listbox()->SelectedItemsLC();
+ if (items->Count())
+ {
+ for (TInt i=0;i<items->Count();i++)
+ {
+ if((*items)[i]->Uid() == KFavouritesAdaptiveItemsFolderUid )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdCopyToBookmarks, ETrue );
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy();//items
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::RootTitleResourceId
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserBookmarksView::RootTitleResourceId() const
+ {
+ if ( iOpenAdaptiveBookmarksWhenActivated )
+ {
+ return R_BROWSER_ADAPTIVE_BOOKMARKS_TITLE;
+ }
+ else
+ {
+ return R_BROWSER_OPTION_BOOKMARKS;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::OptionsMenuResourceId
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserBookmarksView::OptionsMenuResourceId() const
+ {
+ return ( R_BROWSER_BOOKMARKS_MENU_BAR );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::OkOptionsMenuResourceId
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserBookmarksView::OkOptionsMenuResourceId() const
+ {
+ return R_BROWSER_BOOKMARKS_MENU_BAR_OK;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CreateModelL
+// ----------------------------------------------------------------------------
+//
+CBrowserFavouritesModel* CBrowserBookmarksView::CreateModelL()
+ {
+ return CBrowserBookmarksModel::NewL(ApiProvider());
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CreateContainerL
+// ----------------------------------------------------------------------------
+
+CBrowserFavouritesContainer* CBrowserBookmarksView::CreateContainerL()
+ {
+ CBrowserBookmarksContainer* container =
+ CBrowserBookmarksContainer::NewL( ClientRect(), *this );
+ container->GotoPane()->SetGPObserver( this );
+ if( ApiProvider().Preferences().SearchFeature() )
+ container->SearchPane()->SetGPObserver( this );
+ return container;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::MoveItemsL
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksView::MoveItemsL()
+ {
+
+ // Get the Uid of currently highlighted bookmark item from listbox.
+ // NOTE: Listbox indexes is based on "visible" items in list box, our order
+ // array has visible and invisible items, we have to use Uid to find items.
+ const CFavouritesItem* toItem = Container()->Listbox()->CurrentItem();
+ TInt toUid(NULL);
+ if ( toItem ) {
+ toUid = toItem->Uid();
+ if (toUid == (*iItemsToMove)[0])
+ { // Moving to same location so change nothing, cleanup, & exit
+ CancelMoveItemsL();
+ return;
+ }
+ }
+
+ // Get a copy of the ordered array, it may contain visible and hidden items.
+ CArrayFixFlat<TInt>* orderArray =
+ new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL( orderArray );
+
+ orderArray->AppendL( & ( iCurrentOrder->GetBookMarksOrder()[0] ),
+ iCurrentOrder->GetBookMarksOrder().Count() );
+
+ if ( toUid == NULL ) {
+ toUid = (*orderArray)[orderArray->Count()-1] ;
+ }
+
+
+ // Create a sorted "bookmarks to be moved" array
+ CArrayFixFlat<TInt>* sortedItemsToMove =
+ new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL( sortedItemsToMove );
+
+
+ // Walk our copy of the ordered bookmark array and
+ // 1. Delete the bookmark items to be moved from the ordered array
+ // 2. Sort the bookmark items to be moved to match the visible order of the list
+ TInt i( 0 ); // index into order bookmark list
+ TInt j( 0 ); // index into sorted iItemsToMove
+ for ( i=0; i < orderArray->Count(); i++ ) {
+ TInt orderArrayUid = (*orderArray)[i];
+
+ // Find bookmark to be moved, sort and remove
+ for ( j=0; j < iItemsToMove->Count(); j++ ) {
+ if ( (*iItemsToMove)[j] == orderArrayUid ) {
+ sortedItemsToMove->AppendL( (*iItemsToMove)[j] );
+ orderArray->Delete( i );
+ i--;
+ break;
+ }
+ }
+
+ // Stop sorting, if we're done
+ if ( iItemsToMove->Count() == sortedItemsToMove->Count() ) {
+ break;
+ }
+ }
+
+ // Find the highlighted bookmark item and insert the newly ordered
+ // "bookmark items to be moved" in there
+ for ( i=0; i < orderArray->Count(); i++ ) {
+ if ( toUid == (*orderArray)[ i ] ) {
+ for ( j=0; j < sortedItemsToMove->Count(); j++ ) {
+ orderArray->InsertL( i+j, (*sortedItemsToMove)[j] );
+ }
+ break;
+ }
+ }
+
+ iCurrentOrder->SetBookMarksOrderL( *orderArray );
+ Model().Database().SetData( CurrentFolder(), *iCurrentOrder );
+
+ iManualItemMovingGoingOn = EFalse;
+ Container()->Listbox()->ClearSelection();
+ iPreferredHighlightUid = (*sortedItemsToMove)[0];
+
+ // Delete our arrays sortedItemsToMove, orderArray
+ CleanupStack::PopAndDestroy( 2 );
+ delete iItemsToMove;
+ iItemsToMove = NULL;
+
+ UpdateCbaL();
+ // UnDim Toolbar buttons
+ DimToolbarButtons(EFalse);
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CancelMoveItems
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::CancelMoveItemsL()
+ {
+ iManualItemMovingGoingOn = EFalse;
+ HandleCommandL(EWmlCmdUnmarkAll);
+ UpdateCbaL();
+ // UnDim Toolbar buttons
+ DimToolbarButtons(EFalse);
+ iPreferredHighlightUid = ( *iItemsToMove )[0];
+ delete iItemsToMove;
+ iItemsToMove = NULL;
+ RefreshL();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::StartMoveItems
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::StartMoveItemsL()
+ {
+ iManualItemMovingGoingOn = ETrue;
+
+ TInt moveFrom = ( *Container()->Listbox()->SelectedRealIndexesLC() )[0];
+ CleanupStack::PopAndDestroy(); //SelectedRealIndexesLC
+ TInt count = Container()->Listbox()->SelectedRealIndexesLC()->Count();
+ CleanupStack::PopAndDestroy(); //SelectedRealIndexesLC
+ if ( ( count == 1 )
+ && ( Container()->Listbox()->CurrentItemRealIndex() == moveFrom ) )
+ {
+ HandleCommandL(EWmlCmdMark);
+ }
+
+
+ if (iItemsToMove)
+ {
+ delete iItemsToMove;
+ iItemsToMove = NULL;
+ }
+ iItemsToMove = new (ELeave) CArrayFixFlat<TInt>( KGranularityHigh );
+
+ CArrayPtr<const CFavouritesItem>* items =
+ Container()->Listbox()->SelectedItemsLC();
+
+ for ( TInt i = 0; i < items->Count(); i++ )
+ {
+ iItemsToMove->AppendL( (*(*items)[i]).Uid() );
+ }
+ CleanupStack::PopAndDestroy(items);
+ UpdateCbaL();
+ // Dim Toolbar buttons
+ DimToolbarButtons(ETrue);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::ManualBMSortL
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserBookmarksView::ManualBMSortL( TInt aFolder,
+ CFavouritesItemList* aItems )
+ {
+ __ASSERT_DEBUG( (aItems != NULL), Util::Panic( Util::EUninitializedData ));
+
+ delete iCurrentOrder;
+ iCurrentOrder = NULL;
+ iCurrentOrder = CBrowserBookmarksOrder::NewLC();
+ CleanupStack::Pop();
+ if ( aItems->Count() )
+ {
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL(orderArray);
+
+ if ( !Model().Database().GetData( aFolder ,*iCurrentOrder ) )
+ {
+ if ( iCurrentOrder->GetBookMarksOrder().Count() > 0 )
+ {
+ orderArray->AppendL( & ( iCurrentOrder->GetBookMarksOrder()[0] ),
+ iCurrentOrder->GetBookMarksOrder().Count());
+
+ if ( aFolder == KFavouritesRootUid )
+ {
+ TInt i = 0;
+
+ while ( i < orderArray->Count() &&
+ !( (*orderArray)[i] == KFavouritesStartPageUid ))
+ {
+ i++;
+ }
+
+ if ( i == orderArray->Count() )
+ {
+ if ( iStartPagePresent )
+ {
+ orderArray->InsertL( 0, KFavouritesStartPageUid );
+ iSaveBMOrder = ETrue;
+ }
+ }
+ else
+ {
+ if ( !iStartPagePresent )
+ {
+ orderArray->Delete(i);
+ iSaveBMOrder = ETrue;
+ }
+ }
+ if ( iInsertAdaptiveBookmarksFolder )
+ {
+ iInsertAdaptiveBookmarksFolder = EFalse;
+ i = 0;
+
+ while ( i < orderArray->Count() &&
+ !( (*orderArray)[i] ==
+ KFavouritesAdaptiveItemsFolderUid ))
+ {
+ i++;
+ }
+
+ if ( i < orderArray->Count() )
+ {
+ orderArray->Delete(i);
+ }
+ if ( orderArray->Count() )
+ {
+ if ( (*orderArray)[0] == KFavouritesStartPageUid )
+ {
+ orderArray->InsertL( 1,
+ KFavouritesAdaptiveItemsFolderUid );
+ }
+ else
+ {
+ orderArray->InsertL( 0,
+ KFavouritesAdaptiveItemsFolderUid );
+ }
+ }
+ }
+ else
+ if ( (ADAPTIVEBOOKMARKS) &&
+ ( ApiProvider().Preferences().AdaptiveBookmarks() ==
+ EWmlSettingsAdaptiveBookmarksOn ) )
+ {
+ i = 0;
+
+ while ( i < orderArray->Count() &&
+ !( (*orderArray)[i] ==
+ KFavouritesAdaptiveItemsFolderUid ))
+ {
+ i++;
+ }
+
+ if ( i == orderArray->Count() != 0 )
+ {
+ if ( (*orderArray)[0] == KFavouritesStartPageUid )
+ {
+ orderArray->InsertL( 1,
+ KFavouritesAdaptiveItemsFolderUid );
+ }
+ else
+ {
+ orderArray->InsertL( 0,
+ KFavouritesAdaptiveItemsFolderUid );
+ }
+ }
+ }
+
+ //add new items to the beginning of the list, if there is any
+ for ( TInt j = 0; j < aItems->Count(); j++ )
+ {
+ i = 0;
+ while ( i < orderArray->Count() &&
+ !( (*orderArray)[i] == aItems->At(j)->Uid() ))
+ {
+ i++;
+ }
+
+ if ( i == orderArray->Count() &&
+ !(aItems->At(j)->IsFactoryItem() ) &&
+ !(aItems->At(j)->Uid() ==
+ KFavouritesAdaptiveItemsFolderUid) &&
+ !(aItems->At(j)->Uid() == KFavouritesStartPageUid) )
+ {
+ Model().AddUidToLastPlaceL( aItems->At(j)->Uid(),
+ orderArray, iCurrentOrder );
+ }
+ }
+ }
+ Model().ManualSortL(aFolder, iCurrentOrder, orderArray, aItems);
+ orderArray->Reset();
+ }
+ }
+
+ orderArray->Reset();
+
+ if ( aItems->Count() )
+ {
+ for ( TInt i = 0; i < aItems->Count(); i++ )
+ {
+ orderArray->AppendL( (*aItems)[i]->Uid() );
+ }
+ iCurrentOrder->SetBookMarksOrderL( *orderArray );
+ }
+ if ( iSaveBMOrder )
+ {
+ iSaveBMOrder = EFalse;
+ Model().Database().SetData( aFolder, *iCurrentOrder );
+ }
+ CleanupStack::PopAndDestroy( orderArray );
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::GetItemsL
+// ----------------------------------------------------------------------------
+//
+CFavouritesItemList* CBrowserBookmarksView::GetItemsLC( TInt aFolder )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ CFavouritesItemList* items;
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ items= new (ELeave) CFavouritesItemList();
+ CleanupStack::PushL(items);//1
+ CDesCArrayFlat* aditems = new ( ELeave )
+ CDesCArrayFlat( KBrowserDesCArrayGranularity );
+ aditems->Reset();
+ CleanupStack::PushL(aditems);//2
+
+ CDesCArrayFlat* adnames = new ( ELeave )
+ CDesCArrayFlat( KBrowserDesCArrayGranularity );
+ adnames->Reset();
+ CleanupStack::PushL(adnames);//3
+
+ CFavouritesItem* adaptiveItem;
+
+ if ( !iRecentUrlStore.GetData( *aditems, *adnames) )
+ {
+ for (TInt i=0;i<aditems->MdcaCount(); i++)
+ {
+ adaptiveItem= CFavouritesItem::NewL();
+ CleanupStack::PushL(adaptiveItem);//4
+ adaptiveItem->SetUrlL( aditems->MdcaPoint(i) );
+ adaptiveItem->SetNameL(adnames->MdcaPoint(i).Left(KFavouritesMaxName));
+ adaptiveItem->SetType(CFavouritesItem::EItem);
+ adaptiveItem->SetParentFolder(KFavouritesAdaptiveItemsFolderUid);
+ items->AppendL(adaptiveItem);
+ CleanupStack::Pop(); // adaptiveItem
+ }
+ }
+ CleanupStack::PopAndDestroy( 2 );// aditems, adnames
+ }
+ else
+ {
+ items = new (ELeave) CFavouritesItemList();
+ CleanupStack::PushL( items );
+ Model().Database().GetAll( *items, aFolder );
+ TInt aBMPosition = KAdaptiveBookmarksFirstPositionInBMView; // Adaptive BM folder is first if there is no startpage
+ if ( aFolder == KFavouritesRootUid )
+ {
+ // Create Start Page item to be displayed in root folder (if exist).
+ // (Start Page does not really exist in the database.)
+ CFavouritesItem* startPage = CreateStartPageBookmarkL();
+ if ( startPage )
+ {
+ if (!iStartPagePresent)
+ {
+ iStartPagePresent = ETrue;
+ iSaveBMOrder = ETrue;
+ }
+ CleanupStack::PushL( startPage ); // ownersip is here.
+ items->InsertL( 0, startPage );
+ CleanupStack::Pop(); // startPage: owner is the list now.
+ aBMPosition=KAdaptiveBookmarksSecondPositionInBMView; // Adaptive BM folder is second if there is a startpage item
+ }
+ else
+ {
+ if (iStartPagePresent)
+ {
+ iStartPagePresent = EFalse;
+ iSaveBMOrder = ETrue;
+ }
+ }
+ }
+
+ if ( aFolder == KFavouritesRootUid )
+ {
+ // Create Adaptive Items Folder item to be displayed in root folder (if exist).
+ // (Start Page does not really exist in the database.)
+ if ( ( ADAPTIVEBOOKMARKS ) &&
+ ( ApiProvider().Preferences().AdaptiveBookmarks() ==
+ EWmlSettingsAdaptiveBookmarksOn ))
+ {
+ CFavouritesItem* adaptiveItemsFolder =
+ Model().Database().CreateAdaptiveItemsFolderL();
+ CleanupStack::PushL(adaptiveItemsFolder);
+ HBufC* folderName=StringLoader::LoadLC(
+ R_BROWSER_ADAPTIVE_BOOKMARKS_FOLDER);
+ adaptiveItemsFolder->SetNameL(*folderName);
+
+ CleanupStack::PopAndDestroy();//folderName
+ items->InsertL( aBMPosition , adaptiveItemsFolder );
+ CleanupStack::Pop(); // adaptiveItemsFolder: owner is the list now.
+ }
+ }
+ ManualBMSortL( aFolder, items );
+ }
+PERFLOG_STOP_WRITE("\t\t\t\t BM View GetItemsLC" );
+ return items;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::RefreshL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::RefreshL( TBool aDbErrorNote )
+ {
+ // Same as base class method, except that refreshing Goto Pane is
+ // disallowed when fetching is in progress.
+ // Base class call is TRAP-ped to make sure that frozen state of the Goto
+ // Pane does not stay in due to a leave; but after removing the frozen
+ // state, we trow up the catched leave again (if any).
+ TBool fetching = ApiProvider().Fetching();
+
+ if ( (fetching && TheContainer() && TheContainer()->GotoPane() )
+ || ( TheContainer() && TheContainer()->GotoPane() && TheContainer()->GotoPane()->IsEditing() ))
+ {
+ TheContainer()->GotoPane()->Freeze( ETrue );
+ }
+
+ TRAPD( err, CBrowserFavouritesView::RefreshL( aDbErrorNote ) );
+
+
+ if ( TheContainer() && TheContainer()->GotoPane() )
+ {
+ TheContainer()->GotoPane()->Freeze( EFalse );
+ }
+ User::LeaveIfError( err );
+ // Refresh (i.e. bookmark creation in an empty folder) may cause the need
+ // for toolbar button state to change.
+ UpdateToolbarButtonsState();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::DoActivateL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::DoActivateL (
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage
+ )
+ {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+ LOG_ENTERFN("CBrowserBookmarksView::DoActivateL");
+ LOG_WRITE_FORMAT(" aCustomMessageId: %d", aCustomMessageId);
+
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ // Quick activation for first time only to show bookmarks view fast
+ if(!ApiProvider().StartedUp())
+ {
+ CBrowserFavouritesView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+ if ( aCustomMessageId == KUidCustomMsgDownloadsList )
+ {
+ iShowDownlods = ETrue;
+ // Show the downloads later since contentview has not initialized yet
+ }
+
+ // complete remaining application launch process, aynchronously
+ // complete remaining init as soon as possible, otherwise it can be dangerous (crash)
+ // since UI code (views) are interdependent
+ iAsyncComplete = CIdle::NewL( CActive::EPriorityHigh );
+ iAsyncComplete->Start( TCallBack( CompleteAppInitCallback, &iApiProvider ) );
+ return;
+ }
+#endif
+
+ Toolbar()->HideItem( EWmlCmdAddBookmark, EFalse , ETrue);
+
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ Toolbar()->HideItem( EWmlCmdDelete, EFalse , ETrue);
+#else
+ Toolbar()->HideItem( EWmlCmdPreferences, EFalse , ETrue);
+#endif
+
+ if ( ApiProvider().Preferences().SearchFeature() )
+ {
+ Toolbar()->HideItem( EWmlCmdGoToAddressAndSearch, EFalse, ETrue);
+ }
+ else
+ {
+ Toolbar()->HideItem( EWmlCmdGoToAddress, EFalse, ETrue);
+ }
+
+ Cba()->MakeVisible( ETrue);
+
+ StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
+ StatusPane()->MakeVisible( ETrue );
+ ApiProvider().Display().ClearMessageInfo();
+
+ iAdaptiveBookmarksFolderWasActive = EFalse;
+
+ if ( iOpenAdaptiveBookmarksWhenActivated )
+ {
+ iInAdaptiveBookmarksFolder = ETrue;
+ }
+ CBrowserFavouritesView::DoActivateL
+ ( aPrevViewId, aCustomMessageId, aCustomMessage );
+ ApiProvider().BrCtlInterface().AddLoadEventObserverL( this );
+
+ if ( iPreferencesChanged )
+ {
+ iPreferencesChanged=EFalse;
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ SetEmptyTextL();
+ RefreshL();
+ }
+ }
+
+ if ( aCustomMessageId == KUidCustomMsgDownloadsList )
+ {
+ LOG_WRITE(" KUidCustomMsgDownloadsList");
+ // open the downloads list asynchronously not to block DoActivateL!
+ if ( iDownloadsListExecuter == 0 )
+ {
+ iDownloadsListExecuter = new (ELeave) CAsyncDownloadsListExecuter( ApiProvider() );
+ }
+ iDownloadsListExecuter->Start();
+ }
+ if ( iOpenAdaptiveBookmarksWhenActivated )
+ {
+ iInAdaptiveBookmarksFolder = ETrue;
+ SetEmptyTextL();
+ RefreshL();
+ iOpenAdaptiveBookmarksWhenActivated = EFalse;
+ }
+
+ UpdateToolbarButtonsState();
+
+PERFLOG_STOP_WRITE("BMView DoActivate")
+// LOG_LEAVEFN("CBrowserBookmarksView::DoActivateL");
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CompleteAppInitCallback
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserBookmarksView::CompleteAppInitCallback( TAny* aProvider )
+ {
+ MApiProvider *apiProvider = STATIC_CAST(MApiProvider*, aProvider);
+ TBool result = apiProvider->CompleteDelayedInit();
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::UpdateFavIcons
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::UpdateFavIconsL()
+ {
+ if ( Container() && Container()->Listbox() )
+ Container()->Listbox()->UpdateFavIconsL();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CheckForDownloads
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::CheckForDownloads()
+ {
+ if(iShowDownlods)
+ {
+ if ( iDownloadsListExecuter == 0 )
+ iDownloadsListExecuter = new (ELeave) CAsyncDownloadsListExecuter( ApiProvider() );
+ iDownloadsListExecuter->Start();
+ }
+ }
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::DoDeactivate
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::DoDeactivate()
+ {
+ if ( !iSaveStateOnDeactivate )
+ {
+ ExitAdaptiveBookmarks();
+ }
+ if ( !ApiProvider().ExitInProgress() )
+ {
+ if ( ApiProvider().StartedUp() )
+ ApiProvider().BrCtlInterface().RemoveLoadEventObserver( this );
+ }
+ CBrowserFavouritesView::DoDeactivate();
+ iManualItemMovingGoingOn = EFalse;
+ // UnDim Toolbar buttons
+ DimToolbarButtons(EFalse);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::GotoUrlInGotoPaneL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::GotoUrlInGotoPaneL()
+ {
+LOG_ENTERFN("BookmarksView::GotoUrlInGotoPaneL");
+ CBrowserBookmarksContainer* container = TheContainer();
+ if ( container->GotoPane()->IsEditing() )
+ {
+ // Dim Toolbar buttons
+ DimToolbarButtons(EFalse);
+
+ delete iEnteredURL;
+ iEnteredURL = NULL;
+ BROWSER_LOG( ( _L("delete iEnteredUrl 4") ) );
+
+ iEnteredURL = container->GotoPane()->GetTextL();
+ if ( iEnteredURL )
+ {
+ iTrId = 0;
+ CEikEdwin* editor = STATIC_CAST(CEikEdwin*, container->GotoPane()->ComponentControl(1));
+ iCursorPos = editor->CursorPos();
+
+ UpdateCbaL();
+ // Cancel editing, but leave entered text in place.
+ container->GotoPane()->CancelEditingL();
+
+ ApiProvider().FetchL( iEnteredURL->Des(), CBrowserLoadObserver::ELoadUrlTypeOther );
+ if ( !ApiProvider().Fetching() )
+ {
+ container->SetGotoInactiveL();
+ }
+ }
+ }
+ }
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::ExitAdaptiveBookmarks()
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::ExitAdaptiveBookmarks()
+ {
+ if (iInAdaptiveBookmarksFolder)
+ {
+ iAdaptiveBookmarksFolderWasActive = ETrue;
+ iInAdaptiveBookmarksFolder=EFalse;
+ delete iDomainFolderName;
+ iDomainFolderName=NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::DimToolbarButtons()
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::DimToolbarButtons(TBool aDimButtons)
+ {
+ Toolbar()->SetItemDimmed( EWmlCmdAddBookmark, aDimButtons , ETrue );
+ Toolbar()->SetItemDimmed( EWmlCmdGoToAddress, aDimButtons , ETrue );
+ Toolbar()->SetItemDimmed( EWmlCmdGoToAddressAndSearch, aDimButtons , ETrue );
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ Toolbar()->SetItemDimmed( EWmlCmdDelete, aDimButtons , ETrue );
+#else
+ Toolbar()->SetItemDimmed( EWmlCmdPreferences, aDimButtons , ETrue );
+#endif
+ if (!aDimButtons)
+ {
+ // when undimming buttons we may not want them all back on
+ UpdateToolbarButtonsState();
+ }
+ Toolbar()->DrawNow();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::ActivateCurrentBookmarkL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::ActivateCurrentBookmarkL()
+ {
+ if ( Container() && Container()->Listbox() )
+ {
+ const CFavouritesItem* item = Container()->Listbox()->CurrentItem();
+ if ( item && item->IsItem() )
+ {
+ ApiProvider().FetchBookmarkL( *item );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::AddNewBookmarkL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::AddNewBookmarkL()
+ {
+ // Make an item and fill it with default values.
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ item->SetType( CFavouritesItem::EItem );
+ item->SetParentFolder( CurrentFolder() );
+ item->SetUrlL( KHttpString );
+ Model().SetNameToDefaultL( *item );
+ TInt err = Model().MakeUniqueNameL( *item );
+ if ( !err )
+ {
+ // to prevent faded statuspane at the begining of dialog activation
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )
+ ->StatusPane();
+ sp->DrawNow();
+
+ // Dim Toolbar buttons
+ DimToolbarButtons(ETrue);
+
+ // We have the item with a default unique name. Let the user edit it.
+ CBrowserBookmarkEditDialog* dialog =
+ CBrowserBookmarkEditDialog::NewL
+ (
+ *item,
+ Model(),
+ //ApiProvider().CommsModel()
+ ApiProvider()
+ );
+ dialog->ExecuteLD( R_BROWSER_BOOKMARKS_DIALOG_EDIT );
+
+ // Un-Dim Toolbar buttons
+ DimToolbarButtons(EFalse);
+
+ // If the bookmark was added to the database, highlight it.
+ // Unlike in AddNewFolderL, adding the item to the database
+ // and setting highlight uid (next line of code) runs in the RunL
+ // method of different active objects. So the database notification
+ // may have came in or may not by now.
+ // This way of doing the highlight (setting a preferred and calling
+ // HighlightPreferred works in both cases.
+ iPreferredHighlightUid = item->Uid();
+ // If not added, iPreferredHighlightUid is now KFavouritesNullUid,
+ // so the following does nothing.
+ if ( iPreferredHighlightUid != KFavouritesNullUid )
+ {
+ // Highlight newly added item.
+ HighlightPreferredL();
+ }
+ }
+ AddUidToLastPlaceToCurrentListL( item->Uid() );
+ iRefresh = EFalse;
+ Model().Database().SetData( CurrentFolder() , *iCurrentOrder );
+ CleanupStack::PopAndDestroy(); // item
+ Container()->Listbox()->ClearSelection();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::AddUidToLastPlaceToCurrentListL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::AddUidToLastPlaceToCurrentListL( TInt aUid )
+ {
+ if ( iCurrentOrder )
+ {
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL( orderArray );
+
+ if (iCurrentOrder->GetBookMarksOrder().Count())
+ {
+ orderArray->AppendL( &( iCurrentOrder->GetBookMarksOrder()[0] ),
+ iCurrentOrder->GetBookMarksOrder().Count());
+ }
+
+ Model().AddUidToLastPlaceL(aUid, orderArray, iCurrentOrder);
+
+ iCurrentOrder->SetBookMarksOrderL( *orderArray );
+ CleanupStack::PopAndDestroy( orderArray );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarks::EditCurrentBookmarkL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::EditCurrentBookmarkL()
+ {
+ if ( Container() && Container()->Listbox() )
+ {
+ const CFavouritesItem* listboxItem =
+ Container()->Listbox()->CurrentItem();
+ if ( listboxItem && listboxItem->IsItem() )
+ {
+ // to prevent faded statuspane at the begining of dialog activation
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+ CEikonEnv::Static()->EikAppUi() )
+ ->StatusPane();
+ sp->DrawNow();
+
+ // Dim Toolbar buttons
+ DimToolbarButtons(ETrue);
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ *item = *listboxItem;
+ CBrowserBookmarkEditDialog* dialog =
+ CBrowserBookmarkEditDialog::NewL
+ (
+ *item,
+ Model(),
+ ApiProvider(),
+ listboxItem->Uid()
+ );
+ dialog->ExecuteLD( R_BROWSER_BOOKMARKS_DIALOG_EDIT );
+ CleanupStack::PopAndDestroy(); // item
+
+ // unDim Toolbar buttons
+ DimToolbarButtons(EFalse);
+
+ iPreferredHighlightUid = item->Uid();
+
+ // Force a refresh of database changes.
+ iRefresh = ETrue;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::SendBookmarksL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::SendBookmarksL( )
+ {
+ CArrayPtr<const CFavouritesItem>* items =
+ Container()->Listbox()->SelectedItemsLC();
+
+ MBmOTABinSender& sender = ApiProvider().BmOTABinSenderL();
+
+ sender.ResetAndDestroy();
+
+ TBool result( ETrue );
+ TInt index( 0 );
+ TInt count( items->Count() );
+
+#ifndef _BOOKMARK_SENT_ASCII
+ for ( index = 0; index < count; ++index )
+ {
+ if ( ( *items )[ index ]->Url().Length() > KMaxUrlLenghtInOTA )
+ {
+#pragma message ( __FILE__ ": TODO: Length of bookmark address cannot exceed 255bytes!")
+ result = EFalse;
+ }
+ }
+#endif // _BOOKMARK_SENT_ASCII
+
+ if ( result )
+ {
+ for ( index = 0; index < count; ++index )
+ {
+ sender.AppendL( ( *items )[ index ]->Url(),
+ ( *items )[ index ]->Name() );
+ }
+ }
+
+ // to save memory
+ CleanupStack::PopAndDestroy(); // items;
+
+ if ( result )
+ {
+ sender.SendAddressL( );
+ }
+
+ Container()->Listbox()->SetCurrentItemIndexAndDraw( Container()->Listbox()->CurrentItemIndex());
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::TheContainer
+// ----------------------------------------------------------------------------
+//
+CBrowserBookmarksContainer* CBrowserBookmarksView::TheContainer()
+ {
+ return STATIC_CAST( CBrowserBookmarksContainer*, Container() );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::ApChangedL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::ApChangedL( TUint32 aNewAPId )
+ {
+ if ( aNewAPId != iStartPageApUid )
+ {
+ // New AP has been taken into use. Set Start Page to that.
+ iStartPageApUid = aNewAPId;
+ // Redraw view. Note that this does nothing if view is not activated.
+ RefreshL( EFalse );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::HandlePreferencesChangeL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::HandlePreferencesChangeL(
+ const TPreferencesEvent /*aEvent*/,
+ TPreferencesValues& /*aValues*/,
+ TBrCtlDefs::TBrCtlSettings /*aSettingType*/ )
+ {
+ // adaptive bookmarks setting changed
+ if ( iAdaptiveBookmarksCurrentSetting !=
+ ApiProvider().Preferences().AdaptiveBookmarks() )
+ {
+ iAdaptiveBookmarksCurrentSetting =
+ ApiProvider().Preferences().AdaptiveBookmarks();
+
+ if ( iAdaptiveBookmarksCurrentSetting !=
+ EWmlSettingsAdaptiveBookmarksOn )
+ {
+ if ( iPreferredHighlightUid == KFavouritesAdaptiveItemsFolderUid )
+ {
+ Container()->Listbox()->View()->SetCurrentItemIndex( 0 );
+ }
+
+ ExitAdaptiveBookmarks();
+
+ if ( iAdaptiveBookmarksCurrentSetting ==
+ EWmlSettingsAdaptiveBookmarksOff )
+ {
+ if ( TBrowserDialogs::ConfirmQueryYesNoL(
+ R_BROWSER_ADAPTIVE_BOOKMARKS_DELETE_ALL_ADAPTIVE_BOOKMARKS ) )
+ {
+ iRecentUrlStore.ClearData();
+ }
+ }
+ }
+ else
+ {
+ iInsertAdaptiveBookmarksFolder = ETrue;
+ iSaveBMOrder = ETrue;
+ }
+ }
+
+ TUint32 defaultAp = ApiProvider().Preferences().DefaultAccessPoint();
+
+ if ( defaultAp != iCurrentDefaultAp )
+ {
+ // Default AP changed. Set Start Page bookmark to that.
+ iCurrentDefaultAp = iStartPageApUid = defaultAp;
+ // Redraw view. Note that this does nothing if view is not activated.
+ RefreshL( EFalse );
+ }
+
+ iPreferencesChanged=ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CreateStartPageBookmarkL
+// ----------------------------------------------------------------------------
+//
+CFavouritesItem* CBrowserBookmarksView::CreateStartPageBookmarkL()
+ {
+LOG_ENTERFN("CBrowserBookmarksView::CreateStartPageBookmarkL");
+ // no HomePage if Type is Bookmarks
+ // or 'Always ask' feature is selected
+ TWmlSettingsHomePage pgtype = ApiProvider().Preferences().HomePageType();
+ TBool accessPointSelectionMode(
+ (ApiProvider().Preferences().AccessPointSelectionMode() == EAlwaysAsk) &&
+ ( EWmlSettingsHomePageAccessPoint == pgtype ) );
+LOG_WRITE_FORMAT(" pgType: %d", pgtype );
+LOG_WRITE_FORMAT(" selection mode: %d", accessPointSelectionMode );
+ if ( accessPointSelectionMode || (pgtype == EWmlSettingsHomePageBookmarks) )
+ {
+ return NULL;
+ }
+
+ CFavouritesItem* startPage = NULL;
+ TUint defaultAp = ApiProvider().Preferences().DefaultAccessPoint();
+LOG_WRITE_FORMAT(" defaultAp: %d", defaultAp );
+ if ( defaultAp != KWmlNoDefaultAccessPoint ) // There is an access point defined
+ {
+ // Get pointer to Start Page AP (or NULL if no such);
+ /*
+ Modified by MOG
+ --------------------- Performance Changes ----------------------
+ remove dependency from CommsModel becasue the cached list may not be pre
+ CApListItem* apItem =
+ ApiProvider().CommsModel().AccessPoints()->ItemForUid( defaultAp );
+ ---------------------- Performance Changes ----------------------
+ */
+ CApAccessPointItem* apItem = iApiProvider.Preferences().AllPreferencesL().iDefaultAPDetails;
+ if ( apItem )
+ {
+ const HBufC* defaultHP = apItem->ReadConstLongTextL( EApWapStartPage );
+ if ( defaultHP->Length() )
+ {
+ // Have AP and the AP has Start Page address. Hurray.
+ startPage = Model().Database().CreateStartPageItemL();
+ CleanupStack::PushL( startPage );
+ TBuf<KFavouritesMaxName> name;
+ apItem->ReadTextL(EApWapAccessPointName, name);
+ startPage->SetNameL( name );
+ startPage->SetUrlL( *defaultHP );
+ TFavouritesWapAp ap;
+ ap.SetApId( defaultAp );
+ startPage->SetWapAp( ap );
+ CleanupStack::Pop(); // startPage: owner is the caller.
+ }
+ }
+ }
+//LOG_LEAVEFN("CBrowserBookmarksView::CreateStartPageBookmarkL");
+ return startPage;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::OfferKeyEventL
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CBrowserBookmarksView::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ // This method is called back from the container, to process the keypresses
+ // that cannot be handled by the container. Those are (currently) the
+ // left/right arrow keypresses, since the container does not know anything
+ // about what folder is open, which knowledge is required to process
+ // arrow presses. So we do that here.
+ // Any other key processing is still in the container.
+ TKeyResponse result = EKeyWasNotConsumed;
+ switch ( aKeyEvent.iCode )
+ {
+
+ case EKeyLeftArrow: // West
+ {
+ if ( ( CurrentFolder() != KFavouritesRootUid ) || ( iInAdaptiveBookmarksFolder ) )
+ {
+ // We are in some folder. Move between subfolders in the leftwards direction.
+ if ( !ApiProvider().IsEmbeddedModeOn() && !iManualItemMovingGoingOn )
+ {
+ OpenNextFolderL( /*aForward=*/EFalse );
+ }
+ result = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ case EKeyRightArrow: // East
+ {
+ if ( ( CurrentFolder() != KFavouritesRootUid ) || ( iInAdaptiveBookmarksFolder ) )
+ {
+ // We are in some folder. Move between subfolders in the rightwards direction.
+ if ( !ApiProvider().IsEmbeddedModeOn() && !iManualItemMovingGoingOn )
+ {
+ OpenNextFolderL( /*aForward=*/ETrue );
+ }
+ result = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ { // Here, "eat" all of the diagonals so they have no effect
+ result = EKeyWasConsumed;
+ break;
+ }
+
+ case EKeyBackspace:
+ case EKeyDelete:
+ {
+ TBrowserFavouritesSelectionState state =
+ iContainer->Listbox()->SelectionStateL();
+ const CFavouritesItem* item = Container()->Listbox()->CurrentItem();
+
+ if ( ( state.AnyDeletable() ) &&
+ // We can't delete adaptive bookmarks folder or seamless folders'
+ ( item ) &&
+ ( item->Uid() != KFavouritesAdaptiveItemsFolderUid ) &&
+ ( item->ContextId() == NULL )
+ )
+ {
+ // Clear key deletes the selection (or highlighted items).
+ if (iInAdaptiveBookmarksFolder)
+ {
+ HandleCommandL(EWmlCmdDelete);
+ result = EKeyWasConsumed;
+ }
+ else if (iManualItemMovingGoingOn)
+ // Manual Move in progress -- disable delete key
+ {
+ result = EKeyWasConsumed;
+ }
+ else
+ {
+ result =CBrowserFavouritesView::OfferKeyEventL(aKeyEvent,aType);
+ }
+
+ }
+ break;
+ }
+
+ case EKeyOK:
+ // OK key is handled through MSK handling
+ result = EKeyWasConsumed;
+ break;
+
+ case EKeyEnter:
+ {
+ if ( iManualItemMovingGoingOn )
+ {
+ MoveItemsL();
+ result = EKeyWasConsumed;
+ }
+ else
+ {
+ result = CBrowserFavouritesView::OfferKeyEventL(aKeyEvent,aType);
+ }
+ break;
+ }
+
+ default:
+ {
+ result =CBrowserFavouritesView::OfferKeyEventL(aKeyEvent,aType);
+ break;
+ }
+ }
+
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::OpenNextFolderL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::OpenNextFolderL( TBool aForward )
+ {
+ if ( !Model().BeginL( EFalse, ETrue ) )
+ {
+ TInt nextFolder;
+ if ( iInAdaptiveBookmarksFolder )
+ {
+ // If in domain then forget about it
+ if (iDomainFolderName)
+ {
+ delete iDomainFolderName;
+ iDomainFolderName = NULL;
+ }
+
+ nextFolder = Model().NextFolderL( KFavouritesAdaptiveItemsFolderUid,
+ aForward );
+ if ( nextFolder != KFavouritesNullUid )
+ {
+ iInAdaptiveBookmarksFolder = EFalse;
+ }
+ }
+ else
+ {
+ nextFolder = Model().NextFolderL( CurrentFolder(), aForward );
+ }
+
+ if ( nextFolder != KFavouritesNullUid )
+ {
+ if ( nextFolder != KFavouritesAdaptiveItemsFolderUid )
+ {
+ SetEmptyTextL();
+ OpenFolderL( nextFolder );
+ }
+ }
+ Model().CommitL();
+ if ( nextFolder == KFavouritesAdaptiveItemsFolderUid )
+ {
+ iInAdaptiveBookmarksFolder=ETrue;
+ SetEmptyTextL();
+ SetRootFolderForAdaptiveBookmarks();
+ SetEmptyTextL();
+ RefreshL();
+ }
+ }
+ // Changing folder may require change in toolbar button state
+ UpdateToolbarButtonsState();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::UpdateNaviPaneL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::UpdateNaviPaneL()
+ {
+ if (iInAdaptiveBookmarksFolder)
+ {
+ // In other folder, show "1/4" style text.
+ TInt folderIndex;
+ TInt folderCount;
+ TInt err;
+ err = Model().FolderInfoL( KFavouritesAdaptiveItemsFolderUid,
+ folderCount, folderIndex );
+ if ( !err )
+ {
+ TheContainer()->ShowFolderNaviPaneL( folderIndex, folderCount );
+ }
+ }
+ else
+ {
+ CBrowserFavouritesView::UpdateNaviPaneL();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserBookmarksView::HandleBrowserLoadEventL
+// ---------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::HandleBrowserLoadEventL(
+ TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+ TUint /* aSize */,
+ TUint16 aTransactionId )
+ {
+LOG_ENTERFN("BookmarksView::HandleBrowserLoadEventL");
+ // only GotoPane is interested in LoadEvents!
+ if ( Container() )
+ {
+ if ( aLoadEvent != TBrCtlDefs::EEventThumbnailAvailable)
+ {
+ // If in bookmarks view, a background page load is in
+ // progress, just update the soft keys when page load is finished.
+ // (ie. RSK would be "Stop" while page loading but change to "Exit"
+ // when page load finished)
+ if ( aLoadEvent == TBrCtlDefs::EEventLoadFinished )
+ {
+ UpdateCbaL();
+ }
+ }
+ // save transaction id
+ if ( aLoadEvent == TBrCtlDefs::EEventUrlLoadingStart && iTrId == 0 )
+ {
+ iTrId = aTransactionId;
+ }
+ // first content chunk arrived
+ else if ( aLoadEvent == TBrCtlDefs::EEventNewUrlContentArrived &&
+ iTrId == aTransactionId )
+ {
+ if ( iEnteredURL )
+ {
+ delete iEnteredURL;
+ iEnteredURL = NULL;
+ BROWSER_LOG( ( _L("delete iEnteredUrl 5") ) );
+ }
+ iCursorPos = -1;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBrowserBookmarksView::ClearAdaptiveBookmarksL
+// ---------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::ClearAdaptiveBookmarksL()
+ {
+ iRecentUrlStore.ClearData();
+ Container()->Listbox()->View()->ClearSelection();
+ RefreshL();
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserBookmarksView::UpdateToolbarButtonsState
+// ---------------------------------------------------------------------------
+//
+void CBrowserBookmarksView::UpdateToolbarButtonsState()
+ {
+ if ( Container() && Container()->Listbox() )
+ {
+ const CFavouritesItem* item = Container()->Listbox()->CurrentItem();
+
+ // Button: EWmlCmdDelete
+ // Default case: un-dim the delete Button
+ // Case: Not an item so dim delete button
+ // Special Case: dim button for adaptive folder and
+ // seamless links
+ TBrowserFavouritesSelectionState state = iContainer->Listbox()->SelectionStateL();
+
+ TBool needToDimDeleteBtn = !item
+ || ( item->Uid() == KFavouritesAdaptiveItemsFolderUid )
+ || ( item->ContextId() != NULL )
+ || (!state.AnyDeletable());
+
+ Toolbar()->SetItemDimmed( EWmlCmdDelete, needToDimDeleteBtn, ETrue );
+ //set EWmlCmdAddBookmark dim in RecentlyVisitedUrl Folder
+ Toolbar()->SetItemDimmed( EWmlCmdAddBookmark, iInAdaptiveBookmarksFolder, ETrue);
+ if(iManualItemMovingGoingOn)
+ {
+ DimToolbarButtons(ETrue);
+ }
+ }
+ }
+
+void CBrowserBookmarksView::HandleForegroundEventL( TBool aForeground )
+ {
+ // make sure we call base class function before proceeding
+ CBrowserFavouritesView::HandleForegroundEventL(aForeground);
+ if ( aForeground )
+ {
+ if ( TheContainer()->GotoPaneActive() && TheContainer()->GotoPane()->PopupList()->IsPoppedUp() )
+ {
+ // The pop up messes the screen when changing layouts
+ // So make sure to redraw the pane while coming to foreground
+ TheContainer()->GotoPane()->PopupList()->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ }
+ }
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFaviconHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,405 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFaviconHandler
+*
+*
+*/
+
+
+// INCLUDES
+#include "BrowserFaviconHandler.h"
+#include "ApiProvider.h"
+#include "BrowserUtil.h"
+#include <e32base.h>
+#include <brctldefs.h>
+#include <fbs.h>
+#include <MdaImageConverter.h>
+#include <favouritesitemlist.h>
+#include <favouritesitem.h>
+
+// number of favicons to get before redrawing
+const TInt KNumFaviconsToRedraw = 3 ;
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::CBrowserFaviconHandler()
+// ----------------------------------------------------------------------------
+//
+CBrowserFaviconHandler::CBrowserFaviconHandler(
+ MApiProvider& aApiProvider,
+ MBrowserFaviconObserver& aObserver,
+ TSize aFaviconSize ) :
+ CActive( CActive::EPriorityIdle ),
+ iApiProvider( aApiProvider ),
+ iObserver( aObserver ),
+ iFaviconSize( aFaviconSize )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::~CBrowserFaviconHandler()
+// ----------------------------------------------------------------------------
+//
+CBrowserFaviconHandler::~CBrowserFaviconHandler()
+ {
+ Cancel();
+ if(iBmpScaler!=NULL)
+ {
+ iBmpScaler->Cancel();
+ }
+ delete iBmpScaler;
+ delete iFaviconArrayIndices;
+ delete iFavicon;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::NewL()
+// ----------------------------------------------------------------------------
+//
+CBrowserFaviconHandler* CBrowserFaviconHandler::NewL(
+ MApiProvider& aApiProvider,
+ CArrayPtr<CGulIcon>* aIconArray,
+ MBrowserFaviconObserver& aObserver,
+ TSize aFaviconSize )
+ {
+ CBrowserFaviconHandler* self =
+ CBrowserFaviconHandler::NewLC( aApiProvider,
+ aIconArray,
+ aObserver,
+ aFaviconSize );
+
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::NewLC()
+// ----------------------------------------------------------------------------
+//
+CBrowserFaviconHandler* CBrowserFaviconHandler::NewLC(
+ MApiProvider& aApiProvider,
+ CArrayPtr<CGulIcon>* aIconArray,
+ MBrowserFaviconObserver& aObserver,
+ TSize aFaviconSize )
+ {
+ CBrowserFaviconHandler* self =
+ new ( ELeave ) CBrowserFaviconHandler( aApiProvider,
+ aObserver,
+ aFaviconSize );
+ CleanupStack::PushL( self );
+ self->ConstructL( aIconArray );
+ return self;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::ConstructL( CArrayPtr<CGulIcon>* aIconArray )
+ {
+ iIconArray = aIconArray; // not owned
+ iFaviconArrayIndices = new ( ELeave ) CArrayFixFlat<TFaviconIndex>( 4 );
+
+ // Construct Favicon Engine
+ iBmpScaler = CBrowserFaviconScaler::NewL(*this);
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::RequestFavicons()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::RequestFavicons( CFavouritesItemList* aFavItems )
+ {
+ TInt count = aFavItems->Count();
+ while(count)
+ {
+ CFavouritesItem& item = *aFavItems->At( count - 1); // index starts from 0
+ CGulIcon *favIcon = NULL;
+
+ // Request Favicon from Engine - there should be new API for request, but no har to use it
+ if ( item.Url().Length() )
+ iFavicon = iApiProvider.BrCtlInterface().GetBitmapData(item.Url(), TBrCtlDefs::EBitmapFavicon );
+
+ if ( favIcon )
+ {
+ delete iFavicon;
+ iFavicon = NULL;
+ }
+ count--;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::StartGetFaviconsL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::StartGetFaviconsL( CFavouritesItemList* aFavItems )
+ {
+ Cancel();
+ iBmpScaler->Cancel();
+
+ if ( aFavItems->Count() )
+ {
+ // New request for favicons:
+ iFavItems = aFavItems;
+
+ // Initialisation.
+ iFavItemsCurrentIndex = 0; // will be incremented before favicon getting
+ iFaviconsFound = 0; // keeps track of favicons found
+ iFaviconArrayIndices->Reset(); // refresh the array mapping uid's to favicons
+
+ // Initiate the getting of favicons
+ GetFaviconL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::GetFaviconL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::GetFaviconL()
+ {
+ // The whole list has already been checked - we're finished
+ if ( iFavItemsCurrentIndex >= iFavItems->Count() )
+ {
+ iObserver.DrawFavicons();
+ }
+ else
+ {
+ // Step through the item array until we find a favicon, or reach the end
+ do
+ {
+ iWasLastItemFavicon = EFalse;
+
+ CFavouritesItem& item = *iFavItems->At( iFavItemsCurrentIndex );
+ if ( iFavicon )
+ {
+ // Make sure ongoing scaling is cancelled (if any)
+ Cancel();
+ iBmpScaler->Cancel();
+
+ delete iFavicon;
+ iFavicon = NULL;
+ }
+
+ // Get Favicon from Engine
+ if ( item.Url().Length() )
+ {
+ iFavicon = iApiProvider.BrCtlInterface().GetBitmapData(item.Url(), TBrCtlDefs::EBitmapFavicon );
+ }
+
+ // Asynchronously scales the favicon and stores it in an array
+ if ( iFavicon )
+ {
+ iWasLastItemFavicon = ETrue;
+ RescaleFaviconL();
+ iFaviconsFound++;
+ __ASSERT_DEBUG( !( iFavItemsCurrentIndex > iFavItems->Count() ),
+ Util::Panic( Util::EOutOfRange ) );
+ break;
+ }
+ } while ( ++iFavItemsCurrentIndex < iFavItems->Count() );
+ }
+
+ // If we exited the 'do' and the last item wasn't a favicon
+ // it means we're finished
+ if ( !iWasLastItemFavicon && ( iFaviconsFound % KNumFaviconsToRedraw ) )
+ {
+ iObserver.DrawFavicons();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::RescaleFaviconL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::RescaleFaviconL()
+ {
+ iHasMask = (iFavicon->Mask() != NULL);
+ if (iHasMask)
+ {
+ iBmpScaler->StartScalingL( *iFavicon->Mask(), iFaviconSize, ETrue );
+ }
+ else
+ {
+ iBmpScaler->StartScalingL( *iFavicon->Bitmap(), iFaviconSize, EFalse );
+ }
+ // Complete two asynchronous requests.
+ iStatus = KRequestPending;
+ SetActive();
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::AppendToIconArray()
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserFaviconHandler::AppendToIconArray()
+ {
+ TInt err( KErrNone );
+ TInt arrayIndex(-1);
+
+ // Add the favicon to the icon array
+ TRAP( err, iIconArray->AppendL( iFavicon ); );
+
+ // Favicon was successfully added to the array
+ if ( !err )
+ {
+ arrayIndex = iIconArray->Count() - 1;
+
+ // Keep track of the index of the favicon in the icon array
+ if ( arrayIndex > -1 )
+ {
+ TFaviconIndex faviconIndex;
+ faviconIndex.iFavouritesItemIndex = iFavItems->At( iFavItemsCurrentIndex )->Uid();
+ faviconIndex.iIndex = arrayIndex;
+ TRAP( err, iFaviconArrayIndices->AppendL( faviconIndex ); )
+
+ // If there was an error remove the favicon from the icon array
+ if ( err )
+ {
+ iIconArray->Delete( iIconArray->Count() - 1 );
+ }
+ else
+ {
+ iFavicon = NULL; // favicon ownership passed
+ iFavItemsCurrentIndex++; // we can go to the next item now
+ }
+ }
+ }
+
+ // Ownership of the favicon was not passed, so we need to delete it
+ if ( err )
+ {
+ iFaviconsFound--; // one less favicon in the array
+ }
+
+ return err;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::GetFaviconArrayIndex()
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserFaviconHandler::GetFaviconArrayIndex( const CFavouritesItem& aItem )
+ {
+ TInt arrayIndex( KErrNotFound );
+
+ // Find the index of the favicon in the icon array
+ for ( TInt i=0; i<iFaviconArrayIndices->Count(); i++ )
+ {
+ // if uid is 0 then don't associate with favicon. for adaptive bookmarks
+ if ( aItem.Uid() && aItem.Uid() == iFaviconArrayIndices->At(i).iFavouritesItemIndex )
+ {
+ arrayIndex = iFaviconArrayIndices->At(i).iIndex;
+ break;
+ }
+ }
+ return arrayIndex;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::ScalingCompletedL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::ScalingCompletedL(CFbsBitmap* aResult, const TRect& /*aTargetRect*/)
+ {
+ // Check that favicon hasn't already disappeared (i.e. if race cond in which scaler returns
+ // after you've already left and deleted the icon handle concerned
+ if(NULL == iFavicon)
+ {
+ return;
+ }
+
+
+ // Add the favicon to the icon array (which also contains other icons)
+ if (iHasMask)
+ {
+ iFavicon->SetMask(aResult);
+ iHasMask = EFalse;
+ iBmpScaler->StartScalingL( *iFavicon->Bitmap(), iFaviconSize, EFalse );
+ }
+ else
+ {
+ iFavicon->SetBitmap(aResult);
+ iFavicon->SetBitmapsOwnedExternally(EFalse);
+ TInt err = AppendToIconArray();
+
+ // Complete the AO
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, err );
+ }
+ }
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::DoCancel()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::DoCancel()
+ {
+ TRequestStatus* s = &iStatus;
+ User::RequestComplete( s, KErrNone );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::RunL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::RunL()
+ {
+ TBool drawFavicons( EFalse );
+
+ // Redraw the favicons at a predefined frequency
+ if ( iFaviconsFound % KNumFaviconsToRedraw == 0 )
+ {
+ drawFavicons = ETrue;
+ }
+ else
+ {
+ // We're not getting any more favicons: draw any undrawn ones
+ if ( iStatus != KErrNone )
+ {
+ // do a final draw
+ drawFavicons = ETrue;
+ }
+ }
+
+ if ( drawFavicons && iFaviconsFound )
+ {
+ iObserver.DrawFavicons();
+ }
+
+ // Continue getting favicons if no errors
+ if ( iStatus == KErrNone )
+ {
+ GetFaviconL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFaviconHandler::UpdateIconArray()
+// ----------------------------------------------------------------------------
+//
+void CBrowserFaviconHandler::UpdateIconArray(CArrayPtr<CGulIcon>* aIconArray)
+ {
+ iIconArray = aIconArray;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFaviconScaler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "BrowserFaviconScaler.h"
+
+#include <fbs.h>
+#include <BitmapTransforms.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserFaviconScaler::CBrowserFaviconScaler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBrowserFaviconScaler::CBrowserFaviconScaler(MBrowserFaviconScalerCallback& aCallback)
+ : CActive(CActive::EPriorityIdle-1), iCallback(&aCallback)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFaviconScaler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBrowserFaviconScaler::ConstructL()
+ {
+ iScaler = CBitmapScaler::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFaviconScaler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBrowserFaviconScaler* CBrowserFaviconScaler::NewL(MBrowserFaviconScalerCallback& aCallback)
+ {
+ CBrowserFaviconScaler* self = new( ELeave ) CBrowserFaviconScaler(aCallback);
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// Destructor
+CBrowserFaviconScaler::~CBrowserFaviconScaler()
+ {
+ Cancel();
+ delete iScaler;
+ //delete iResultBitmap;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserFaviconScaler::StartScalingL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserFaviconScaler::StartScalingL(CFbsBitmap& aSource, const TRect& aTargetRect, TBool aIsMask)
+ {
+ // cancel outstanding request
+ Cancel();
+
+ // create target bitmap
+ iResultBitmap = new (ELeave) CFbsBitmap();
+ TDisplayMode dispMode = (aIsMask) ? EGray256 : aSource.DisplayMode();
+ User::LeaveIfError(iResultBitmap->Create(aTargetRect.Size(), dispMode));
+
+ // start scaling, async
+ iTargetRect = aTargetRect;
+ iScaler->Scale(&iStatus, aSource, *iResultBitmap, EFalse);
+
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CPageOverview::DeleteResultBitmap
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserFaviconScaler::DeleteResultBitmap()
+ {
+ delete iResultBitmap;
+ iResultBitmap = 0;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPageOverview::DoCancel
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserFaviconScaler::DoCancel()
+ {
+ iScaler->Cancel();
+ DeleteResultBitmap();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPageOverview::RunL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserFaviconScaler::RunL()
+ {
+ iCallback->ScalingCompletedL(iResultBitmap, iTargetRect);
+ // if the callback called StartScalingL(), we must not delete the bitmap
+ if (!IsActive())
+ {
+ //DeleteResultBitmap();
+ }
+ }
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesContainer.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikimage.h>
+#include <AknAppUi.h>
+#include <AknNavi.h>
+#include <AknNaviDe.h>
+#include <AknTabGrp.h>
+#include <AknNaviLabel.h>
+#include <AknTitle.h>
+#include <aknsfld.h>
+#include <calslbs.h>
+#include <barsread.h> // for TResourceReader
+#include <EikSpane.h>
+#include <Avkon.hrh>
+#include <BrowserNG.rsg>
+#include <favouritesdb.h>
+
+#include <aknconsts.h>
+#include <akneditstateindicator.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <aknlayout.cdl.h>
+
+#include "Display.h"
+#include "Preferences.h"
+#include "BrowserAppUi.h"
+#include "BrowserUIVariant.hrh"
+#include "CommonConstants.h"
+#include "BrowserFavouritesView.h"
+#include "BrowserFavouritesContainer.h"
+#include "BrowserFavouritesListbox.h"
+#include "BrowserFavouritesListboxModel.h"
+#include "BrowserFavouritesListboxIconHandler.h"
+#include "logger.h"
+
+// CONSTANTS
+LOCAL_D const TInt KTabId = 88888;
+LOCAL_D const TInt KMaxNaviText = 25; // format is "<int>/<int>".
+_LIT( KFormat, "%d/%d" );
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::~CBrowserFavouritesContainer
+// -----------------------------------------------------------------------------
+//
+CBrowserFavouritesContainer::~CBrowserFavouritesContainer()
+ {
+ delete iListbox;
+ delete iIconHandler;
+ delete iSkinContext;
+ delete iNaviPaneTabsFolder;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::ShowRootNaviPane
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::ShowRootNaviPane()
+ {
+ // If text is showing, destroy now - this pops off teh Navi Pane.
+ delete iNaviPaneTabsFolder;
+ iNaviPaneTabsFolder = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::ShowFolderNaviPaneL
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::ShowFolderNaviPaneL
+( TInt aFolderIndex, TInt aFolderCount )
+ {
+ CAknNavigationControlContainer* naviPane =
+ iView->ApiProvider().Display().NaviPaneL();
+ if ( !iNaviPaneTabsFolder )
+ {
+ // Folder's tab group not yet created. Make it now.
+ iNaviPaneTabsFolder = naviPane->CreateTabGroupL();
+ iNaviPaneTabsFolder->SetNaviDecoratorObserver(this);
+ }
+
+ TBuf<KMaxNaviText> buf;
+ // Format Navi Pane text "1/4" style.
+ buf.Format( KFormat, aFolderIndex + 1, aFolderCount );
+ AknTextUtils::LanguageSpecificNumberConversion( buf );
+
+ CEikImage* folderIcon = new (ELeave) CEikImage;
+ CleanupStack::PushL( folderIcon );
+ TResourceReader rr;
+ iCoeEnv->CreateResourceReaderLC( rr, R_BROWSER_ICON_PROP_FOLDER );
+ folderIcon->ConstructFromResourceL( rr );
+ folderIcon->SetPictureOwnedExternally( EFalse ); // has ownership now
+ CleanupStack::PopAndDestroy(); // rr
+
+ CAknTabGroup* tabGroup =
+ STATIC_CAST( CAknTabGroup*, iNaviPaneTabsFolder->DecoratedControl() );
+ if ( tabGroup->TabCount() )
+ {
+ // Already created. Change the contents.
+ tabGroup->ReplaceTabL
+ (
+ KTabId,
+ buf,
+ folderIcon->Bitmap(), // ownership passed
+ folderIcon->Mask() // ownership passed
+ );
+ }
+ else
+ {
+ // Created just now. Add the contents.
+ tabGroup->AddTabL
+ (
+ KTabId,
+ buf,
+ folderIcon->Bitmap(), // ownership passed
+ folderIcon->Mask() // ownership passed
+ );
+ }
+ folderIcon->SetPictureOwnedExternally( ETrue ); // ownership passed
+ CleanupStack::PopAndDestroy(); // folderIcon
+
+ tabGroup->SetTabFixedWidthL( EAknTabWidthWithOneTab );
+ tabGroup->SetActiveTabById( KTabId );
+
+ iNaviPaneTabsFolder->SetScrollButtonDimmed
+ ( CAknNavigationDecorator::ELeftButton, aFolderIndex == 0 );
+ iNaviPaneTabsFolder->SetScrollButtonDimmed
+ (
+ CAknNavigationDecorator::ERightButton,
+ aFolderIndex == aFolderCount - 1
+ );
+
+ // If not yet pushed, this will do the push; if already there, this brings
+ // it to top and draws.
+ naviPane->PushL( *iNaviPaneTabsFolder );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CBrowserFavouritesContainer::ComponentControl
+( TInt aIndex ) const
+ {
+ switch (aIndex)
+ {
+ case 0:
+ return iListbox;
+
+ default:
+ return 0;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserFavouritesContainer::CountComponentControls() const
+ {
+ return (iListbox ? 1 : 0) ;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::SizeChanged
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::SizeChanged()
+ {
+ // Listbox is empty; listbox takes the whole area.
+ iListbox->SetRect( Rect() );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CBrowserFavouritesContainer::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ CBrowserAppUi* ui = CBrowserAppUi::Static();
+ TKeyResponse result = EKeyWasNotConsumed;
+
+ if (ui->OfferApplicationSpecificKeyEventL(aKeyEvent, aType) == EKeyWasConsumed)
+ {
+ return EKeyWasConsumed;
+ }
+
+
+ if ( result == EKeyWasNotConsumed )
+ {
+ // Otherwise, give the view a chance to handle arrow presses
+ // (moving between subfolders).
+ result = iView->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ if ( result == EKeyWasNotConsumed && iListbox )
+ {
+ // Otherwise, let the listbox fiddle with it. This will NOT consume
+ // arrow presses (base class overridden).
+ result = iListbox->OfferKeyEventL( aKeyEvent, aType );
+
+ if( (aKeyEvent.iCode == EKeyDownArrow) || (aKeyEvent.iCode == EKeyUpArrow) )
+ {
+ iView->UpdateToolbarButtonsState();
+ }
+
+ }
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::HandleCursorChangedL
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::HandleCursorChangedL
+( CEikListBox* /*aListBox*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::HandleNaviDecoratorEventL
+//
+// Called when user touches the left or right arrow in navipane
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::HandleNaviDecoratorEventL( TInt aEventID )
+ {
+ // used to swap the arrow key functionality for Arabic, etc...
+ TBool forward(!(AknLayoutUtils::PenEnabled() && AknLayoutUtils::LayoutMirrored()));
+
+ switch (aEventID)
+ {
+ case MAknNaviDecoratorObserver::EAknNaviDecoratorEventRightTabArrow:
+ iView->ShowNextFolerL(forward);
+ break;
+ case MAknNaviDecoratorObserver::EAknNaviDecoratorEventLeftTabArrow:
+ iView->ShowNextFolerL(!forward);
+ break;
+ default:
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::ConstructComponentControlsL
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::ConstructComponentControlsL(
+ const TRect& /*aRect*/,
+ CBrowserFavouritesView& aView )
+ {
+ // Construct listbox.
+ iIconHandler = CreateListboxIconHandlerL();
+ iListbox = CBrowserFavouritesListbox::NewL( iView->ApiProvider(), this, *iIconHandler );
+ iListbox->SetListBoxObserver( &aView );
+ iListbox->SetListboxCursorObserver( this );
+ HBufC* buf = iCoeEnv->AllocReadResourceLC( ListboxEmptyTextResourceId() );
+ iListbox->View()->SetListEmptyTextL( *buf );
+ CleanupStack::PopAndDestroy(); // buf
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::ConstructL
+( const TRect& aRect, CBrowserFavouritesView& aView )
+ {
+ iView = &aView;
+
+ //CAknNavigationControlContainer* naviPane = iView->ApiProvider().Display().NaviPaneL();
+
+ CreateWindowL();
+ SetMopParent( iView );
+
+ ConstructComponentControlsL( aRect, *iView );
+
+ TAknsItemID tileIID = KAknsIIDSkinBmpListPaneNarrowA;
+ TAknLayoutRect listGenPane;
+ listGenPane.LayoutRect(iAvkonAppUi->ClientRect() ,
+ AknLayout::list_gen_pane( 0 ));
+
+ TAknLayoutRect column;
+ column.LayoutRect(iAvkonAppUi->ClientRect() ,
+ AknLayout::A_column());
+
+ iSkinContext = CAknsListBoxBackgroundControlContext::NewL(
+ KAknsIIDSkinBmpMainPaneUsual,
+ listGenPane.Rect(), //TODOVRa: Should come from LAF!
+ EFalse, tileIID,
+ column.Rect() ); //TODOVRa: Should come from LAF!
+ SetRect( aRect );
+ ActivateL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::MopSupplyObject
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CBrowserFavouritesContainer::MopSupplyObject( TTypeUid aId )
+ {
+ if( aId.iUid == MAknsControlContext::ETypeId )
+ {
+ return MAknsControlContext::SupplyMopObject( aId, iSkinContext );
+ }
+
+ return SupplyMopObject( aId, (MAknEditingStateIndicator*)NULL );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::HandleResourceChange( TInt aType )
+ {
+ // goes through all the subcomponents
+ CCoeControl::HandleResourceChange( aType );
+
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ SetRect(iView->ClientRect());
+ DrawDeferred();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserFavouritesContainer::FocusChanged
+// -----------------------------------------------------------------------------
+//
+void CBrowserFavouritesContainer::FocusChanged( TDrawNow aDrawNow )
+ {
+ if ( iListbox && iListbox->IsVisible() )
+ {
+ Listbox()->SetFocus( IsFocused(), aDrawNow );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesFolderListboxIconHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,289 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of TWmlBrowserFavouritesFolderListboxIconHandler.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <BrowserNG.rsg>
+#include <favouritesitem.h>
+#include "BrowserFavouritesFolderListboxIconHandler.h"
+#include "BrowserFavouritesIconIndexArray.h"
+#include "BrowserFavouritesView.h"
+#include <AknsUtils.h>
+#include <avkon.mbg>
+#include <gulicon.h>
+#include <AknIconArray.h>
+#include <browser.mbg>
+
+#include "CommonConstants.h"
+#include <data_caging_path_literals.hrh>
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL TYPES
+
+/**
+* Icon indexes. Numeric values MUST match the resource definition order.
+*/
+enum
+ {
+ EIconIndexListboxMark = 0, ///< Listbox mark icon index.
+ EIconIndexFolder = 1, ///< Folder icon index.
+ EIconIndexRootFolder = 2, ///< Root folder icon index.
+ EIconIndexHomepage = 3, ///< Homepage icon index.
+ EIconIndexLastVisitedPage = 4, ///< Last Visited icon index.
+ EIconIndexBookmark = 5, ///< Bookmark icon index.
+ EIconIndexCsdBearer = 6, ///< CSD bearer icon index.
+ EIconIndexHscsdBearer = 7, ///< HSCSD bearer icon index.
+ EIconIndexGprsBearer = 8, ///< GPRS bearer icon index.
+ EIconIndexSeamlessLinksFolder = 9 ///< Seamless links icon index
+ };
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TBrowserFavouritesFolderListboxIconHandler::IconArrayResourceId
+// ---------------------------------------------------------
+//
+TInt TBrowserFavouritesFolderListboxIconHandler::IconArrayResourceId() const
+ {
+ return R_BROWSER_FAVOURITES_FOLDER_LISTBOX_ICONS;
+ }
+
+//-----------------------------------------------------------------------------
+// MBrowserFavouritesListboxIconHandler::IconIndexes
+//-----------------------------------------------------------------------------
+//
+TBrowserFavouritesIconIndexes
+ TBrowserFavouritesFolderListboxIconHandler::IconIndexes(
+ const CFavouritesItem& aItem ) const
+ {
+ TBrowserFavouritesIconIndexes indexes;
+ indexes.iItemIcon = ItemIconIndex( aItem );
+ indexes.iBearerIcon = KBrowserFavouritesNoBearerIcon; //Bearer icons removed
+ return indexes;
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesFolderListboxIconHandler::ItemIconIndex
+// ---------------------------------------------------------
+//
+TInt TBrowserFavouritesFolderListboxIconHandler::ItemIconIndex
+( const CFavouritesItem& aItem,CBrowserFavouritesListbox* /*aListbox*/ ) const
+ {
+ return ItemIconIndex(aItem);
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesFolderListboxIconHandler::ItemIconIndex
+// ---------------------------------------------------------
+//
+TInt TBrowserFavouritesFolderListboxIconHandler::ItemIconIndex
+( const CFavouritesItem& aItem ) const
+ {
+ if ( aItem.Uid() == KFavouritesRootUid )
+ {
+ return EIconIndexRootFolder;
+ }
+ if ( aItem.Uid() == KFavouritesHomepageUid )
+ {
+ return EIconIndexHomepage;
+ }
+ if ( aItem.Uid() == KFavouritesStartPageUid )
+ {
+ return EIconIndexHomepage;
+ }
+ if ( aItem.Uid() == KFavouritesLastVisitedUid )
+ {
+ return EIconIndexLastVisitedPage;
+ }
+
+ //seamless links folders have a different icon
+ if( CBrowserFavouritesView::IsSeamlessFolder( aItem.ContextId() ) )
+ {
+ return EIconIndexSeamlessLinksFolder;
+ }
+
+ return aItem.IsItem() ? EIconIndexBookmark : EIconIndexFolder;
+ }
+
+
+// ---------------------------------------------------------
+// TBrowserFavouritesFolderListboxIconHandler::LoadIconsL
+// ---------------------------------------------------------
+//
+CAknIconArray* TBrowserFavouritesFolderListboxIconHandler::LoadIconsL() const
+{
+ CAknIconArray* icons =
+ new(ELeave) CAknIconArray( 20 );
+ CleanupStack::PushL(icons); // PUSH Icon
+ CGulIcon* newIcon;
+ CFbsBitmap *newIconBmp;
+ CFbsBitmap *newIconMaskBmp;
+
+ TBuf<KMaxFileName> iconFileAvkon= KAvkonMbmPath();
+ TParse* fp = new(ELeave) TParse();
+ CleanupStack::PushL(fp);
+ TInt err = fp->Set(KBrowserDirAndFile, &KDC_APP_BITMAP_DIR, NULL);
+ if (err != KErrNone)
+ {
+ User::Leave(err);
+ }
+ TBuf<KMaxFileName> iconFileBrowser= fp->FullName();
+ CleanupStack::PopAndDestroy(fp);
+
+ MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiMarkedAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileAvkon,
+ EMbmAvkonQgn_indi_marked_add,
+ EMbmAvkonQgn_indi_marked_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmAvkonQgn_prop_folder_small; maskId = EMbmAvkonQgn_prop_folder_small_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropFolderSmall,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileAvkon,
+ EMbmAvkonQgn_prop_folder_small,
+ EMbmAvkonQgn_prop_folder_small_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmAvkonQgn_indi_level_back; maskId = EMbmAvkonQgn_indi_level_back_mask; }
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiLevelBack,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileAvkon,
+ EMbmAvkonQgn_indi_level_back,
+ EMbmAvkonQgn_indi_level_back_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //"z:\\system\\apps\\browser\\Browser.mbm";
+ //EMbmBrowserQgn_prop_wml_home; maskId = EMbmBrowserQgn_prop_wml_home_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlHome,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_home,
+ EMbmBrowserQgn_prop_wml_home_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_bm_last; maskId = EMbmBrowserQgn_prop_wml_bm_last_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlBmLast,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_bm_last,
+ EMbmBrowserQgn_prop_wml_bm_last_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_bm; maskId = EMbmBrowserQgn_prop_wml_bm_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlBm,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_bm,
+ EMbmBrowserQgn_prop_wml_bm_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_indi_wml_csd_add; maskId = EMbmBrowserQgn_indi_wml_csd_add_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiWmlCsdAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_indi_wml_csd_add,
+ EMbmBrowserQgn_indi_wml_csd_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_indi_wml_hscsd_add; maskId = EMbmBrowserQgn_indi_wml_hscsd_add_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiWmlHscsdAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_indi_wml_hscsd_add,
+ EMbmBrowserQgn_indi_wml_hscsd_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_indi_wml_gprs_add; maskId = EMbmBrowserQgn_indi_wml_gprs_add_mask; },
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnIndiWmlGprsAdd,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_indi_wml_gprs_add,
+ EMbmBrowserQgn_indi_wml_gprs_add_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+ //EMbmBrowserQgn_prop_wml_folder_link_seamless; maskId = EMbmBrowserQgn_prop_wml_folder_link_seamless_mask; }
+ AknsUtils::CreateIconLC( skinInstance,
+ KAknsIIDQgnPropWmlFolderLinkSeamless,
+ newIconBmp,
+ newIconMaskBmp,
+ iconFileBrowser,
+ EMbmBrowserQgn_prop_wml_folder_link_seamless,
+ EMbmBrowserQgn_prop_wml_folder_link_seamless_mask);
+ newIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(2); // newIconBmp, newIconMaskBmp (see CreateIconLC)
+ CleanupStack::PushL(newIcon);
+ icons->AppendL( newIcon );
+ CleanupStack::Pop(newIcon);
+
+ CleanupStack::Pop(); // POP Icon
+ return icons;
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesFolderSelector.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesFolderSelector.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknLists.h>
+#include <AknPopup.h>
+#include <gulicon.h>
+#include <AknIconArray.h>
+#include <favouritesdb.h>
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include <BrowserNG.rsg>
+#include <AknsConstants.h>
+#include "BrowserFavouritesFolderSelector.h"
+#include "BrowserFavouritesModel.h"
+#include "BrowserFavouritesIconIndexArray.h"
+#include "BrowserUtil.h"
+#include "ApiProvider.h"
+#include "CommsModel.h"
+#include "CommonConstants.h"
+#include "BrowserFavouritesView.h"
+
+// CONSTANTS
+
+/**
+* Granularity of the listbox item array.
+*/
+LOCAL_C const TInt KGranularity = 4;
+
+/**
+* Buffer size for formatting listbox text. Maximum item name
+* plus listbox internals (tabulators for icons etc.) must fit into it.
+* The format is "<icon index max 3 char>\t<name>",
+* so the added length is 4.
+*/
+LOCAL_C const TInt KMaxListboxLineLen = KFavouritesMaxName + 4;
+
+/**
+* Format for formatting a listbox line.
+*/
+_LIT( KListboxLineFormat, "%d\t%S" );
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelectorListbox::CBrowserFavouritesFolderSelectorListbox
+// ---------------------------------------------------------
+//
+CBrowserFavouritesFolderSelectorListbox::CBrowserFavouritesFolderSelectorListbox( const TBrowserFavouritesFolderListboxIconHandler* aIconHandler ) :
+ CAknSingleGraphicPopupMenuStyleListBox()
+ {
+ iIconHandler = aIconHandler;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelectorListbox::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesFolderSelectorListbox::HandleResourceChange( TInt aType )
+{
+ if ( aType == KAknsMessageSkinChange )
+ {
+ CArrayPtr<CGulIcon>* array =
+ ItemDrawer()->ColumnData()->IconArray();
+
+ array->ResetAndDestroy();
+ delete array;
+
+ CAknIconArray* iconArray = NULL;
+ TRAPD( err,
+ iconArray = iIconHandler->CreateIconArrayL()
+ )
+
+ if ( !err )
+ {
+ ItemDrawer()->ColumnData()->SetIconArray( iconArray );
+ }
+ delete iconArray;
+ }
+ return;
+}
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::NewL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesFolderSelector* CBrowserFavouritesFolderSelector::NewL
+ (
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ TInt aExcludeFolder
+ )
+ {
+ CBrowserFavouritesFolderSelector* selector =
+ new (ELeave) CBrowserFavouritesFolderSelector
+ ( aModel, aApiProvider, aExcludeFolder );
+ CleanupStack::PushL( selector );
+ selector->ConstructL();
+ CleanupStack::Pop(); // selector
+ return selector;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::CBrowserFavouritesFolderSelector
+// ---------------------------------------------------------
+//
+CBrowserFavouritesFolderSelector::CBrowserFavouritesFolderSelector
+ (
+ CBrowserFavouritesModel& aModel,
+ MApiProvider& aApiProvider,
+ TInt aExcludeFolder
+ )
+: iModel( &aModel ),
+ iApiProvider( &aApiProvider ),
+ iExcludeFolder( aExcludeFolder )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::~CBrowserFavouritesFolderSelector
+// ---------------------------------------------------------
+//
+CBrowserFavouritesFolderSelector::~CBrowserFavouritesFolderSelector()
+ {
+ delete iListboxItemArray;
+ delete iListbox;
+ delete iIconIndexes;
+ delete iItems;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesFolderSelector::ConstructL()
+ {
+ iListbox = new (ELeave) CBrowserFavouritesFolderSelectorListbox( &iIconHandler );
+ iPopupList = CAknPopupList::NewL
+ ( iListbox, R_BROWSER_FAVOURITES_CBA_MOVETOFOLDER_MOVECANCEL_MOVE );
+ HBufC* title = CCoeEnv::Static()->AllocReadResourceLC
+ ( R_BROWSER_FAVOURITES_TEXT_MOVE_TO_PRMPT );
+ iPopupList->SetTitleL( *title );
+ CleanupStack::PopAndDestroy(); // title
+ iListbox->ConstructL
+ ( iPopupList, EAknListBoxSelectionList | EAknListBoxLoopScrolling );
+ iListboxItemArray = new (ELeave) CDesCArrayFlat( KGranularity );
+ CTextListBoxModel* listboxModel = iListbox->Model();
+ listboxModel->SetItemTextArray( iListboxItemArray );
+ listboxModel->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ iListbox->CreateScrollBarFrameL( ETrue );
+ iListbox->ScrollBarFrame()->SetScrollBarVisibilityL
+ ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ iListbox->ItemDrawer()->ColumnData()->SetIconArray
+ ( iIconHandler.CreateIconArrayL() );
+ iListbox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::ExecuteLD
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesFolderSelector::ExecuteLD()
+ {
+ TInt uid = KFavouritesNullUid;
+ GetDataL();
+ FillListboxL();
+ if ( iPopupList->ExecuteLD() )
+ {
+ uid = iItems->IndexToUid( iListbox->View()->CurrentItemIndex() );
+ }
+ iPopupList = NULL; // ExecuteLD has already deleted it.
+ delete this;
+ return uid;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::GetDataL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesFolderSelector::GetDataL()
+ {
+ // Getting data. Make sure that the item and icon index data does not
+ // go out of sync - only set them to members when both is gotten.
+ CFavouritesItemList* items = GetItemsLC();
+ CBrowserFavouritesIconIndexArray* iconIndexes =
+ GetIconIndexesLC( *items );
+ // Replace data with new.
+ delete iIconIndexes; // Not NULL-ed, because...
+ delete iItems; // Not NULL-ed, because...
+ iItems = items; // ... this cannot leave
+ iIconIndexes = iconIndexes; // ... this cannot leave
+ CleanupStack::Pop( 2 ); // iconIndexes, items: now members.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::FillListboxL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesFolderSelector::FillListboxL()
+ {
+ TBuf<KMaxListboxLineLen> buf;
+ TBuf<KMaxListboxLineLen> name;
+ TInt i;
+ TInt resId = 0;
+
+ iListboxItemArray->Reset();
+
+ for ( i = 0; i < iItems->Count(); i++ )
+ {
+ if(!iItems->At(i)->IsHidden())
+ {
+
+ resId = CBrowserFavouritesView::GetSeamlessFolderResourceID(
+ iItems->At(i)->ContextId() );
+
+ if(resId) // a seamless link folder. Get the localised name.
+ {
+ HBufC* seamlessLinkName = CCoeEnv::Static()->AllocReadResourceLC( resId );
+ name = seamlessLinkName->Des();
+ CleanupStack::PopAndDestroy(); // seamlessLinkName
+ }
+ else // not a seamless link folder.
+ {
+ name = iItems->At( i )->Name();
+ // Replace TAB characters with spaces.
+ for ( TInt i = 0; i < name.Length(); i++ )
+ {
+ if ( name[i] == '\t' )
+ {
+ name[i] = ' ';
+ }
+ }
+ }
+
+ buf.Format( KListboxLineFormat, iIconIndexes->At( i ).iItemIcon, &name );
+ iListboxItemArray->AppendL( buf );
+ }
+ else
+ {
+ iItems->Delete(i);
+ i--;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::GetItemsLC
+// ---------------------------------------------------------
+//
+CFavouritesItemList* CBrowserFavouritesFolderSelector::GetItemsLC()
+ {
+ CFavouritesItemList* items = new (ELeave) CFavouritesItemList();
+ CleanupStack::PushL( items );
+
+ if ( iModel->BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue )
+ == KErrNone )
+ {
+ // Get all folders.
+ iModel->Database().GetAll
+ ( *items, KFavouritesNullUid, CFavouritesItem::EFolder );
+ iModel->CommitL();
+
+ // Remove iExcludeFolder.
+ TInt index = items->UidToIndex( iExcludeFolder );
+ if ( index >= 0 )
+ {
+ items->Delete( index );
+ }
+
+ // Set custom localized name for root.
+ index = items->UidToIndex( KFavouritesRootUid );
+ if ( index >= 0 )
+ {
+ HBufC* rootName = CCoeEnv::Static()->AllocReadResourceLC
+ ( R_BROWSER_FAVOURITES_TEXT_FLDR_ROOT_LEVEL );
+ items->At( index )->SetNameL( *rootName );
+ CleanupStack::PopAndDestroy(); // rootName
+ }
+
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>( KGranularityHigh );
+ CleanupStack::PushL( orderArray );
+ CBrowserBookmarksOrder* currentOrder = CBrowserBookmarksOrder::NewLC();;
+ if ( iModel->Database().GetData( KFavouritesRootUid ,*currentOrder ) == KErrNone)
+ {
+ if ( currentOrder->GetBookMarksOrder().Count() > 0 )
+ {
+ orderArray->AppendL( &( currentOrder->GetBookMarksOrder()[0] ), currentOrder->GetBookMarksOrder().Count());
+ orderArray->InsertL( 0 , KFavouritesRootUid );
+ iModel->ManualSortL( KFavouritesRootUid, currentOrder, orderArray, items );
+ }
+ }
+ else
+ {
+ iModel->SortL( *items );
+ }
+ CleanupStack::Pop(2);// orderArray, currentOrder
+ }
+
+ return items;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesFolderSelector::GetIconIndexesLC
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIconIndexArray*
+CBrowserFavouritesFolderSelector::GetIconIndexesLC
+( CFavouritesItemList& aItems )
+ {
+ // Create new empty list.
+ CBrowserFavouritesIconIndexArray* iconIndexes =
+ new (ELeave) CBrowserFavouritesIconIndexArray( KGranularity );
+ CleanupStack::PushL( iconIndexes );
+ // Get list of access points. Not copy, owned by the AP model.
+ // const CApListItemList* apList = iApiProvider->CommsModel().AccessPoints();
+ // Fill the list.
+ TInt i = 0;
+ TInt count = aItems.Count();
+ for ( i = 0; i < count; i++ )
+ {
+ iconIndexes->AppendL
+ ( iIconHandler.IconIndexes( *(aItems.At( i ) ) ) );
+ }
+ return iconIndexes;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesIncrementalDelete.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserFavouritesIncrementalDelete.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknWaitDialog.h>
+#include <favouritesdb.h>
+#include <BrowserNG.rsg>
+#include "BrowserFavouritesIncrementalDelete.h"
+#include "BrowserFavouritesModel.h"
+
+// CONSTANTS
+
+/// Granularity of the folder-contents array.
+LOCAL_D const TInt KGranularity = 4;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalDelete::NewL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalDelete*
+CBrowserFavouritesIncrementalDelete::NewL
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aNotDeletedUids,
+ TInt aPriority /*=CActive::EPriorityStandard*/
+ )
+ {
+ CBrowserFavouritesIncrementalDelete* incDel =
+ new (ELeave) CBrowserFavouritesIncrementalDelete
+ ( aModel, aUids, aNotDeletedUids, aPriority );
+ CleanupStack::PushL( incDel );
+ incDel->ConstructL();
+ CleanupStack::Pop(); // incDel
+ return incDel;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalDelete::~CBrowserFavouritesIncrementalDelete
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalDelete::~CBrowserFavouritesIncrementalDelete()
+ {
+ delete iFolderContents;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalDelete::CBrowserFavouritesIncrementalDelete
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalDelete::CBrowserFavouritesIncrementalDelete
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aNotDeletedUids,
+ TInt aPriority
+ )
+: CBrowserFavouritesIncrementalOp( aModel, aPriority ), iUids( &aUids ),
+ iNotDeletedUids( &aNotDeletedUids ), iFolderPending( EFalse ), iIndex( 0 )
+ {
+ }
+
+// CBrowserFavouritesIncrementalDelete::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalDelete::ConstructL()
+ {
+ CBrowserFavouritesIncrementalOp::ConstructL();
+ iFolderContents = new (ELeave) CArrayFixFlat<TInt>( KGranularity );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalDelete::StepL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesIncrementalDelete::StepL()
+ {
+ if ( iFolderContents->Count() )
+ {
+ // Deleting one item from folder.
+ (void)iModel->Database().Delete( iFolderContents->At( 0 ) );
+ iFolderContents->Delete( 0 );
+ }
+ else if ( iIndex < iUids->Count() )
+ {
+ // Still have item in the main list to delete.
+ TInt uid = iUids->At( iIndex );
+ // Check if it is a non-empty folder: get contents.
+ //
+ // The variable iFolderPending is a performance optimization: avoid
+ // querying contents of a folder twice. (If iFolderPending == ETrue,
+ // and we reach this point, that means that the last item in a folder
+ // was deleted in the last StepL. The contents of this folder were
+ // already queried).
+ if ( !iFolderPending )
+ {
+ // The contents of this folder were not queried yet: do it now.
+ iModel->Database().GetUids( *iFolderContents, uid );
+ }
+ if ( iFolderContents->Count() )
+ {
+ // Folder is not empty, do nothing now. iIndex is not incremented
+ // (deletion of this folder becomes pending) and next StepL will
+ // begin deleting the contents.
+ iFolderPending = ETrue;
+ }
+ else
+ {
+ // Deleting an empty (pending) folder or an ordinary item.
+ iFolderPending = EFalse;
+ if ( iModel->Database().Delete( uid ) != KErrNone )
+ {
+ // Error deleting.
+ iNotDeletedUids->AppendL( uid );
+ }
+ iIndex++;
+ }
+ }
+ return iUids->Count() - iIndex;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalDelete::CreateWaitNoteLC
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalDelete::CreateWaitNoteLC()
+ {
+ iWaitNote = new (ELeave) CAknWaitDialog
+ ( REINTERPRET_CAST( CEikDialog**, &iWaitNote ) );
+ iWaitNote->PrepareLC( R_WMLBROWSER_FAVOURITES_NOTE_DELETING );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesIncrementalMove.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserFavouritesIncrementalMove.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknWaitDialog.h>
+#include <favouritesdb.h>
+#include <favouritesitem.h>
+#include <BrowserNG.rsg>
+#include "BrowserFavouritesIncrementalMove.h"
+#include "BrowserFavouritesModel.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalMove::NewL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalMove*
+CBrowserFavouritesIncrementalMove::NewL
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aUnmovableUids,
+ CArrayFix<TInt>& aConflictingNameUids,
+ TInt aTargetFolder,
+ TInt aPriority /*=CActive::EPriorityStandard*/
+ )
+ {
+ CBrowserFavouritesIncrementalMove* incMove =
+ new (ELeave) CBrowserFavouritesIncrementalMove
+ (
+ aModel,
+ aUids,
+ aUnmovableUids,
+ aConflictingNameUids,
+ aTargetFolder,
+ aPriority
+ );
+ CleanupStack::PushL( incMove );
+ incMove->ConstructL();
+ CleanupStack::Pop(); // incMove
+ return incMove;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalMove::~CBrowserFavouritesIncrementalMove
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalMove::~CBrowserFavouritesIncrementalMove()
+ {
+ delete iItem;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalMove::CBrowserFavouritesIncrementalMove
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalMove::CBrowserFavouritesIncrementalMove
+ (
+ CBrowserFavouritesModel& aModel,
+ CArrayFix<TInt>& aUids,
+ CArrayFix<TInt>& aUnmovableUids,
+ CArrayFix<TInt>& aConflictingNameUids,
+ TInt aTargetFolder,
+ TInt aPriority
+ )
+: CBrowserFavouritesIncrementalOp( aModel, aPriority ),
+ iUids( &aUids ),
+ iUnmovableUids( &aUnmovableUids ),
+ iConflictingNameUids( &aConflictingNameUids ),
+ iTargetFolder( aTargetFolder ),
+ iIndex( 0 )
+ {
+ }
+
+// CBrowserFavouritesIncrementalMove::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalMove::ConstructL()
+ {
+ CBrowserFavouritesIncrementalOp::ConstructL();
+ iItem = CFavouritesItem::NewL();
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalMove::StepL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesIncrementalMove::StepL()
+ {
+ if ( iIndex < iUids->Count() )
+ {
+ TInt uid = iUids->At( iIndex );
+ TInt err = iModel->Database().Get( uid, *iItem );
+ if ( !err )
+ {
+ iItem->SetParentFolder( iTargetFolder );
+ err = iModel->Database().Update
+ ( *iItem, uid, /*aAutoRename=*/EFalse );
+ }
+ switch ( err )
+ {
+ case KErrNone:
+ {
+ // All is well.
+ break;
+ }
+ case KErrAlreadyExists:
+ {
+ iConflictingNameUids->AppendL( uid );
+ break;
+ }
+ default:
+ {
+ iUnmovableUids->AppendL( uid );
+ break;
+ }
+ }
+ iIndex++;
+ }
+ return iUids->Count() - iIndex;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalMove::CreateWaitNoteLC
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalMove::CreateWaitNoteLC()
+ {
+ iWaitNote = new (ELeave) CAknWaitDialog
+ ( REINTERPRET_CAST( CEikDialog**, &iWaitNote ) );
+ iWaitNote->PrepareLC( R_WMLBROWSER_FAVOURITES_NOTE_MOVING );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesIncrementalOp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserFavouritesIncrementalOp.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknWaitDialog.h>
+#include <BrowserNG.rsg>
+#include <eikenv.h>
+#include "BrowserFavouritesIncrementalOp.h"
+#include "BrowserFavouritesModel.h"
+#include "Browser.hrh"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::~CBrowserFavouritesIncrementalOp
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalOp::~CBrowserFavouritesIncrementalOp()
+ {
+ // Base class cancels.
+ delete iWaitNote; // Safety code.
+ if ( iWait && iWait->IsStarted() ) // Safety code.
+ {
+ iWait->AsyncStop();
+ }
+ delete iWait;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::ExecuteL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalOp::ExecuteL()
+ {
+ CreateWaitNoteLC();
+ iWaitNote->SetCallback( this );
+ iWaitNote->RunLD();
+ Call(); // Schedule first step.
+ iWait->Start(); // Wait for completion.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::CBrowserFavouritesIncrementalOp
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIncrementalOp::CBrowserFavouritesIncrementalOp
+ (
+ CBrowserFavouritesModel& aModel,
+ TInt aPriority /*=CActive::EPriorityStandard*/
+ )
+: CAsyncOneShot( aPriority ), iModel( &aModel )
+ {
+ // Base class adds this to the Active Scheduler.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalOp::ConstructL()
+ {
+ iWait = new (ELeave) CActiveSchedulerWait();
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::DoneL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalOp::DoneL()
+ {
+ // Default is do nothing.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::RunL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalOp::RunL()
+ {
+ if ( StepL() )
+ {
+ // More steps to go.
+ Call();
+ }
+ else
+ {
+ // This call deletes the dialog and NULL-s ptr. When dialog goes down,
+ // DialogDismisedL will be called, and we call DoneL() and stop
+ // waiting there.
+ iWaitNote->ProcessFinishedL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::DoCancel
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalOp::DoCancel()
+ {
+ delete iWaitNote;
+ iWaitNote = NULL;
+ iWait->AsyncStop();
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::RunError
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesIncrementalOp::RunError( TInt aError )
+ {
+ // Own part of error processing: clean up the wait note and terminate
+ // the waiting. Then propagate the error up to base classes.
+ delete iWaitNote;
+ iWaitNote = NULL;
+ iWait->AsyncStop();
+ return aError;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesIncrementalOp::DialogDismissedL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesIncrementalOp::DialogDismissedL( TInt /*aButtonId*/ )
+ {
+ DoneL();
+ iWait->AsyncStop();
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListbox.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1187 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesListbox.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <aknkeys.h>
+#include <EIKCLBD.H>
+#include <gulicon.h>
+#include <AknIconArray.h>
+#include <favouritesdb.h>
+#include <BrowserNG.rsg>
+#include <ApListItemList.h>
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include <AknsConstants.h>
+
+#include "BrowserFavouritesListbox.h"
+#include "BrowserFavouritesListboxState.h"
+#include "BrowserFavouritesListboxModel.h"
+#include "BrowserFavouritesListboxView.h"
+#include "BrowserFavouritesModel.h"
+#include "CommsModel.h"
+#include "BrowserFavouritesListboxIconHandler.h"
+#include "BrowserFavouritesIconIndexArray.h"
+#include "BrowserUtil.h"
+#include "BrowserFavouritesListboxCursorObserver.h"
+#include "BrowserFavouritesListboxState.h"
+#include "BrowserFavouritesListboxItemDrawer.h"
+#include "ApiProvider.h"
+#include "BrowserAppUi.h"
+
+#include "BrowserFaviconHandler.h"
+#include <AknLayout2ScalableDef.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include "eikon.hrh"
+
+
+// CONSTANTS
+/// Granularity of the icon index array.
+LOCAL_C const TInt KGranularity = 4;
+
+
+// ================= LOCAL FUNCTIONS =======================
+
+/**
+* Append elements from aSource to the end of aTarget.
+* @param aTarget Array which receives copied elements from aSource.
+* @param aSource Elements from this will be appended to aTarget.
+*/
+LOCAL_D void AppendArrayL
+( CArrayFix<TInt>& aTarget, const CArrayFix<TInt>& aSource )
+ {
+ TInt i;
+ TInt count = aSource.Count();
+ for ( i = 0; i < count; i++ )
+ {
+ aTarget.AppendL( aSource.At( i ) );
+ }
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::NewL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListbox* CBrowserFavouritesListbox::NewL
+ (
+ MApiProvider& aApiProvider,
+ const CCoeControl* aParent,
+ const MBrowserFavouritesListboxIconHandler& aIconHandler
+ )
+ {
+ CBrowserFavouritesListbox* listbox =
+ new (ELeave) CBrowserFavouritesListbox( aApiProvider );
+ CleanupStack::PushL( listbox );
+ listbox->ConstructL( aParent, aIconHandler );
+ CleanupStack::Pop(); // listbox
+ return listbox;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::~CBrowserFavouritesListbox
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListbox::~CBrowserFavouritesListbox()
+ {
+ delete iFaviconHandler;
+ delete iIconIndexes;
+ delete iItems;
+ delete iNewState;
+ if(iIconUpdateCallback) iIconUpdateCallback->Cancel();
+ delete iIconUpdateCallback;
+
+ if ( iFontItalic )
+ {
+ CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
+ screenDev.ReleaseFont( iFontItalic );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SetListboxCursorObserver
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::SetListboxCursorObserver
+(MBrowserFavouritesListboxCursorObserver* aObserver)
+ {
+ iCursorObserver = aObserver;
+ if ( View() )
+ {
+ STATIC_CAST( CBrowserFavouritesListboxView*, View() )->
+ SetCursorObserver( aObserver );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SetDataL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::SetDataL
+( CFavouritesItemList* aItems, /*MCommsModel& aCommsModel,*/ TBool aKeepState )
+ {
+ __ASSERT_DEBUG( aItems, Util::Panic( Util::EUnExpected ) );
+
+ // Ownership of aItems is taken, and will become a member (but not yet
+ // that) - push until then.
+ CleanupStack::PushL( aItems );
+
+ // Get all favicons asynchronously by iteration on icon array
+ /* TODO: There should a callback from engine when favIcon are decode
+ otherwise it takes some redundant calls to engine in order to get
+ the favIcons to UI. */
+#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ if(iApiProvider.StartedUp())
+ UpdateFavIconsL();
+#else
+ iFaviconHandler->StartGetFaviconsL( aItems );
+#endif
+
+
+ // Get icon indexes into new list. Replace the existing
+ // data only if successfully gotten. This ensures that they don't go out
+ // of sync (there cannot be different number of items in the two list).
+ CBrowserFavouritesIconIndexArray* newIconIndexes =
+ GetIconIndexesLC( /*aCommsModel,*/ *aItems );
+
+ if ( aKeepState )
+ {
+ // Calculate new state now, while we still have old items.
+ CalcNewStateL( *aItems );
+ }
+
+ // Got new data. Empty existing data, but keep the empty lists.
+ ClearSelection();
+ iItems->ResetAndDestroy();
+ iIconIndexes->Reset();
+ SetTopItemIndex(0);
+ UpdateFilterL();
+ HandleItemRemovalL();
+ // Replace data with new.
+ delete iIconIndexes; // Not NULL-ed, because...
+ delete iItems; // Not NULL-ed, because...
+ iItems = aItems; // ... this cannot leave
+ iIconIndexes = newIconIndexes; // ... this cannot leave
+
+ // Let the model know the change.
+ TheModel()->SetData( *iItems, *iIconIndexes ); // ... this cannot leave
+
+ CleanupStack::Pop( 2 ); // newIconIndexes, aItems: now members.
+ HandleItemAdditionL();
+ UpdateFilterL();
+ if ( aKeepState )
+ {
+ // Now set the new state into listbox, then discard it.
+ __ASSERT_DEBUG( iNewState, Util::Panic( Util::EUnExpected ) );
+ SetStateL( *iNewState );
+ delete iNewState;
+ iNewState = NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::UpdateFavIcons
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::UpdateFavIconsL()
+ {
+ if(iIconUpdateCallback)
+ iIconUpdateCallback->Cancel();
+ else
+ iIconUpdateCallback = CIdle::NewL(CActive::EPriorityIdle);
+
+ iFaviconHandler->RequestFavicons(iItems);
+ iIconUpdateCallback->Start(TCallBack(UpdateFavIconsCallback, this));
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksView::CompleteAppInitCallback
+// ----------------------------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::UpdateFavIconsCallback( TAny* aParam )
+ {
+ CBrowserFavouritesListbox *favListBox = STATIC_CAST(CBrowserFavouritesListbox*, aParam);
+ TRAP_IGNORE( (favListBox->iFaviconHandler->StartGetFaviconsL(favListBox->iItems)) )
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::DrawFavicons
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::DrawFavicons()
+ {
+ // We have some favicons to draw
+ TInt err = KErrNone;
+
+ //Update the icon indices
+ TRAP( err,
+ CBrowserFavouritesIconIndexArray* newIconIndexes =
+ GetIconIndexesLC( /*aCommsModel,*/ *iItems );
+ iIconIndexes->Reset();
+ delete iIconIndexes;
+ iIconIndexes = newIconIndexes;
+ CleanupStack::Pop( newIconIndexes );
+ );
+
+ // Don't draw the favicons if there is a leave
+ if ( !err )
+ {
+ // Let the model know the change and update the lisbox.
+ TheModel()->SetData( *iItems, *iIconIndexes );
+ DrawNow();
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SelectionStateL
+// ---------------------------------------------------------
+//
+TBrowserFavouritesSelectionState
+CBrowserFavouritesListbox::SelectionStateL() const
+ {
+ TBrowserFavouritesSelectionState state;
+
+ // Check marking first.
+ const CArrayFix<TInt>* selection = MarkedRealIndexesLC();
+ TInt i;
+ TInt count = selection->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ state.iMarkFlags |=
+ SelectionFlags( *(iItems->At( selection->At( i ) )) );
+ if ( iItems->At( selection->At( i ) )->IsItem() )
+ {
+ state.iMarkedItemCount++;
+ }
+ else
+ {
+ state.iMarkedFolderCount++;
+ }
+ }
+
+ if ( count == iItems->Count() )
+ {
+ state.iMarkFlags |= TBrowserFavouritesSelectionState::EAll;
+ }
+
+ TInt visibleCount;
+ CAknListBoxFilterItems* filter = TheModel()->Filter();
+ visibleCount = filter ? filter->FilteredNumberOfItems() : iItems->Count();
+ for ( i = 0; i < visibleCount; i++ )
+ {
+ if ( iItems->At( RealIndex( i ) )->IsItem() )
+ {
+ state.iVisibleItemCount++;
+ }
+ else
+ {
+ state.iVisibleFolderCount++;
+ }
+ }
+
+ TKeyArrayFix key( 0, ECmpTInt32 );
+ TInt dummy;
+ if ( !selection->Find( CurrentItemRealIndex(), key, dummy ) )
+ {
+ state.iMarkFlags |=
+ TBrowserFavouritesSelectionState::ECurrent;
+ }
+
+ CleanupStack::PopAndDestroy(); // selection
+
+ // Then comes the current.
+ const CFavouritesItem* current = CurrentItem();
+ if ( current )
+ {
+ state.iCurrentFlags |= SelectionFlags( *current );
+ }
+
+ return state;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::CurrentItem
+// ---------------------------------------------------------
+//
+const CFavouritesItem* CBrowserFavouritesListbox::CurrentItem() const
+ {
+ TInt index = CurrentItemRealIndex();
+ if ( index >= 0 )
+ {
+ return iItems->At( index );
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::MarkedItemL
+// ---------------------------------------------------------
+//
+const CFavouritesItem* CBrowserFavouritesListbox::MarkedItemL() const
+ {
+ CFavouritesItem* item = NULL;
+ CArrayFix<TInt>* marked = MarkedRealIndexesLC();
+ if ( marked->Count() == 1 )
+ {
+ item = iItems->At( marked->At( 0 ) );
+ }
+ CleanupStack::PopAndDestroy();
+ return item;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::HighlightUidNow
+// ---------------------------------------------------------
+//
+TBool CBrowserFavouritesListbox::HighlightUidNow( TInt aUid )
+ {
+ TInt index = 0;
+ if (aUid != 0)
+ {
+ index = UidToViewIndex( aUid );
+ }
+
+ if ( index >= 0 )
+ {
+ SetCurrentItemIndexAndDraw( index );
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::HandleMarkableListCommandL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::HandleMarkableListCommandL( TInt aCommand )
+ {
+ if ( ListboxFlags() & EAknListBoxMarkableList )
+ {
+ TInt index;
+ switch ( aCommand )
+ {
+ case EWmlCmdMark:
+ {
+ index = CurrentItemIndex();
+ if ( index >= 0 )
+ {
+ View()->SelectItemL( index );
+ }
+ break;
+ }
+
+ case EWmlCmdUnmark:
+ {
+ index = CurrentItemIndex();
+ if ( index >= 0 )
+ {
+ View()->DeselectItem( index );
+ }
+ break;
+ }
+
+ case EWmlCmdMarkAll:
+ {
+ ClearSelection();
+ TInt count = Model()->NumberOfItems();
+ if ( count )
+ {
+ TInt i = 0;
+ CArrayFixFlat<TInt>* selection =
+ new(ELeave) CArrayFixFlat<TInt>( 1 );
+ CleanupStack::PushL( selection );
+ selection->SetReserveL( count );
+ for ( i = 0; i < count; i++ )
+ {
+ selection->AppendL( i );
+ }
+ SetSelectionIndexesL( selection );
+ CleanupStack::PopAndDestroy(); // selection
+ }
+ break;
+ }
+
+ case EWmlCmdUnmarkAll:
+ {
+ ClearSelection();
+ break;
+ }
+
+ default:
+ {
+ Util::Panic( Util::EUnExpected );
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::MarkedUidsLC
+// ---------------------------------------------------------
+//
+CArrayFix<TInt>* CBrowserFavouritesListbox::MarkedUidsLC() const
+ {
+ CArrayFix<TInt>* array = MarkedRealIndexesLC();
+ RealIndexesToUids( *array );
+ return array;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SelectedUidsLC
+// ---------------------------------------------------------
+//
+CArrayFix<TInt>* CBrowserFavouritesListbox::SelectedUidsLC() const
+ {
+ CArrayFix<TInt>* array = SelectedRealIndexesLC();
+ RealIndexesToUids( *array );
+ return array;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SelectedItemsLC
+// ---------------------------------------------------------
+//
+CArrayPtr<const CFavouritesItem>*
+CBrowserFavouritesListbox::SelectedItemsLC(TBool aIncludeSpecialItems) const
+ {
+ CArrayPtrFlat<const CFavouritesItem>* itemPtrs =
+ new (ELeave) CArrayPtrFlat<const CFavouritesItem>( KGranularity );
+ CleanupStack::PushL( itemPtrs );
+ CArrayFix<TInt>* indexes = SelectedRealIndexesLC();
+ TInt i;
+ TInt count = indexes->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ CFavouritesItem* item = iItems->At( indexes->At( i ) );
+
+ if ( !aIncludeSpecialItems )
+ {
+ // Skip special items:
+ // folders, homepage, last visited & start page URLs.
+ // Need a workaround for the start page since CFavouritesItem
+ // does not provide IsStartPage() or something similar.
+ if ( (item->Uid() == KFavouritesHomepageUid ) ||
+ (item->Uid() == KFavouritesLastVisitedUid ) ||
+ item->IsFolder() ||
+ item->Uid() == KFavouritesStartPageUid )
+ continue;
+ }
+ itemPtrs->AppendL( item );
+ }
+ CleanupStack::PopAndDestroy(); // indexes
+ return itemPtrs;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::ItemByUid
+// ---------------------------------------------------------
+//
+const CFavouritesItem* CBrowserFavouritesListbox::ItemByUid
+( TInt aUid ) const
+ {
+ return iItems->ItemByUid( aUid );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::UnfilteredNumberOfItems
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::UnfilteredNumberOfItems()
+ {
+ return iItems->Count();
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::FilteredNumberOfItems
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::FilteredNumberOfItems()
+ {
+
+ CAknListBoxFilterItems* filter = TheModel()->Filter();
+ return filter->FilteredNumberOfItems();
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::UpdateFilterL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::UpdateFilterL()
+ {
+ CAknListBoxFilterItems* filter = TheModel()->Filter();
+ if ( filter )
+ {
+ filter->HandleItemArrayChangeL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::AnyFoldersL
+// ---------------------------------------------------------
+//
+TBool CBrowserFavouritesListbox::AnyFoldersL()
+ {
+ TInt i;
+ TInt count = iItems->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iItems->At( i )->IsFolder() )
+ {
+ if (iItems->At( i )->Uid()!=KFavouritesAdaptiveItemsFolderUid) return ETrue; //exclude Adaptive Bookmarks Folder
+ }
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CBrowserFavouritesListbox::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse result = EKeyWasNotConsumed;
+
+ switch ( aKeyEvent.iCode )
+ {
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftArrow: // West
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyRightArrow: // East
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ // This listbox does not consume left/right or diagonal keypresses.
+ // (The base class always does, even if it doesn't use them )
+ break;
+ }
+
+ default:
+ {
+ result = CAknSingleGraphicStyleListBox::OfferKeyEventL
+ ( aKeyEvent, aType );
+ // Call UpdateCBA to update MSK in case of mark/unmark
+ CBrowserAppUi::Static()->UpdateCbaL();
+ }
+
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::FocusChanged
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::FocusChanged( TDrawNow aDrawNow )
+ {
+ // Do nothing until the listbox is fully constructed
+ // The dialogpage sets the focus before calling ConstructL
+ if ( iView )
+ {
+ CAknSingleGraphicStyleListBox::FocusChanged( aDrawNow );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::CreateModelL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::CreateModelL()
+ {
+ iModel = CBrowserFavouritesListboxModel::NewL( *iItems, *iIconIndexes );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::MakeViewClassInstanceL
+// ---------------------------------------------------------
+//
+CListBoxView* CBrowserFavouritesListbox::MakeViewClassInstanceL()
+ {
+ return new (ELeave) CBrowserFavouritesListboxView( *this );
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::CreateItemDrawerL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::CreateItemDrawerL()
+ {
+ CAknSingleGraphicStyleListBox::CreateItemDrawerL();
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::CBrowserFavouritesListbox
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListbox::CBrowserFavouritesListbox
+ ( MApiProvider& aApiProvider ) :
+ iApiProvider( aApiProvider )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::ConstructL
+ (
+ const CCoeControl* aParent,
+ const MBrowserFavouritesListboxIconHandler& aIconHandler
+ )
+ {
+ iSkinUpdated = EFalse;
+ iIconHandler = &aIconHandler;
+ iItems = new (ELeave) CFavouritesItemList();
+ iIconIndexes =
+ new (ELeave) CBrowserFavouritesIconIndexArray( KGranularity );
+ CAknSingleGraphicStyleListBox::ConstructL( aParent, ListboxFlags() );
+ // MUST call this after the listbox has finished; listbox construction
+ // is buggy and overwrites the model's itemarray ptr.
+ TheModel()->SetItemArray();
+ CreateScrollBarFrameL( ETrue );
+ ScrollBarFrame()->SetScrollBarVisibilityL
+ ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ // Load icons
+ ItemDrawer()->ColumnData()->SetIconArray
+ ( iIconHandler->CreateIconArrayL() );
+
+ // Store the size of an icon
+ TAknWindowComponentLayout layout =
+ AknLayoutScalable_Avkon::list_single_graphic_pane_g1(0);
+
+ TAknLayoutRect naviPaneGraphicsLayoutRect;
+ TRect listBoxGraphicRect;
+ TRect rect = iAvkonAppUi->ClientRect();
+
+
+ naviPaneGraphicsLayoutRect.LayoutRect( rect, layout);
+ listBoxGraphicRect = naviPaneGraphicsLayoutRect.Rect();
+
+ TSize listBoxGraphicSize( listBoxGraphicRect.iBr.iX - listBoxGraphicRect.iTl.iX,
+ listBoxGraphicRect.iBr.iY - listBoxGraphicRect.iTl.iY );
+ // Favicon handler
+ iFaviconHandler = CBrowserFaviconHandler::NewL(
+ iApiProvider,
+ ItemDrawer()->ColumnData()->IconArray(),
+ *this,
+ listBoxGraphicSize );
+
+ ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+
+
+ // Setup italicized font for use later
+ const CFont* logicalFont = AknLayoutUtils::FontFromId(EAknLogicalFontPrimaryFont);
+
+ // Note: This font is owned by the application's system font array (where it
+ // is likely already to have been created) and does not need to be
+ // released. It can just go out of scope.// Extract font information
+ TFontSpec fontSpec = logicalFont->FontSpecInTwips();// Desired height, weight, and posture already set in locals
+ fontSpec.iFontStyle.SetPosture( EPostureItalic );// Obtain new font
+ CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
+ screenDev.GetNearestFontInTwips( ( CFont*& )iFontItalic, fontSpec );
+
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::ListboxFlags
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::ListboxFlags()
+ {
+ return AknLayoutUtils::PenEnabled() ?
+ EAknListBoxStylusMarkableList : EAknListBoxMarkableList;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::GetIconIndexesLC
+// ---------------------------------------------------------
+//
+CBrowserFavouritesIconIndexArray*
+CBrowserFavouritesListbox::GetIconIndexesLC
+( /*MCommsModel& aCommsModel, */CFavouritesItemList& aItems )
+ {
+ // Create new empty list.
+ CBrowserFavouritesIconIndexArray* iconIndexes =
+ new (ELeave) CBrowserFavouritesIconIndexArray( KGranularity );
+ CleanupStack::PushL( iconIndexes );
+ // Get list of access points. Not copy, owned by the AP model.
+ // const CApListItemList* apList = aCommsModel.AccessPoints();
+ // Fill the list.
+ TInt i = 0;
+ TInt count = aItems.Count();
+ for ( i = 0; i < count; i++ )
+ {
+ iconIndexes->AppendL
+ ( iIconHandler->IconIndexes( *(aItems.At( i ))/*, apList*/,this ) );
+ }
+ return iconIndexes;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::CalcNewStateL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::CalcNewStateL
+( CFavouritesItemList& aNewItems )
+ {
+ delete iNewState;
+ iNewState = NULL;
+ iNewState = new( ELeave ) CBrowserFavouritesListboxState;
+
+ // 1. Check if we have any new item. If yes, highlight goes to first
+ // new one.
+ TInt i;
+ TInt count = aNewItems.Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iItems->UidToIndex( aNewItems.IndexToUid( i ) ) ==
+ KErrNotFound )
+ {
+ // New item, not found among the old ones.
+ // Set highlight to that, and also becomes top item.
+ iNewState->iHighlightUid = iNewState->iTopItemUid =
+ aNewItems.IndexToUid( i );
+ break;
+ }
+ }
+
+ // 2. If there is no new item, get the new highlight. That is the old
+ // one, if still exists, or the next remaining one after the
+ // deleted old one(s).
+ TInt uid;
+ if ( iNewState->iHighlightUid == KFavouritesNullUid )
+ {
+ i = CurrentItemRealIndex();
+ if ( i >= 0 )
+ {
+ // Have current item.
+ // Now go down the old list, beginning from highlighted one;
+ // find first item that still exists.
+ count = iItems->Count();
+ for ( /*current highlight index: i*/; i < count; i++ )
+ {
+ uid = iItems->At( i )->Uid();
+ if ( aNewItems.UidToIndex( uid ) != KErrNotFound )
+ {
+ iNewState->iHighlightUid = uid;
+ break;
+ }
+ }
+ // Here we should have higlight uid, unless the deleted element(s)
+ // were last. In that case, set last item highlighted (if there is
+ // anything to highlight).
+ if ( iNewState->iHighlightUid == KFavouritesNullUid &&
+ aNewItems.Count() )
+ {
+ iNewState->iHighlightUid = aNewItems.IndexToUid
+ ( aNewItems.Count() - 1 );
+ }
+ }
+ }
+
+ // 3. Get mark uids. Whether these uids exist in the new list or not, is
+ // not checked here; setting marks to the already changed listbox is
+ // fool-proof.
+ iNewState->iMarkUids = MarkedUidsLC();
+ CleanupStack::Pop(); // Uid list; ownership is now in the state.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SetStateL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::SetStateL
+( const CBrowserFavouritesListboxState& aState )
+ {
+ TInt topIndex;
+
+ // Set marks.
+ if ( aState.iMarkUids->Count() )
+ {
+ CArrayFix<TInt>* marks = new (ELeave) CArrayFixFlat<TInt>( 4 );
+ CleanupStack::PushL( marks );
+ marks->AppendL
+ ( aState.iMarkUids->Back( 0 ), aState.iMarkUids->Count() );
+ UidsToViewIndexes( *marks );
+ SetSelectionIndexesL( marks );
+ CleanupStack::PopAndDestroy(); // marks
+ }
+
+ // Set top item index.
+ topIndex = UidToViewIndex ( aState.iTopItemUid );
+ if ( topIndex >= 0 )
+ {
+ // Always try to fill the listbox (if there were empty lines below,
+ // "scroll down", instead of strictly restoring the top item index).
+ TInt topIndexToSeeLastItem = Model()->NumberOfItems() -
+ View()->NumberOfItemsThatFitInRect( View()->ViewRect() );
+ if ( topIndexToSeeLastItem < 0 )
+ {
+ topIndexToSeeLastItem = 0;
+ }
+ topIndex = Min( topIndex, topIndexToSeeLastItem );
+ SetTopItemIndex( topIndex );
+ }
+
+ // Set higlight.
+ TInt curIndex = UidToViewIndex ( aState.iHighlightUid );
+ if ( curIndex < 0 )
+ {
+ // If cannot restore highlight, set it to top item.
+ curIndex = topIndex;
+ }
+ if ( curIndex >= 0 )
+ {
+ SetCurrentItemIndex( curIndex );
+ }
+
+ DrawNow();
+
+ if ( iCursorObserver )
+ {
+ // Cursor now points to some different item. Let the observer know it.
+ iCursorObserver->HandleCursorChangedL( this );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::UidToViewIndex
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::UidToViewIndex( TInt aUid ) const
+ {
+ TInt viewIndex = KErrNotFound;
+ TInt realIndex = iItems->UidToIndex( aUid );
+ if ( realIndex >= 0 )
+ {
+ CAknListBoxFilterItems* filter = TheModel()->Filter();
+ if ( filter )
+ {
+ // Have filter, do the conversion.
+ viewIndex = filter->VisibleItemIndex( realIndex );
+ }
+ else
+ {
+ // No filter, no conversion necessary.
+ viewIndex = realIndex;
+ }
+ }
+ return viewIndex;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::UidsToViewIndexes
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::UidsToViewIndexes
+( CArrayFix<TInt>& aList ) const
+ {
+ TInt i;
+ TInt j;
+ TInt index;
+ TInt count = aList.Count();
+ for ( i = 0, j = 0; i < count; i++ )
+ {
+ index = UidToViewIndex( aList.At ( i ) );
+ if ( index != KErrNotFound )
+ {
+ aList.At( j++ ) = index;
+ }
+ }
+ if ( j < count )
+ {
+ // Not all Uids were converted. Delete the trailing rubbish.
+ aList.Delete( j, count - j );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::RealIndexesToUids
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::RealIndexesToUids
+( CArrayFix<TInt>& aList ) const
+ {
+ TInt i;
+ TInt uid;
+ TInt count = aList.Count();
+ for ( i = 0; i < count; i++ )
+ {
+ uid = iItems->IndexToUid( aList.At( i ) );
+ __ASSERT_DEBUG( uid != KFavouritesNullUid, \
+ Util::Panic( Util::EFavouritesBadBookmarkUid ) );
+ aList.At( i ) = uid;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::MarkedRealIndexesLC
+// ---------------------------------------------------------
+//
+CArrayFix<TInt>* CBrowserFavouritesListbox::MarkedRealIndexesLC() const
+ {
+ CListBoxView::CSelectionIndexArray* array =
+ new (ELeave) CArrayFixFlat<TInt>( KGranularity );
+ CleanupStack::PushL( array );
+ if ( iItems->Count() )
+ {
+ const CArrayFix<TInt>* marked;
+ CAknListBoxFilterItems* filter = TheModel()->Filter();
+ if ( filter )
+ {
+ // Filter knows all.
+ filter->UpdateSelectionIndexesL();
+ marked = filter->SelectionIndexes();
+#if 1 /* TODO remove when AVKON bug fixed*/
+ // Overcoming AVKON bug. If filter criteria is empty (i.e. the
+ // user is not typing in the filter), selection indexes between
+ // the filter and the listbox are not synchronized! Unfortunately,
+ // this strange back-way is the only means by we can discover if
+ // we have criteria or not; CAknListBoxFilterItems has the
+ // criteria as private; and the CAknSearchField, which holds the
+ // filter (and has the string) is not accessible here in the
+ // listbox (it's in the container).
+ if ( filter->FilteredNumberOfItems() ==
+ filter->NonFilteredNumberOfItems() )
+ {
+ marked = View()->SelectionIndexes();
+ }
+#endif
+ }
+ else
+ {
+ // No filter.
+ marked = View()->SelectionIndexes();
+ }
+ AppendArrayL( /*aTarget=*/*array, /*aSource=*/*marked );
+ }
+ return array;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SelectedRealIndexesLC
+// ---------------------------------------------------------
+//
+CArrayFix<TInt>* CBrowserFavouritesListbox::SelectedRealIndexesLC() const
+ {
+ CListBoxView::CSelectionIndexArray* selection =
+ MarkedRealIndexesLC();
+ if ( selection->Count() == 0 )
+ {
+ // No marks; use the highlighted one.
+ selection->AppendL( CurrentItemRealIndex() );
+ }
+ return selection;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::CurrentItemRealIndex
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::CurrentItemRealIndex() const
+ {
+ return RealIndex( CurrentItemIndex() /*that's view index*/ );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::RealIndex
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::RealIndex( TInt aViewIndex ) const
+ {
+ TInt index = KErrNotFound;
+ if ( aViewIndex >= 0 )
+ {
+ CAknListBoxFilterItems* filter = TheModel()->Filter();
+ if ( filter )
+ {
+ // If we have the index and the filter also, do the conversion.
+ index = filter->FilteredItemIndex( aViewIndex );
+ }
+ else
+ {
+ index = aViewIndex;
+ }
+ }
+ return index;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::RealIndexes
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::RealIndexes( CArrayFix<TInt>& aList ) const
+ {
+ TInt i;
+ TInt j;
+ TInt index;
+ TInt count = aList.Count();
+ for ( i = 0, j = 0; i < count; i++ )
+ {
+ index = RealIndex( aList.At ( i ) );
+ if ( index != KErrNotFound )
+ {
+ aList.At( j++ ) = index;
+ }
+ }
+ if ( j < count )
+ {
+ // Not all indexes were converted. Delete the trailing rubbish.
+ aList.Delete( j, count - j );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SelectionFlags
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesListbox::SelectionFlags
+( const CFavouritesItem& aItem ) const
+ {
+ TInt flags = 0;
+ if ( aItem.IsItem() )
+ {
+ switch ( aItem.Uid() )
+ {
+ case KFavouritesHomepageUid:
+ {
+ flags |=
+ TBrowserFavouritesSelectionState::EAny |
+ TBrowserFavouritesSelectionState::EHomepage |
+ TBrowserFavouritesSelectionState::EItem;
+ break;
+ }
+
+ case KFavouritesStartPageUid:
+ {
+ flags |=
+ TBrowserFavouritesSelectionState::EAny |
+ TBrowserFavouritesSelectionState::EStartPage |
+ TBrowserFavouritesSelectionState::EItem;
+ break;
+ }
+
+ case KFavouritesLastVisitedUid:
+ {
+ flags |=
+ TBrowserFavouritesSelectionState::EAny |
+ TBrowserFavouritesSelectionState::ELastVisited |
+ TBrowserFavouritesSelectionState::EItem;
+ break;
+ }
+
+ default:
+ {
+ flags |=
+ TBrowserFavouritesSelectionState::EAny |
+ TBrowserFavouritesSelectionState::EPlainItem |
+ TBrowserFavouritesSelectionState::EItem;
+ break;
+ }
+ }
+ }
+ else
+ {
+ flags |=
+ TBrowserFavouritesSelectionState::EAny |
+ TBrowserFavouritesSelectionState::EFolder;
+ }
+ return flags;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::TheModel
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxModel*
+CBrowserFavouritesListbox::TheModel() const
+ {
+ return REINTERPRET_CAST( CBrowserFavouritesListboxModel*, Model() );
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::HandleResourceChange( TInt aType )
+ {
+ CAknSingleGraphicStyleListBox::HandleResourceChange( aType );
+ if ( aType == KAknsMessageSkinChange )
+ {
+ CArrayPtr<CGulIcon>* array =
+ ItemDrawer()->ColumnData()->IconArray();
+
+ array->ResetAndDestroy();
+ delete array;
+
+ CAknIconArray* iconArray = NULL;
+ TRAPD( err,
+ iconArray = iIconHandler->CreateIconArrayL()
+ )
+
+ if ( !err )
+ {
+ ItemDrawer()->ColumnData()->SetIconArray( iconArray );
+ iFaviconHandler->UpdateIconArray(ItemDrawer()->ColumnData()->IconArray());
+ SetSkinUpdated(ETrue);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::SetSkinUpdated
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::SetSkinUpdated(TBool aSkinUpdated)
+ {
+ iSkinUpdated = aSkinUpdated;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListbox::ItalicizeRowItemL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListbox::ItalicizeRowItemL(TInt aRowIndex)
+ {
+ if (ItemDrawer() && ItemDrawer()->ColumnData() && iFontItalic)
+ {
+ ItemDrawer()->ColumnData()->SetColumnFontForRowL( aRowIndex, 1, iFontItalic );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListboxIconHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of MWmlBrowserFavouritesListboxIconHandler.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <AknIconArray.h>
+#include <favouritesitem.h>
+#include "BrowserFavouritesListboxIconHandler.h"
+#include "BrowserFavouritesIconIndexArray.h"
+#include "BrowserFavouritesListbox.h"
+#include "BrowserFaviconHandler.h"
+
+// CONSTANTS
+
+//================== MEMBER FUNCTIONS =========================================
+
+//-----------------------------------------------------------------------------
+// MBrowserFavouritesListboxIconHandler::CreateIconArrayL
+//-----------------------------------------------------------------------------
+//
+CAknIconArray* MBrowserFavouritesListboxIconHandler::CreateIconArrayL() const
+ {
+ return LoadIconsL( );
+ }
+
+//-----------------------------------------------------------------------------
+// MBrowserFavouritesListboxIconHandler::IconIndexes
+//-----------------------------------------------------------------------------
+//
+TBrowserFavouritesIconIndexes
+ MBrowserFavouritesListboxIconHandler::IconIndexes(
+ const CFavouritesItem& aItem,
+ CBrowserFavouritesListbox* aListbox ) const
+ {
+ TBrowserFavouritesIconIndexes indexes;
+
+ // Do we have a Favicon?
+ TInt faviconIndex;
+ faviconIndex = aListbox->FaviconHandler()->GetFaviconArrayIndex( aItem );
+
+ if ( faviconIndex != KErrNotFound && aListbox->GetDefaultData().iPreferedId != aItem.Uid() )
+ {
+ indexes.iItemIcon = faviconIndex;
+ }
+ else
+ {
+ indexes.iItemIcon = ItemIconIndex( aItem,aListbox );
+ }
+
+ indexes.iBearerIcon = KBrowserFavouritesNoBearerIcon; //Bearer icons removed
+ return indexes;
+ }
+
+//-----------------------------------------------------------------------------
+// MBrowserFavouritesListboxIconHandler::BearerIconIndex
+//-----------------------------------------------------------------------------
+//
+TInt MBrowserFavouritesListboxIconHandler::BearerIconIndex(
+ const TFavouritesWapAp /*aAccessPoint*/,
+ const CApListItemList& /*aAccessPoints*/
+ ) const
+ {
+ return KBrowserFavouritesNoBearerIcon;
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListboxItemDrawer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserFavouritesListboxItemDrawer.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "BrowserFavouritesListboxItemDrawer.h"
+#include "BrowserFavouritesListboxModel.h"
+#include <favouritesitemlist.h>
+#include <favouritesitem.h>
+
+//================== MEMBER FUNCTIONS =========================================
+
+//-----------------------------------------------------------------------------
+// CBrowserFavouritesListboxItemDrawer::CBrowserFavouritesListboxItemDrawer
+//-----------------------------------------------------------------------------
+//
+CBrowserFavouritesListboxItemDrawer::CBrowserFavouritesListboxItemDrawer
+ (
+ MTextListBoxModel* aTextListBoxModel,
+ const CFont* aFont,
+ CColumnListBoxData* aColumnData
+ )
+ : CColumnListBoxItemDrawer( aTextListBoxModel, aFont, aColumnData )
+ {
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserFavouritesListboxItemDrawer::Properties
+//-----------------------------------------------------------------------------
+//
+TListItemProperties CBrowserFavouritesListboxItemDrawer::Properties(
+ TInt aItemIndex ) const
+ {
+ CAknListBoxFilterItems *filter =
+ STATIC_CAST(CAknFilteredTextListBoxModel*,iModel)->Filter();
+ if ( filter )
+ {
+ aItemIndex = filter->FilteredItemIndex( aItemIndex );
+ }
+ TListItemProperties properties =
+ CColumnListBoxItemDrawer::Properties( aItemIndex );
+
+ // SEARCH CUSTOM: Updated below for Italics in bookmarks view
+ // Selection of Folders is allowed, so no need to set it as Hidden.
+ // if ( STATIC_CAST( CBrowserFavouritesListboxModel*, iModel ) ->
+ // Items()->At( aItemIndex )->IsFolder() )
+ // {
+ // // If this is a folder, set "hidden selection" true.
+ // properties.SetHiddenSelection( ETrue );
+ // }
+
+
+ //Better solution would be adding italics properties to CFavouritesItem, but it requires changes in FavouritesEngine API
+ CFavouritesItem* fi = STATIC_CAST( CBrowserFavouritesListboxModel*, iModel ) ->
+ Items()->At( aItemIndex );
+ if ( fi->ContextId() == KFavouritesServiceContextId )
+ {
+ properties.SetItalics(ETrue);
+ }
+ return properties;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListboxModel.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesListboxModel.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <eiklbx.h>
+#include <calslbs.h>
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include "BrowserFavouritesListboxModel.h"
+#include "BrowserFavouritesIconIndexArray.h"
+#include "BrowserUtil.h"
+
+// ================= LOCAL FUNCTIONS =======================
+
+/**
+* Copy aSOurce to aTarget, replacing TAB characters with spaces.
+* @param aSource Source descriptor.
+* @param aTarget Target descriptor.
+*/
+LOCAL_C void RemoveTabs( const TDesC& aSource, TDes& aTarget )
+ {
+ TChar ch;
+ TInt i;
+ TInt length = aSource.Length();
+ // Initialize target to empty string.
+ aTarget.SetLength( 0 );
+ // Copy source to target, replace whitespace with space.
+ for ( i = 0; i < length; i++ )
+ {
+ ch = aSource[i];
+ if ( ch == '\t' )
+ {
+ ch = ' ';
+ }
+ aTarget.Append( ch );
+ }
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+// ====== TBrowserFavouritesListboxFilterTextArray =======
+
+// ---------------------------------------------------------
+// TBrowserFavouritesListboxItemTextArray::MdcaCount
+// ---------------------------------------------------------
+//
+TInt TBrowserFavouritesListboxItemTextArray::MdcaCount() const
+ {
+ return iItems->Count();
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesListboxItemTextArray::MdcaPoint
+// ---------------------------------------------------------
+//
+TPtrC TBrowserFavouritesListboxItemTextArray::MdcaPoint
+( TInt aIndex ) const
+ {
+ // Sorry, need to cast away the const-ness from the buffer.
+ // It was made definitely for formatting! Odd that this method
+ // is const.
+ CFavouritesItem* item = iItems->At( aIndex );
+ TBrowserFavouritesIconIndexes iconIndexes = iIconIndexes->At( aIndex );
+
+ TBuf<KFavouritesMaxName> name;
+
+ RemoveTabs( item->Name(), name );
+
+ if ( iconIndexes.iBearerIcon == KBrowserFavouritesNoBearerIcon )
+ {
+ _LIT( KFormatNoBearer, "%d\t%S\t\t" );
+ MUTABLE_CAST( TBuf<KMaxFavouritesItemListboxName>&, iBuf
+ ). //lint !e665 expression macro param ok
+ Format
+ (
+ KFormatNoBearer,
+ iconIndexes.iItemIcon,
+ &name
+ );
+ }
+ else
+ {
+ _LIT( KFormatWithBearer, "%d\t%S\t%d\t" );
+ MUTABLE_CAST( TBuf<KMaxFavouritesItemListboxName>&, iBuf
+ ). //lint !e665 expression macro param ok
+ Format
+ (
+ KFormatWithBearer,
+ iconIndexes.iItemIcon,
+ &name,
+ iconIndexes.iBearerIcon
+ );
+ }
+ return iBuf;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+// ====== TBrowserFavouritesListboxFilterTextArray =======
+
+// ---------------------------------------------------------
+// TBrowserFavouritesListboxFilterTextArray::MdcaCount
+// ---------------------------------------------------------
+//
+TInt TBrowserFavouritesListboxFilterTextArray::MdcaCount() const
+ {
+ return iItems->Count();
+ }
+
+// ---------------------------------------------------------
+// TBrowserFavouritesListboxFilterTextArray::MdcaPoint
+// ---------------------------------------------------------
+//
+TPtrC TBrowserFavouritesListboxFilterTextArray::MdcaPoint
+( TInt aIndex ) const
+ {
+ return iItems->At( aIndex )->Name();
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+// =========== CBrowserFavouritesListboxModel ============
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::NewL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxModel* CBrowserFavouritesListboxModel::NewL
+ (
+ const CFavouritesItemList& aItems,
+ const CBrowserFavouritesIconIndexArray& aIconIndexes
+ )
+ {
+ CBrowserFavouritesListboxModel* model =
+ new (ELeave) CBrowserFavouritesListboxModel( aItems, aIconIndexes );
+ CleanupStack::PushL( model );
+ model->ConstructL();
+ CleanupStack::Pop(); // model
+ return model;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::SetItemArray
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListboxModel::SetItemArray()
+ {
+ // Need to set them after the listbox has been constructed; otherwise
+ // listbox construction will reset the item text array to NULL.
+ SetItemTextArray( &iItemTexts );
+ SetOwnershipType( ELbmDoesNotOwnItemArray );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::~CBrowserFavouritesListboxModel
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxModel::~CBrowserFavouritesListboxModel()
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::SetData
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListboxModel::SetData
+ (
+ const CFavouritesItemList& aItems,
+ const CBrowserFavouritesIconIndexArray& aIconIndexes
+ )
+ {
+ iItems = &aItems;
+ iIconIndexes = &aIconIndexes;
+ __ASSERT_DEBUG( iItems->Count() == iIconIndexes->Count(), \
+ Util::Panic( Util::EFavouritesBadIconIndexArray ) );
+ // Propagate data to formatting classes.
+ iItemTexts.iItems = iItems;
+ iItemTexts.iIconIndexes = iIconIndexes;
+ iFilterTexts.iItems = iItems;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::MatchableTextArray
+// ---------------------------------------------------------
+//
+const MDesCArray* CBrowserFavouritesListboxModel::MatchableTextArray() const
+ {
+ return &iFilterTexts;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::CBrowserFavouritesListboxModel
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxModel::CBrowserFavouritesListboxModel
+ (
+ const CFavouritesItemList& aItems,
+ const CBrowserFavouritesIconIndexArray& aIconIndexes
+ )
+: CAknFilteredTextListBoxModel(), iItems( &aItems ),
+ iIconIndexes( &aIconIndexes )
+ {
+ __ASSERT_DEBUG( iItems->Count() == iIconIndexes->Count(), \
+ Util::Panic( Util::EFavouritesBadIconIndexArray ) );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxModel::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListboxModel::ConstructL()
+ {
+ // Propagate data to formatting classes.
+ iItemTexts.iItems = iItems;
+ iItemTexts.iIconIndexes = iIconIndexes;
+ iFilterTexts.iItems = iItems;
+ // Base class method already called by listbox. Nasty buggy mess.
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListboxState.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CWmlBrowserFavouritesListboxState.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesListboxState.h"
+#include <favouriteslimits.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxState::CBrowserFavouritesListboxState
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxState::CBrowserFavouritesListboxState()
+ {
+ iHighlightUid = KFavouritesNullUid;
+ iTopItemUid = KFavouritesNullUid;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxState::~CBrowserFavouritesListboxState
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxState::~CBrowserFavouritesListboxState()
+ {
+ delete iMarkUids;
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListboxView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesListboxView.
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "BrowserFavouritesListboxView.h"
+#include "BrowserFavouritesListboxCursorObserver.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxView::CBrowserFavouritesListboxView
+// ---------------------------------------------------------
+//
+CBrowserFavouritesListboxView::CBrowserFavouritesListboxView
+( CEikListBox& aListbox ): iListbox( &aListbox )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxView::SetCursorMoveObserver
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListboxView::SetCursorObserver
+( MBrowserFavouritesListboxCursorObserver* aCursorObserver )
+ {
+ iCursorObserver = aCursorObserver;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxView::MoveCursorL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListboxView::MoveCursorL
+( CListBoxView::TCursorMovement aCursorMovement,
+ TSelectionMode aSelectionMode )
+ {
+ CAknColumnListBoxView::MoveCursorL( aCursorMovement, aSelectionMode );
+ if ( iCursorObserver )
+ {
+ iCursorObserver->HandleCursorChangedL( iListbox );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesListboxView::UpdateSelectionL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesListboxView::UpdateSelectionL
+( TSelectionMode aSelectionMode )
+ {
+ CAknColumnListBoxView::UpdateSelectionL( aSelectionMode );
+ if ( iCursorObserver )
+ {
+ iCursorObserver->HandleCursorChangedL( iListbox );
+ }
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesModel.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1081 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesModel.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknviewappui.h>
+#include <Avkon.hrh>
+#include <AknForm.h> // This contains CAknDialog
+#include <AknQueryDialog.h>
+#include <favouritesdb.h>
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include <favouriteslimits.h>
+#include <activefavouritesdbnotifier.h>
+#include <BrowserNG.rsg>
+
+#include "BrowserFavouritesModel.h"
+#include "BrowserFavouritesModelObserver.h"
+#include "BrowserUtil.h"
+#include "BrowserDialogs.h"
+#include <browserdialogsprovider.h>
+#include "BrowserFavouritesView.h"
+
+#include "Browser.hrh"
+
+#include <FeatMgr.h>
+#include <collate.h> // TCollateMethod
+#include "CommonConstants.h"
+
+
+// MACROS
+
+/// Cosmetic purpose macro (resource names are overly too long).
+#define _R(str) R_BROWSER_FAVOURITES_ ## str
+
+/// Time to wait before retry database OpenL() or BeginL() (==0.2 secs).
+#ifdef KRetryWait
+#undef KRetryWait
+#endif
+#define KRetryWait 200 /*TTimeIntervalMicroSeconds32*/
+
+// CONSTANTS
+
+/// Granularity of observer array.
+LOCAL_C const TInt KGranularityObservers = 4;
+
+/// Number of attempts to retry after unsuccesful database OpenL() or BeginL().
+LOCAL_C const TInt KLocalRetryCount = 2;
+
+/**
+* Estimated number of bytes in FFS for one writing operation. This amount
+* is checked to be available before each transaction which places write-lock.
+* Exact size is not known (because what happens in a transaction is unknown).
+* A typical bookmark is estimated to be less than ~200 bytes; so assuming the
+* typical operation of adding one bookmark (with database transaction
+* overhead and safety) is estimated to be 400 bytes. This should be a safe
+* guess.
+*/
+LOCAL_C const TInt KEstimatedFfsUsage = 400;
+
+// ==================== LOCAL FUNCTIONS ====================
+
+/**
+* Comparison function for two items.
+* Comparison rule:
+* - Start Page is smaller than anything else;
+* - otherwise, Homepage is smaller than anything else;
+* - otherwise, Last Visited is smaller than anything else;
+* - otherwise, any item is smaller than any folder;
+* - otherwise, Root Folder is smaller than any other;
+* - otherwise compare by name.
+* @param aLeft item to compare to aRight.
+* @param aRight Item to compare to aLeft.
+* @return
+* - negative value, if aLeft is less than aRight;
+* - 0, if aLeft equals to aRight;
+* - positive value, if aLeft is greater than aRight.
+*/
+LOCAL_C TInt CompareItemsL
+( const CFavouritesItem& aLeft, const CFavouritesItem& aRight )
+ {
+ // Start Page is smaller than anything else;
+ if ( aLeft.Uid() == KFavouritesStartPageUid )
+ {
+ return -1;
+ }
+ if ( aRight.Uid() == KFavouritesStartPageUid )
+ {
+ return 1;
+ }
+ // otherwise, Adaptive Bookmarks is smaller than anything else;
+ if ( aLeft.Uid() == KFavouritesAdaptiveItemsFolderUid )
+ {
+ return -1;
+ }
+ if ( aRight.Uid() == KFavouritesAdaptiveItemsFolderUid )
+ {
+ return 1;
+ }
+ // otherwise, Homepage is smaller than anything else;
+ if ( aLeft.Uid() == KFavouritesHomepageUid )
+ {
+ return -1;
+ }
+ if ( aRight.Uid() == KFavouritesHomepageUid )
+ {
+ return 1;
+ }
+ // otherwise, Last Visited is smaller than anything else;
+ if ( aLeft.Uid() == KFavouritesLastVisitedUid )
+ {
+ return -1;
+ }
+ if ( aRight.Uid() == KFavouritesLastVisitedUid )
+ {
+ return 1;
+ }
+ // otherwise, any item is smaller than any folder;
+ if ( aLeft.IsItem() && aRight.IsFolder() )
+ {
+ return -1;
+ }
+ if ( aRight.IsItem() && aLeft.IsFolder() )
+ {
+ return 1;
+ }
+ // otherwise, Root Folder is smaller than any other;
+ if ( aLeft.Uid() == KFavouritesRootUid )
+ {
+ return -1;
+ }
+ // otherwise, Null ContextId is smaller than any ContextId;
+ if ( aLeft.ContextId() == KFavouritesNullContextId && aRight.ContextId() != KFavouritesNullContextId )
+ {
+ return -1;
+ }
+ if ( aRight.ContextId() == KFavouritesNullContextId && aLeft.ContextId() != KFavouritesNullContextId )
+ {
+ return 1;
+ }
+ // otherwise compare by name.
+ return aLeft.Name().CompareC( aRight.Name() );
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::~CBrowserFavouritesModel
+// ---------------------------------------------------------
+//
+CBrowserFavouritesModel::~CBrowserFavouritesModel()
+ {
+ delete iNotifier;
+ iNotifier = NULL;
+ delete iObservers;
+ CloseDb();
+ iFavouritesSess.Close();
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::SetNameToDefaultL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::SetNameToDefaultL
+( CFavouritesItem& aItem ) const
+ {
+ HBufC* name = CCoeEnv::Static()->AllocReadResourceLC
+ ( StringResourceId( aItem, EDefaultName ) );
+ aItem.SetNameL( *name );
+ CleanupStack::PopAndDestroy(); // name
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::OpenDbL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::OpenDbL( TBool aDbErrorNote /*=ETrue*/ )
+ {
+ TInt err = KErrNone;
+
+ switch ( iState )
+ {
+ case EOpen:
+ {
+ // Already open.
+ break;
+ }
+
+ case ECorrupt:
+ {
+ // Useless.
+ err = KErrNotReady;
+ break;
+ }
+
+ case EClosed:
+ {
+ // Try to open now.
+ err = TimedOpenDbL();
+ if ( err )
+ {
+ // Failed to open.
+ if ( aDbErrorNote )
+ {
+ TBrowserDialogs::ErrorNoteL
+ ( _R(TEXT_CANNOT_ACCESS_DB) );
+ }
+ }
+ else
+ {
+ // Success opening.
+ iState = EOpen;
+ iNotifier->Start();
+ }
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::CloseDb
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::CloseDb()
+ {
+ if ( iNotifier )
+ {
+ // Need to check existence - ConstructL can leave half the way!
+ iNotifier->Cancel();
+ }
+ if ( iState == EOpen )
+ {
+ iDb.Close();
+ }
+ iState = EClosed;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::BeginL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::BeginL
+( TBool aWrite, TBool aDbErrorNote, TBool aLffsCheck /*=ETrue*/ )
+ {
+ TInt err;
+
+ // Before attempting db modification, check if we would go below Critical
+ // Level in FFS (disk). The value used for checking is an estimate.
+ // Reading the db also allocates some bytes (transaction log), but
+ // this is not estimated and not checked, because it should be small
+ // enough, and would slow down operation. (Typical use is to read a lot
+ // and write much less.)
+ if (
+ aLffsCheck &&
+ aWrite &&
+ Util::FFSSpaceBelowCriticalLevelL
+ ( /*aShowErrorNote=*/aDbErrorNote, KEstimatedFfsUsage )
+ )
+ {
+ err = KErrDiskFull;
+ return err;
+ }
+
+ // Open database.
+ err = OpenDbL( /*aDbErrorNote=*/EFalse ); // Error note (if any) is here.
+ // Start a transaction.
+ if ( !err )
+ {
+ err = TimedBeginL( aWrite );
+ }
+
+ if ( err && aDbErrorNote )
+ {
+ TBrowserDialogs::ErrorNoteL( _R(TEXT_CANNOT_ACCESS_DB) );
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::CommitL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::CommitL()
+ {
+ iDb.Commit();
+ CleanupStack::Pop(); // DO NOT remove this hack.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::AddObserverL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::AddObserverL
+( MBrowserFavouritesModelObserver& aObserver )
+ {
+ iObservers->AppendL( &aObserver );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::RemoveObserver
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::RemoveObserver
+( MBrowserFavouritesModelObserver& aObserver )
+ {
+ TInt i;
+ TInt count = iObservers->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( iObservers->At( i ) == &aObserver )
+ {
+ iObservers->Delete( i );
+ return;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::AddL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::AddL
+ (
+ CFavouritesItem& aItem,
+ TBool aDbErrorNote,
+ CBrowserFavouritesModel::TRenameMode aRenameMode /*=EAskIfRename*/
+ )
+ {
+ return AddUpdateL( aItem, KFavouritesNullUid, aDbErrorNote, aRenameMode );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::UpdateL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::UpdateL
+ (
+ CFavouritesItem& aItem,
+ TInt aUid,
+ TBool aDbErrorNote,
+ CBrowserFavouritesModel::TRenameMode aRenameMode /*=EAskIfRename*/
+ )
+ {
+ return AddUpdateL( aItem, aUid, aDbErrorNote, aRenameMode );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::SetHomepageL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::SetHomepageL
+ (
+ CFavouritesItem& aItem,
+ TBool aDbErrorNote,
+ CBrowserFavouritesModel::TRenameMode aRenameMode /*=EAskIfRename*/
+ )
+ {
+ return AddUpdateL
+ ( aItem, KFavouritesHomepageUid, aDbErrorNote, aRenameMode );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::SetLastVisitedL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::SetLastVisitedL
+ (
+ CFavouritesItem& aItem,
+ TBool aDbErrorNote,
+ CBrowserFavouritesModel::TRenameMode aRenameMode /*=EAskIfRename*/
+ )
+ {
+ return AddUpdateL
+ ( aItem, KFavouritesLastVisitedUid, aDbErrorNote, aRenameMode );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::AnyFoldersL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesModel::TDbQuery CBrowserFavouritesModel::AnyFoldersL()
+ {
+ TDbQuery ret = EError;
+ if ( BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue ) == KErrNone )
+ {
+ TInt count = 0;
+ if ( iDb.Count( count, KFavouritesRootUid, CFavouritesItem::EFolder )
+ == KErrNone )
+ {
+ ret = count ? EYes : ENo;
+ }
+ CommitL();
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::AnyNonEmptyFoldersL
+// ---------------------------------------------------------
+//
+CBrowserFavouritesModel::TDbQuery
+CBrowserFavouritesModel::AnyNonEmptyFoldersL( CArrayFix<TInt>& aUids )
+ {
+ TDbQuery ret = EError;
+ if ( BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue ) == KErrNone )
+ {
+ ret = ENo;
+ TInt itemCount;
+ TInt i;
+ TInt uidCount = aUids.Count();
+ for ( i = 0; i < uidCount; i++ )
+ {
+ if ( iDb.Count( itemCount, aUids.At( i ) ) == KErrNone )
+ {
+ if ( itemCount )
+ {
+ // We have a non-empty folder.
+ ret = EYes;
+ break;
+ }
+ }
+ else
+ {
+ // Error querying; quit.
+ ret = EError;
+ break;
+ }
+ }
+ CommitL();
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::FolderInfoL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::FolderInfoL
+( TInt aFolder, TInt& aFolderCount, TInt& aFolderIndex )
+ {
+ TInt err = KErrNotFound;
+
+ if(iApiProvider.CalledFromAnotherApp())
+ {
+ err = KErrNone;
+ aFolderIndex = 0;
+ aFolderCount = 1;
+ return err;
+ }
+
+ CFavouritesItemList* folders = GetFoldersSortedLC();
+ // Iterate until we find the folder.
+ TInt i;
+ TInt actualCount = 0;
+ aFolderCount = actualCount = folders->Count();
+ for ( i = 0; i < actualCount; i++ )
+ {
+ if(folders->At( i )->IsHidden())
+ {
+ aFolderCount--;
+ }
+ if ( folders->At( i )->Uid() == aFolder )
+ {
+ aFolderIndex = i;
+ err = KErrNone;
+ }
+ }
+ if(aFolderIndex > aFolderCount)
+ {
+ aFolderIndex += (aFolderCount - actualCount);
+ }
+ CleanupStack::PopAndDestroy(); // folders
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::NextFolderL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::NextFolderL( TInt aFolder, TBool aForward )
+ {
+ if ( AknLayoutUtils::LayoutMirrored() )
+ {
+ aForward = !aForward;
+ }
+ TInt folder = KFavouritesNullUid;
+
+ if(iApiProvider.CalledFromAnotherApp())
+ {
+ return folder;
+ }
+
+ CFavouritesItemList* folders = GetFoldersSortedLC();
+ // Iterate until we find the folder.
+ TInt i;
+ TInt count = folders->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ if ( folders->At( i )->Uid() == aFolder )
+ {
+ i += aForward ? 1 : -1;
+ if ( i >= 0 && i < count )
+ {
+ // Have the neighbour.
+ folder = folders->At( i )->Uid();
+
+ while(folders->At( i )->IsHidden())
+ {
+ i += aForward ? 1 : -1;
+ if ( i < 0 || i >= count )
+ {
+ folder = KFavouritesNullUid;
+ break;
+ }
+ else
+ {
+ // Have the neighbour.
+ folder = folders->At( i )->Uid();
+ }
+ }
+ }
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // folders
+ return folder;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::RenameQueryL
+// ---------------------------------------------------------
+//
+TBool CBrowserFavouritesModel::RenameQueryL( CFavouritesItem& aItem, TBool aNewItem )
+ {
+ TBool ret = EFalse;
+ TBuf<KFavouritesMaxName> buf = aItem.Name();
+ CAknTextQueryDialog* dialog = CAknTextQueryDialog::NewL( buf );
+ dialog->PrepareLC( _R(NAME_QUERY_OK_CANCEL) );
+ dialog->SetPredictiveTextInputPermitted(ETrue);
+ HBufC* prompt;
+ if ( aNewItem )
+ {
+ prompt =
+ StringLoader::LoadLC( StringResourceId( aItem, ENewPrompt ) );
+ }
+ else
+ {
+ prompt =
+ StringLoader::LoadLC( StringResourceId( aItem, ERenamePrompt ) );
+ }
+ dialog->SetPromptL( *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ TInt button = dialog->RunLD();
+ if ( button )
+ {
+ aItem.SetNameL( buf.Left(KFavouritesMaxName) );
+ ret = ETrue;
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::SortL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::SortL( CFavouritesItemList& aList )
+ {
+ TBuf<KFavouritesMaxName> name;
+ TInt i;
+ TInt count = aList.Count();
+
+ TInt resId = 0;
+
+ for ( i = 0; i < count; i++ )
+ {
+ resId = CBrowserFavouritesView::GetSeamlessFolderResourceID(
+ aList.At(i)->ContextId() );
+
+ if(resId) // a seamless link folder. Get the localised name.
+ {
+ HBufC* seamlessLinkName = CCoeEnv::Static()->AllocReadResourceLC( resId );
+ name = seamlessLinkName->Des();
+ CleanupStack::PopAndDestroy(); // seamlessLinkName
+ aList.At( i )->SetNameL( name );
+ }
+ }
+
+ aList.SortL( &CompareItemsL );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::MakeUniqueNameL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::MakeUniqueNameL
+( CFavouritesItem& aItem )
+ {
+ TInt err = BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue );
+ if ( !err )
+ {
+ err = iDb.MakeUniqueName( aItem );
+ CommitL();
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::HandleFavouritesDbEventL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::HandleFavouritesDbEventL
+( RDbNotifier::TEvent aEvent )
+ {
+ switch ( aEvent )
+ {
+ case RDbNotifier::ECommit:
+ {
+ // Database has changed, notify observers.
+ NotifyObserversL();
+ break;
+ }
+
+ case RDbNotifier::ERollback:
+ {
+ // Database corrupted, close now and wait until everyone closes it.
+ iState = ECorrupt;
+ iDb.Close();
+ // But keep the notifier alive.
+ break;
+ }
+
+ case RDbNotifier::EClose:
+ {
+ // Database is closed by all clients.
+ if ( iState == ECorrupt )
+ {
+ // Database was closed by the model (by damage), not the user.
+ // Try to reopen it now; that will recover it.
+ iState = EClosed;
+ iNotifier->Cancel();
+ if ( OpenDbL( /*aDbErrorNote=*/EFalse ) == KErrNone )
+ {
+ // Succesfully reopened. Data may have changed.
+ NotifyObserversL();
+ }
+ }
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::CBrowserFavouritesModel
+// ---------------------------------------------------------
+//
+CBrowserFavouritesModel::CBrowserFavouritesModel( MApiProvider& aApiProvider )
+ :
+ iApiProvider( aApiProvider )
+ {
+ iState = EClosed;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::ConstructL()
+ {
+ iObservers = new (ELeave) CArrayPtrFlat<MBrowserFavouritesModelObserver>
+ ( KGranularityObservers );
+ iNotifier = new (ELeave) CActiveFavouritesDbNotifier( iDb, *this );
+ User::LeaveIfError( iFavouritesSess.Connect() );
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::TimedOpenDbL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::TimedOpenDbL()
+ {
+ TInt retriesLeft = KLocalRetryCount;
+ TInt err = ( iDb.Open( iFavouritesSess, GetDBName() ));
+ while ( err && retriesLeft-- )
+ {
+ User::After( KRetryWait );
+ err = ( iDb.Open( iFavouritesSess, GetDBName() ));
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::GetDBName
+// ---------------------------------------------------------
+//
+const TDesC& CBrowserFavouritesModel::GetDBName()
+ {
+ //should be overridden by bookmarks model
+ return KBrowserSavedPages; //default value
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::TimedBeginL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::TimedBeginL( TBool /*aWrite*/ )
+ {
+ TInt retriesLeft = KLocalRetryCount;
+ TInt err = iDb.Begin();
+ if ( err == KErrNone )
+ {
+ iDb.CleanupRollbackPushL();
+ }
+ while ( err && retriesLeft-- )
+ {
+ err = iDb.Begin() ;
+ if ( err == KErrNone )
+ {
+ iDb.CleanupRollbackPushL();
+ }
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::AddUpdateL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesModel::AddUpdateL
+ (
+ CFavouritesItem& aItem,
+ TInt aUid,
+ TBool aDbErrorNote,
+ TRenameMode aRenameMode
+ )
+ {
+ TBool done = EFalse;
+ TInt err = KErrNone;
+
+ while ( !done )
+ {
+ err = BeginL( /*aWrite=*/ETrue, aDbErrorNote );
+ if ( err )
+ {
+ // Database error.
+ done = ETrue;
+ }
+ else
+ {
+ // Database OK, try to add/update item...
+ switch ( aUid )
+ {
+ {
+ case KFavouritesHomepageUid:
+ // Homepage update.
+ err = iDb.SetHomepage( aItem );
+ break;
+ }
+
+ case KFavouritesLastVisitedUid:
+ {
+ // Last Visited update.
+ err = iDb.SetLastVisited( aItem );
+ break;
+ }
+
+ case KFavouritesNullUid:
+ default:
+ {
+ // Check first if the item added has the same name as any of the special folders
+
+ TBool itemExists = EFalse;
+ if (aItem.Type() == CFavouritesItem::EFolder)
+ {
+ #ifdef __RSS_FEEDS
+ HBufC* webFeedsBuf = StringLoader::LoadLC( R_BROWSER_APPS_FEEDS_LIST );
+ TPtrC webFeeds = webFeedsBuf->Des();
+ if(CompareIgnoreCase(aItem.Name(),webFeeds))
+ {
+ itemExists = ETrue;
+ }
+ CleanupStack::PopAndDestroy();
+ #endif
+
+ if ( ( ADAPTIVEBOOKMARKS ) &&
+ ( iApiProvider.Preferences().AdaptiveBookmarks() ==
+ EWmlSettingsAdaptiveBookmarksOn ))
+ {
+ HBufC* recentUrlsBuf = StringLoader::LoadLC( R_BROWSER_ADAPTIVE_BOOKMARKS_FOLDER);
+ TPtrC recentUrls = recentUrlsBuf->Des();
+ if(CompareIgnoreCase(aItem.Name(),recentUrls))
+ {
+ itemExists = ETrue;
+ }
+ CleanupStack::PopAndDestroy();
+ }
+ }
+
+ if (( itemExists ) && (aItem.Type() == CFavouritesItem::EFolder))
+ {
+ err = KErrAlreadyExists;
+ }
+ else
+ {
+ // New item addition.
+ if ( aUid == KFavouritesNullUid)
+ err = iDb.Add( aItem, aRenameMode == EAutoRename );
+ else // Existing item update.
+ err = iDb.Update( aItem, aUid, aRenameMode == EAutoRename );
+ }
+ break;
+ }
+ }
+ CommitL();
+
+ // ...and see the outcome.
+ switch( err )
+ {
+ case KErrNone:
+ {
+ // All is well.
+ done = ETrue;
+ break;
+ }
+ case KErrAlreadyExists:
+ {
+ // The name is conflicting.
+ switch ( aRenameMode )
+ {
+ case EAutoRename:
+ {
+ // We should never get here;
+ // this is handled by the Engine's AutoRename.
+ __ASSERT_DEBUG( EFalse, Util::Panic\
+ ( Util::EFavouritesInternal ) );
+ done = ETrue;
+ break;
+ }
+ case EDontRename:
+ {
+ // No rename is needed.
+ // Return with KErrAlreadyExists.
+ done = ETrue;
+ break;
+ }
+ case EAskIfRename:
+ default:
+ {
+ // Prompt the user for new name.
+ // Retry with new name, or return if Cancelled.
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_FLDR_NAME_ALREADY_USED),
+ aItem.Name()
+ );
+ done = !RenameQueryL( aItem, EFalse );
+ break;
+ }
+ }
+ break;
+ }
+ case KErrPathNotFound:
+ {
+ // The name is conflicting.
+ switch ( aRenameMode )
+ {
+ case EAutoRename:
+ {
+ // We should never get here;
+ // this is handled by the Engine's AutoRename.
+ __ASSERT_DEBUG( EFalse, Util::Panic\
+ ( Util::EFavouritesInternal ) );
+ done = ETrue;
+ break;
+ }
+ case EDontRename:
+ {
+ // No rename is needed.
+ // Return with KErrAlreadyExists.
+ done = ETrue;
+ break;
+ }
+ case EAskIfRename:
+ default:
+ {
+ // Prompt the user for new name.
+ // Retry with new name, or return if Cancelled.
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R( TEXT_PRMPT_ILLEGAL_CHAR ),
+ aItem.Name()
+ );
+ done = !RenameQueryL( aItem, EFalse );
+ break;
+ }
+ }
+ break;
+ }
+
+ case KErrNotFound:
+ {
+ // Update leaved with KErrNotFound meaning someone deleted entry while it was edited
+ // Add entry as new item instead.
+ if (aUid != KFavouritesNullUid)
+ {
+ aUid = KFavouritesNullUid;
+ }
+ break;
+ }
+
+ default:
+ {
+ // Some error; quit.
+ done = ETrue;
+ break;
+ }
+ }
+ }
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::GetFoldersSortedLC
+// ---------------------------------------------------------
+//
+CFavouritesItemList* CBrowserFavouritesModel::GetFoldersSortedLC()
+ {
+ CFavouritesItemList* folders = new (ELeave) CFavouritesItemList();
+ CleanupStack::PushL( folders );
+ // Get all folders.
+ iDb.GetAll( *folders, KFavouritesRootUid, CFavouritesItem::EFolder );
+ // Sort folders,
+ folders->SortL( &CompareItemsL );
+ return folders;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::NotifyObserversL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::NotifyObserversL()
+ {
+ TInt i;
+ TInt count = iObservers->Count();
+ for ( i = 0; i < count; i++ )
+ {
+ iObservers->At( i )->HandleFavouritesModelChangeL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksModel::ManualSortL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::ManualSortL(TInt aFolder, CBrowserBookmarksOrder* aBMOrder, CArrayFixFlat<TInt>* aOrderArray, CFavouritesItemList* aItems)
+ {
+ if ( Database().GetData( aFolder ,*aBMOrder ) == KErrNone)
+ {
+ if( aOrderArray->Count() )
+ {
+ TInt swapTo = 0;
+ CFavouritesItem* swappedItem = CFavouritesItem::NewL();
+ CleanupStack::PushL(swappedItem);
+ for ( TInt i=0; i<aOrderArray->Count();i++ )
+ {
+ TInt swapFrom = aItems->UidToIndex( ( *aOrderArray )[i] );
+ if (swapFrom != KErrNotFound)
+ {
+ if ((swapFrom != swapTo) && (swapTo < aItems->Count() ) )
+ {
+ (*swappedItem) = *( *aItems )[swapFrom];
+ *( *aItems )[swapFrom] = *( *aItems )[swapTo];
+ *( *aItems )[swapTo] = (*swappedItem);
+ }
+ swapTo++;
+ }
+ }
+ CleanupStack::PopAndDestroy(swappedItem);
+ }
+ else
+ {
+ SortL(*aItems);
+ }
+ }
+ else
+ {
+ SortL(*aItems);
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::AddUidToLastPlaceL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesModel::AddUidToLastPlaceL(
+ TInt aUid,
+ CArrayFixFlat<TInt>* aOrderArray,
+ CBrowserBookmarksOrder* aCurrentOrder )
+ {
+ if( aCurrentOrder )
+ {
+ TInt index(0);
+ if( aOrderArray->Count() )
+ {
+ index = aOrderArray->Count();
+ }
+ aOrderArray->InsertL( index , aUid );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::OpenFavouritesFile
+// ---------------------------------------------------------
+//
+
+TInt CBrowserFavouritesModel::OpenFavouritesFile ( RFavouritesFile & aFavFile, TInt aUid )
+{
+return aFavFile.Open( iDb, aUid );
+}
+
+// ---------------------------------------------------------
+// CBrowserFavouritesModel::ReplaceFavouritesFile
+// ---------------------------------------------------------
+//
+
+TInt CBrowserFavouritesModel::ReplaceFavouritesFile ( RFavouritesFile & aFavFile, TInt aUid )
+{
+return aFavFile.Replace( iDb, aUid );
+}
+
+// ---------------------------------------------------------------------------
+// CBrowserFavouritesModel::CompareIgnoreCase
+// Compare two descriptors
+// ---------------------------------------------------------------------------
+//
+TBool CBrowserFavouritesModel::CompareIgnoreCase( const TDesC& aFirst,
+ const TDesC& aSecond )
+ {
+ // Get the standard method
+ TCollationMethod meth = *Mem::CollationMethodByIndex( 0 );
+ meth.iFlags |= TCollationMethod::EFoldCase;
+ meth.iFlags |= TCollationMethod::EIgnoreNone;
+
+ // Magic: Collation level 3 is used
+ return aFirst.CompareC( aSecond, 3, &meth ) == 0;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserFavouritesView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1856 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CBrowserFavouritesView.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknappui.h>
+#include <akntitle.h>
+#include <eikenv.h>
+#include <eikspane.h>
+
+#include <aknsfld.h>
+#include <eikbtgpc.h>
+#include <eikmenub.h>
+#include <aknviewappui.h>
+#include <Avkon.hrh>
+#include <Uikon.hrh>
+#include <eikmenup.h>
+#include <AknForm.h>
+#include <AknQueryDialog.h>
+#include <BrowserNG.rsg>
+#include <avkon.rsg>
+#include <favouriteslimits.h>
+#include <favouritesdb.h>
+#include <favouritesitem.h>
+#include <favouritesitemlist.h>
+#include <internetconnectionmanager.h>
+#include <FeatMgr.h>
+#include <centralrepository.h>
+#include <nifman.h>
+
+#include "BrowserUiPrivateCRKeys.h"
+#include "BrowserUtil.h"
+#include "BrowserDialogs.h"
+#include "BrowserFavouritesView.h"
+#include "BrowserFavouritesFolderSelector.h"
+#include "BrowserFavouritesContainer.h"
+#include "BrowserFavouritesListbox.h"
+#include "BrowserFavouritesListboxState.h"
+#include "BrowserFavouritesModel.h"
+#include "Browser.hrh"
+#include "BrowserAppUi.h"
+#include "BrowserApplication.h"
+#include "BrowserFavouritesIncrementalDelete.h"
+#include "BrowserFavouritesIncrementalMove.h"
+#include "BrowserUIVariant.hrh"
+#include "BrowserWindowManager.h"
+#include "CommandVisibility.h"
+#include "CommonConstants.h"
+#include "CommsModel.h"
+#include "Display.h"
+#include "Preferences.h"
+#include "logger.h"
+
+#include "eikon.hrh"
+
+
+// MACROS
+
+/**
+* Defining this macro shows "Unmark all", even if nothing is marked (except
+* if there are no items at all).
+*/
+//#define SHOW_UNMARK_ALL_ALWAYS
+/**
+* Defining this macro shows "Mark all", even if all is marked (except
+* if there are no items at all).
+*/
+//#define SHOW_MARK_ALL_ALWAYS
+
+/// Cosmetic purpose macro (resource names are overly too long).
+#define _R(str) R_BROWSER_FAVOURITES_ ## str
+
+// CONSTANTS
+/// Granularity of Uid lists used in managing multiple bookmarks.
+LOCAL_C const TInt KGranularityUids = 4;
+
+/// Estimated FFS overhead for deleting (in bytes).
+LOCAL_C const TInt KEstimatedDeleteFfsOverhead = 16 * 1024;
+
+// ==================== LOCAL FUNCTIONS ====================
+
+/**
+* Create a new empty list for Uids and push it on the cleanup stack.
+* @return The constructed empty list.
+*/
+LOCAL_C CArrayFix<TInt>* NewUidListLC()
+ {
+ // Not inline - go for size, not speed.
+ CArrayFixFlat<TInt>* list;
+ list = new (ELeave) CArrayFixFlat<TInt> ( KGranularityUids );
+ CleanupStack::PushL( list );
+ return list;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::~CBrowserFavouritesView
+// ---------------------------------------------------------
+//
+CBrowserFavouritesView::~CBrowserFavouritesView()
+ {
+ delete iFavViewRefresh;
+ delete iIncrementalOp;
+ delete iContainer;
+ delete iModel;
+ delete iSavedListboxState;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserFavouritesView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CBrowserFavouritesView::CommandSetResourceIdL()
+ {
+ // for 5.0, BrowserBookmarksView takes over cba-assignment duties
+ // this function should not be called. We now route though BrowserBookmarksView.
+ return R_AVKON_SOFTKEYS_EMPTY;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleCommandL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleCommandL( TInt aCommand )
+ {
+ switch ( aCommand )
+ {
+ case EWmlCmdBackFromFolder:
+ {
+ if ( ApiProvider().IsEmbeddedModeOn() )
+ {
+ AppUi()->HandleCommandL( EWmlCmdCloseBrowser );
+ }
+ else
+ {
+ CloseCurrentFolderL();
+ }
+ break;
+ }
+
+ case EWmlCmdOpenFolder:
+ {
+ OpenCurrentFolderL();
+ break;
+ }
+
+ case EWmlCmdOpenMarkedFolder:
+ {
+ OpenMarkedFolderL();
+ break;
+ }
+
+ case EWmlCmdFavourites:
+ {
+ ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ break;
+ }
+
+ case EWmlCmdMark:
+ case EWmlCmdUnmark:
+ case EWmlCmdMarkAll:
+ case EWmlCmdUnmarkAll:
+ {
+ iContainer->Listbox()->HandleMarkableListCommandL( aCommand );
+ iContainer->HandleCursorChangedL( iContainer->Listbox() );
+ UpdateCbaL();
+ break;
+ }
+
+ case EWmlCmdDelete:
+ {
+ DeleteMarkedItemsL();
+ break;
+ }
+
+ case EWmlCmdNewFolder:
+ {
+ (void)AddNewFolderL();
+ break;
+ }
+
+ case EWmlCmdMoveToFolder:
+ {
+ MoveMarkedItemsL();
+ break;
+ }
+
+
+ case EWmlCmdRename:
+ {
+ RenameCurrentItemL();
+ break;
+ }
+
+ case EWmlCmdSetPreferredBookmark:
+ {
+ SetPreferedCurrentItemL();
+ break;
+ }
+
+ case EWmlCmdSetUnPreferredBookmark:
+ {
+ SetUnPreferedCurrentItemL();
+ break;
+ }
+
+ case EWmlCmdPreferences:
+ {
+ iSaveStateOnDeactivate = ETrue;
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ default :
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFavouritesView::CBrowserFavouritesView
+// ----------------------------------------------------------------------------
+//
+CBrowserFavouritesView::CBrowserFavouritesView( MApiProvider& aApiProvider,
+ TInt aInitialFolderId )
+ : CBrowserViewBase( aApiProvider ),
+ iPreferredHighlightUid( KFavouritesNullUid ),
+ iShowOkOptions( EFalse ),
+ iCurrentFolder( aInitialFolderId ),
+ iIsActivated( EFalse ),
+ iLastSelection( 0 ),
+ iUpdatePending( EFalse ),
+ iFavViewRefresh(0),
+ iRefresh( ETrue )
+
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::ConstructL( TInt aViewResourceId )
+ {
+ BaseConstructL( aViewResourceId );
+ iModel = CreateModelL();
+ iInitialFolder = iCurrentFolder;
+ // Ap model cannot be created without opening it; so that's not done here.
+ // DoActivateL / DoDecativateL does that.
+ Cba()->MakeVisible(EFalse); // avoid multiple redraws
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::GetItemsLC
+// ---------------------------------------------------------
+//
+CFavouritesItemList* CBrowserFavouritesView::GetItemsLC( TInt aFolder )
+ {
+ CFavouritesItemList* items = new (ELeave) CFavouritesItemList();
+ CleanupStack::PushL( items );
+ iModel->Database().GetAll( *items, aFolder );
+ iModel->SortL( *items );
+ return items;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::GetSeamlessFolderResourceID
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesView::GetSeamlessFolderResourceID( TInt aContextID )
+ {
+ TInt resId = 0;
+
+ switch( aContextID ) // Check if the item is a seamless link folder
+ {
+ case KFavouritesApplicationContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_DOWNLOAD_APPLICATIONS;
+ break;
+ }
+ case KFavouritesImageContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_DOWNLOAD_IMAGES;
+ break;
+ }
+ case KFavouritesAudioContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_DOWNLOAD_TONES;
+ break;
+ }
+ case KFavouritesVideoContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_DOWNLOAD_VIDEOS;
+ break;
+ }
+ case KFavouritesSkinContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_DOWNLOAD_SKINS;
+ break;
+ }
+ case KFavouritesMusicContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_DOWNLOAD_MUSIC;
+ break;
+ }
+ case KFavouritesServiceContextId:
+ {
+ resId = R_IS_RECOMMENDATIONS;
+ break;
+ }
+ default:
+ {
+ break; // not a seamless link folder.
+ }
+ }
+
+ return resId;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::GetSeamlessFolderTitleResourceID
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesView::GetSeamlessFolderTitleResourceID( TInt aContextID )
+ {
+ TInt resId = 0;
+
+ switch( aContextID ) // Check if the item is a seamless link folder
+ {
+ case KFavouritesApplicationContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_TITLE_DOWNLOAD_APPLICATIONS;
+ break;
+ }
+ case KFavouritesImageContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_TITLE_DOWNLOAD_IMAGES;
+ break;
+ }
+ case KFavouritesAudioContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_TITLE_DOWNLOAD_TONES;
+ break;
+ }
+ case KFavouritesVideoContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_TITLE_DOWNLOAD_VIDEOS;
+ break;
+ }
+ case KFavouritesSkinContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_TITLE_DOWNLOAD_SKINS;
+ break;
+ }
+ case KFavouritesMusicContextId:
+ {
+ resId = R_BROWSERBM_FOLDER_TITLE_DOWNLOAD_MUSIC;
+ break;
+ }
+ default:
+ {
+ break; // not a seamless link folder.
+ }
+ }
+
+ return resId;
+ }
+
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::IsSeamlessFolder
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesView::IsSeamlessFolder( TInt aContextID )
+ {
+ return GetSeamlessFolderResourceID( aContextID ) != 0 ? ETrue : EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HighlightPreferredL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HighlightPreferredL()
+ {
+ if (( iContainer->Listbox()->HighlightUidNow( iPreferredHighlightUid ) ) &&
+ ( iPreferredHighlightUid != KFavouritesNullUid ))
+ {
+ // Have a preferred uid...
+ // Successfully highlighted; clear preferred now.
+ iPreferredHighlightUid = KFavouritesNullUid;
+ iContainer->HandleCursorChangedL( iContainer->Listbox() );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::RefreshL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::RefreshL( TBool aDbErrorNote /*=EFalse*/ )
+ {
+ // Do the refresh only if activated; otherwise ignore.
+ // (This is a sanity-check like functionality, but is really used.
+ // Bookmarks View observes changes in active and default AP-s, even if
+ // not activated (and tries to refresh); but this "activated-check" is
+ // made here, not in Bookmarks View, because it makes things more safe and
+ // "future-proof".)
+ if ( iIsActivated )
+ {
+ iUpdatePending = ETrue;
+ if ( !iIncrementalOp )
+ {
+ // During an incremental operation we should never do the update
+ // and refill the listbox because some of the operations holds
+ // pointers to listbox items. Update is pending then.
+ if ( iModel->BeginL( /*aWrite=*/EFalse, aDbErrorNote ) ==
+ KErrNone )
+ {
+ TInt folderExists;
+ iModel->Database().FolderExists( iCurrentFolder, folderExists );
+ if ( folderExists )
+ {
+ // Current folder is still OK. Refresh.
+ FillListboxL( iCurrentFolder, /*aKeepState=*/ETrue );
+ }
+ else
+ {
+ // Cannot access current folder (maybe deleted).
+ // Go to root.
+ OpenFolderL( KFavouritesRootUid );
+ }
+ iModel->CommitL();
+ iUpdatePending = EFalse;
+ }
+ // iUpdatePending stays ETrue if unsuccessful.
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::DoActivateL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::DoActivateL(
+ const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ iPreviousViewID = ApiProvider().LastActiveViewId( );
+ ApiProvider().SetLastActiveViewId( Id() );
+ ApiProvider().CommsModel().AddObserverL( *this );
+ iContainer = CreateContainerL(); // can this be created during construct ?
+ iModel->AddObserverL( *this );
+ AppUi()->AddToViewStackL( *this, iContainer );
+
+ ApiProvider().StartProgressAnimationL();
+
+ if ( iModel->BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue )
+ == KErrNone )
+ {
+ // Disable redraw to avoid flickering.
+ // (OpenFolderL and the listbox's SetStateL both
+ // wants to redraw the listbox. Do it once only.)
+ TBool redrawDisabled =
+ iContainer->Listbox()->View()->RedrawDisabled();
+ iContainer->Listbox()->View()->SetDisableRedraw( ETrue );
+ // Open folder first.
+ OpenFolderL( iCurrentFolder );
+ iModel->CommitL();
+
+ // Now set back redraw and draw the listbox.
+ if ( (iLastSelection >=0 ))
+ {
+ if ( iLastSelection > iContainer->Listbox()->BottomItemIndex() )
+ {
+ iLastSelection = 0;
+ }
+ iContainer->Listbox()->SetCurrentItemIndex( iLastSelection );
+ }
+
+ iContainer->Listbox()->View()->SetDisableRedraw( redrawDisabled );
+ iContainer->Listbox()->DrawDeferred();
+ }
+ else
+ {
+ // No folder is opened; update CBA and Navi Pane now.
+ if ( iLastSelection >=0 )
+ {
+ iContainer->Listbox()->SetCurrentItemIndex( iLastSelection );
+ UpdateGotoPaneL();
+ }
+ UpdateCbaL();
+ UpdateNaviPaneL();
+ }
+
+ if (iSavedListboxState)
+ {
+ iContainer->Listbox()->SetStateL(*iSavedListboxState);
+ }
+ iIsActivated = ETrue;
+
+#ifndef BRDO_PERF_IMPROVEMENTS_ENABLED_FF
+ // TODO: Remove this crapy refresh once favicon callback interface
+ // with engine is implemented.
+ if(!iFavViewRefresh)
+ iFavViewRefresh = CIdle::NewL( CActive::EPriorityIdle );
+ iFavViewRefresh ->Start( TCallBack( RefeshFavoriteListBox, this ) );
+#endif
+ }
+
+
+TInt CBrowserFavouritesView::RefeshFavoriteListBox(TAny* aFavouritesView)
+ {
+ __ASSERT_DEBUG(aFavouritesView, Util::Panic( Util::EUninitializedData ));
+ TRAP_IGNORE(
+ ((CBrowserFavouritesView*)aFavouritesView)->RefreshL();
+ );
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFavouritesView::ResetStateInDeActivation
+// ----------------------------------------------------------------------------
+//
+void CBrowserFavouritesView::ResetStateInDeActivation()
+ {
+ //Set iLastSelection to zero if there will be a folder change
+ if ( iCurrentFolder != iInitialFolder )
+ {
+ iLastSelection = 0;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::DoDeactivate
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::DoDeactivate()
+ {
+ iIsActivated = EFalse;
+ TRAP_IGNORE(ApiProvider().StopProgressAnimationL());
+
+ if(iFavViewRefresh)
+ {
+ iFavViewRefresh->Cancel();
+ }
+
+ if ( iContainer )
+ {
+ iLastSelection = iContainer->Listbox()->CurrentItemIndex();
+ }
+
+ if ( !iSaveStateOnDeactivate )
+ {
+ ResetStateInDeActivation(); // entering root directory
+ iSaveStateOnDeactivate = EFalse;
+ }
+ else
+ {
+ CBrowserFavouritesListboxState *temp = NULL;
+ TInt err( KErrNone );
+ TInt tempUid( KFavouritesNullUid );
+
+ temp = new CBrowserFavouritesListboxState;
+ if ( iContainer && temp!=NULL )
+ {
+ delete iSavedListboxState;
+ iSavedListboxState = temp;
+ // folder might be empty, no CurrentItem at all
+ if ( iContainer->Listbox()->CurrentItem() )
+ {
+ tempUid = iContainer->Listbox()->CurrentItem()->Uid();
+ }
+ iSavedListboxState->iHighlightUid = tempUid;
+ TRAP( err, {
+ iSavedListboxState->iMarkUids = iContainer->Listbox()->MarkedUidsLC();
+ CleanupStack::Pop(); // Uid list; ownership is now in the state.
+ } )
+ }
+ if ( !err )
+ {
+ iSavedListboxState->iTopItemUid = tempUid;
+ }
+ else
+ {
+ delete iSavedListboxState;
+ }
+ }
+
+ if ( !ApiProvider().ExitInProgress() )
+ {
+ ApiProvider().CommsModel().RemoveObserver( *this );
+ }
+ iModel->RemoveObserver( *this );
+
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ iModel->CloseDb();
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleClientRectChange
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleClientRectChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::DynInitMenuPaneL
+( TInt aResourceId, CEikMenuPane* aMenuPane )
+ {
+ if ( iContainer && iContainer->Listbox() )
+ {
+ TBrowserFavouritesSelectionState state =
+ iContainer->Listbox()->SelectionStateL();
+ TCommandVisibility::TIndex index =
+ TCommandVisibility::Index( state, iShowOkOptions );
+ DynInitMenuPaneL( aResourceId, aMenuPane, index, state );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleForegroundEventL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleForegroundEventL( TBool aForeground )
+ {
+ // If another thread made changes to database, sometimes we could not
+ // refresh when the notifcation comes in (most likely the other thread
+ // closes the database and that performs an automatic compact(?)).
+ // When coming foreground, check for missed updates.
+ // Also, when coming to foreground Refresh if Skin has changed
+ if ( aForeground && (iUpdatePending || iContainer->Listbox()->IsSkinUpdated()))
+ {
+ RefreshL();
+ if (iContainer->Listbox()->IsSkinUpdated())
+ {
+ iContainer->Listbox()->SetSkinUpdated(EFalse);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleListBoxEventL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleListBoxEventL
+( CEikListBox* aListBox, MEikListBoxObserver::TListBoxEvent aEventType )
+ {
+ if ( aListBox == iContainer->Listbox() )
+ {
+ switch ( aEventType )
+ {
+ case MEikListBoxObserver::EEventEnterKeyPressed:
+ case MEikListBoxObserver::EEventItemDoubleClicked:
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ case MEikListBoxObserver::EEventItemSingleClicked:
+#endif
+ {
+ if ( iContainer->Listbox()->CurrentItem() )
+ {
+ if ( iContainer->Listbox()->CurrentItem()->IsFolder() )
+ {
+ OpenCurrentFolderL();
+ }
+ }
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::CloseCurrentFolderL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::CloseCurrentFolderL()
+ {
+ if ( iCurrentFolder != KFavouritesRootUid )
+ {
+ // Folders are one level deep. Closing any folder takes us to root.
+ if ( iModel->BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue )
+ == KErrNone )
+ {
+ if ( iContainer && iContainer->Listbox() )
+ {
+ // After closing, the highlight should be
+ // on the folder just being closed.
+ iPreferredHighlightUid = iCurrentFolder;
+ OpenFolderL( KFavouritesRootUid );
+ }
+ iModel->CommitL();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::OpenCurrentFolderL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::OpenCurrentFolderL()
+ {
+ if ( iContainer && iContainer->Listbox() )
+ {
+ const CFavouritesItem* folder =
+ iContainer->Listbox()->CurrentItem();
+ if ( folder && folder->IsFolder() )
+ {
+ if ( iModel->BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue )
+ == KErrNone )
+ {
+ OpenFolderL( folder->Uid() );
+ iModel->CommitL();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::OpenMarkedFolderL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::OpenMarkedFolderL()
+ {
+ if ( iContainer && iContainer->Listbox() )
+ {
+ const CFavouritesItem* folder =
+ iContainer->Listbox()->MarkedItemL();
+ if ( folder && folder->IsFolder() )
+ {
+ if ( iModel->BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue )
+ == KErrNone )
+ {
+ OpenFolderL( folder->Uid() );
+ iModel->CommitL();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::DeleteMarkedItemsL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::DeleteMarkedItemsL()
+ {
+ CArrayPtr<const CFavouritesItem>* items =
+ iContainer->Listbox()->SelectedItemsLC();
+ // Permormance optimization: keep a separate list for folders.
+ // (Make the "non-empty folder" check only for folders; this speeds up
+ // things considerably when many items are selected.)
+ CArrayFix<TInt>* uids = NewUidListLC();
+ CArrayFix<TInt>* folderUids = NewUidListLC();
+ TInt i;
+ TInt count = items->Count();
+ const CFavouritesItem* item = NULL;
+
+ for ( i = 0; i < count; i++ )
+ {
+ item = items->At( i );
+ uids->AppendL( item->Uid() );
+ if ( item->IsFolder() )
+ {
+ folderUids->AppendL( item->Uid() );
+ }
+ }
+ // Cannot delete the "items" pointer list, as other objects were pushed
+ // after it. But DO NOT USE it after this point! The call to ConfirmDeleteL
+ // allows other active objects to run, and the listbox may be updated.
+ // If listbox is updated, all pointers in "items" point to deleted objects.
+
+ if ( ConfirmDeleteL( *uids, *folderUids ) )
+ {
+
+ if (count ==1)
+ {
+ CFavouritesItemList* allItems = GetItemsLC( KFavouritesRootUid );
+ item = items->At(0);
+ iPreferredHighlightUid = item->Uid();
+ TInt index = allItems->UidToIndex(iPreferredHighlightUid);
+ index++;
+ if (allItems->IndexToUid(index) != NULL)
+ {
+ iPreferredHighlightUid = allItems->IndexToUid(index);
+ }
+ else
+ {
+ iPreferredHighlightUid = allItems->IndexToUid(index-2);
+ }
+ CleanupStack::PopAndDestroy(); //allItems
+ }
+
+
+ CArrayFix<TInt>* notDeletedUids = NewUidListLC();
+
+ // OOD handling. If disk space is low, we try to get some spare.
+
+ CRepository* repository = CRepository::NewL( KCRUidBrowser );
+
+ TBool diskLow = Util::FFSSpaceBelowCriticalLevelL
+ ( /*aShowErrorNote=*/EFalse, KEstimatedDeleteFfsOverhead );
+ if ( diskLow )
+ {
+ // Using disk space requests is not supported by CenRep.
+ delete repository;
+ }
+
+ if ( !iModel->BeginL
+ (
+ /*aWrite=*/ETrue,
+ /*aDbErrorNote=*/ETrue,
+ /*aLffsCheck=*/EFalse
+ )
+ )
+ {
+ __ASSERT_DEBUG( !iIncrementalOp, Util::Panic
+ ( Util::EIncrementalOperationAlreadyRunning ) );
+ // Seems we have to give lower priority to the delete operation,
+ // or else the wait note does not show up.
+ iIncrementalOp = CBrowserFavouritesIncrementalDelete::NewL
+ (
+ *iModel,
+ *uids,
+ *notDeletedUids,
+ CActive::EPriorityStandard - 1
+ );
+ iIncrementalOp->ExecuteL();
+ delete iIncrementalOp;
+ iIncrementalOp = NULL;
+ iModel->CommitL();
+
+ if ( diskLow )
+ {
+ // Compact database now.
+ iModel->Database().Compact();
+ // Make a manual refresh. When we get notification about the
+ // commit, database is most likely busy with compact, and
+ // the refresh is missed.
+ RefreshL();
+ }
+
+ // Everything that can be deleted, is deleted by now.
+ // Let the user know the outcome.
+ DisplayResultOfDeleteL( *uids, *notDeletedUids );
+ // Refresh the view only in embedded mode because in standalone mode Refresh is called by
+ // HandleFavouritesModelChangeL causing the view to refresh twice and lose the cursor position
+ if ( ApiProvider().IsEmbeddedModeOn() )
+ {
+ RefreshL();
+ }
+ }
+
+ for ( TInt ii = 0; ii< uids->Count(); ii++ )
+ {
+ TInt prefUid;
+ iModel->Database().PreferredUid( iCurrentFolder, prefUid );
+ if ( prefUid == uids->At( ii ) )
+ {
+ iModel->Database().SetPreferredUid( iCurrentFolder,NULL );
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // notDeletedUids
+ }
+ CleanupStack::PopAndDestroy( 3 ); // folderUids, uids, items
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::AddNewFolderL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesView::AddNewFolderL()
+ {
+ TInt uid = KFavouritesNullUid;
+ // Make an item and fill it with default values.
+ CFavouritesItem* folder = CFavouritesItem::NewLC();
+ folder->SetType( CFavouritesItem::EFolder );
+ folder->SetParentFolder( KFavouritesRootUid );
+ iModel->SetNameToDefaultL( *folder );
+ TInt err = iModel->MakeUniqueNameL( *folder );
+ if ( !err )
+ {
+ // We have the folder with a default unique name.
+ // Let the user rename it.
+ if ( iModel->RenameQueryL( *folder, ETrue ))
+ {
+ // Rename accepted.
+ err = iModel->AddL( *folder, /*aDbErrorNote=*/ETrue,
+ CBrowserFavouritesModel::EAskIfRename );
+ if ( !err )
+ {
+ // Succesfully created. Set highlight to new folder (by setting
+ // preferred highlight uid - we have not see the new folder
+ // yet, until db notification kicks in.
+ uid = iPreferredHighlightUid = folder->Uid();
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(); // folder
+ return uid;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::MoveMarkedItemsL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::MoveMarkedItemsL()
+ {
+ TInt targetFolder = SelectTargetFolderL( iCurrentFolder );
+
+ // If we have the target folder, do the move.
+ if ( targetFolder != KFavouritesNullUid )
+ {
+ CArrayFix<TInt>* uids = iContainer->Listbox()->SelectedUidsLC();
+ CArrayFix<TInt>* unmovableUids = NewUidListLC();
+ CArrayFix<TInt>* conflictingNameUids = NewUidListLC();
+ if ( !iModel->BeginL( /*aWrite=*/ETrue, /*aDbErrorNote=*/ETrue ) )
+ {
+ __ASSERT_DEBUG( !iIncrementalOp, Util::Panic
+ ( Util::EIncrementalOperationAlreadyRunning ) );
+ // Seems we have to give lower priority to the move operation,
+ // or else the wait note does not show up.
+ iIncrementalOp = CBrowserFavouritesIncrementalMove::NewL
+ (
+ *iModel,
+ *uids,
+ *unmovableUids,
+ *conflictingNameUids,
+ targetFolder,
+ CActive::EPriorityStandard - 1
+ );
+ iIncrementalOp->ExecuteL();
+ delete iIncrementalOp;
+ iIncrementalOp = NULL;
+ iModel->CommitL();
+ // Everything that can be moved, is moved by now.
+ // If some items could not be moved, see why.
+ HandleMoveResultL
+ ( targetFolder, *uids, *unmovableUids, *conflictingNameUids );
+
+ for ( TInt ii = 0; ii< uids->Count(); ii++ )
+ {
+ TInt prefUid;
+ iModel->Database().PreferredUid( iCurrentFolder, prefUid );
+ if ( prefUid == uids->At( ii ) )
+ {
+ iModel->Database().SetPreferredUid( iCurrentFolder,NULL );
+ break;
+ }
+ }
+
+ CBrowserBookmarksOrder* bmOrder = CBrowserBookmarksOrder::NewLC();
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>(KGranularityHigh);
+ CleanupStack::PushL( orderArray );
+ if ( Model().Database().GetData( CurrentFolder() ,*bmOrder ) == KErrNone)
+ {
+ if ( bmOrder->GetBookMarksOrder().Count() )
+ {
+ orderArray->AppendL( &( bmOrder->GetBookMarksOrder()[0] ), bmOrder->GetBookMarksOrder().Count());
+ TInt swapTo = 0;
+ TInt swappedItem;
+ for ( TInt i=0; i<orderArray->Count();i++ )
+ {
+ TInt swapFrom=0;
+ while (swapFrom<uids->Count() && ( (*uids)[swapFrom] != ( *orderArray )[i]) )
+ {
+ swapFrom++;
+ }
+ if (swapFrom<uids->Count())
+ {
+ if ((swapFrom != swapTo) && (swapTo < uids->Count() ) )
+ {
+ swappedItem = ( *uids )[swapFrom];
+ ( *uids )[swapFrom] = ( *uids )[swapTo];
+ ( *uids )[swapTo] = swappedItem;
+ }
+ swapTo++;
+ }
+ }
+ }
+ }
+
+ orderArray->Reset();
+ if ( Model().Database().GetData( targetFolder ,*bmOrder ) == KErrNone)
+ {
+ if ( bmOrder->GetBookMarksOrder().Count() )
+ {
+ orderArray->AppendL( &( bmOrder->GetBookMarksOrder()[0] ), bmOrder->GetBookMarksOrder().Count());
+ if ( orderArray->Count() )
+ {
+ for ( TInt i = 0; i < uids->Count(); i++ )
+ {
+ for (TInt j = 0; j < orderArray->Count(); j++ )
+ {
+ if ( orderArray->At( j ) == uids->At( i ))
+ {
+ orderArray->Delete( j );
+ }
+ }
+ Model().AddUidToLastPlaceL(uids->At( i ), orderArray, bmOrder);
+ }
+ bmOrder->SetBookMarksOrderL( *orderArray );
+ Model().Database().SetData( targetFolder , *bmOrder );
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( ); //orderArray
+ CleanupStack::PopAndDestroy( ); //bmOrder
+ }
+ CleanupStack::PopAndDestroy( 3 ); // conflictingNameUids,
+ // unmovableUids, uids
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::RenameCurrentItemL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::RenameCurrentItemL()
+ {
+ if ( iContainer && iContainer->Listbox() )
+ {
+ const CFavouritesItem* listboxItem =
+ iContainer->Listbox()->CurrentItem();
+ if ( listboxItem )
+ {
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ *item = *listboxItem;
+ if ( iModel->RenameQueryL( *item, EFalse ) )
+ {
+ iModel->UpdateL
+ (
+ *item,
+ listboxItem->Uid(),
+ /*aDbErrorNote=*/ETrue,
+ CBrowserFavouritesModel::EAskIfRename
+ );
+
+ iPreferredHighlightUid = item->Uid();
+
+ // Show infonote "Unable to rename" if read-only item
+ if ( listboxItem->IsReadOnly() )
+ {
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_PRMPT_CANT_RENAME),
+ listboxItem->Name()
+ );
+ }
+ }
+ CleanupStack::PopAndDestroy(); // item
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::SetRootFolderForAdaptiveBookmarks
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::SetRootFolderForAdaptiveBookmarks()
+ {
+ iCurrentFolder = KFavouritesRootUid;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::OpenFolderL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::OpenFolderL( TInt aFolder )
+ {
+
+ CFavouritesItem* folder = CFavouritesItem::NewLC();
+ if ( iModel->Database().Get( aFolder, *folder ) == KErrNone )
+ {
+ iContainer->Listbox()->GetDefaultData().iPreferedId = NULL;
+ iContainer->Listbox()->GetDefaultData().iInSeamlessFolder = EFalse;
+ // Set title.
+ if ( aFolder == KFavouritesRootUid )
+ {
+ UpdateNaviPaneL(); // remove NaviPane before setting title - SetTitleL redraws
+ if(ApiProvider().StartedUp())
+ ApiProvider().Display().SetTitleL( RootTitleResourceId() );
+ else
+ {
+ // Set title to be page title
+ CEikStatusPane* sp = STATIC_CAST( CAknAppUi*, CEikonEnv::Static()->EikAppUi() )->StatusPane();
+ CAknTitlePane* title = STATIC_CAST( CAknTitlePane*, sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ HBufC* name = CEikonEnv::Static()->AllocReadResourceLC( R_BROWSER_OPTION_BOOKMARKS );
+ title->SetTextL( *name );
+ CleanupStack::PopAndDestroy(); // name
+ }
+ }
+ else
+ {
+ // Next get localized title text if the folder is a seamless link folder.
+ TInt resId = CBrowserFavouritesView::GetSeamlessFolderTitleResourceID(
+ folder->ContextId() );
+ HBufC* name;
+
+ if (resId)
+ {
+ iContainer->Listbox()->GetDefaultData().iInSeamlessFolder = ETrue;
+ TInt prefUid;
+ iModel->Database().PreferredUid( aFolder, prefUid );
+ iContainer->Listbox()->GetDefaultData().iPreferedId = prefUid;
+ name = iCoeEnv->AllocReadResourceLC( resId );
+ folder->SetNameL(name->Des()); // set the localized name
+ CleanupStack::PopAndDestroy(); // name
+ }
+
+ ApiProvider().Display().SetTitleL( folder->Name() );
+ }
+
+ iCurrentFolder = aFolder;
+ FillListboxL( aFolder, /*aKeepState=*/EFalse );
+
+ if(ApiProvider().StartedUp())
+ {
+ Container()->Listbox()->ClearSelection();
+ UpdateCbaL();
+ }
+
+ UpdateNaviPaneL();
+ }
+ CleanupStack::PopAndDestroy(); // folder
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::OpenNextFolderL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::OpenNextFolderL( TBool aForward )
+ {
+ __ASSERT_DEBUG( iCurrentFolder != KFavouritesRootUid,
+ Util::Panic( Util::ERootLevel ) );
+
+ if ( iModel->BeginL( /*aWrite=*/EFalse, /*aDbErrorNote=*/ETrue )
+ == KErrNone )
+ {
+ TInt nextFolder = iModel->NextFolderL( iCurrentFolder, aForward );
+ if ( nextFolder != KFavouritesNullUid )
+ {
+ OpenFolderL( nextFolder );
+ }
+ iModel->CommitL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::FillListboxL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::FillListboxL( TInt aFolder, TBool aKeepState )
+ {
+ // During an incremental operation we should never update the listbox
+ // because some of them holds pointers to listbox items.
+ //
+ // If we have an incremental operation, we should never get here:
+ // 1) Any change notification (faves db, ap db, preferences) handling is
+ // skipped in RefreshL, where all change handling comes
+ // together.
+ // 2) All incremental operations have an empty CBA, so we cannot get here
+ // by user input either.
+ // But to make this safe from potential errors (e.g. user activity due to
+ // some error in wait notes, CBA, key handling etc., and also from bugs in
+ // this code), we double-check here.
+ // In release build do nothing (avoid the crash), in debug build panic.
+ if ( iIncrementalOp )
+ {
+#ifdef _DEBUG
+ Util::Panic( Util::ECannotUpdateDataInUse );
+#else
+ return;
+#endif
+ }
+
+ CBrowserFavouritesListbox* listbox = iContainer->Listbox();
+
+ // Disable redraw to avoid flickering.
+ TBool redrawDisabled = listbox->View()->RedrawDisabled();
+ listbox->View()->SetDisableRedraw( ETrue );
+
+ // Change the data.
+ CFavouritesItemList* items = GetItemsLC( aFolder );
+
+ // Next take localized item names for seamless links.
+ TInt contextId;
+ TInt resId = 0;
+ HBufC* name;
+
+ TBool browserService = ApiProvider().Preferences().ServiceFeature();
+ TBool firstBoot = ApiProvider().Preferences().GetIntValue( KBrowserFirstBoot );
+ TInt serviceUid = KErrNotFound;
+
+ for(int i=0; i<items->Count(); i++)
+ {
+ if (!items->At(i)->IsHidden())
+ {
+ contextId = items->At(i)->ContextId();
+
+ if ( firstBoot && browserService )
+ {
+ //This is the first boot and we need to move Service top of the bookmarks.
+ //Here we save uid for Service item.
+ if ( contextId == KFavouritesServiceContextId )
+ {
+ serviceUid = items->IndexToUid( i );
+ }
+ }
+
+ resId = CBrowserFavouritesView::GetSeamlessFolderResourceID(
+ contextId );
+ if(resId)
+ {
+ name = iCoeEnv->AllocReadResourceLC( resId );
+ items->At(i)->SetNameL(name->Des());
+ CleanupStack::PopAndDestroy(); // name
+ }
+ }
+ else
+ {
+ items->Delete(i);
+ i--;
+ }
+ }
+
+ if ( firstBoot && browserService && serviceUid != KErrNotFound )
+ {
+ //get current order array
+ CBrowserBookmarksOrder* currentOrder = CBrowserBookmarksOrder::NewLC();
+ CArrayFixFlat<TInt>* orderArray = new (ELeave) CArrayFixFlat<TInt>( KGranularityHigh );
+ CleanupStack::PushL( orderArray );
+
+ iModel->Database().GetData( KFavouritesRootUid, *currentOrder );
+ orderArray->AppendL( &( currentOrder->GetBookMarksOrder()[0] ), currentOrder->GetBookMarksOrder().Count());
+
+ //First sort UI. Move Service
+ CFavouritesItem* serviceCopy = CFavouritesItem::NewLC();
+ const CFavouritesItem* serviceItem = items->ItemByUid( serviceUid );
+ if ( serviceItem )
+ {
+ *serviceCopy = *serviceItem;
+ items->Delete( serviceUid );
+ items->InsertL( 0, serviceCopy ); //ownership transfered
+ CleanupStack::Pop( serviceCopy );
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ //Next change order in db. Move Service
+ orderArray->InsertL( 0, orderArray->At( serviceUid ) );
+ orderArray->Delete( serviceUid+1 );
+
+ //save changes to db
+ currentOrder->SetBookMarksOrderL( *orderArray );
+ iModel->Database().SetData( KFavouritesRootUid, *currentOrder );
+
+ CleanupStack::PopAndDestroy( 2 ); //orderArray, currentOrder
+ //service moved to top of the bookmark list. We can set firstboot value to false
+ // so now we can set firstboot value to false.
+ CRepository* repository = CRepository::NewLC( KCRUidBrowser );
+ User::LeaveIfError( repository->Set(KBrowserFirstBoot, EFalse) );
+ CleanupStack::PopAndDestroy( repository );
+
+ // Set Search item to italics font
+ iContainer->Listbox()->ItalicizeRowItemL(0);
+ }
+ CleanupStack::Pop(); // items: passing ownership to listbox.
+ iContainer->Listbox()->SetDataL
+ ( items, /*ApiProvider().CommsModel(),*/ aKeepState );
+ CAknColumnListBoxView *aknview = STATIC_CAST(CAknColumnListBoxView*, iContainer->Listbox()->View() );
+
+ if ( !items->Count() )
+ {
+ iContainer->Listbox()->UpdateFilterL(); // ...and tell to listbox.
+ aknview->SetFindEmptyListState(EFalse);
+ }
+ else
+ {
+ aknview->SetFindEmptyListState(ETrue);
+ }
+
+ if(ApiProvider().StartedUp())
+ iContainer->SizeChanged(); // Needed to show/hide Find Pane!
+ iCurrentFolder = aFolder;
+
+ HighlightPreferredL();
+ iContainer->HandleCursorChangedL( listbox );
+ listbox->View()->SetDisableRedraw( redrawDisabled );
+
+ if(ApiProvider().StartedUp())
+ {
+ listbox->DrawDeferred();
+ UpdateCbaL();
+ UpdateNaviPaneL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserFavouritesView::ConfirmDeleteL
+// ----------------------------------------------------------------------------
+//
+TBool CBrowserFavouritesView::ConfirmDeleteL
+( CArrayFix<TInt>& aUids, CArrayFix<TInt>& aFolderUids )
+ {
+ CBrowserFavouritesModel::TDbQuery anyNonEmptyFolders;
+ TInt ret = EFalse;
+
+ anyNonEmptyFolders = iModel->AnyNonEmptyFoldersL( aFolderUids );
+ switch ( anyNonEmptyFolders )
+ {
+ case CBrowserFavouritesModel::EYes:
+ {
+ // At least one non-empty folder is selected.
+ ret = TBrowserDialogs::ConfirmQueryYesNoL(
+ _R(TEXT_DEL_FULL_FLDRS_QUERY) );
+ break;
+ }
+
+ case CBrowserFavouritesModel::ENo:
+ {
+ // No non-empty folders are selected.
+ TInt count = aUids.Count();
+ switch ( count )
+ {
+ case 0:
+ {
+ // Empty selection (???);
+ ret = EFalse;
+ break;
+ }
+
+ case 1:
+ {
+ // One item is selected (item or empty folder).
+ // Get its name.
+ const CFavouritesItem* item = iContainer->Listbox()->
+ ItemByUid( aUids.At( 0 ) );
+ if ( item )
+ {
+ ret = TBrowserDialogs::ConfirmQueryYesNoL(
+ _R(TEXT_QUERY_COMMON_CONF_DELETE), item->Name() );
+ }
+ else
+ {
+ // Could not get item (maybe listbox has been updated).
+ ret = EFalse;
+ }
+ break;
+ }
+
+ default:
+ {
+ // More items are selected (items or/and empty folders).
+ ret = TBrowserDialogs::ConfirmQueryYesNoL(
+ _R(TEXT_DEL_ITEMS_QUERY), count );
+ break;
+ }
+
+ }
+ break;
+ }
+
+ case CBrowserFavouritesModel::EError:
+ default:
+ {
+ // Could not access database.
+ ret = EFalse;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::DisplayResultOfDeleteL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::DisplayResultOfDeleteL
+( const CArrayFix<TInt>& /*aUids*/, const CArrayFix<TInt>& aNotDeletedUids )
+ {
+ switch ( aNotDeletedUids.Count() )
+ {
+ case 0:
+ {
+ // All items deleted successfully.
+ // Display nothing.
+ break;
+ }
+ case 1:
+ {
+ // One item is not deleted.
+ const CFavouritesItem* item = iContainer->Listbox()->
+ ItemByUid( aNotDeletedUids.At( 0 ) );
+ if ( item )
+ {
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_CANT_DELETE_ITEM),
+ item->Name()
+ );
+ }
+ // else
+ // this item is not found in the listbox (so it does not exist,
+ // most likely got deleted somehow) - keep quiet.
+ break;
+ }
+ default:
+ {
+ // More items are not deleted.
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_CANT_DELETE_ITEMS),
+ aNotDeletedUids.Count()
+ );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::SelectTargetFolderL
+// ---------------------------------------------------------
+//
+TInt CBrowserFavouritesView::SelectTargetFolderL( TInt aExcludeFolder )
+ {
+ TInt targetFolder = KFavouritesNullUid;
+
+ switch ( iModel->AnyFoldersL() )
+ {
+ case CBrowserFavouritesModel::EYes:
+ {
+ // Select from existing folders.
+ CBrowserFavouritesFolderSelector* selector =
+ CBrowserFavouritesFolderSelector::NewL
+ ( *iModel, ApiProvider(), aExcludeFolder );
+ targetFolder = selector->ExecuteLD();
+ break;
+ }
+ case CBrowserFavouritesModel::ENo:
+ {
+ break;
+ }
+ case CBrowserFavouritesModel::EError:
+ default:
+ {
+ // Some error; quit.
+ break;
+ }
+ }
+ return targetFolder;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleMoveResultL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleMoveResultL
+ (
+ TInt aFolder,
+ const CArrayFix<TInt>& /*aUids*/,
+ const CArrayFix<TInt>& aUnmovableUids,
+ const CArrayFix<TInt>& aConflictingNameUids
+ )
+ {
+ // See if some items has to be renamed to do the move.
+ if ( aConflictingNameUids.Count() )
+ {
+ if ( aConflictingNameUids.Count() == 1 )
+ {
+ // One item needs to be renamed if the user wants to move them.
+ // Let the user know and ask if replace.
+ const CFavouritesItem* item = iContainer->Listbox()->
+ ItemByUid( aConflictingNameUids.At( 0 ) );
+ if ( item )
+ {
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_FLDR_NAME_ALREADY_USED),
+ item->Name()
+ );
+ RenameAndMoveItemsL( aConflictingNameUids, aFolder );
+ }
+ }
+ else
+ {
+ // Some items needs to be renamed if the user wants to move them.
+ // Let the user know and ask for each if replace.
+ TBrowserDialogs::InfoNoteL( R_BROWSER_INFO_NOTE,
+ _R(TEXT_FLDR_NAMES_IN_USE_RENAME) );
+ RenameAndMoveItemsL( aConflictingNameUids, aFolder );
+ }
+ }
+
+ // Check unmovable items.
+ if ( aUnmovableUids.Count() )
+ {
+ if ( aUnmovableUids.Count() == 1 )
+ {
+ // One item is not moved.
+ const CFavouritesItem* item = iContainer->Listbox()->
+ ItemByUid( aUnmovableUids.At( 0 ) );
+ if ( item )
+ {
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_ITEM_CANNOT_BE_MOVED),
+ item->Name()
+ );
+ }
+ }
+ else
+ {
+ // More items could not be moved.
+ TBrowserDialogs::InfoNoteL
+ (
+ R_BROWSER_INFO_NOTE,
+ _R(TEXT_SOME_ITEMS_CANT_MOVE),
+ aUnmovableUids.Count()
+ );
+ }
+ }
+ // else
+ // All is well: all moved succesfully. Display nothing.
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::RenameAndMoveItemsL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::RenameAndMoveItemsL
+( const CArrayFix<TInt>& aUids, TInt aFolder )
+ {
+ TInt err = KErrNone;
+ TInt i;
+ TInt uid;
+ TInt count = aUids.Count();
+ TInt itemErr;
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+
+ for ( i = 0; i < count && !err; i++ )
+ {
+ // Get each item in turn from db (ignore if any of them is not found).
+ // Let the user rename each. Quit on the first Cancel from the user.
+ // All database manipulating methods, which are called here, retry on
+ // failure, so if we ever get an error value, that means that the user
+ // cancelled something.
+ uid = aUids.At( i );
+ err = iModel->BeginL( /*aWrite=*/ETrue, /*aDbErrorNote=*/ETrue );
+ if ( !err )
+ {
+ // Check if we have the item.
+ itemErr = iModel->Database().Get( uid, *item );
+ iModel->CommitL();
+ if ( !itemErr )
+ {
+ // We have this item. Ask the user to rename it.
+ if ( iModel->RenameQueryL( *item, EFalse) )
+ {
+ // The user renamed the item: try to update and go on.
+ item->SetParentFolder( aFolder );
+ err = iModel->UpdateL( *item, uid, /*aDbErrorNote=*/ETrue,
+ CBrowserFavouritesModel::EAskIfRename );
+ }
+ else
+ {
+ // Cancelled. Quit.
+ err = KErrCancel;
+ }
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(); // item
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::UpdateNaviPaneL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::UpdateNaviPaneL()
+ {
+ if ( iCurrentFolder == KFavouritesRootUid )
+ {
+ // In root folder show the tabs.
+ iContainer->ShowRootNaviPane();
+ }
+ else
+ {
+ // In other folder, show "1/4" style text.
+ TInt folderIndex;
+ TInt folderCount;
+ TInt err;
+ err = iModel->FolderInfoL( iCurrentFolder, folderCount, folderIndex );
+ if ( !err )
+ {
+ iContainer->ShowFolderNaviPaneL( folderIndex, folderCount );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CBrowserFavouritesView::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode /*aType*/ )
+ {
+ // This method is called back from the container, to process the keypresses
+ // that cannot be handled by the container. Those are (currently) the
+ // left/right arrow keypresses, since the container does not know anything
+ // about what folder is open, which knowledge is required to process
+ // arrow presses. So we do that here.
+ // Any other key processing is still in the container.
+ TKeyResponse result = EKeyWasNotConsumed;
+ switch ( aKeyEvent.iCode )
+ {
+
+ case EKeyLeftArrow: // West
+ {
+ if ( iCurrentFolder != KFavouritesRootUid )
+ {
+ // We are in some folder. Move between subfolders in the
+ // leftward direction.
+ if ( !ApiProvider().IsEmbeddedModeOn() )
+ {
+ OpenNextFolderL( /*aForward=*/EFalse );
+ }
+ //return EKeyWasConsumed anyway, since in embedded mode user can access only the launch folder
+ result = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ case EKeyRightArrow: // East
+ {
+ if ( iCurrentFolder != KFavouritesRootUid )
+ {
+ // We are in some folder. Move between subfolders in the
+ // rightward direction.
+ if ( !ApiProvider().IsEmbeddedModeOn() )
+ {
+ OpenNextFolderL( /*aForward=*/ETrue );
+ }
+ //return EKeyWasConsumed anyway, since in embedded mode user can access only the launch folder
+ result = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ { // Here, "eat" all of the diagonals so they have no effect
+ result = EKeyWasConsumed;
+ break;
+ }
+
+
+ case EKeyBackspace:
+ case EKeyDelete:
+ {
+ TBrowserFavouritesSelectionState state =
+ iContainer->Listbox()->SelectionStateL();
+ if ( state.AnyDeletable() )
+ {
+ // We don't editing (not in Goto Pane),
+ // and have something to delete. In this case, Clear key
+ // deletes the selection (or highlighted items).
+ if ( ((iContainer->Listbox()->CurrentItem()->ContextId() == NULL ) &&
+ (iContainer->Listbox()->CurrentItem()->Uid() != KFavouritesAdaptiveItemsFolderUid) ||
+ state.AnyMarked() )
+ )
+ {
+ DeleteMarkedItemsL();
+ }
+ result = EKeyWasConsumed;
+ }
+ break;
+ }
+
+ case EKeyOK:
+ // OK key is handled through MSK handling
+ result = EKeyWasConsumed;
+ break;
+
+ case EKeyEnter:
+ {
+ if ( !(aKeyEvent.iModifiers & EModifierShift) )
+ {
+ TBrowserFavouritesSelectionState state =
+ iContainer->Listbox()->SelectionStateL();
+ if ( state.IsEmpty() || state.AnyMarked() )
+ {
+ // Selection key (alone) pressed when there are marked
+ // items or the list is empty. Bring up context sensitive
+ // (OK-Options) menu.
+ MenuBar( )->
+ SetMenuTitleResourceId( OkOptionsMenuResourceId() );
+ iShowOkOptions = ETrue;
+ // Call to menu activation is trapped - to make sure that
+ // iShowOkOptions and bad menu doesn't stick in.
+ TRAP_IGNORE( ProcessCommandL( EAknSoftkeyOptions ) );
+ iShowOkOptions = EFalse;
+ MenuBar( )->
+ SetMenuTitleResourceId( OptionsMenuResourceId() );
+
+ // Update CBA to include context menu MSK icon
+ UpdateCbaL();
+
+ result = EKeyWasConsumed;
+ }
+ }
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleFavouritesModelChangeL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleFavouritesModelChangeL()
+ {
+ // Change in favourites database.
+ if ( iRefresh )
+ {
+ RefreshL();
+ }
+ iRefresh = ETrue;
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::HandleCommsModelChangeL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::HandleCommsModelChangeL()
+ {
+ // Change in AP-s (CommsDb).
+ RefreshL( /*aDbErrorNote=*/EFalse );
+ }
+
+void CBrowserFavouritesView::OpenFixedFolderL(TInt aUid)
+ {
+ OpenFolderL(aUid);
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::SetPreferedCurrentItemL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::SetPreferedCurrentItemL()
+ {
+ // check the current item is exist
+ if ( iContainer->Listbox()->CurrentItem() )
+ {
+ iContainer->Listbox()->GetDefaultData().iPreferedId =
+ iContainer->Listbox()->CurrentItem()->Uid();
+ iModel->Database().SetPreferredUid(
+ iCurrentFolder,iContainer->Listbox()->CurrentItem()->Uid() );
+ iRefresh = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::SetUnPreferedCurrentItemL
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::SetUnPreferedCurrentItemL()
+ {
+ // check the current item is exist
+ if ( iContainer->Listbox()->CurrentItem() )
+ {
+ iContainer->Listbox()->GetDefaultData().iPreferedId = NULL;
+ iModel->Database().SetPreferredUid( iCurrentFolder,NULL );
+ iRefresh = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserFavouritesView::ConfigContextMenu
+// ---------------------------------------------------------
+//
+void CBrowserFavouritesView::ConfigContextMenu()
+ {
+ // Config Context Sensitive Menu Resource and Type when items are marked
+
+ MenuBar()->SetContextMenuTitleResourceId( OkOptionsMenuResourceId());
+ MenuBar()->SetMenuType(CEikMenuBar::EMenuContext);
+ MenuBar()->SetMenuTitleResourceId( OptionsMenuResourceId());
+ MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions); // adds task swapper menu item first
+ }
+
+void CBrowserFavouritesView::UpdateToolbarButtonsState()
+ {
+ LOG_ENTERFN("CBrowserFavouritesView::UpdateToolbarButtonsState");
+ BROWSER_LOG( ( _L("Implementation is not required here") ) );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/CommandVisibility.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of TCommandVisibility.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikmenup.h>
+#include "Browser.hrh"
+#include "CommandVisibility.h"
+#include "BrowserFavouritesSelectionState.h"
+#include "BrowserUtil.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TCommandVisibility::Apply
+// ---------------------------------------------------------
+//
+void TCommandVisibility::Apply
+ (
+ CEikMenuPane* aMenuPane,
+ TCommandVisibilityMap aCommandInfo,
+ TCommandVisibility::TIndex aIndex
+ )
+ {
+ // Dim commands using the command visibility array.
+ TInt command;
+ TInt i = 0;
+ while ( ( command = aCommandInfo[i][ECommand] ) !=
+ /*end of list*/EWmlNoCmd )
+ {
+ if ( !(aCommandInfo[i][aIndex]) )
+ {
+ aMenuPane->SetItemDimmed( command, ETrue );
+ }
+ i++;
+ }
+ }
+
+// ---------------------------------------------------------
+// TCommandVisibility::Apply
+// ---------------------------------------------------------
+//
+TBool TCommandVisibility::Apply
+ (
+ const TCommandVisibilityInfo& aCommandInfo,
+ TIndex aIndex
+ )
+ {
+ return aCommandInfo[aIndex];
+ }
+
+// ---------------------------------------------------------
+// TCommandVisibility::Index
+// ---------------------------------------------------------
+//
+TCommandVisibility::TIndex TCommandVisibility::Index
+ (
+ const TBrowserFavouritesSelectionState& aSelectionState,
+ TBool aMarkedOnly
+ )
+ {
+ TIndex index = EInvalid;
+
+ if ( aMarkedOnly )
+ {
+ // Consider only marked items (OK-Options menu).
+ if ( aSelectionState.IsEmpty() )
+ {
+ // Empty ???
+ index = ENothing;
+ }
+ else if ( aSelectionState.MarkedCount() == 1 )
+ {
+ // One is marked. See if item or folder.
+ index = aSelectionState.iMarkedItemCount ? EOneItem : EOneFolder;
+ }
+ else
+ {
+ // More is marked. See if there are any folders.
+ index = aSelectionState.NoFoldersMarked() ?
+ EMoreItems : EItemsFolders;
+ }
+ }
+ else
+ {
+ // All items (Normal Options menu).
+ if ( aSelectionState.AnyMarked() )
+ {
+ if ( aSelectionState.NoFoldersMarked() )
+ {
+ if ( aSelectionState.MarkedCount() == 1 )
+ {
+ index = EOneItem;
+ }
+ else
+ {
+ index = EMoreItems;
+ }
+ }
+ else
+ {
+ // More marked, including folders.
+ index = EItemsFolders;
+ }
+ }
+ else if ( aSelectionState.CurrentIsItem() )
+ {
+ // A bookmark is highlighted.
+ index = EOneItem;
+ }
+ else if ( aSelectionState.CurrentIsFolder() )
+ {
+ // A folder is highlighted.
+ index = EOneFolder;
+ }
+ else
+ {
+ __ASSERT_DEBUG( aSelectionState.IsEmpty(), \
+ Util::Panic( Util::EFavouritesInternal ) );
+ // No items at all.
+ index = ENothing;
+ }
+ }
+
+ __ASSERT_DEBUG( index != EInvalid,
+ Util::Panic( Util::EUnExpected ) );
+
+ return index;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsClientUtilities.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,759 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Manages the feed related views and implements the FeedsViewBridge.
+*
+*/
+
+#ifndef FEEDS_CLIENT_UTILITIES_H
+#define FEEDS_CLIENT_UTILITIES_H
+
+// INCLUDES
+#include <brctlspecialloadobserver.h>
+
+#include "Preferences.h"
+#include "FeedsWaitDialog.h"
+#include "FeedsFileSearchAgent.h"
+#include "CommonConstants.h"
+#include <feedsinterface.h>
+#include <feedsmap.h>
+#include <transaction.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknViewAppUi;
+class CEikMenuPane;
+class MApiProvider;
+class CFeedsFolderView;
+class CFeedsTopicView;
+class CFeedsFeedView;
+class CBrowserGotoPane;
+
+// CLASS DECLARATION
+
+
+/**
+* Manages the feed related views and implements the FeedsViewBridge.
+* @lib FeedsViewBridge.lib
+* @since 3.1
+*/
+class CFeedsClientUtilities: public CBase,
+ public MPreferencesObserver,
+ public MFeedsWaitDialogListener,
+ public MFeedsFileSearchAgentCallback,
+ public MFeedsApiObserver
+ {
+ public: // Constructors and destructor
+
+ static CFeedsClientUtilities* NewL( CAknViewAppUi& aAppUI, MApiProvider& aApiProvider );
+
+ /**
+ * Destructor.
+ */
+ ~CFeedsClientUtilities();
+
+ public: // from MPreferencesObserver
+
+ /**
+ * Derived classes should implement this method, and act accordingly.
+ */
+ void HandlePreferencesChangeL( const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType );
+
+ public: //From MFeedsApiObserver
+ /**
+ * This function is called by CFeedsInterface class whenever
+ * request is completed
+ *
+ * @param aTrans Pointer to current transaction class
+ * @param aEvent event related to this call.
+ */
+ virtual void RequestCompleted(CTransaction* aTrans,TInt aEvent);
+
+ public:
+ /**
+ * Request to create a network connection.
+ *
+ * @since 7.1
+ * @param aConnectionPtr A pointer to the new connection. If NULL, the
+ * proxy filter will automatically create a network connection.
+ * @param aSockSvrHandle A handle to the socket server.
+ * @param aNewConn A flag if a new connection was created. If the
+ * connection is not new, proxy filter optimization will not
+ * read the proxy again from CommsBd.
+ * @param aBearerType The bearer type of the new connection
+ * @return void
+ */
+ void NetworkConnectionNeededL( TInt* aConnectionPtr, TInt& aSockSvrHandle,
+ TBool& aNewConn, TApBearerType& aBearerType );
+
+ public:
+
+ /**
+ * Set Browser prefs to Feed engine
+ * @since 3.1
+ * @param aValues Browser preferences
+ * @return void
+ */
+ void SetPreferencesToFeedL( const TPreferencesValues& aValues );
+
+ /**
+ * Load Url in new window
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void LoadUrlL( const TDesC& aUrl );
+
+ /**
+ * Shows the folder view, loading the folder list from the FeedsServer if need be.
+ *
+ * @since 3.1
+ * @param aCalledFromView to recored from which view this was invoked. Default value
+ * is BrowserBookmarksViewId if this argument is not specified.
+ * @return void.
+ */
+ void ShowFolderViewL(TUid aCalledFromView = KUidBrowserBookmarksViewId);
+
+ /**
+ * Shows the topic view, loading the given feed associated with the given
+ * folder item.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void ShowTopicViewL(const CFeedsEntity& aFolderItem);
+
+ /**
+ * Shows the folder view and subscribes to the given feed.
+ *
+ * @since 3.1
+ * @param aTitle The feed's title.
+ * @param aUrl The feed's url.
+ * @return void.
+ */
+ void SubscribeToL(const TDesC& aTitle, const TDesC& aUrl);
+
+ /**
+ * Returns the feed related mime-types. This makes
+ * for a clean way to pass downloaded feeds content from the client to the FeedsServer
+ * (via CFeedsClientUtilities::HandleFeedL).
+ *
+ * @since 3.1
+ * @return An array of supported mime-types.
+ */
+ TPtrC SupportedMimeTypesL();
+
+ /**
+ * Returns Feeds Server related settings.
+ *
+ * @since 3.1
+ * @return Feeds Server related settings.
+ */
+ TInt FeedsServerSettingsL(TFeedsServerSetting& aSetting);
+
+ /**
+ * Sets Feeds Server related settings.
+ *
+ * @since 3.1
+ * @param aNewSettings The new settings.
+ * @return void.
+ */
+ void SetFeedsServerSettingsL(const TFeedsServerSetting& aNewSetting);
+
+ /**
+ * Sets a Browser Control related settings. These settings are directly passed to all
+ * Browser Control instances used by the CFeedsViewBridge. As such see the Browser
+ * Control documentation for infomation about the settings.
+ *
+ * @since 3.1
+ * @param aSetting The setting to update
+ * @param aValue The new value of the setting
+ * @return void.
+ */
+ void SetBrowserControlSettingL(TUint aSetting, TUint aValue);
+
+ /**
+ * Called by RequestHandlerCompleted when the root FolderItem is either ready or an error occured.
+ *
+ * @since 3.1
+ * @param aStatus The result code of the FetchRootFolderItemL method.
+ * @param aTrans The type of transaction that was made
+ * @return void.
+ */
+ void FolderItemRequestCompleted(TInt aStatus, CTransaction::TTransactionType aTrans=CTransaction::ENone);
+
+ /**
+ * Leaving method which is called by FolderItemRequestCompleted
+ *
+ * @since 3.2
+ * @param aStatus The result code of the FetchRootFolderItemL method.
+ * @param aTrans The type of transaction that was made
+ * @return void.
+ */
+ void FolderItemRequestCompletedL(TInt aStatus, CTransaction::TTransactionType aTransType=CTransaction::ENone);
+
+ /**
+ * Called by RequestHandlerCompleted when the FolderItem has changed. The client
+ * should request an updated copy from the server.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void FolderItemChanged() {};
+
+ /**
+ * Called by RequestHandlerCompleted when the asynchronous request is complete.
+ *
+ * @since 3.1
+ * @pram aStatus The completion status code.
+ * @return void.
+ */
+ void FeedRequestCompleted(TInt aStatus);
+
+ /**
+ * Leaving method which is called from FeedRequestCompleted
+ *
+ * @since 3.2
+ * @pram aStatus The completion status code.
+ * @return void.
+ */
+ void FeedRequestCompletedL(TInt aStatus);
+
+ /**
+ * Notifies the observer that the feed has changed. This method is called
+ * when the feed is updated by the feeds server.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void FeedChanged() {};
+
+ /**
+ * Notifies the observer that the feed's item status has changed.
+ * This method is called when __another__ client updates the feed's
+ * item status (via UpdateFeedItemStatusL).
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void FeedItemStatusChanged() {};
+
+
+ public: // From MWaitDialogListener
+ /**
+ * Called when the user presses the cancel button.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void DialogDismissedL();
+
+
+ public: // New Methods.
+ /**
+ * Searches for a FolderItem with the given name. If "this"
+ * isn't a folder it only checks whether or not it matches
+ * the given name. If "this" is a folder it also checks
+ * all embedded items
+ *
+ * @since 7.1
+ * @param aName The title of the feed
+ * @param aFolder The folder to be searched
+ * @return void.
+ */
+
+ const CFeedsEntity* Search(const TDesC& aName,const CFeedsEntity& aFolder) const;
+ /**
+ * Searches for a FolderItem with the given id. If "this"
+ * isn't a folder it only checks whether or not it matches
+ * the given id. If "this" is a folder it also checks
+ * all embedded items
+ *
+ * @since 7.1
+ * @param aFolderItemId The id of the folder item.
+ * @param aFolder The folder to be searched
+ * @return void.
+ */
+
+ const CFeedsEntity* Search(TInt aFolderItemId,const CFeedsEntity& aFolder) const;
+
+ /**
+ * Get the root folder from the Feeds server.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void FetchRootFolderL();
+
+ /**
+ * Add a new folder item.
+ *
+ * @since 3.1
+ * @param aTitle The title of the item.
+ * @param aUrl The url of the item.
+ * @param aIsFolder True if this is a folder.
+ * @param aParent The parent folder.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ void AddFolderItemL(const TDesC& aTitle, const TDesC& aUrl,
+ TBool aIsFolder, const CFeedsEntity& aParent, TInt aFreq);
+
+ /**
+ * Change the folder item. If this is a folder then KNullDesC
+ * should be passed to the aUrl argument.
+ *
+ * @since 3.1
+ * @param aFolderItem The item to update.
+ * @param aTitle The item's title..
+ * @param aUrl The item's url or KNullDesC.
+ * @param aFreq The frequency for auto updating.
+ * @return void
+ */
+ void ChangeFolderItemL(CFeedsEntity& aFolderItem,
+ const TDesC& aTitle, const TDesC& aUrl, TInt aFreq);
+
+ /**
+ * Delete the folder items.
+ *
+ * @since 3.1
+ * @param aFolderItem The folder item that's being deleted.
+ * @return void
+ */
+ void DeleteFolderItemsL(RPointerArray<const CFeedsEntity>& aFolderItems);
+
+ /**
+ * Move the folder items to a different parent.
+ *
+ * @since 3.1
+ * @param aFolderItem The folder item that's being moved.
+ * @param aParent The folder item's new parent.
+ * @return void
+ */
+ void MoveFolderItemsToL(RPointerArray<const CFeedsEntity>& aFolderItems,
+ const CFeedsEntity& aParent);
+
+ /**
+ * Move the folder item to a different index.
+ *
+ * @since 3.1
+ * @param aFolderItem The folder item that's being moved.
+ * @param aIndex The new index of the folder item (within its parent).
+ * @return void
+ */
+ void MoveFolderItemsL(RPointerArray<const CFeedsEntity>& aFolderItems,
+ TInt aIndex);
+
+ /**
+ * Get the given feed from the Feeds server.
+ *
+ * @since 3.1
+ * @param aFeedUrl The id of the feed to fetch.
+ * @param aForceUpdate When true the server will ignore the cache.
+ * @param aNoCache When true the server will not cache the feed.
+ * @return void.
+ */
+ void FetchFeedL(const CFeedsEntity& aFeedEntity, TBool aForceUpdate = EFalse,
+ TBool aNoCache = EFalse);
+
+ /**
+ * Updates the feed with the given id.
+ *
+ * @since 3.1
+ * @param aFeedId The id of the feed to update.
+ * @return void.
+ */
+ void UpdateFeedL(const CFeedsEntity& aFeedEntity);
+
+ /**
+ * Updates the given feeds in the background.
+ *
+ * @since 3.1
+ * @param aFolderItems The feeds to update.
+ * @return void.
+ */
+ void UpdateFolderItemsL(const RPointerArray<const CFeedsEntity>&
+ aFolderItems);
+
+ /**
+ * Updates all of feeds in the background.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void UpdateFolderItemsL();
+
+ /**
+ * Handle the menu "Import Feeds" command. This will kick off the search
+ * for OMPL feeds files stored on the phone. Control will return via the
+ * FeedsFileSearchComplete callback.
+ *
+ * @since 3.2
+ * @return void.
+ */
+ void ImportFeedsL();
+
+ /**
+ * Given a filepath on the filesystem, begin import feeds from the file path
+ * This will set up the path and flags and allow the feeds folder to be
+ * activated before the import actually takes place.
+ *
+ * @since 3.2
+ * @return void
+ * @param a filesystem path to import from
+ */
+ void BeginImportOPMLFeedsFileL( TFileName& aFilepath );
+
+ /**
+ * Handle the menu "Export Feeds" command
+ * once items have been selected and a name chosen.
+ *
+ * @since 3.2
+ * @return void
+ * @param folder items to export and a name to export to
+ */
+ void ExportFeedsL(RPointerArray<const CFeedsEntity>& aFolderItems, const TDesC &aExportFileName);
+
+ /**
+ * Shows the folder view.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void ShowFolderViewLocalL();
+
+ /**
+ * Shows the topic view.
+ *
+ * @since 3.1
+ * @param aInitialItem The initial item to show.
+ * @return void.
+ */
+ void ShowTopicViewLocalL(TInt aInitialItem);
+
+ /**
+ * Shows the feed view.
+ *
+ * @since 3.1
+ * @param aInitialItem The initial item to show.
+ * @return void.
+ */
+ void ShowFeedViewLocalL(TInt aInitialItem);
+
+
+ /**
+ * Returns the current root folder.
+ *
+ * @since 3.1
+ * @return The current root folder..
+ */
+ const CFeedsEntity* CurrentRootFolder() ;
+
+ /**
+ * Returns the current feed.
+ *
+ * @since 3.1
+ * @return The current feed.
+ */
+ CFeedsEntity* CurrentFeed() ;
+
+ /**
+ * Add a menu item to the given menu.
+ *
+ * @since 3.1
+ * @param aMenuPane The menu to add the item to.
+ * @param aCommand The item's command.
+ * @param aTitleId The item's title resouce-id.
+ * @return void.
+ */
+ void AddItemL(CEikMenuPane& aMenuPane, TInt aCommand, TInt aTitleId);
+
+ /**
+ * Add a sub-menu to the given menu.
+ *
+ * @since 3.1
+ * @param aMenuPane The menu to add the item to.
+ * @param aCommand The cascade's command.
+ * @param aTitleId The item's title resouce-id.
+ * @param aCascade The cascade's resource id.
+ * @return void.
+ */
+ void AddCascadeL(CEikMenuPane& aMenuPane, TInt aCommand,
+ TInt aTitleId, TInt aCascade);
+
+ /**
+ * Sets the item's status (read/unread/new).
+ *
+ * @since 3.1
+ * @param aItemIndex The index of the item to change.
+ * @param aStatus The new status.
+ * @return void.
+ */
+ void SetItemStatusL(CFeedsEntity* aItem, TFeedItemStatus aStatus);
+
+ /**
+ * Returns the item's status (read/unread/new).
+ *
+ * @since 3.1
+ * @param aItemIndex The index of the item to change.
+ * @return The status.
+ */
+ TFeedItemStatus ItemStatus(TInt aItemIndex);
+
+ /**
+ * Writes the item status out to the server.
+ *
+ * @since 3.1
+ * @return Void.
+ */
+ void ItemStatusWriteToServerL();
+
+ /**
+ * Returns the Favicon to the given url or NULL if one isn't found.
+ *
+ * @since 3.1
+ * @param aUrl The url of the Favicon.
+ * @return The associated Favicon or NULL.
+ */
+ CGulIcon* FaviconL(const TDesC& aUrl);
+
+ /**
+ * Connect to the server.
+ *
+ * @since 3.1
+ * @param aGetRootFolder If true the root folder is also fetched.
+ * @return Void
+ */
+ void ConnectToServerL(TBool aGetRootFolder = ETrue);
+
+ /**
+ * Disconnect from the server.
+ *
+ * @since 3.1
+ * @return Void
+ */
+ void DisconnectFromServer();
+
+ /**
+ * Since the folder list isn't updated after it is fetched the FeedsClientUtilities
+ * tracks the last update times for feeds the user visits in the current session.
+ * This method returns the "last updated" timestamp of the given item.
+ *
+ * @since 3.1
+ * @param aItem The folder item to get the last updated time.
+ * @return The timestamp.
+ */
+ TTime FeedUpdatedTime(const CFeedsEntity& aItem);
+
+ /**
+ * Resets the "last updated" cache.
+ *
+ * @since 3.1
+ * @return Void.
+ */
+ void ResetFeedUpdateTime();
+
+ /**
+ * Update the feed's "last updated" value in the cache.
+ *
+ * @since 3.1
+ * @param aFeed The feed to udpate the last updated time.
+ * @return Void.
+ */
+ void UpdateFeedUpdatedTimeL(const CFeedsEntity& aFeed);
+
+ /**
+ * Initialize context-sensitive menu.
+ * @param aResourceId Resource id of the menu pane.
+ * @param aMenuPane Menu pane object being initialized.
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * Processes commands.
+ *
+ * @since 3.1
+ * @param aViewId the view that calls this.
+ * @param aCommand the command to process.
+ * @return void.
+ */
+ void HandleCommandL(TUid aViewId, TInt aCommand);
+
+ /**
+ * Sets Feeds Server related settings.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void DisconnectManualUpdateConnectionL();
+
+ /**
+ * Disconnect connection used by FeedsView
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void DisconnectFeedsViewL();
+
+ /**
+ * Set the View Id that called Feeds
+ *
+ * @since 3.1
+ * @param View id of the view Feeds was called from.
+ */
+ void SetCalledFromView(TUid aViewId);
+
+ /**
+ * Get the View Id that called Feeds
+ *
+ * @since 3.1
+ * @return the view id Feeds was called from.
+ */
+ TUid CalledFromView();
+
+ public: // from MFeedsFileSearchAgentCallback
+ /**
+ * Callback to this class when the search agent CActive had
+ * completed its searching for feeds files
+ *
+ * @since 3.2
+ * @return void
+ * @param the number of files found
+ */
+
+ void FeedsFileSearchCompleteL(TInt aCount);
+
+ private: // New Methods.
+ /**
+ * C++ default constructor. aName and
+ * aSourceUrl are adopted by this method.
+ */
+ CFeedsClientUtilities(CAknViewAppUi& aAppUI, MApiProvider& iApiProvider);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Ensures that the views and the connection to the FeedsServer are ready.
+ *
+ * @since 3.1
+ * @param aGetRootFolder If true the root folder is also fetched.
+ * @return void.
+ */
+ void LazyInitL(TBool aGetRootFolder);
+
+ /**
+ * Show a server error.
+ *
+ * @since 3.1
+ * @param aStatus The status code.
+ * @param aRequestType The type of request that was made
+ * @return void.
+ */
+ void ShowServerError(TInt aStatus, CTransaction::TTransactionType aRequestType = CTransaction::ENone);
+
+ /**
+ * Init a menu item
+ * @since 3.1
+ * @param aMenuPane Menu pane to be initialized
+ * @param aCommandId The command ID
+ * @param aResourceId The resource ID
+ * @param aCascadeId The cascade ID
+ * @param aFlags Flags
+ * @return void
+ */
+ void InitMenuItemL( CEikMenuPane* aMenuPane,
+ TInt aCommandId,
+ TInt aResourceId,
+ TInt aCascadeId = 0,
+ TInt aFlags = 0 );
+
+ /**
+ * Send the OPML using the Send UI
+ *
+ * @since 3.2
+ * @param void.
+ * @return void.
+ */
+ void SendOPMLFileL(void);
+
+ /**
+ * Returns the INITIAL status of each of the items in the feed.
+ * The caller can then modify the values and call RFeed::UpdateFeedItemStatusL
+ * to request the feeds server to update the feed's item status.
+ *
+ * @since 7.1
+ * @param aItemIds The ids of the items.
+ * @param aItemStatus The coresponding status of each of the items in the feed.
+ * @param aFeed The feed whose items' status has to fetched.
+ * @return void.
+ */
+ void ItemStatusL(RArray<TInt>& aItemIds,
+ RArray<TFeedItemStatus>& aItemStatus, const CFeedsEntity& aFeed) const;
+
+
+
+ private: // Data.
+ CAknViewAppUi& iAppUI;
+ MApiProvider& iApiProvider;
+ TUid iNextViewId;
+ TBool iIsUpdatingFeed;
+ CFeedsWaitDialog* iWaitDialog;
+ HBufC* iEnteredURL;
+ TInt iCbaResource;
+
+ CFeedsFolderView* iFolderView; // not owned
+ CFeedsTopicView* iTopicView; // not owned
+ CFeedsFeedView* iFeedView; // not owned
+
+ TBool iIsConnected;
+ RArray<TInt> iItemIds;
+ RArray<TFeedItemStatus> iItemStatus;
+ RArray<TFeedItemStatus> iItemStatusOrig;
+
+ HBufC* iMimeTypes;
+
+ RArray<TInt> iFeedUpdateTimeIds;
+ RArray<TTime> iFeedUpdateTimeTimestamps;
+
+ TDesC* iPendingFolderItemTitle;
+ TDesC* iPendingFolderItemUrl;
+ TDesC* iExportFileName;
+
+ CFeedsFileSearchAgent* iSearchAgent;
+ CArrayFixFlat<TBrCtlSelectOptionData>* iSearchOptList;
+
+ TFileName iTempOPMLImportFilePath;
+ TBool iFeedImportRequested;
+ TBool iRequestCanceled;
+ TUid iCalledFromView;
+ TBool iIsWaitDialogDisplayed;
+ RFeedsInterface iFeedsInterface;
+ CTransaction::TTransactionType iCurrentRequest;
+ CTransaction::TTransactionType iCanceledRequest;
+ };
+
+#endif // FEEDS_CLIENT_UTILITIES_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsEditFeedDialog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,280 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Encapsulates a edit feed dialog.
+*
+*/
+
+
+#ifndef FEEDS_EDIT_FEED_DIALOG_H
+#define FEEDS_EDIT_FEED_DIALOG_H
+
+
+// INCLUDES
+#include <aknform.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknViewAppUi;
+
+// CLASS DECLARATION
+
+
+/**
+* Encapsulates a edit feed dialog.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class MFeedsEditFeedDialogObserver
+ {
+ public:
+ /**
+ * Called when a feed's name and/or url is changed -- this is called
+ * after both IsValidFeedName and IsValidFeedUrl are called.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aUrl The feed's new url.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ virtual void UpdateFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq) = 0;
+
+ /**
+ * Called when a new feed is created -- this is called after both
+ * IsValidFeedName and IsValidFeedUrl are called.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aUrl The feed's new url.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ virtual void NewFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq) = 0;
+
+ /**
+ * Validates the Feed's updated name.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aIsEditing True if the edit dialog was opened to edit a feed.
+ * @return ETrue if the value is valid.
+ */
+ virtual TBool IsFeedNameValidL(const TDesC* aName, TBool aIsEditing) = 0;
+
+ /**
+ * Validates the Feed's updated url.
+ *
+ * @since 3.0
+ * @param aUrl The feed's new url.
+ * @return ETrue if the value is valid.
+ */
+ virtual TBool IsFeedUrlValidL(const TDesC* aUrl) = 0;
+ };
+
+
+class CFeedsEditFeedDialog: public CAknForm
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsEditFeedDialog* NewL(MFeedsEditFeedDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName, const TDesC& aUrl, TInt aFreq);
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsEditFeedDialog* NewL(MFeedsEditFeedDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsEditFeedDialog();
+
+ public:
+
+ /**
+ * Takes any action required when the current line is changed
+ * to aControlId
+ *
+ * @since 7.1
+ * @param aControlId The control ID
+ * @return void
+ */
+ void LineChangedL( TInt aControlId );
+
+ /**
+ * Handles the auto update freuency modification commands
+ *
+ * @since 7.1
+ * @return void
+ */
+ void HandleFreqCmdL();
+
+ /**
+ * Pops up a custom dialog to allow user to set setting items
+ *
+ * @since 7.1
+ * @param aTitle The title of the field.
+ * @param aValues The values of the radio buttons.
+ * @param aCurentItem The currently selected item
+ * @return TInt The newly selected value from the radio buttons.
+ */
+ TInt ShowRadioButtonSettingPageL(TDesC& aTitle,
+ CDesCArrayFlat* aValues,
+ TInt aCurrentItem );
+
+ /**
+ * Shows an information dialog, with an ok soft key.
+ *
+ * @since 7.1
+ * @param aNoteText Text to display.
+ * @return void
+ */
+ void ShowInfoDialogwithOkSoftKeyL( const TDesC& aNoteText );
+
+
+ public: // From CAknForm
+ /**
+ * Called to setup the options menu with the dialog is active.
+ *
+ * @since ?
+ * @param aResourceId The resource id of the menu.
+ * @param aMenuPane The menu.
+ * @return void.
+ */
+ virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+ /**
+ * Called by the framework whenever the 'Save' menu item is selected.
+ *
+ * @since ?
+ * @return ETrue if the form data has been saved, otherwise EFalse.
+ */
+ virtual TBool SaveFormDataL();
+
+ /**
+ * Called by the framework before the form is initialised.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void PreLayoutDynInitL();
+
+ /**
+ * Post-layout dialog initialisation.
+ *
+ * @since 7.1
+ * @return void.
+ */
+ void PostLayoutDynInitL();
+
+ /**
+ * From CCoeControl.
+ * Handles pointer events
+ *
+ * @since 7.1
+ * @param Details of pointer event.
+ * @return void.
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ /**
+ * Handle button press. Same as base class method, except calling
+ * HandleFreqCmdL in the case of auto Update modifications.
+ *
+ * @since 7.1
+ * @param aButtonId Button pressed.
+ * @return ETrue if the dialog should exit.
+ */
+ TBool OkToExitL( TInt aButtonId );
+
+
+ /**
+ * Called by the framework to process the options menu.
+ *
+ * @since ?
+ * @param aCommandId The command.
+ * @return void.
+ */
+ virtual void ProcessCommandL(TInt aCommandId);
+
+ /**
+ * Handle key events.
+ *
+ * @since 7.1
+ * @param aKeyEvent Details of key event.
+ * @param aType Type of key event.
+ * @return EKeyWasConsumed if the key was handled else EKeyWasNotConsumed.
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,
+ TEventCode aType);
+
+#ifdef __SERIES60_HELP
+ /**
+ * Get help context for the control.
+ *
+ * @since ?
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ virtual void GetHelpContext(TCoeHelpContext& aContext) const;
+#endif // __SERIES60_HELP
+
+
+ private: // New methods
+ /**
+ * C++ default constructor.
+ */
+ CFeedsEditFeedDialog (MFeedsEditFeedDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName, const TDesC& aUrl, TInt aFreq);
+
+ /**
+ * Loads the form data before the form is displayed.
+ *
+ * @since ?
+ * @return ETrue if the form data has been saved, otherwise EFalse.
+ */
+ void LoadFormValuesFromDataL();
+
+
+ private:
+ MFeedsEditFeedDialogObserver& iObserver;
+ CAknViewAppUi* iAppUi; // not owned
+ TBool iIsNewFeed;
+ TBool iExitDialog;
+
+ const TDesC& iName;
+ const TDesC& iUrl;
+ TInt iFreq;
+ TInt iPreviousFreq;
+ TInt iSelectedDlgLine;
+ TBool iActionCancelled;
+ TBool iDrag;
+ TPointerEvent iPointerEvent;
+ };
+
+#endif // FEEDS_EDIT_FEED_DIALOG_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsEditFolderDialog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Encapsulates a edit folder dialog.
+*
+*/
+
+
+#ifndef FEEDS_EDIT_FOLDER_DIALOG_H
+#define FEEDS_EDIT_FOLDER_DIALOG_H
+
+
+// INCLUDES
+#include <aknform.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknViewAppUi;
+
+// CLASS DECLARATION
+
+
+/**
+* The observer interface for the edit folder dialog.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class MFeedsEditFolderDialogObserver
+ {
+ public:
+ /**
+ * Called when a folder's name is changed -- this is called
+ * after IsValidFolderName is called.
+ *
+ * @since 3.0
+ * @param aName The folder's new name.
+ * @return void.
+ */
+ virtual void UpdateFolderL(const TDesC& aName) = 0;
+
+ /**
+ * Called when a new folder is created -- this is called
+ * after IsValidFolderName is called.
+ *
+ * @since 3.0
+ * @param aName The folder's new name.
+ * @return void.
+ */
+ virtual void NewFolderL(const TDesC& aName) = 0;
+
+ /**
+ * Validates the folder's updated name.
+ *
+ * @since 3.0
+ * @param aName The folder's new name.
+ * @param aIsEditing True if the edit dialog was opened to edit a folder.
+ * @return ETrue if the value is valid.
+ */
+ virtual TBool IsFolderNameValidL(const TDesC* aName, TBool aIsEditing) = 0;
+ };
+
+
+/**
+* Encapsulates a edit folder dialog.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsEditFolderDialog: public CAknForm
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsEditFolderDialog* NewL(MFeedsEditFolderDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName);
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsEditFolderDialog* NewL(MFeedsEditFolderDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsEditFolderDialog();
+
+
+ public: // From CAknForm
+ /**
+ * Called to setup the options menu with the dialog is active.
+ *
+ * @since ?
+ * @param aResourceId The resource id of the menu.
+ * @param aMenuPane The menu.
+ * @return void.
+ */
+ virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+ /**
+ * Called by the framework whenver the 'Save' menu item is selected.
+ *
+ * @since ?
+ * @return ETrue if the form data has been saved, otherwise EFalse.
+ */
+ virtual TBool SaveFormDataL();
+
+ /**
+ * Called by the framework before the form is initialised.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void PreLayoutDynInitL();
+
+ /**
+ * Called by the framework to process the options menu.
+ *
+ * @since ?
+ * @param aCommandId The command.
+ * @return void.
+ */
+ virtual void ProcessCommandL(TInt aCommandId);
+
+
+ private: // New methods
+ /**
+ * C++ default constructor.
+ */
+ CFeedsEditFolderDialog(MFeedsEditFolderDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName);
+
+ /**
+ * Loads the form data before the form is displayed.
+ *
+ * @since ?
+ * @return ETrue if the form data has been saved, otherwise EFalse.
+ */
+ void LoadFormValuesFromDataL();
+
+
+ private:
+ MFeedsEditFolderDialogObserver& iObserver;
+ CAknViewAppUi* iAppUi; // not owned
+ TBool iIsNewFolder;
+ TBool iExitDialog;
+
+ const TDesC& iName;
+ };
+
+#endif // FEEDS_EDIT_FOLDER_DIALOG_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsFeedContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A container to browse a given feed.
+*
+*/
+
+
+#ifndef FEED_CONTAINER_H
+#define FEED_CONTAINER_H
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <coemop.h>
+#include <aknnavidecoratorobserver.h>
+#include <brctlspecialloadobserver.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknNavigationDecorator;
+class CBrCtlInterface;
+//class CBufFlat;
+class CFeed;
+class CFeedsFeedView;
+//class CXmlEncoding;
+class MApiProvider;
+class CFeedsEntity;
+
+// CLASS DECLARATION
+
+
+/**
+* A container to browse a given feed.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsFeedContainer : public CCoeControl, public MBrCtlSpecialLoadObserver
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsFeedContainer* NewL(
+ CFeedsFeedView* aView,
+ MApiProvider& aApiProvider);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsFeedContainer();
+
+
+ public: // From CoeControl
+ /**
+ * Handles key event.
+ *
+ * @param aKeyEvent The key event.
+ * @param aType The type of the event.
+ * @return Indicates whether the key event was used by this control or not
+ */
+ virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+ /**
+ * HandlePointerEventL
+ * From CCoeControl
+ *
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+#ifdef __SERIES60_HELP
+ /**
+ * Get help context for the control.
+ *
+ * @since ?
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ virtual void GetHelpContext(TCoeHelpContext& aContext) const;
+#endif // __SERIES60_HELP
+
+ /**
+ * Sets this control as visible or invisible.
+ *
+ * @since ?
+ * @param aVisible ETrue to make the control visible, EFalse to make it invisible.
+ * @return Void
+ */
+ virtual void MakeVisible(TBool aVisible);
+
+
+ protected: // From CoeControl
+ /**
+ * Called by framework when the view size is changed.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void SizeChanged();
+
+ /**
+ * Called by the framework when a display resource changes (i.e. skin or layout).
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void HandleResourceChange(TInt aType);
+
+ /**
+ * Returns number of components.
+ *
+ * @since ?
+ * @return Number of component controls.
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Returns pointer to particular component.
+ *
+ * @since ?
+ * @param aIndex Index whose control's pointer has to returned.
+ * @return Pointer to component control
+ */
+ virtual CCoeControl* ComponentControl(TInt aIndex) const;
+
+
+ public: // From MBrCtlSpecialLoadObserver
+ /**
+ * Request to create a network connection.
+ *
+ * @since 2.8
+ * @param aConnectionPtr A pointer to the new connection. If NULL, the
+ proxy filter will automatically create a network connection
+ * @param aSockSvrHandle A handle to the socket server.
+ * @param aNewConn A flag if a new connection was created. If the
+ connection is not new, proxy filter optimization will not
+ read the proxy again from CommsBd.
+ * @param aBearerType The bearer type of the new connection
+ * @return void
+ */
+ virtual void NetworkConnectionNeededL(TInt* aConnectionPtr, TInt* aSockSvrHandle,
+ TBool* aNewConn, TApBearerType* aBearerType);
+
+ /**
+ * Request the host applicaion to handle non-http request.
+ *
+ * @since 2.8
+ * @param aUrl The non-http(s) or file URL
+ * @param aParamList Parameters to pass to the host application.
+ Contain referer header. It could be NULL
+ * @return ETrue is handled by the host application. EFlase if not
+ */
+ virtual TBool HandleRequestL(RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray);
+
+ /**
+ * Request the host applicaion to handle downloads
+ *
+ * @since 2.8
+ * @param aTypeArray array of download parameter types
+ * @param aDesArray array of values associated with the types in the type array
+ * @return ETrue is handled by the host application. EFlase if not
+ */
+ virtual TBool HandleDownloadL(RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray);
+
+ public: // New methods.
+ /**
+ * Clears the navigation pane.
+ *
+ * @since 3.0
+ * @return void
+ */
+ void ClearNavigationPane();
+
+ /**
+ * Sets the current feed
+ *
+ * @since 3.0
+ * @param aFeed The new feed.
+ * @param aInitialItem The initial item to show.
+ * @return Void
+ */
+ void SetCurrentFeedL(CFeedsEntity& aFeed, TInt aInitialItem);
+
+ /**
+ * Returns the current item's url.
+ *
+ * @since 3.0
+ * @return void
+ */
+ const TDesC& GetItemUrl();
+
+ /**
+ * Returns the index of the current item.
+ *
+ * @since 3.0
+ * @return The index.
+ */
+ TInt CurrentItem();
+
+ /**
+ * Returns the number of items.
+ *
+ * @since 5.0
+ * @return The number of items
+ */
+ TInt ItemCount() const;
+
+ /**
+ * Shows the next item if possible.
+ *
+ * @since 3.0
+ * @return The index.
+ */
+ void ShowNextItemL();
+
+ /**
+ * Shows the prev item if possible.
+ *
+ * @since 3.0
+ * @return The index.
+ */
+ void ShowPrevItemL();
+
+
+ private: // New methods.
+ /**
+ * C++ default constructor.
+ */
+ CFeedsFeedContainer
+ ( CFeedsFeedView* aView,
+ MApiProvider& aApiProvider );
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Handles the changes needed to the Navigation Pane.
+ *
+ * @since 3.0
+ * @return void
+ */
+ void UpdateNavigationPaneL();
+
+ /**
+ * Shows the given feed item.
+ *
+ * @since 3.0
+ * @return void
+ */
+ void ShowFeedItemL();
+
+ /**
+ * Loads the template html file.
+ *
+ * @since 3.1
+ * @param aTemplateName The name of the template.
+ * @return void.
+ */
+ void LoadTemplateL(const TDesC& aTemplateName);
+
+ /**
+ * Loads and resolves the tokens in the template html file.
+ *
+ * @since 3.1
+ * @param aTitle The title.
+ * @param aTimestamp The timestamp.
+ * @param aDescription The description.
+ * @param aUrl The url.
+ * @param aShowFullStory The "show full story" string.
+ * @param aShowPrev If ETrue the "prev" element is shown.
+ * @param aShowNext If ETrue the "next" element is shown.
+ * @return The resolved buffer.
+ */
+ HBufC* ResolveTemplateL(const TDesC& aTitle, const TDesC& aTimestamp,
+ const TDesC& aDescription, const TDesC& aUrl,
+ const TDesC& aEnclosure);
+
+ /**
+ * If need be copy the template from ROM.
+ *
+ * @since 3.1
+ * @param aName The name of the template file.
+ * @return void
+ */
+ void EnsureTemplateL(const TDesC& aName);
+
+ /**
+ * Extract the given BrCtl parameter from the list.
+ * @param aParamTypeToFind Extract this parameter.
+ * @param aTypeArray array of download parameter types.
+ * @param aDesArray array of values associated with the types in the type array.
+ * @param aParamFound Output: ETrue if the parameter was found.
+ * @return A TPtrC pointer for the value.
+ * @since 3.1
+ */
+ TPtrC ExtractBrCtlParam(
+ TUint aParamTypeToFind,
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray,
+ TBool& aParamFound ) const;
+
+ public: // Friends
+ friend class CFeedsFeedView;
+
+
+ protected:
+ CFeedsFeedView* iView; // not owned
+ MApiProvider& iApiProvider; // not owned
+ CBrCtlInterface* iBrowserControl;
+ CAknNavigationDecorator* iNaviPaneTabsGroup;
+
+ HBufC* iTemplate;
+ TInt iTitleCount;
+ TInt iWebUrlCount;
+ TInt iDateCount;
+ TInt iDescriptionCount;
+ TInt iEnclosureCount;
+ TInt iShowPrevCount;
+ TInt iShowNextCount;
+
+ CFeedsEntity* iFeed;
+ TInt iCurrentItem;
+ TPtrC iUrl;
+ };
+
+#endif // FEED_CONTAINER_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsFeedView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a given feed.
+*
+*/
+
+
+#ifndef FEED_VIEW_H
+#define FEED_VIEW_H
+
+
+// INCLUDES
+#include "BrowserAppViewBase.h"
+#include "FeedsFeedContainer.h"
+#include <AknToolbarObserver.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+
+// CLASS DECLARATION
+
+
+/**
+* A view to browse a given feed.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsFeedView: public CBrowserViewBase,
+ public MAknToolbarObserver
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsFeedView* NewL( MApiProvider& aApiProvider, TRect& aRect );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsFeedView();
+
+ public: // From CBrowserViewBase
+
+ /**
+ * Return command set id, to be displayed.
+ * @return The command set's resource id.
+ */
+ TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ /**
+ * @see CAknView
+ */
+ void HandleClientRectChange();
+
+ public: // From CAknView
+ /**
+ * Returns the id of the view.
+ *
+ * @since ?
+ * @return the id.
+ */
+ virtual TUid Id() const;
+
+ /**
+ * Processes commands.
+ *
+ * @since ?
+ * @param aCommand the command to process.
+ * @return void.
+ */
+ virtual void HandleCommandL(TInt aCommand);
+
+
+ protected: // From CAknView
+ /**
+ * Called when the view is activated.
+ *
+ * @since ?
+ * @param aPrevViewId the id of the prev view.
+ * @param aCustomMessageId The activation message id.
+ * @param aCustomMessage Activation params.
+ * @return void.
+ */
+ virtual void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+ const TDesC8& aCustomMessage);
+
+ /**
+ * Called when the view is deactivated.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void DoDeactivate();
+
+ /**
+ * Disables unrelated menu options.
+ *
+ * @since ?
+ * @param aResourceId The resource id of the menu.
+ * @param aMenuPane The menu.
+ * @return void.
+ */
+ virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+ public: // MAknToolbarObserver
+ /**
+ * Called when toolbar events occur
+ *
+ * @since 5.0
+ * @return void
+ */
+ void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand); }
+
+ public: // New Methods
+
+ /**
+ * Sets the initial item once the view is activated.
+ *
+ * @since 3.1
+ * @param aItemIndex The index of the inital item.
+ * @return void
+ */
+ void SetInitialItem(TInt aItemIndex);
+
+ /**
+ * Update the toolbar buttons' state
+ *
+ * @since 5.0
+ * @return void
+ */
+ void UpdateToolbarButtonsState();
+
+ /**
+ * Disconnect Browser Control
+ *
+ * @since 3.1
+ * @return void
+ */
+ void DisconnectL();
+
+ private: // New Methods
+ /**
+ * C++ default constructor.
+ */
+ CFeedsFeedView( MApiProvider& aApiProvider );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(TRect& aRect);
+
+
+ public: // Friends
+ friend class CFeedsFeedContainer;
+
+
+ private:
+ CFeedsFeedContainer* iContainer;
+ TBool iContainerOnStack;
+ TInt iInitialItem;
+ TBool iPageScalerEnabled;
+ TBool iPenEnabled;
+ TRect iOrigRect;
+ };
+
+#endif // FEED_VIEW_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsFileSearchAgent.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: File search utility active agent for use within browser ui
+*
+*/
+
+
+
+#ifndef CFEEDSFILESEARCHAGENT_H
+#define CFEEDSFILESEARCHAGENT_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <f32file.h>
+
+// CONSTANTS
+
+// MACROS
+
+// FUNCTION PROTOTYPES
+#define FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS 64
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+// DATA TYPES
+
+// CLASS DECLARATION
+
+/**
+* Encapsulate drive entry info
+* @since 3.2
+*/
+class TDriveEntry
+ {
+public:
+ TChar iLetter;
+ TInt iNumber;
+ };
+
+/**
+* Encapsulate File entry info
+* @since 3.2
+*/
+class TFileEntry
+ {
+public:
+ TFileName iPath;
+ TEntry iEntry;
+ };
+
+typedef CArrayFixSeg<TDriveEntry> CDriveEntryList;
+typedef CArrayFixSeg<TFileEntry> CFileEntryList;
+
+/**
+* A Callback mixin for search Agent
+* @since 3.2
+*/
+
+class MFeedsFileSearchAgentCallback
+ {
+ public:
+ virtual void FeedsFileSearchCompleteL(TInt aCount) = 0;
+ };
+
+// CLASS DECLARATION
+
+/**
+* An Active Agent used to search the filesystem for feeds files
+* @since 3.2
+*/
+
+class CFeedsFileSearchAgent : public CBase
+ {
+ public: // Constructor & destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsFileSearchAgent* NewL(MFeedsFileSearchAgentCallback& aCallback);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsFileSearchAgent();
+
+ public: // New Functions
+
+ /**
+ * Once the search agent has been setup via its constructor, begin
+ * the search process
+ * @since 3.2
+ * @return void
+ */
+ void StartSearchingL();
+
+ /**
+ * After the search has completed, allows client to retrieve a
+ * File entry pointer corresponding to the passed-in index
+ * @since 3.2
+ * @return File entry pointer or NULL if invalid index
+ */
+ TFileEntry* GetFileEntry(const TInt aIndex);
+
+ private: // Search Functions
+
+ /**
+ * Populate the list of available drives on the phone within this class
+ * @since 3.2
+ */
+ void GetDriveListL();
+
+ /**
+ * Given a directory, search for a wildcard-included filename within
+ * that directory
+ * @since 3.2
+ * @param a filename, a path
+ */
+ TInt DoSearchFiles(const TDesC& aFileName, const TDesC& aPath);
+
+ /**
+ * Given a directory, search recursively for a wildcard-included filename
+ * within the hierarchy below that directory
+ * @since 3.2
+ * @param a filename, a path
+ */
+ TInt DoSearchFilesRecursive(const TDesC& aFileName);
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CFeedsFileSearchAgent(MFeedsFileSearchAgentCallback& aCallback);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ public:
+ /**
+ * This method is a call back;
+ *
+ * @since 7.1
+ * @return The TBool.
+ */
+ static TBool LazyCallBack(TAny* aPtr);
+
+ /**
+ * This method Cancels the ongoing search;
+ *
+ * @since 7.1
+ * @return Void.
+ */
+ void CancelSearch();
+
+ /**
+ * This method Starts the search;
+ *
+ * @since 7.1
+ * @return TBool.
+ */
+ TBool StartSearchFile();
+
+ private: // Data
+
+ RFs iFs;
+
+ MFeedsFileSearchAgentCallback* iCallback; // not owned (callee owns)
+ CDriveEntryList* iDriveEntryList; // owned
+
+ TInt iSearchDriveIndex;
+
+ CFileEntryList* iFileEntryList; // owned
+ TBool iCancelSearch;
+ CIdle* iLazyCaller;
+ CDirScan* iScan;
+ };
+
+#endif // CFEEDSFILESEARCHAGENT_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsFolderContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,674 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A container to browse a user's list of feeds.
+*
+*/
+
+
+#ifndef FEEDS_FOLDER_CONTAINER_H
+#define FEEDS_FOLDER_CONTAINER_H
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <coemop.h>
+#include <eiklbo.h>
+
+#include "FeedsEditFeedDialog.h"
+#include "FeedsEditFolderDialog.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknDoubleGraphicStyleListBox;
+class CAknNavigationDecorator;
+class CAknIconArray;
+class CAknPopupList;
+class CAknSingleGraphicPopupMenuStyleListBox;
+class CFeedsFolderView;
+class CFeedsEntity;
+class CGulIcon;
+class TAknsItemID;
+class MApiProvider;
+
+// CLASS DECLARATION
+
+
+/**
+* A container to browse a user's list of feeds.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsFolderContainer : public CCoeControl, public MEikListBoxObserver,
+ public MFeedsEditFeedDialogObserver, public MFeedsEditFolderDialogObserver
+ {
+ private:
+ enum TIcons
+ {
+ EIconMark = 0,
+ EIconFolder,
+ EIconErrorFolder,
+ EIconFeed,
+ EIconFeedUnread,
+ EIconErrorFeed
+ };
+
+
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsFolderContainer* NewL(
+ CFeedsFolderView* aView,
+ MApiProvider& aApiProvider,
+ const TRect& aRect);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsFolderContainer();
+
+
+ public: // From CoeControl
+ /**
+ * Handles key event.
+ *
+ * @param aKeyEvent The key event.
+ * @param aType The type of the event.
+ * @return Indicates whether the key event was used by this control or not
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+#ifdef __SERIES60_HELP
+ /**
+ * Get help context for the control.
+ *
+ * @since ?
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ virtual void GetHelpContext(TCoeHelpContext& aContext) const;
+#endif // __SERIES60_HELP
+
+
+ protected: // From CoeControl
+ /**
+ * Called by framework when the view size is changed.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void SizeChanged();
+
+ /**
+ * Called by the framework when a display resource changes (i.e. skin or layout).
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void HandleResourceChange(TInt aType);
+
+ /**
+ * Returns number of components.
+ *
+ * @since ?
+ * @return Number of component controls.
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Returns pointer to particular component.
+ *
+ * @since ?
+ * @param aIndex Index whose control's pointer has to returned.
+ * @return Pointer to component control
+ */
+ virtual CCoeControl* ComponentControl(TInt aIndex) const;
+
+
+ public: // MEikListBoxObserver
+ /**
+ * Processes key events from the listbox.
+ *
+ * @since ?
+ * @param aListBox Listbox being observed.
+ * @param aEventType Event observed.
+ * @return void
+ */
+ virtual void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+
+
+ public: // From MFeedEditFeedDialogObserver
+ /**
+ * Called when a feed's name and/or url is changed -- this is called
+ * after both IsValidFeedName and IsValidFeedUrl are called.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aUrl The feed's new url.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ virtual void UpdateFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq);
+
+ /**
+ * Called when a new feed is created -- this is called after both
+ * IsValidFeedName and IsValidFeedUrl are called.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aUrl The feed's new url.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ virtual void NewFeedL(const TDesC& aName, const TDesC& aUrl,TInt aFreq);
+
+ /**
+ * Validates the Feed's updated name.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aIsEditing True if the edit dialog was opened to edit a feed.
+ * @return ETrue if the value is valid.
+ */
+ virtual TBool IsFeedNameValidL(const TDesC* aName, TBool aIsEditing);
+
+ /**
+ * Validates the Feed's updated url.
+ *
+ * @since 3.0
+ * @param aUrl The feed's new url.
+ * @return ETrue if the value is valid.
+ */
+ virtual TBool IsFeedUrlValidL(const TDesC* aUrl);
+
+
+ public: // From MFeedEditFolderDialogObserver
+ /**
+ * Called when a folder's name is changed -- this is called
+ * after IsValidFolderName is called.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @return void.
+ */
+ virtual void UpdateFolderL(const TDesC& aName);
+
+ /**
+ * Called when a new folder is created -- this is called
+ * after IsValidFolderName is called.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @return void.
+ */
+ virtual void NewFolderL(const TDesC& aName);
+
+ /**
+ * Validates the folder's updated name.
+ *
+ * @since 3.0
+ * @param aName The feed's new name.
+ * @param aIsEditing True if the edit dialog was opened to edit a folder.
+ * @return ETrue if the value is valid.
+ */
+ virtual TBool IsFolderNameValidL(const TDesC* aName, TBool aIsEditing);
+
+
+ public: // New methods
+ /**
+ * Called to notify the container that root folder has changed.
+ *
+ * @since 3.1
+ * @param aRootFolder The new root folder.
+ * @return Void.
+ */
+ void RootFolderChangedL(const CFeedsEntity& aRootFolder);
+
+ /**
+ * Update the view's title.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void UpdateTitleL();
+
+ /**
+ * Returns the current folder-item.
+ *
+ * @since 3.0
+ * @return The current folder-item..
+ */
+ CFeedsEntity* CurrentItem() const;
+
+
+ /**
+ * Returns the index of the current folder-item.
+ *
+ * @since 3.0
+ * @return The index of the current folder-item..
+ */
+ TInt CurrentItemIndex() const;
+
+ /**
+ * Updates the current folder-item.
+ *
+ * @since 3.0
+ * @param aName The new name.
+ * @param aUrl The new url.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ void UpdateCurrentItemL(const TDesC* aName, const TDesC* aUrl, TInt aFreq);
+
+ /**
+ * Add a new feed.
+ *
+ * @since 3.0
+ * @param aName The new name.
+ * @param aUrl The new url.
+ * @param aFreq The frequency for auto updating.
+ * @return void.
+ */
+ void AddNewFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq);
+
+ /**
+ * Add a folder feed.
+ *
+ * @since 3.0
+ * @param aName The new name.
+ * @return void.
+ */
+ void AddNewFolderL(const TDesC& aName);
+
+ /**
+ * Delete the current feed or folder
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void DeleteCurrentItemL();
+
+ /**
+ * Returns an array containing the indexes of the marked items.
+ *
+ * @since 3.0
+ * @return The array.
+ */
+ const CArrayFix<TInt>* MarkedItems();
+
+ /**
+ * Replaces the current folder with its parent.
+ *
+ * @since 3.0
+ * @return Returns ETrue if iCurrentFolder != iRootFoler.
+ */
+ TBool HandleShowParentFolderL(void);
+
+ /**
+ * Refreshes the root folder.
+ *
+ * @since 3.0
+ * @return void
+ */
+ //void HandleRefreshRootFolderL(void);
+
+ /**
+ * Handles selections and open commands
+ *
+ * @since 3.0
+ * @return void
+ */
+ void HandleSelectionL(void);
+
+ /**
+ * Handles updating the current Feed.
+ *
+ * @since 3.1
+ * @return void
+ */
+ void HandleUpdateFeedL(TBool aUpdateAll = EFalse);
+
+ /**
+ * Handles the add-feed command.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleNewFeedL();
+
+ /**
+ * Handles the add-folder command.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleNewFolderL();
+
+ /**
+ * Handles the edit command.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleEditL();
+
+ /**
+ * Handles the delete command.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleDeleteL();
+
+ /**
+ * Handles the move command.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleMoveL();
+
+ /**
+ * Handles the move to folder command.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleMoveToFolderL();
+
+ /**
+ * Handles the mark-related commands.
+ *
+ * @since 3.0
+ * @param aCommand The command to process.
+ * @return void.
+ */
+ void HandleMarkL(TInt aCommand);
+
+ /**
+ * Handles the ok commands.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void HandleOkL();
+
+ /**
+ * Handles the cancel commands.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void HandleCancelL();
+
+ /**
+ * Handles the export command.
+ *
+ * @since 3.2
+ * @return void.
+ */
+ void HandleExportL();
+
+ /**
+ * Calculate the unread count based on delta.
+ *
+ * @since 3.1
+ * @return the calculated value.
+ */
+ TInt UnreadCountChangedL( TInt aUnreadCountDelta );
+
+ /**
+ * Set the unread count.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void SetUnreadCountL( TInt aUnreadCount );
+
+ /**
+ * Count the number of folders in a given feeds folder
+ *
+ * @since 5.0
+ * @param folder to count
+ * @param total count folders
+ * @return void
+ */
+ void CountFolderFolders(const CFeedsEntity* aFolder, TInt &aFolderCount);
+
+ /**
+ * Update the toolbar buttons' state
+ *
+ * @since 5.0
+ * @return void
+ */
+ void UpdateToolbarButtonsState();
+
+ /**
+ * Recursive loop to find a feed
+ *
+ * @since 5.0
+ * @return ETrue if feed item is found
+ */
+ TBool SearchForFeedL(const CFeedsEntity* item);
+
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ /**
+ * To know Whether any feed item selected for move
+ *
+ * @since 7.2
+ * @return ETrue if feed item is selected for move
+ */
+ TBool isMoveActive(){ return iMoveActive;}
+#endif
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFeedsFolderContainer
+ ( CFeedsFolderView* aView,
+ MApiProvider& aApiProvider );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(const TRect& aRect);
+
+ /**
+ * Inits the container.
+ *
+ * @since 3.0
+ * @param aRect The drawing rect.
+ * @return void
+ */
+ void InitContainerL(const TRect& aRect);
+
+ /**
+ * Inits the array of needed icons.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void InitIconArrayL();
+
+ /**
+ * Loads and appends an icon to the icon array..
+ *
+ * @since 3.0
+ * @param aIcons The icon array.
+ * @param aID Item ID of the masked bitmap to be created.
+ * @param aFilename Filename to be used to construct the item,
+ * if no matching item was found in the currently active skin.
+ * @param aFileBitmapId ID of the bitmap in the file.
+ * Used only if no matching item was found in the currently
+ * active skin.
+ * @param aFileMaskId ID of the mask in the file.
+ * Used only if no matching item was found in the currently
+ * active skin.
+ * @return void.
+ */
+ void AppendIconL(CArrayPtr<CGulIcon>* aIcons, const TAknsItemID& aID,
+ const TDesC& aFilename, const TInt aFileBitmapId, const TInt aFileMaskId);
+
+ /**
+ * Sets the list-box's values.
+ *
+ * @since 3.0
+ * @param aInitialSelection The index of the selection after the update.
+ * @return void
+ */
+ void UpdateListBoxL(TInt aInitialSelection = 0);
+
+ /**
+ * Inits the move-to-folder pop-up.
+ *
+ * @since 3.0
+ * @param aListBox The pop-up's listbox.
+ * @param aPopupList The pop-up.
+ * @return void
+ */
+ void MoveToFolderInitL(CAknSingleGraphicPopupMenuStyleListBox*& aListBox,
+ CAknPopupList*& aPopupList);
+
+ /**
+ * Sets the move-to-folder list-box's values.
+ *
+ * @since 3.0
+ * @param aListBoxRows Holds the values in the pop-up.
+ * @return void
+ */
+ void MoveToFolderSetItemsL(CDesCArraySeg& aListBoxRows);
+
+ void AddFoldersToListL(const CFeedsEntity& aFolder, CDesCArraySeg& aListBoxRows);
+
+ /**
+ * Moves the marked items into the target-folder.
+ *
+ * @since 3.0
+ * @param aTargetFolder The folder where the items will be moved.
+ * @return void
+ */
+ void MoveToFolderMoveL(const CFeedsEntity& aTargetFolder);
+
+ /**
+ * Show the feed in the TopicView.
+ *
+ * @since 3.0
+ * @param aFolderItem The folder item to show.
+ * @return void
+ */
+ void ShowFeedL(const CFeedsEntity& aFolderItem);
+
+ /**
+ * Moves the current or marked items -- called after the move-cmd is confirmed.
+ *
+ * @since 3.0
+ * @return void
+ */
+ void PostHandleMoveL();
+
+ /**
+ * Updates the options softkey to reflect the current state.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void UpdateCbaL();
+
+ /**
+ * Changes the current folder.
+ *
+ * @since 3.1
+ * @param aFolder The new current folder.
+ * @param aResetSelection If ETrue the current selection is set to the first item.
+ * @return void.
+ */
+ void SetCurrentFolder(const CFeedsEntity* aFolder,
+ TBool aResetSelection = EFalse);
+
+ /**
+ * Dynamically initializes the Mark/Unmark submenu.
+ *
+ * @since 3.2
+ * @param aMenu Pointer to the Menu Pane
+ * @return - iListBox.
+ */
+
+ void DynInitMarkUnmarkMenuPane(CEikMenuPane* aMenuPane);
+
+ /**
+ * Dim or Undim toolbar
+ *
+ * @since 5.0
+ * @param aDim - is ETrue, then dim toolbar ; else undim toolbar
+ * @return - void
+ */
+
+ void DimToolbar(TBool aDim);
+
+ /**
+ * Check for Marked items are folder or feed
+ *
+ * @since 5.0
+ * @return - bool
+ */
+
+ TBool IsMarkedItemFolder();
+
+ /**
+ * Clears the navigation pane.
+ *
+ * @since 7.1
+ * @return void
+ */
+ void ClearNavigationPane();
+
+ /**
+ * Handles the changes needed to the Navigation Pane.
+ *
+ * @since 7.1
+ * @return void
+ */
+ void UpdateNavigationPaneL();
+ public:
+ friend class CFeedsFolderView;
+
+
+ private:
+ CFeedsFolderView* iView; // not owned
+ MApiProvider& iApiProvider; // not owned
+ CAknDoubleGraphicStyleListBox* iListBox;
+ CDesCArraySeg* iListBoxRows;
+ CAknIconArray* iListBoxIcons;
+ TBool iOwnsListBoxIcons;
+
+ TBool iMoveActive;
+
+ const CFeedsEntity* iRootFolder;
+ const CFeedsEntity* iCurrentFolder;
+ TInt iCurrentFolderId;
+ RPointerArray<CFeedsEntity> iTargetFolderList; // pointers not owned
+ CAknNavigationDecorator* iNaviDecorator;
+ };
+
+#endif // FEEDS_FOLDER_CONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsFolderView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a user's list of feeds.
+*
+*/
+
+
+#ifndef FEEDS_FOLDER_VIEW_H
+#define FEEDS_FOLDER_VIEW_H
+
+
+// INCLUDES
+#include "BrowserAppViewBase.h"
+#include "FeedsFolderContainer.h"
+#include <AknToolbarObserver.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+
+// CLASS DECLARATION
+
+/**
+* A view to browse a user's list of feeds.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsFolderView: public CBrowserViewBase,
+ public MAknToolbarObserver
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsFolderView* NewL( MApiProvider& aApiProvider, TRect& aRect );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsFolderView();
+
+ public: // From CBrowserViewBase
+
+ /**
+ * Return command set id, to be displayed.
+ * @return The command set's resource id.
+ */
+ TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ /**
+ * @see CAknView
+ */
+ void HandleClientRectChange();
+
+ public: // From CAknView
+ /**
+ * Returns the id of the view.
+ *
+ * @since ?
+ * @return the id.
+ */
+ virtual TUid Id() const;
+
+ /**
+ * Processes commands.
+ *
+ * @since ?
+ * @param aCommand the command to process.
+ * @return void.
+ */
+ virtual void HandleCommandL(TInt aCommand);
+
+
+ protected: // From CAknView
+ /**
+ * Called when the view is activated.
+ *
+ * @since ?
+ * @param aPrevViewId the id of the prev view.
+ * @param aCustomMessageId The activation message id.
+ * @param aCustomMessage Activation params.
+ * @return void.
+ */
+ virtual void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+ const TDesC8& aCustomMessage);
+
+ /**
+ * Called when the view is deactivated.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void DoDeactivate();
+
+ /**
+ * Disables unrelated menu options.
+ *
+ * @since ?
+ * @param aResourceId The resource id of the menu.
+ * @param aMenuPane The menu.
+ * @return void.
+ */
+ virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+ public: // MAknToolbarObserver
+ /**
+ * Called when toolbar events occur
+ *
+ * @since 5.0
+ * @return void
+ */
+ void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand); }
+
+
+ public: // New Methods
+ /**
+ * Updates the options softkey to reflect the command set.
+ *
+ * @since 3.0
+ * @param aCommandSet The new "command set".
+ * @return void.
+ */
+ void UpdateCbaL(TInt aCommandSet);
+
+
+ /**
+ * Called to notify the view the that root folder has changed.
+ *
+ * @since 3.1
+ * @param aRootFolder The new root folder.
+ * @return Void.
+ */
+ void RootFolderChangedL(const CFeedsEntity& aRootFolder);
+
+ /**
+ * Changes the current folder.
+ *
+ * @since 3.1
+ * @param aFolder The new current folder.
+ * @param aResetSelection If ETrue the current selection is set to the first item.
+ * @return void.
+ */
+ void SetCurrentFolder(const CFeedsEntity& aFolder, TBool aResetSelection = EFalse);
+
+ /**
+ * Calculate the unread count based on delta.
+ *
+ * @since 3.1
+ * @return the calculated value.
+ */
+ TInt UnreadCountChangedL( TInt aUnreadCountDelta );
+
+ /**
+ * Set the unread count.
+ *
+ * @since 3.1
+ * @return void.
+ */
+ void SetUnreadCountL( TInt aUnreadCount );
+
+
+ public: // Friends
+ friend class CFeedsFolderContainer;
+
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFeedsFolderView( MApiProvider& aApiProvider );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(TRect& aRect);
+
+ /**
+ * Check for any Marked Feeds Folders
+ * @since 3.2
+ * @return ETrue if any feeds folders are currently marked
+ * otherwise, return EFalse
+ */
+ TBool AnyFoldersMarked();
+
+ /**
+ * Check for any Marked items in Feeds view
+ * @since 3.2
+ * @return ETrue anything is marked otherwise returns EFalse
+ */
+ TBool AnyMarkedItems();
+
+ /**
+ * Check if current item is marked
+ * @since 5.0
+ * @return ETrue if current item is marked, otherwise returns EFalse
+ */
+ TBool IsCurrentItemMarked();
+
+
+
+
+ private:
+ const CFeedsEntity* iRootFolder;
+ CFeedsFolderContainer* iContainer;
+ TBool iContainerOnStack;
+ TInt iInitialItem;
+ TBool iPenEnabled;
+ };
+
+#endif // FEEDS_FOLDER_VIEW_H
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsTopicContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A container to browse a feed's topics.
+*
+*/
+
+
+#ifndef FEEDS_TOPIC_CONTAINER_H
+#define FEEDS_TOPIC_CONTAINER_H
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <coemop.h>
+#include <eiklbo.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknSingleGraphicStyleListBox;
+class CAknNavigationDecorator;
+class CItem;
+class CFeedsEntity;
+class CFeedsTopicView;
+class MApiProvider;
+
+// CLASS DECLARATION
+
+
+/**
+* A container to browse a feed's topics.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsTopicContainer: public CCoeControl, public MEikListBoxObserver
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsTopicContainer* NewL(
+ CFeedsTopicView* aView,
+ MApiProvider& aApiProvider,
+ const TRect& aRect);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsTopicContainer();
+
+
+ public: // From CoeControl
+ /**
+ * Handles key event.
+ *
+ * @param aKeyEvent The key event.
+ * @param aType The type of the event.
+ * @return Indicates whether the key event was used by this control or not
+ */
+ virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+#ifdef __SERIES60_HELP
+ /**
+ * Get help context for the control.
+ *
+ * @since ?
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ void virtual GetHelpContext(TCoeHelpContext& aContext) const;
+#endif // __SERIES60_HELP
+
+
+ protected: // From CoeControl
+ /**
+ * Called by framework when the view size is changed.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void SizeChanged();
+
+ /**
+ * Called by the framework when a display resource changes (i.e. skin or layout).
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void HandleResourceChange(TInt aType);
+
+ /**
+ * Returns number of components.
+ *
+ * @since ?
+ * @return Number of component controls.
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Returns pointer to particular component.
+ *
+ * @since ?
+ * @param aIndex Index whose control's pointer has to returned.
+ * @return Pointer to component control
+ */
+ virtual CCoeControl* ComponentControl(TInt aIndex) const;
+
+
+ public: // MEikListBoxObserver
+ /**
+ * Processes key events from the listbox.
+ *
+ * @since ?
+ * @param aListBox Listbox being observed.
+ * @param aEventType Event observed.
+ * @return void
+ */
+ virtual void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+
+
+ public: // New methods.
+ /**
+ * Sets the current feed
+ *
+ * @since 3.0
+ * @param aFeed The new feed.
+ * @param aIndex The inital items to select.
+ * @return Void
+ */
+ void SetCurrentFeedL(const CFeedsEntity& aFeed, TInt aIndex);
+
+ /**
+ * Returns the index of the current item.
+ *
+ * @since 3.0
+ * @return The index of the current item.
+ */
+ TInt CurrentIndex() const;
+
+ /**
+ * Returns the number of items.
+ *
+ * @since 3.0
+ * @return The the current item.
+ */
+ TInt ItemCount() const;
+
+ /**
+ * Update the view's title.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void UpdateTitleL();
+
+ /**
+ * Handles selections and open commands
+ *
+ * @since 3.0
+ * @return void
+ */
+ void HandleOpenL(void);
+
+ /**
+ * Handles updating the current Feed.
+ *
+ * @since 3.1
+ * @return void
+ */
+ void HandleUpdateFeedL(void);
+
+ /**
+ * Clears the navigation pane.
+ *
+ * @since 3.1
+ * @return void
+ */
+ void ClearNavigationPane();
+
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFeedsTopicContainer
+ ( CFeedsTopicView* aView,
+ MApiProvider& aApiProvider );
+
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(const TRect& aRect);
+
+ /**
+ * Inits the container.
+ *
+ * @since 3.0
+ * @param aRect The drawing rect.
+ * @return void
+ */
+ void InitContainerL(const TRect& aRect);
+
+ /**
+ * Inits the array of needed icons.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void InitIconArrayL();
+
+ /**
+ * Loads and appends an icon to the icon array..
+ *
+ * @since 3.0
+ * @param aIcons The icon array.
+ * @param aID Item ID of the masked bitmap to be created.
+ * @param aFilename Filename to be used to construct the item,
+ * if no matching item was found in the currently active skin.
+ * @param aFileBitmapId ID of the bitmap in the file.
+ * Used only if no matching item was found in the currently
+ * active skin.
+ * @param aFileMaskId ID of the mask in the file.
+ * Used only if no matching item was found in the currently
+ * active skin.
+ * @return void.
+ */
+ void AppendIconL(CArrayPtr<CGulIcon>* aIcons, const TAknsItemID& aID,
+ const TDesC& aFilename, const TInt aFileBitmapId, const TInt aFileMaskId);
+
+ /**
+ * Sets the list-box's values.
+ *
+ * @since 3.0
+ * @return void
+ */
+ void UpdateListBoxL();
+
+ /**
+ * Handles the changes needed to the Navigation Pane.
+ *
+ * @since 3.1
+ * @return void
+ */
+ void UpdateNavigationPaneL();
+
+ public: // Friends
+ friend class CFeedsTopicView;
+
+ protected:
+ CFeedsTopicView* iView; // not owned
+ MApiProvider& iApiProvider; // not owned
+ CAknSingleGraphicStyleListBox* iListBox;
+ CDesCArraySeg* iListBoxRows;
+ CAknNavigationDecorator* iNaviDecorator;
+
+ const CFeedsEntity* iFeed;
+ };
+
+#endif // FEEDS_TOPIC_CONTAINER_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsTopicView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a feed's topics.
+*
+*/
+
+
+#ifndef FEEDS_TOPIC_VIEW_H
+#define FEEDS_TOPIC_VIEW_H
+
+
+// INCLUDES
+#include "BrowserAppViewBase.h"
+
+#include "FeedsTopicContainer.h"
+#include <AknToolbarObserver.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class MApiProvider;
+
+// CLASS DECLARATION
+
+
+/**
+* A view to browse a feed's topics.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsTopicView: public CBrowserViewBase,
+ public MAknToolbarObserver
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsTopicView* NewL( MApiProvider& aApiProvider, TRect& aRect );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsTopicView();
+
+ public: // From CBrowserViewBase
+
+ /**
+ * Return command set id, to be displayed.
+ * @return The command set's resource id.
+ */
+ TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ /**
+ * @see CAknView
+ */
+ void HandleClientRectChange();
+
+ public: // From CAknView
+ /**
+ * Returns the id of the view.
+ *
+ * @since ?
+ * @return the id.
+ */
+ virtual TUid Id() const;
+
+ /**
+ * Processes commands.
+ *
+ * @since ?
+ * @param aCommand the command to process.
+ * @return void.
+ */
+ virtual void HandleCommandL(TInt aCommand);
+
+
+ protected: // From CAknView
+ /**
+ * Called when the view is activated.
+ *
+ * @since ?
+ * @param aPrevViewId the id of the prev view.
+ * @param aCustomMessageId The activation message id.
+ * @param aCustomMessage Activation params.
+ * @return void.
+ */
+ virtual void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+ const TDesC8& aCustomMessage);
+
+ /**
+ * Called when the view is deactivated.
+ *
+ * @since ?
+ * @return void.
+ */
+ virtual void DoDeactivate();
+
+ /**
+ * Disables unrelated menu options.
+ *
+ * @since ?
+ * @param aResourceId The resource id of the menu.
+ * @param aMenuPane The menu.
+ * @return void.
+ */
+ virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+ public: // MAknToolbarObserver
+ /**
+ * Called when toolbar events occur
+ *
+ * @since 5.0
+ * @return void
+ */
+ void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand); }
+
+ public: // New Methods
+
+ /**
+ * Sets the current feed
+ *
+ * @since 3.0
+ * @param aFeed The new feed.
+ * @param aIndex The inital items to select.
+ * @return Void
+ */
+ void SetCurrentFeedL(const CFeedsEntity& aFeed, TInt aIndex);
+
+ /**
+ * Sets the initial item once the view is activated.
+ *
+ * @since 3.1
+ * @param aItemIndex The index of the inital item.
+ * @return void
+ */
+ void SetInitialItem(TInt aItemIndex);
+
+ /**
+ * Update the toolbar buttons' state
+ *
+ * @since 5.0
+ * @return void
+ */
+ void UpdateToolbarButtonsState();
+
+ private: // New Methods
+ /**
+ * C++ default constructor.
+ */
+ CFeedsTopicView( MApiProvider& aApiProvider );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(TRect& aRect);
+
+
+ public: // Friends
+ friend class CTopicContainer;
+
+
+ private:
+ CFeedsTopicContainer* iContainer;
+ TBool iContainerOnStack;
+ TInt iInitialItem;
+ TBool iPenEnabled;
+ };
+
+#endif // FEEDS_TOPIC_VIEW_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsWaitDialog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Encapsulates a wait or progress dialog.
+*
+*/
+
+#ifndef FEEDS_WAIT_DIALOG_H
+#define FEEDS_WAIT_DIALOG_H
+
+
+// INCLUDES
+#include <aknwaitnotewrapper.h>
+#include <e32base.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+
+/**
+* Observer interface for the WaitDialog
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class MFeedsWaitDialogListener
+ {
+ public:
+ /**
+ * Called when the user presses the cancel button.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ virtual void DialogDismissedL() = 0;
+ };
+
+
+/**
+* Encapsulates a wait or progress dialog.
+* @lib FeedsEngine.lib
+* @since 3.0
+*/
+class CFeedsWaitDialog: public CBase, public MProgressDialogCallback
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFeedsWaitDialog* NewL(MFeedsWaitDialogListener& aListener);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFeedsWaitDialog();
+
+
+ public: // From MProgressDialogCallback
+ /**
+ * Called when the user presses the cancel button.
+ *
+ * @since ?
+ * @param aButtonId The id of the pressed button.
+ * @return void.
+ */
+ virtual void DialogDismissedL(TInt aButtonId);
+
+
+ public: // New methods
+ /**
+ * Displays a WaitDialog.
+ *
+ * @since 3.0
+ * @param aLabelId The label's resource id.
+ * @return void.
+ */
+ void ShowWaitDialogL(TInt aLabelId);
+
+ /**
+ * Displays a ProgressDialog.
+ *
+ * @since 3.0
+ * @param aLabelId The label's resource id.
+ * @return void.
+ */
+ void ShowProgressDialogL(TInt aLabelId);
+
+ /**
+ * Updates the dialog's label.
+ *
+ * @since 3.0
+ * @param aLabelId The label's resource id.
+ * @return void.
+ */
+ void UpdateLabelL(TInt aLabelId);
+
+ /**
+ * For progress dialogs this method set the max progress value.
+ *
+ * @since 3.0
+ * @param aMaxValue The progress dialog's max value.
+ * @return void.
+ */
+ void SetMaxProgressL(TInt aMaxValue);
+
+ /**
+ * For progress dialogs this method updates the progress.
+ *
+ * @since 3.0
+ * @param aIncrement The amount the progress changed.
+ * @return void.
+ */
+ void UpdateProgressL(TInt aIncrement);
+
+ /**
+ * Closes the dialog.
+ *
+ * @since 3.0
+ * @return void.
+ */
+ void Close();
+
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFeedsWaitDialog(MFeedsWaitDialogListener& aListener);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+
+ private:
+ MFeedsWaitDialogListener& iListener;
+
+ CAknWaitDialog* iWaitDialog;
+ CAknProgressDialog* iProgressDialog;
+ CEikProgressInfo* iProgressInfo;
+ };
+
+#endif // FEEDS_WAIT_DIALOG_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsClientUtilities.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1873 @@
+/*
+* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Manages the feed related views and implements the FeedsViewBridge.
+*
+*/
+
+#include <AknView.h>
+#include <AknViewAppUi.h>
+#include <BaUtils.h>
+#include <BaDesca.h>
+#include <brctlinterface.h>
+#include <GulIcon.h>
+#include <data_caging_path_literals.hrh>
+#include <eikmenup.h>
+#include <StringLoader.h>
+
+#include <BrowserNG.rsg>
+#include <brctldialogsprovider.h>
+#include <browserdialogsprovider.h>
+#include <brctldefs.h>
+#include <internetconnectionmanager.h>
+#include <FeatMgr.h>
+#include <Uri16.h>
+
+#include "Browser.hrh"
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "BrowserUIVariant.hrh"
+#include "Preferences.h"
+#include "BrowserGotoPane.h"
+#include "BrowserAdaptiveListPopup.h"
+#include "FeedsFeedView.h"
+#include "FeedsFolderView.h"
+#include "BrowserDialogs.h"
+#include "FeedsTopicView.h"
+#include "BrowserUtil.h"
+#include "BrowserSpecialLoadObserver.h"
+
+#include "FeedsClientUtilities.h"
+
+#include "BrowserBmOTABinSender.h"
+
+// CONSTANTS
+_LIT(KSupportedMimeTypes, "application/rss+xml;application/atom+xml;text/xml;application/xml");
+const TInt KLastUpdateGranularity = 10;
+
+const TInt KWmlSettingsAutomaticUpdatingNotSet = 32767;
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsClientUtilities* CFeedsClientUtilities::NewL(CAknViewAppUi& aAppUI, MApiProvider& aApiProvider)
+ {
+ CFeedsClientUtilities* self = new (ELeave) CFeedsClientUtilities(aAppUI, aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::CFeedsClientUtilities
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsClientUtilities::CFeedsClientUtilities(CAknViewAppUi& aAppUI, MApiProvider& aApiProvider):
+ iAppUI(aAppUI), iApiProvider(aApiProvider), iIsUpdatingFeed(EFalse), iWaitDialog(0),
+ iEnteredURL(0), iFolderView(0), iTopicView(0), iFeedView(0),
+ iIsConnected(EFalse), iItemIds(20), iItemStatus(20), iMimeTypes(0),
+ iFeedUpdateTimeIds(KLastUpdateGranularity), iFeedUpdateTimeTimestamps(KLastUpdateGranularity),
+ iPendingFolderItemTitle(NULL), iPendingFolderItemUrl(NULL), iExportFileName(NULL),
+ iSearchAgent(NULL),
+ iSearchOptList(NULL),
+ iFeedImportRequested(EFalse),
+ iRequestCanceled(EFalse),
+ iIsWaitDialogDisplayed(EFalse),
+ iFeedsInterface(*this,0),
+ iCanceledRequest(CTransaction::ENone)
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ConstructL()
+ {
+ iApiProvider.Preferences().AddObserverL( this );
+
+ // Set up MimeTypes
+ iMimeTypes = HBufC::NewL( KSupportedMimeTypes().Length() + 1 );
+ TPtr ptr( iMimeTypes->Des() );
+ ptr.Append( KSupportedMimeTypes() );
+ ptr.ZeroTerminate();
+
+ iWaitDialog = CFeedsWaitDialog::NewL(*this);
+ }
+
+// -----------------------------------------------------------------------------
+// CFolderItem::Search
+//
+// Searches for a FolderItem with the given name. If "this"
+// isn't a folder it only checks whether or not it matches
+// the given name. If "this" is a folder it also checks
+// all embedded items.
+// -----------------------------------------------------------------------------
+//
+const CFeedsEntity* CFeedsClientUtilities::Search(const TDesC& aName,const CFeedsEntity& aFolder) const
+ {
+ TPtrC title;
+ if (aFolder.GetType() == EFolder)
+ {
+ aFolder.GetStringValue(EFolderAttributeTitle,title);
+ }
+ else
+ {
+ aFolder.GetStringValue(EFeedAttributeTitle,title);
+ }
+ if (aName.CompareF(title) == 0)
+ {
+ return &aFolder;
+ }
+ if (aFolder.GetType() == EFolder)
+ {
+ for(TInt i=0;i<aFolder.GetChildren().Count();i++)
+ {
+ const CFeedsEntity *item;
+ CFeedsEntity *child = aFolder.GetChildren()[i];
+ if((item = Search(aName,*child)) != NULL)
+ {
+ return item;
+ }
+ }
+ }
+
+ // Otherwise no match was found.
+ return NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFolderItem::Search
+//
+// Searches for a FolderItem with the given id. If "this"
+// isn't a folder it only checks whether or not it matches
+// the given id. If "this" is a folder it also checks
+// all embedded items.
+// -----------------------------------------------------------------------------
+//
+const CFeedsEntity* CFeedsClientUtilities::Search(TInt aFolderItemId,const CFeedsEntity& aFolder) const
+ {
+ if (aFolderItemId == aFolder.GetId())
+ {
+ return &aFolder;
+ }
+ if (aFolder.GetType() == EFolder)
+ {
+ for(TInt i=0;i<aFolder.GetChildren().Count();i++)
+ {
+ const CFeedsEntity *item;
+ CFeedsEntity *child = aFolder.GetChildren()[i];
+ if ((item = Search(aFolderItemId,*child)) != NULL)
+ {
+ return item;
+ }
+ }
+ }
+
+ // Otherwise no match was found.
+ return NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::~CFeedsClientUtilities
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsClientUtilities::~CFeedsClientUtilities()
+ {
+ DisconnectFromServer();
+
+ iApiProvider.Preferences().RemoveObserver( this );
+
+ delete iWaitDialog;
+ delete iMimeTypes;
+
+ iFeedUpdateTimeIds.Close();
+ iFeedUpdateTimeTimestamps.Close();
+
+ delete iPendingFolderItemTitle;
+ delete iPendingFolderItemUrl;
+ delete iExportFileName;
+ delete iEnteredURL;
+ delete iSearchAgent;
+
+ iItemIds.Close();
+ iItemStatus.Close();
+ iItemStatusOrig.Close();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::RequestCompleted()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::RequestCompleted(CTransaction* aTrans,TInt /*aEvent*/)
+{
+TInt status = aTrans->GetStatusCode();
+
+switch (aTrans->Type())
+ {
+ case CTransaction::EFetchRootFolderItem:
+ FolderItemRequestCompleted(status, CTransaction::EFetchRootFolderItem);
+
+ break;
+
+ case CTransaction::EWatchForChanges:
+ break;
+
+ case CTransaction::EExportOPML:
+ case CTransaction::EImportOPML:
+ FolderItemRequestCompleted(status, aTrans->Type());
+ break;
+
+ case CTransaction::EAddFolderItem:
+ case CTransaction::EDeleteFolderItem:
+ case CTransaction::EChangeFolderItem:
+ case CTransaction::EMoveFolderItem:
+ case CTransaction::EMoveFolderItemTo:
+ case CTransaction::EUpdateFolderItem:
+ FolderItemRequestCompleted(status, aTrans->Type());
+ break;
+
+ case CTransaction::EChangeSettings:
+ break;
+
+ case CTransaction::EFetchFeed:
+ FeedRequestCompleted(status);
+ break;
+ case CTransaction::EUpdateItemStatus:
+ break;
+
+ default:
+ FolderItemRequestCompleted(status, aTrans->Type());
+ break;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::NetworkConnectionNeededL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::NetworkConnectionNeededL(
+ TInt* aConnectionPtr, TInt& aSockSvrHandle,
+ TBool& aNewConn, TApBearerType& aBearerType )
+ {
+ iApiProvider.SpecialLoadObserver().NetworkConnectionNeededL(
+ aConnectionPtr, &aSockSvrHandle, &aNewConn, &aBearerType );
+ //Wait dialog is shown only in the case of a new connection.
+ if ( aNewConn )
+ {
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_UPDATING_FEED);
+ iIsWaitDialogDisplayed = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::HandlePreferencesChangeL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::HandlePreferencesChangeL(
+ const TPreferencesEvent aEvent,
+ TPreferencesValues& aValues,
+ TBrCtlDefs::TBrCtlSettings aSettingType )
+ {
+ // no specific TBrCtlDefs::TBrCtlSettings are defined for FeedsSettings
+ // so we trigger for an Unknown setting
+ if( (EPreferencesItemChange == aEvent || EPreferencesDeactivate == aEvent) &&
+ (TBrCtlDefs::ESettingsUnknown == aSettingType ) )
+ {
+ SetPreferencesToFeedL( aValues );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SetPreferencesToFeedL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SetPreferencesToFeedL( const TPreferencesValues& aValues )
+ {
+ if ( iIsWaitDialogDisplayed )
+ {
+ return;
+ }
+ TFeedsServerSetting setting;
+
+ // always set to 32767 in the case of feed level auto updating.
+ //setting.iAutoUpdate = KWmlSettingsAutomaticUpdatingNotSet;
+ setting.iAutoUpdate = EFalse;
+ setting.iAutoUpdateFreq = KWmlSettingsAutomaticUpdatingNotSet;
+ setting.iAutoUpdateWhileRoaming = aValues.iAutomaticUpdatingWhileRoaming;
+
+ TUint32 autoUpdatingAP( 0 );
+#ifndef __WINSCW__
+ if (aValues.iAutomaticUpdatingAP != KWmlNoDefaultAccessPoint)
+ {
+ autoUpdatingAP = Util::IapIdFromWapIdL( iApiProvider, aValues.iAutomaticUpdatingAP );
+ }
+#endif //__WINSCW__
+ setting.iAutoUpdateAP = autoUpdatingAP;
+
+ SetFeedsServerSettingsL( setting );
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::DisconnectManualUpdateConnectionL()
+//
+// Disconnect connection provided by client for manual update.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::DisconnectManualUpdateConnectionL()
+ {
+ if ( iIsConnected )
+ {
+ // Ensure that the connection is available.
+ ConnectToServerL(EFalse);
+
+ // Pass the updated settings to the server.
+ iFeedsInterface.DisconnectManualUpdateConnectionL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::DisconnectFeedsViewL()
+//
+// Disconnect connection used by FeedsView.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::DisconnectFeedsViewL()
+ {
+ if( iFeedView )
+ {
+ iFeedView->DisconnectL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::LoadUrlL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::LoadUrlL( const TDesC& aUrl )
+ {
+
+ if( iApiProvider.IsPageLoaded() &&
+ iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) &&
+ !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))
+ {
+ // there is already a window, so create a new one if not over the max number of windows allowed
+ if(iApiProvider.WindowMgr().WindowCount() == iApiProvider.WindowMgr().MaxWindowCount())
+ {
+ // Show warning to user
+ TBrowserDialogs::ErrorNoteL( R_BROWSER_NOTE_MAX_WINDOWS );
+ return;
+ }
+
+ if(iApiProvider.WindowMgr().WindowCount() < iApiProvider.WindowMgr().MaxWindowCount())
+ {
+ CBrowserWindow *win = iApiProvider.WindowMgr().CreateWindowL( 0, &KNullDesC );
+ if (win != NULL)
+ {
+ CleanupStack::PushL( win );
+ iApiProvider.WindowMgr().SwitchWindowL( win->WindowId() );
+ CleanupStack::Pop(); // win
+ }
+ }
+ }
+
+ iApiProvider.WindowMgr().CurrentWindow()->SetHasFeedsContent(ETrue);
+ iApiProvider.FetchL( aUrl );
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ShowFolderViewL
+//
+// Shows the folder view, loading the folder list from the FeedsServer if need be.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ShowFolderViewL(TUid aCalledFromView /*= KUidBrowserBookmarksViewId*/)
+ {
+
+ if ( iIsWaitDialogDisplayed )
+ {
+ return;
+ }
+ // Record the view from which feeds was launched.
+ // If this function is not called with an argument,
+ // its default value "KUidBrowserBookmarksViewId" is used.
+ // This is specified in the header FeedsClientUtilities.h
+ SetCalledFromView(aCalledFromView);
+
+ // Ensure that "this" is ready for uses.
+ LazyInitL(EFalse);
+
+ // Show wait dialog.
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_OPENING_FEED);
+ iIsWaitDialogDisplayed = ETrue;
+
+ // Set the view to show once the folder is ready.
+ iNextViewId = KUidBrowserFeedsFolderViewId;
+ iIsUpdatingFeed = EFalse;
+
+ // Get the root folder.
+ FetchRootFolderL();
+ iCurrentRequest = CTransaction::EFetchRootFolderItem;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ShowTopicViewL
+//
+// Shows the topic view, loading the given feed associated with the given folder item.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ShowTopicViewL(const CFeedsEntity& aFolderItem)
+ {
+ TTime timestamp;
+
+ if ( iIsWaitDialogDisplayed )
+ {
+ return;
+ }
+
+ // Ensure that "this" is ready for uses.
+ LazyInitL(EFalse);
+
+ // Show wait dialog.
+ timestamp = aFolderItem.GetTimeValue(EFeedAttributeTimestamp,timestamp);
+ if ( timestamp.Int64() == 0 )
+ {
+ if ( iApiProvider.Connection().Connected() )
+ {
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_UPDATING_FEED);
+ }
+ }
+ else
+ {
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_OPENING_FEED);
+ }
+ iIsWaitDialogDisplayed = ETrue;
+
+ // Set the view to show once the feed is ready.
+ iNextViewId = KUidBrowserFeedsTopicViewId;
+ iIsUpdatingFeed = EFalse;
+
+ // Fetch the feed.
+ FetchFeedL(aFolderItem);
+ iCurrentRequest = CTransaction::EFetchFeed;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SupportedMimeTypesL
+//
+// Returns the feed related mime-types supported by the bridge. This makes
+// for a clean way to pass downloaded feeds content from the client to the FeedsServer
+// (via CFeedsClientUtilities::HandleFeedL).
+// -----------------------------------------------------------------------------
+//
+TPtrC CFeedsClientUtilities::SupportedMimeTypesL()
+ {
+ return iMimeTypes->Des();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SubscribeToL
+//
+// Shows the folder view and subscribes to the given feed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SubscribeToL(const TDesC& aTitle, const TDesC& aUrl)
+ {
+ SetCalledFromView(KUidBrowserContentViewId);
+
+ // If the root folder is available then Add the feed.
+ if (iFeedsInterface.RootFolder() != NULL)
+ {
+ // Ensure that "this" is ready for uses.
+ LazyInitL( EFalse );
+ CFeedsMap* temp = CFeedsMap::NewL();
+ temp->SetStringAttribute(EFeedAttributeTitle,aTitle);
+ temp->SetStringAttribute(EFeedAttributeLink,aUrl);
+ temp->SetIntegerAttribute(EFeedAttributeAutoUpdateFreq,0);
+
+ // Set the next view to show after the new add folder item is added.
+ iNextViewId = KUidBrowserFeedsFolderViewId;
+
+ iFeedsInterface.AddL(EFeed,*temp, *(iFeedsInterface.RootFolder()));
+
+ delete temp;
+ // Ensure the Folder View shows the root-folder when AddFolderItemL completes.
+ iFolderView->SetCurrentFolder(*(iFeedsInterface.RootFolder()), ETrue);
+ }
+
+ // Otherwise queue the folder item until the root folder is fetched (see above).
+ else
+ {
+ // Ensure that "this" is ready for uses. ETrue is passed to ensure that
+ // the root folder will be fetched if it isn't already available.
+ LazyInitL( ETrue );
+
+ delete iPendingFolderItemTitle;
+ iPendingFolderItemTitle = NULL;
+ delete iPendingFolderItemUrl;
+ iPendingFolderItemUrl = NULL;
+
+ iPendingFolderItemTitle = aTitle.AllocL();
+ TRAPD(err, iPendingFolderItemUrl = aUrl.AllocL());
+ if (err != KErrNone)
+ {
+ delete iPendingFolderItemTitle;
+ iPendingFolderItemTitle = NULL;
+
+ User::Leave(err);
+ }
+ }
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FeedsServerSettings
+//
+// Returns Feeds Server related settings.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsClientUtilities::FeedsServerSettingsL(TFeedsServerSetting& aSetting)
+ {
+ // Ensure that the connection is available.
+ ConnectToServerL(EFalse);
+
+ return iFeedsInterface.GetSettingsL(aSetting);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SetFeedsServerSettings
+//
+// Sets Feeds Server related settings.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SetFeedsServerSettingsL(const TFeedsServerSetting& aNewSetting)
+ {
+ // Ensure that the connection is available.
+ ConnectToServerL(EFalse);
+
+ // Pass the updated settings to the server.
+ iFeedsInterface.SetSettingsL(aNewSetting);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SetBrowserControlSettingL
+//
+// Sets a Browser Control related settings. These settings are directly passed to all
+// Browser Control instances used by the CFeedsViewBridge. As such see the Browser
+// Control documentation for infomation about the settings.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SetBrowserControlSettingL(TUint aSetting, TUint aValue)
+ {
+ // Pass the setting to the Feed View's Browser Control.
+ iApiProvider.BrCtlInterface().SetBrowserSettingL(aSetting, aValue);
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FolderItemRequestCompleted
+//
+// Called by RequestHandlerCompleted when the root FolderItem is either ready
+// or an error occured.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::FolderItemRequestCompleted(TInt aStatus, CTransaction::TTransactionType aTransType/*=ENone*/)
+ {
+ TRAP_IGNORE( FolderItemRequestCompletedL(aStatus, aTransType) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FolderItemRequestCompletedL
+//
+// Called by FolderItemRequestCompleted.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::FolderItemRequestCompletedL(TInt aStatus, CTransaction::TTransactionType aTransType/*=ENone*/)
+ {
+ if (aTransType == iCanceledRequest)
+ {
+ iCanceledRequest = CTransaction::ENone;
+ return;
+ }
+
+ iWaitDialog->Close();
+
+ iIsWaitDialogDisplayed = EFalse;
+
+ // Show the view if everything went ok.
+ if (aStatus == KErrNone)
+ {
+ switch(aTransType)
+ {
+ case CTransaction::EExportOPML:
+ //launch send ui
+ SendOPMLFileL();
+ break;
+
+ case CTransaction::EImportOPML:
+ // Delete temp file here if it exists
+ if(iTempOPMLImportFilePath.Length() > 0)
+ {
+ RFs tempRFs;
+ if (tempRFs.Connect() != KErrNone)
+ {
+ break;
+ }
+ CleanupClosePushL(tempRFs);
+ tempRFs.Delete( iTempOPMLImportFilePath );
+ tempRFs.Close();
+ CleanupStack::PopAndDestroy(); // cleanup tempRFs and reset temp file import path
+ iTempOPMLImportFilePath = _L("");
+ }
+
+ // Again show folder view to trigger a redraw
+ ShowFolderViewL();
+ break;
+
+ default:
+ // if an import OPML was requested, do that now
+ if(iFeedImportRequested)
+ {
+ // clear flag
+ iFeedImportRequested = EFalse;
+
+ // show wait dialog
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_WAIT_IMPORTING_FEEDS);
+ iIsWaitDialogDisplayed = ETrue;
+
+
+ if(iTempOPMLImportFilePath.Length())
+ {
+ iFeedsInterface.ImportOPMLL( iTempOPMLImportFilePath );
+ }
+ iCurrentRequest = CTransaction::EImportOPML;
+ }
+
+ // Set the updated folder
+ iFolderView->RootFolderChangedL(*(iFeedsInterface.RootFolder()));
+
+ // Show it.
+ if (iNextViewId == KUidBrowserFeedsFolderViewId)
+ {
+ ShowFolderViewLocalL();
+ }
+
+ // If the user tried to subscribe to a feed before it was connected
+ // to the server then add the item now.
+ if (iPendingFolderItemTitle != NULL)
+ {
+ TRAPD(err, SubscribeToL(*iPendingFolderItemTitle, *iPendingFolderItemUrl));
+ if (err == KErrNone)
+ {
+ delete iPendingFolderItemTitle;
+ iPendingFolderItemTitle = NULL;
+ delete iPendingFolderItemUrl;
+ iPendingFolderItemUrl = NULL;
+ }
+ // Don't reset next-view; iNextViewId is EFolderViewId after above SubscribeToL() call
+
+ // Otherwise try to add the folder item next time.
+ }
+ else if(iNextViewId == KUidBrowserFeedsFolderViewId)
+ {
+ // Reset next-view.
+ iNextViewId = KUidBrowserNullViewId;
+ }
+
+ // Reset the "last updated" cache now that a new folder list is available.
+ ResetFeedUpdateTime();
+ }
+ }
+ // Otherwise show an error.
+ else
+ {
+ // If the server terminated, reconnect to it.
+ if (aStatus == KErrServerTerminated)
+ {
+ DisconnectFromServer();
+ ConnectToServerL();
+
+ }
+
+ ShowServerError(aStatus, aTransType);
+
+ // This happens when user subscribe to a feed from content view
+ // If it failed, we want to show the content view.
+ if (aStatus == KErrAlreadyExists)
+ {
+ // Set content view as the last view id.
+ iApiProvider.SetLastActiveViewId( KUidBrowserContentViewId );
+
+ // Show the view.
+ // We already started switching to the feeds folder view and shut off full screen
+ // This will force the DoActivate on the ContentView and set back to full screen
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserFeedsFolderViewId );
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ }
+
+ // Reset next-view.
+ iNextViewId = KUidBrowserNullViewId;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FeedRequestCompleted
+//
+// Called when the asynchronous request is complete.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::FeedRequestCompleted(TInt aEvent)
+ {
+ TRAP_IGNORE( FeedRequestCompletedL(aEvent) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FeedRequestCompletedL
+//
+// Called when the asynchronous request is complete.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::FeedRequestCompletedL(TInt aStatus)
+ {
+ if (CTransaction::EFetchFeed == iCanceledRequest)
+ {
+ iCanceledRequest = CTransaction::ENone;
+ return;
+ }
+ // Close the wait dialog.
+ iWaitDialog->Close();
+ iIsWaitDialogDisplayed = EFalse;
+
+ // Show the view if everything went ok.
+ if (aStatus == KErrNone)
+ {
+ // Extract out the intial item status -- later on, iItemStatusOrig is
+ // used to determine which item status' change.
+ RArray<TInt> ignore(20);
+
+ iItemIds.Reset();
+ iItemStatus.Reset();
+ iItemStatusOrig.Reset();
+
+ CleanupClosePushL(ignore);
+ ItemStatusL(iItemIds, iItemStatus, *(iFeedsInterface.Feed()));
+ ItemStatusL(ignore, iItemStatusOrig, *(iFeedsInterface.Feed()));
+ CleanupStack::PopAndDestroy(/*ignore*/);
+
+ // update folder view for unread count
+ TInt unreadCount = 0;
+ for (TInt i = 0; i < iItemStatus.Count(); i++)
+ {
+ if ( iItemStatus[i] == EItemStatusUnread || iItemStatus[i] == EItemStatusNew )
+ {
+ unreadCount++;
+ }
+ }
+ iFolderView->SetUnreadCountL( unreadCount );
+
+ // The method was called because of a updated feed. In general, update
+ // the current view to reflect the updated feed.
+ if (iIsUpdatingFeed)
+ {
+ if (iApiProvider.LastActiveViewId() == KUidBrowserFeedsTopicViewId)
+ {
+ iTopicView->SetCurrentFeedL(*(CurrentFeed()), 0);
+ }
+ }
+
+ // Otherwise, this is a newly requested feed, so show the next
+ // view now that it is available.
+ else
+ {
+ if (iNextViewId == KUidBrowserFeedsFeedViewId)
+ {
+ ShowFeedViewLocalL(0);
+ }
+ else if (iNextViewId == KUidBrowserFeedsTopicViewId)
+ {
+ ShowTopicViewLocalL(0);
+ }
+ }
+
+ // Update the feed's "last updated" value in the cache.
+ UpdateFeedUpdatedTimeL(*(iFeedsInterface.Feed()));
+ }
+
+ // Otherwise show an error.
+ else
+ {
+ // If the server terminated, reconnect to it.
+ if (aStatus == KErrServerTerminated)
+ {
+ DisconnectFromServer();
+ ConnectToServerL();
+
+ }
+
+ ShowServerError(aStatus);
+ }
+
+ // Reset updating feed.
+ iIsUpdatingFeed = EFalse;
+
+ // Reset next-view.
+ iNextViewId = KUidBrowserNullViewId;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::DialogDismissedL
+//
+// Called when the user presses the cancel button.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::DialogDismissedL()
+ {
+ // Cancel all activities that can be cancelled.
+ iIsWaitDialogDisplayed = EFalse;
+
+
+ // If there is an ongoing search by the search agent, make sure
+ // it's cancelled and search agent destroyed
+ if(iSearchAgent != NULL)
+ {
+ iSearchAgent->CancelSearch();
+ delete(iSearchAgent);
+ iSearchAgent = NULL;
+ }
+ else
+ {
+ iCanceledRequest = iCurrentRequest;
+ iFeedsInterface.CancelAllL();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FetchRootFolderL
+//
+// Get the root folder from the Feeds server.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::FetchRootFolderL()
+ {
+ iFeedsInterface.GetRootFolderL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::AddFolderItemL
+//
+// Add a new folder item.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::AddFolderItemL(const TDesC& aTitle, const TDesC& aUrl,
+ TBool aIsFolder, const CFeedsEntity& aParent, TInt aFreq)
+ {
+
+ CFeedsMap* temp = CFeedsMap::NewL();
+
+ temp->SetStringAttribute(EFeedAttributeTitle,aTitle);
+ temp->SetStringAttribute(EFeedAttributeLink,aUrl);
+ temp->SetIntegerAttribute(EFeedAttributeAutoUpdateFreq,aFreq);
+
+ // Set the next view to show after the new add folder item is added.
+ iNextViewId = KUidBrowserFeedsFolderViewId;
+
+ iFeedsInterface.AddL(aIsFolder?EFolder:EFeed,*temp, aParent);
+
+ delete temp;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ChangeFolderItemL
+//
+// Change the folder item. If this is a folder then KNullDesC should be passed
+// to the aUrl argument.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ChangeFolderItemL(CFeedsEntity& aFolderItem,
+ const TDesC& aTitle, const TDesC& aUrl,TInt aFreq)
+ {
+ CFeedsMap* temp = CFeedsMap::NewL();
+ temp->SetStringAttribute(EFeedAttributeTitle,aTitle);
+ temp->SetStringAttribute(EFeedAttributeLink,aUrl);
+ temp->SetIntegerAttribute(EFeedAttributeAutoUpdateFreq,aFreq);
+ // Set the next view to show after the new add folder item is added.
+ iNextViewId = KUidBrowserFeedsFolderViewId;
+
+ aFolderItem.ChangeValueL(*temp);
+ delete temp;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::DeleteFolderItemsL
+//
+// Delete the folder items.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::DeleteFolderItemsL(RPointerArray<const CFeedsEntity>& aFolderItems)
+ {
+ iFeedsInterface.DeleteL(aFolderItems);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::MoveFolderItemsToL
+//
+// Move the folder items to a different parent.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::MoveFolderItemsToL(RPointerArray<const CFeedsEntity>& aFolderItems,
+ const CFeedsEntity& aParent)
+ {
+ iFeedsInterface.MoveToFolderL(aFolderItems, aParent);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::MoveFolderItemsL
+//
+// Move the folder item to a different index.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::MoveFolderItemsL(RPointerArray<const CFeedsEntity>& aFolderItems,
+ TInt aIndex)
+ {
+ iFeedsInterface.MoveL(aFolderItems, aIndex);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FetchFeedL
+//
+// Get the given feed from the Feeds server.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::FetchFeedL(const CFeedsEntity& aFeedEntity, TBool aForceUpdate,
+ TBool aNoCache)
+ {
+ // Fetch the new feed.
+ iFeedsInterface.FetchL(aFeedEntity, aForceUpdate, aNoCache);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::UpdateFeedL
+//
+// Updates the feed with the given id.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::UpdateFeedL(const CFeedsEntity& aFeedEntity)
+ {
+ if(iIsWaitDialogDisplayed)
+ {
+ return;
+ }
+ // Show wait dialog iff connection is already established.
+ if(iApiProvider.Connection().Connected())
+ {
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_UPDATING_FEED);
+ iIsWaitDialogDisplayed = ETrue;
+ }
+
+ iIsUpdatingFeed = ETrue;
+
+ // Fetch the feed.
+ FetchFeedL(aFeedEntity, ETrue);
+ iCurrentRequest = CTransaction::EFetchFeed;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::UpdateFolderItemsL
+//
+// Updates the given feeds in the background.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::UpdateFolderItemsL(const RPointerArray<const CFeedsEntity>&
+ aFolderItems)
+ {
+ if (iIsWaitDialogDisplayed)
+ {
+ return;
+ }
+ // Show wait dialog iff connection is already established.
+ if (iApiProvider.Connection().Connected())
+ {
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_UPDATING_FEED);
+ iIsWaitDialogDisplayed = ETrue;
+ }
+
+ // Fetch the feeds.
+ iFeedsInterface.UpdateL(aFolderItems);
+ iCurrentRequest = CTransaction::EUpdateFolderItem;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::UpdateFolderItemsL
+//
+// Updates all of feeds in the background.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::UpdateFolderItemsL()
+ {
+ if (iIsWaitDialogDisplayed)
+ {
+ return;
+ }
+
+ // Show wait dialog iff connection is already established.
+ if (iApiProvider.Connection().Connected())
+ {
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_UPDATING_ALL_WAIT_DIALOG);
+ iIsWaitDialogDisplayed = ETrue;
+ }
+
+ // Fetch the feeds.
+ RPointerArray<const CFeedsEntity> aFolderItem;
+ aFolderItem.Append((iFeedsInterface.RootFolder()));
+
+ iFeedsInterface.UpdateL(aFolderItem);
+ iCurrentRequest = CTransaction::EUpdateFolderItem;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ImportFeeds
+//
+// Import feeds from OPML file
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsClientUtilities::ImportFeedsL()
+ {
+ if (iIsWaitDialogDisplayed)
+ {
+ return;
+ }
+
+ // construct search agent
+ if(NULL != iSearchAgent)
+ {
+ delete(iSearchAgent);
+ iSearchAgent = NULL;
+ }
+ iSearchAgent = CFeedsFileSearchAgent::NewL(*this);
+
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_WAIT_SEARCHING_FOR_FEEDS);
+ iIsWaitDialogDisplayed = ETrue;
+
+ // Start search
+ if(NULL != iSearchAgent)
+ {
+ iSearchAgent->StartSearchingL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FeedsFileSearchCompleteL
+//
+// Implemented from the MFeedsFileSearchAgentCallback mixin, this
+// callback is called when the search for files in the filesystem has completed
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsClientUtilities::FeedsFileSearchCompleteL(TInt aCount)
+ {
+ TFileEntry * fileEntry;
+ TInt i;
+
+ iWaitDialog->Close();
+ iIsWaitDialogDisplayed = EFalse;
+
+ // If nothing is found, indicate that, cleanup and quit
+ if(aCount == 0)
+ {
+ HBufC* note = StringLoader::LoadLC(R_FEEDS_NO_FEEDS_FOUND_ON_DEVICE);
+ iApiProvider.DialogsProvider().DialogAlertL(_L(""),*note);
+ CleanupStack::PopAndDestroy( note );
+ }
+ else
+ {
+ //
+ // construct results dialog box to show search results
+ //
+ if(NULL != iSearchOptList)
+ {
+ delete(iSearchOptList);
+ iSearchOptList = NULL;
+ }
+
+ iSearchOptList = new( ELeave ) CArrayFixFlat<TBrCtlSelectOptionData>(aCount);
+
+ HBufC* title = StringLoader::LoadLC(R_FEEDS_POPUP_TITLE_FEEDS_FILES_FOUND);
+
+ // loop through the search results
+ for(i = 0; i < aCount; i++)
+ {
+ if(iSearchAgent)
+ {
+ // grab file found from the search agent results and add it
+ // as an option
+ fileEntry = iSearchAgent->GetFileEntry(i);
+ if(NULL != fileEntry)
+ {
+ TBrCtlSelectOptionData t(fileEntry->iEntry.iName, EFalse, EFalse, EFalse);
+ iSearchOptList->AppendL(t);
+ }
+ }
+ }
+
+ TBool ret(iApiProvider.DialogsProvider().DialogSelectOptionL( *title,
+ ESelectTypeNone, *iSearchOptList));
+
+ CleanupStack::PopAndDestroy(title);
+
+ //
+ // If the user selects an option, import it
+ //
+ if ( ret )
+ {
+ for( i = 0; i < aCount; i++)
+ {
+ if( (*iSearchOptList)[i].IsSelected() )
+ {
+ if(iSearchAgent)
+ {
+ fileEntry = iSearchAgent->GetFileEntry(i);
+ if(NULL != fileEntry)
+ {
+ BeginImportOPMLFeedsFileL(fileEntry->iPath);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ }
+
+ // destroy the search agent
+ delete(iSearchAgent);
+ iSearchAgent = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::BeginImportOPMLFeedsFileL
+//
+// Given a path, save it in the class, show the root folder view and set
+// a flag to indicate we're importing. When the root folder is done opening,
+// then begin the actual import
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsClientUtilities::BeginImportOPMLFeedsFileL( TFileName& aFilepath )
+ {
+ // save path
+ iTempOPMLImportFilePath = aFilepath;
+
+ // Switch to feeds view, setting the flag will import
+ // from the tempOPMLImportFilePath when the view is ready
+ iFeedImportRequested = ETrue;
+ ShowFolderViewL();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ExportFeeds
+//
+// Export feeds to OPML file
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsClientUtilities::ExportFeedsL(RPointerArray<const CFeedsEntity>& aFolderItems, const TDesC &aExportFileName)
+ {
+ if (iIsWaitDialogDisplayed)
+ {
+ return;
+ }
+
+ iWaitDialog->ShowWaitDialogL(R_FEEDS_WAIT_PROCESSING);
+ iIsWaitDialogDisplayed = ETrue;
+
+ if (iExportFileName)
+ {
+ delete iExportFileName;
+ iExportFileName = NULL;
+ }
+
+ iExportFileName = aExportFileName.AllocL();
+ iFeedsInterface.ExportFoldersL(aFolderItems, aExportFileName);
+ iCurrentRequest = CTransaction::EExportOPML;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ShowFolderViewLocalL
+//
+// Shows the folder view.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ShowFolderViewLocalL()
+ {
+ // Set this as the last view id -- this is used in ShowLastViewL.
+ iApiProvider.SetLastActiveViewId(KUidBrowserFeedsFolderViewId);
+
+ // Show the view.
+ iApiProvider.SetViewToBeActivatedIfNeededL(KUidBrowserFeedsFolderViewId);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ShowTopicViewLocalL
+//
+// Shows the topic view.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ShowTopicViewLocalL(TInt aInitialItem)
+ {
+ // Set this as the last view id -- this is used in ShowLastViewL.
+ iApiProvider.SetLastActiveViewId(KUidBrowserFeedsTopicViewId);
+
+ // Set the inital item.
+ if (iTopicView == NULL)
+ {
+ TRect rect(iAppUI.ClientRect());
+ iTopicView = CFeedsTopicView::NewL( iApiProvider, rect );
+ iAppUI.AddViewL( iTopicView ); // transfer ownership to CAknViewAppUi
+ }
+
+ iTopicView->SetInitialItem(aInitialItem);
+
+ // Show the view.
+ iApiProvider.SetViewToBeActivatedIfNeededL(KUidBrowserFeedsTopicViewId);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ShowFeedViewLocalL
+//
+// Shows the feed view.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ShowFeedViewLocalL(TInt aInitialItem)
+ {
+ // Set this as the last view id -- this is used in ShowLastViewL.
+ iApiProvider.SetLastActiveViewId(KUidBrowserFeedsFeedViewId);
+
+ // Set the inital item.
+ if (iFeedView == NULL)
+ {
+ TRect rect(iAppUI.ClientRect());
+ iFeedView = CFeedsFeedView::NewL( iApiProvider, rect );
+ iAppUI.AddViewL( iFeedView ); // transfer ownership to CAknViewAppUi
+ }
+
+ iFeedView->SetInitialItem(aInitialItem);
+
+ // Show the view.
+ iApiProvider.SetViewToBeActivatedIfNeededL(KUidBrowserFeedsFeedViewId);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::CurrentRootFolder
+//
+// Returns the current root folder.
+// -----------------------------------------------------------------------------
+//
+const CFeedsEntity* CFeedsClientUtilities::CurrentRootFolder()
+ {
+ return iFeedsInterface.RootFolder();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::CurrentFeed
+//
+// Returns the current feed.
+// -----------------------------------------------------------------------------
+//
+CFeedsEntity* CFeedsClientUtilities::CurrentFeed()
+ {
+ return iFeedsInterface.Feed();
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::AddItemL
+//
+// Add a menu item to the given menu.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::AddItemL(CEikMenuPane& aMenuPane, TInt aCommand,
+ TInt aTitleId)
+ {
+ CEikMenuPaneItem::SData item;
+ HBufC* buf = NULL;
+
+ buf = StringLoader::LoadLC(aTitleId);
+ item.iText.Copy(*buf);
+ CleanupStack::PopAndDestroy(buf);
+ buf = NULL;
+
+ item.iCommandId = aCommand;
+ item.iFlags = 0;
+ item.iCascadeId = 0;
+ aMenuPane.AddMenuItemL(item);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::AddCascadeL
+//
+// Add a sub-menu to the given menu.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::AddCascadeL(CEikMenuPane& aMenuPane, TInt aCommand,
+ TInt aTitleId, TInt aCascade)
+ {
+ CEikMenuPaneItem::SData item;
+ HBufC* buf = NULL;
+
+ buf = StringLoader::LoadLC(aTitleId);
+ item.iText.Copy(*buf);
+ CleanupStack::PopAndDestroy(buf);
+ buf = NULL;
+
+ item.iCommandId = aCommand;
+ item.iFlags = 0;
+ item.iCascadeId = aCascade;
+ aMenuPane.AddMenuItemL(item);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SetItemStatus
+//
+// Sets the item's status (read/unread/new).
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SetItemStatusL(CFeedsEntity* aItem, TFeedItemStatus aStatus)
+ {
+ TInt ret;
+ CFeedsMap* temp = CFeedsMap::NewL();
+ temp->SetIntegerAttribute(EItemAttributeStatus,aStatus);
+ ret = aItem->ChangeValueL(*temp);
+ delete temp;
+
+ if (ret != KErrNone)
+ {
+ ShowServerError(ret);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ItemStatus
+//
+// Returns the item's status (read/unread/new).
+// -----------------------------------------------------------------------------
+//
+TFeedItemStatus CFeedsClientUtilities::ItemStatus(TInt aItemId)
+ {
+ TInt pos;
+ TFeedItemStatus status = EItemStatusUndefined;
+
+ if ((pos = iItemIds.Find(aItemId)) != KErrNotFound)
+ {
+ status = iItemStatus[pos];
+ }
+ else
+ {
+ // TODO: panic
+ }
+
+ return status;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ItemStatusWriteToServerL
+//
+// Writes the item status out to the server.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ItemStatusWriteToServerL()
+ {
+ RArray<TInt> ids(20);
+ RArray<TFeedItemStatus> status(20);
+ TInt unreadCountDelta = 0;
+ TInt unreadCount = 0;
+
+ if (iItemStatus.Count() == 0)
+ {
+ return;
+ }
+
+ CleanupClosePushL(ids);
+ CleanupClosePushL(status);
+
+ // Build new status arrays that only contains items that changed.
+ for (TInt i = 0; i < iItemStatus.Count(); i++)
+ {
+ if (iItemStatus[i] != iItemStatusOrig[i])
+ {
+ // update orig, since the old orig doesn't hold true any more
+ // important to do so:
+ // because this method will be called whenever deactivateView of FeedsView is called
+ iItemStatusOrig[i] = iItemStatus[i];
+
+ ids.AppendL(iItemIds[i]);
+ status.AppendL(iItemStatus[i]);
+
+ // In current UI, status can only change from New -> Read, or Unread -> Read
+ if ( iItemStatus[i] == EItemStatusRead )
+ {
+ unreadCountDelta--;
+ }
+ }
+ }
+
+ // update folder view
+ unreadCount = iFolderView->UnreadCountChangedL( unreadCountDelta );
+
+ // Write the item status out to the server.
+ iFeedsInterface.UpdateFeedItemStatusL(ids, status, unreadCount);
+ CleanupStack::PopAndDestroy(/*status*/);
+ CleanupStack::PopAndDestroy(/*ids*/);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FaviconL
+//
+// Returns the Favicon to the given url or NULL if one isn't found.
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CFeedsClientUtilities::FaviconL(const TDesC& aUrl)
+ {
+ CGulIcon* icon = NULL;
+
+ // TODO: Do this if access to the database is too slow.
+ // First search the local cache.
+
+ // If not found extract it from the Feeds View's Browser Control and add
+ // it to the local cache.
+
+ // Get the favicon from the Browser Control.
+ icon = iApiProvider.WindowMgr().CurrentWindow()->BrCtlInterface().GetBitmapData(aUrl, TBrCtlDefs::EBitmapFavicon);
+ if (icon != NULL)
+ {
+ icon->SetMask(NULL);
+ }
+
+ return icon;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::LazyInitL
+//
+// Ensures that the views and the connection to the FeedsServer are ready.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::LazyInitL(TBool aGetRootFolder)
+ {
+ // Create Views
+ if(iFolderView == NULL)
+ {
+ TRect rect(iAppUI.ClientRect());
+ iFolderView = CFeedsFolderView::NewL( iApiProvider, rect );
+ iAppUI.AddViewL( iFolderView ); // transfer ownership to CAknViewAppUi
+ }
+
+
+
+ // Connect to the server.
+ ConnectToServerL(aGetRootFolder);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ShowServerError
+//
+// Show a server error.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ShowServerError(TInt aStatus, CTransaction::TTransactionType aRequestType/*=ENone*/)
+ {
+ TInt labelId;
+
+ // Determine which label to use.
+ switch(aStatus)
+ {
+ case KErrNoMemory:
+ labelId = R_FEEDS_OUT_OF_MEMORY;
+ break;
+ // Few errors wont be shown as pop up dialog as they will appear in list box main pane
+ case KErrCorrupt:
+ // A pop up error note should be displayed if import is requested,
+ // else error will be displayed in main pane itself
+ if (aRequestType == CTransaction::EImportOPML)
+ {
+ labelId = R_FEEDS_MALFORMED_FEED_ERROR;
+ break;
+ }
+ case KErrNotSupported:
+ case KErrTimedOut:
+ case KErrBadName:
+ return;
+
+ case -KErrNotSupported:
+ // Show the special http not supported on WINSCW error
+ TRAP_IGNORE(TBrowserDialogs::InfoNoteL(R_BROWSER_INFO_NOTE, R_FEEDS_HTTP_UNSUPPORTED_WINSCW));
+ return;
+
+ case KErrAlreadyExists:
+ labelId = R_FEEDS_NAME_ALREADY_IN_USE;
+ break;
+
+
+ case KErrArgument:
+ // A pop up error note should be displayed if import is requested,
+ // else error will be displayed in main pane itself
+ if (aRequestType == CTransaction::EImportOPML)
+ {
+ labelId = R_FEEDS_MALFORMED_FEED_ERROR;
+ break;
+ }
+
+ case KErrNotFound:
+ // A pop up error note should be displayed if import is requested,
+ // else will be handled in default case.
+ if (aRequestType == CTransaction::EImportOPML)
+ {
+ labelId = R_FEEDS_FILE_NOT_FOUND_ERROR;
+ break;
+ }
+ default:
+ if (aStatus > 0) // All network errors
+ {
+ // Error will shown in listbox main pane
+ return;
+ }
+
+ // Otherwise.
+ else
+ {
+ labelId = R_FEEDS_GENERAL_ERROR;
+ }
+ break;
+ }
+
+ // Show the error dialog.
+ if (aStatus != KErrCancel)
+ {
+ TRAP_IGNORE(TBrowserDialogs::InfoNoteL(R_BROWSER_INFO_NOTE, labelId));
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ConnectToServerL
+//
+// Connect to the server.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ConnectToServerL(TBool aGetRootFolder)
+ {
+ if (!iIsConnected)
+ {
+ User::LeaveIfError(iFeedsInterface.Connect());
+ iIsConnected = ETrue;
+ }
+
+ if (aGetRootFolder)
+ {
+ // Set this to no-view so the folder view isn't shown after it's fetched.
+ iNextViewId = KUidBrowserNullViewId;
+
+ FetchRootFolderL();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::DisconnectFromServer
+//
+// Disconnect from the server.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::DisconnectFromServer()
+ {
+ if( !iIsConnected )
+ {
+ //Nothing connected, return, this is causing crash.
+ return;
+ }
+ iFeedsInterface.Close();
+
+ iIsConnected = EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::FeedUpdatedTime
+//
+// Since the folder list isn't updated after it is fetched the FeedsClientUtilities
+// tracks the last update times for feeds the user visits in the current session.
+// This method returns the "last updated" timestamp of the given item.
+// -----------------------------------------------------------------------------
+//
+TTime CFeedsClientUtilities::FeedUpdatedTime(const CFeedsEntity& aItem)
+ {
+ TTime timestamp;
+ TInt pos;
+
+
+ // Search the cache for the feed's url.
+ if ((pos = iFeedUpdateTimeIds.Find(aItem.GetId())) != KErrNotFound)
+ {
+ timestamp = iFeedUpdateTimeTimestamps[pos];
+ }
+
+ // Otherwise return the item's timestamp.
+ else
+ {
+ aItem.GetTimeValue(EFeedAttributeTimestamp,timestamp);
+ }
+
+ // Return the cached value.
+ return timestamp;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ResetFeedUpdateTime
+//
+// Resets the "last updated" cache.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ResetFeedUpdateTime()
+ {
+ // Reset the arrays.
+ iFeedUpdateTimeIds.Reset();
+ iFeedUpdateTimeTimestamps.Reset();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::UpdateFeedUpdatedTimeL
+//
+// Update the feed's "last updated" value in the cache.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::UpdateFeedUpdatedTimeL(const CFeedsEntity& aFeed)
+ {
+ TInt pos;
+ TInt err;
+
+ // TODO: Use the feed's id instead of the url. This would require the
+ // packed folder to store the feed id as well.
+
+ // Search the cache for the feed's url and if found then update the timestamp.
+ if ((pos = iFeedUpdateTimeIds.Find(aFeed.GetId())) != KErrNotFound)
+ {
+ TTime time;
+ aFeed.GetTimeValue(EFeedAttributeTimestamp,time);
+ iFeedUpdateTimeTimestamps[pos] = time;
+ }
+
+ // Otherwise add a new slot.
+ else
+ {
+ User::LeaveIfError(iFeedUpdateTimeIds.Append(aFeed.GetId()));
+ TTime time;
+ aFeed.GetTimeValue(EFeedAttributeTimestamp,time);
+
+ err = iFeedUpdateTimeTimestamps.Append(time);
+
+ // Ensure the arrays don't get out of sync if the second append fails.
+ if (err != KErrNone)
+ {
+ iFeedUpdateTimeIds.Remove(iFeedUpdateTimeIds.Count() - 1);
+ User::LeaveIfError(err);
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::InitMenuItemL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::InitMenuItemL( CEikMenuPane* aMenuPane,
+ TInt aCommandId,
+ TInt aResourceId,
+ TInt aCascadeId,
+ TInt aFlags )
+ {
+ CEikMenuPaneItem::SData item;
+ item.iCommandId = aCommandId;
+ item.iFlags = aFlags;
+ item.iCascadeId = aCascadeId;
+ HBufC* buf = StringLoader::LoadLC( aResourceId );
+ item.iText.Copy( *buf );
+ CleanupStack::PopAndDestroy( buf ); // buf
+ buf = NULL;
+
+ aMenuPane->AddMenuItemL( item );
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SendOPMLFileL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SendOPMLFileL( )
+ {
+ RFs rfs;
+
+ _LIT(KPath, "C:\\system\\temp\\");
+ TBuf<KMaxFileName> path(KPath);
+
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ path.Append(*iExportFileName);
+
+ MBmOTABinSender& sender = iApiProvider.BmOTABinSenderL();
+
+ sender.ResetAndDestroy();
+ sender.SendOPMLFileL(path);
+
+ CleanupStack::PopAndDestroy(/*rfs*/);
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::HandleCommandL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::HandleCommandL( TUid aViewId, TInt aCommand )
+ {
+ switch (aCommand)
+ {
+ case EWmlCmdBackToPage:
+ {
+ iApiProvider.SetViewToReturnOnClose( aViewId );
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ break;
+ }
+
+ case EFeedsImport:
+ ImportFeedsL();
+ break;
+
+ default:
+ // pass common commands to app ui
+ iAppUI.HandleCommandL( aCommand );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::DynInitMenuPaneL()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+
+ // Option menu items common to all three feeds views
+ if ((aResourceId == R_FEEDS_FOLDER_VIEW_MENU) ||
+ (aResourceId == R_FEEDS_FEED_VIEW_MENU) ||
+ (aResourceId == R_FEEDS_TOPIC_VIEW_MENU))
+ {
+ // browser prefs
+ InitMenuItemL( aMenuPane, EWmlCmdPreferences, R_WMLBROWSER_SETTINGS_TITLE );
+
+ // Help
+ InitMenuItemL( aMenuPane, EAknCmdHelp, R_BROWSER_MENU_ITEM_HELP, R_FEEDS_HELP_SUBMENU );
+
+ // exit
+ InitMenuItemL( aMenuPane, EWmlCmdUserExit, R_BROWSER_MENU_ITEM_EXIT );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::SetCalledFromView()
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::SetCalledFromView(TUid aViewId)
+ {
+ iCalledFromView = aViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::CalledFromView()
+// -----------------------------------------------------------------------------
+//
+TUid CFeedsClientUtilities::CalledFromView()
+ {
+ return iCalledFromView;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsClientUtilities::ItemStatusL
+//
+// Returns the INITIAL status of each of the items in the feed.
+// The caller can then modify the values and call UpdateFeedItemStatusL
+// to request the feeds server to update the feed's item status.
+// -----------------------------------------------------------------------------
+//
+void CFeedsClientUtilities::ItemStatusL(RArray<TInt>& aItemIds,
+ RArray<TFeedItemStatus>& aItemStatus, const CFeedsEntity& aFeed) const
+ {
+ TInt status;
+
+ aItemIds.Reset();
+ aItemStatus.Reset();
+
+ for(TInt index=0 ; index< aFeed.GetChildren().Count() ; index++)
+ {
+ CFeedsEntity *feedEntity = aFeed.GetChildren()[index];
+
+ feedEntity->GetIntegerValue(EItemAttributeStatus,status);
+
+ User::LeaveIfError(aItemIds.Append(feedEntity->GetId()));
+ User::LeaveIfError(aItemStatus.Append((TFeedItemStatus)status));
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsEditFeedDialog.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,697 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Encapsulates a edit feed dialog.
+*
+*/
+
+
+#include <AknPopupFieldText.h>
+#include <aknslider.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <eikedwin.h>
+#include <eikmenup.h>
+#include <charconv.h>
+#include <aknviewappui.h>
+#include <StringLoader.h>
+
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <hlplch.h>
+#include <csxhelp/browser.hlp.hrh>
+#include "BrowserApplication.h"
+#endif // __SERIES60_HELP
+
+#include "BrowserAppUi.h"
+#include "BrowserAppViewBase.h"
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include <AknRadioButtonSettingPage.h>
+
+#include "FeedsEditFeedDialog.h"
+#define pixelOffset 36
+
+//Constants
+const TInt KAutoUpdatingOff = 0;
+const TInt KFifteen = 15;
+const TInt KOneHour = 60;
+const TInt KFourHour = 240;
+const TInt KDay = 1440;
+const TInt KWeek = 10080;
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog* CFeedsEditFeedDialog::NewL(MFeedsEditFeedDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName, const TDesC& aUrl, TInt aFreq)
+ {
+ CFeedsEditFeedDialog* self = new (ELeave) CFeedsEditFeedDialog(aObserver, aAppUi, aName, aUrl, aFreq);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ self->iSelectedDlgLine = 0;
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog* CFeedsEditFeedDialog::NewL(MFeedsEditFeedDialogObserver& aObserver, CAknViewAppUi* aAppUi)
+ {
+ CFeedsEditFeedDialog* self = new (ELeave) CFeedsEditFeedDialog(aObserver, aAppUi, KNullDesC, KNullDesC,0);
+
+ CleanupStack::PushL(self);
+ self->iIsNewFeed = ETrue;
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::CFeedsEditFeedDialog
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog::CFeedsEditFeedDialog (MFeedsEditFeedDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName, const TDesC& aUrl, TInt aFreq)
+ :iObserver(aObserver), iAppUi(aAppUi), iName(aName), iUrl(aUrl),iFreq(aFreq), iActionCancelled(EFalse)
+ {
+ iPreviousFreq = iFreq;
+ }
+
+
+
+// ----------------------------------------------------
+// CFeedsEditFeedDialog::OfferKeyEventL
+// Keyevent process.
+// ----------------------------------------------------
+//
+TKeyResponse CFeedsEditFeedDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,
+ TEventCode aType)
+ {
+ if ((aKeyEvent.iScanCode == EStdKeyDevice3) || (aKeyEvent.iScanCode == EStdKeyEnter))
+ {
+ if ((aType == EEventKey) && (iSelectedDlgLine == EFeedsEditAutomaticUpdatingId))
+ {
+ HandleFreqCmdL();
+ return EKeyWasConsumed;
+ }
+ }
+ return CAknForm::OfferKeyEventL(aKeyEvent, aType);
+ }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::HandlePointerEventL
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ CAknForm::HandlePointerEventL(aPointerEvent);
+ if ((iSelectedDlgLine != IdOfFocusControl()) && (aPointerEvent.iType == TPointerEvent::EButton1Up))
+ {
+ LineChangedL(IdOfFocusControl());
+ }
+ else
+ {
+ if ( aPointerEvent.iType == TPointerEvent::EButton1Down)
+ {
+ iPointerEvent = aPointerEvent;
+ }
+ else if ( aPointerEvent.iType == TPointerEvent::EDrag )
+ {
+ if((Abs(iPointerEvent.iPosition.iX - aPointerEvent.iPosition.iX) > pixelOffset ) ||
+ (Abs(iPointerEvent.iPosition.iY - aPointerEvent.iPosition.iY) > pixelOffset ))
+ {
+ iDrag = ETrue;
+ }
+ }
+ else if ((iSelectedDlgLine == EFeedsEditAutomaticUpdatingId) && (aPointerEvent.iType == TPointerEvent::EButton1Up))
+ {
+ if(!iDrag)
+ {
+ HandleFreqCmdL();
+ }
+ else
+ {
+ iDrag = EFalse;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::OkToExitL
+// ---------------------------------------------------------
+//
+
+TBool CFeedsEditFeedDialog::OkToExitL( TInt aButtonId )
+ {
+ if (aButtonId == EAknSoftkeyOptions)
+ {
+ DisplayMenuL();
+ return EFalse;
+ }
+ else
+ if ((aButtonId == EAknSoftkeyChange) && (iSelectedDlgLine == EFeedsEditAutomaticUpdatingId))
+ {
+ HandleFreqCmdL();
+ return EFalse;
+ }
+ else
+ {
+ return CAknForm::OkToExitL(aButtonId);
+ }
+ }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::HandleFreqCmdL
+// Handles the auto update freuency modification commands
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::HandleFreqCmdL()
+ {
+ TInt currentlySelected = KAutoUpdatingOff;
+
+ // options array
+ CDesCArrayFlat* values = new( ELeave )CDesCArrayFlat(1);
+
+ CleanupStack::PushL( values );
+ HBufC* text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF);
+ values->AppendL(text->Des());
+ CleanupStack::Pop();
+
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN);
+ values->AppendL(text->Des());
+ CleanupStack::Pop();
+
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY);
+ values->AppendL(text->Des());
+ CleanupStack::Pop();
+
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS);
+ values->AppendL(text->Des());
+ CleanupStack::Pop();
+
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY);
+ values->AppendL(text->Des());
+ CleanupStack::Pop();
+
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY);
+ values->AppendL(text->Des());
+ CleanupStack::Pop();
+
+ switch(iFreq)
+ {
+ case KAutoUpdatingOff:
+ currentlySelected = EFeedsEditAutomaticUpdatingOff;
+ break;
+ case KFifteen:
+ currentlySelected = EFeedsEditAutomaticUpdating15min;
+ break;
+ case KOneHour:
+ currentlySelected = EFeedsEditAutomaticUpdatingHourly;
+ break;
+ case KFourHour:
+ currentlySelected = EFeedsEditAutomaticUpdating4hours;
+ break;
+ case KDay:
+ currentlySelected = EFeedsEditAutomaticUpdatingDaily;
+ break;
+ case KWeek:
+ currentlySelected = EFeedsEditAutomaticUpdatingWeekly;
+ break;
+ }
+
+ HBufC* title;
+ title=iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEED);
+ currentlySelected = ShowRadioButtonSettingPageL(*title,values,currentlySelected);
+ CleanupStack::PopAndDestroy(); // title
+
+ if(!iActionCancelled)
+ {
+ switch(currentlySelected)
+ {
+ case EFeedsEditAutomaticUpdatingOff:
+ iFreq = KAutoUpdatingOff;
+ break;
+ case EFeedsEditAutomaticUpdating15min:
+ iFreq = KFifteen;
+ break;
+ case EFeedsEditAutomaticUpdatingHourly:
+ iFreq = KOneHour;
+ break;
+ case EFeedsEditAutomaticUpdating4hours:
+ iFreq = KFourHour;
+ break;
+ case EFeedsEditAutomaticUpdatingDaily:
+ iFreq = KDay;
+ break;
+ case EFeedsEditAutomaticUpdatingWeekly:
+ iFreq = KWeek;
+ break;
+ }
+ CAknPopupField *freqControl =
+ static_cast< CAknPopupField* >( Control( EFeedsEditAutomaticUpdatingId ) );
+ switch(iFreq)
+ {
+ case KAutoUpdatingOff:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF);
+ break;
+ case KFifteen:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN);
+ break;
+ case KOneHour:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY);
+ break;
+ case KFourHour:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS);
+ break;
+ case KDay:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY);
+ break;
+ case KWeek:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY);
+ break;
+ }
+ freqControl->SetEmptyTextL(text->Des());
+ CleanupStack::Pop();
+ SetChangesPending(ETrue);
+ }
+ CleanupStack::PopAndDestroy(values);
+ }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::PostLayoutDynInitL
+// ---------------------------------------------------------
+//
+
+void CFeedsEditFeedDialog::PostLayoutDynInitL()
+ {
+ //Call the Base class LineChangedL() before the form is actually drawn
+ // Call the LineChangedL to avoid the line clicking error for the first line
+ LineChangedL(EFeedsEditDialogUrlId);
+ // Call the base class PostLayoutDynInitL()
+ CAknForm::PostLayoutDynInitL();
+ }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::LineChangedL
+// Takes any action required when the current line is changed
+// to aControlId.
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::LineChangedL( TInt aControlId )
+ {
+ iSelectedDlgLine = aControlId;
+ //get the reference to the buttomgroup container
+ CEikButtonGroupContainer& cba = ButtonGroupContainer();
+ //add the 'Change' command
+ //cba.SetCommandSetL(R_EDIT_FEEDS_CBA_OPTIONS_AUTO_UPDATE_CONTEXT_MENU);
+
+ //now we check where is the control, as 'Change' command is not to be
+ //shown for the first two form lines
+ if((aControlId == EFeedsEditDialogUrlId) ||
+ (aControlId == EFeedsEditDialogNameId))
+ {
+ // make the 'Change' button invisible
+ cba.MakeCommandVisible(EAknSoftkeyChange, EFalse);
+ CEikEdwin* edwin = NULL;
+ edwin = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogUrlId));
+ if(edwin)
+ edwin->SetAknEditorFlags(EAknEditorFlagNoT9 | EAknEditorFlagUseSCTNumericCharmap);
+ }
+ else if(aControlId == EFeedsEditAutomaticUpdatingId)
+ {
+ // make the 'Change' Button visible
+ cba.MakeCommandVisible(EAknSoftkeyChange, ETrue);
+ }
+ else
+ {
+ //blank implementation
+ }
+ // draw the CBA
+ cba.DrawNow();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::~CFeedsEditFeedDialog
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog::~CFeedsEditFeedDialog()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::PreLayoutDynInitL
+//
+// Called to setup the options menu with the dialog is active.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFeedDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+ {
+ CAknForm::DynInitMenuPaneL(aResourceId, aMenuPane);
+
+ if (aResourceId == R_AVKON_FORM_MENUPANE)
+ {
+ aMenuPane->SetItemDimmed(EAknFormCmdLabel, ETrue);
+ aMenuPane->SetItemDimmed(EAknFormCmdAdd, ETrue);
+ aMenuPane->SetItemDimmed(EAknFormCmdDelete, ETrue);
+
+ aMenuPane->AddMenuItemsL(R_FEEDS_HELP_EXIT_FEED_MENU);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::SaveFormDataL
+//
+// Called by the framework whenver the 'Save' menu item is selected.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsEditFeedDialog::SaveFormDataL()
+ {
+ CEikEdwin* textEditorName;
+ CEikEdwin* textEditorUrl;
+
+ HBufC* name = NULL;
+ HBufC* url = NULL;
+ TBool valid = EFalse;
+
+ // Extract the new name.
+ textEditorName = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+ name = textEditorName->GetTextInHBufL();
+ CleanupStack::PushL(name);
+
+ // Extract the url name.
+ textEditorUrl = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogUrlId));
+ url = textEditorUrl->GetTextInHBufL();
+ CleanupStack::PushL(url);
+
+ // Notify the observer.
+ valid = iObserver.IsFeedNameValidL(name, !iIsNewFeed);
+
+ // If invalid force the user to reentry it.
+ if (!valid)
+ {
+ // Change Focus and select the name field.
+ TryChangeFocusToL( EFeedsEditDialogNameId );
+ textEditorName->SelectAllL();
+
+ iExitDialog = EFalse;
+ }
+
+ // Otherwise, check the url too.
+ else
+ {
+ valid = iObserver.IsFeedUrlValidL(url);
+
+ // If invalid force the user to reentry it.
+ if (!valid)
+ {
+ // Set focus to url field
+ TryChangeFocusToL( EFeedsEditDialogUrlId );
+ // Position focus to end of char, but not highlight the whole url field
+ textEditorUrl->SetSelectionL( textEditorUrl->TextLength(), textEditorUrl->TextLength() );
+ textEditorUrl->DrawDeferred();
+ iExitDialog = EFalse;
+ }
+
+ // Otherwise pass the new values to the observer.
+ else
+ {
+ if (iIsNewFeed)
+ {
+ iObserver.NewFeedL(*name, *url, iFreq);
+ }
+ else
+ {
+ // If the setting is changed from Off to other values, a confirmation
+ // query with text: 'Enabling automatic updating may increase your monthly
+ // phone bill' is shown.
+ if ((iPreviousFreq == EFeedsEditAutomaticUpdatingOff) &&
+ (iFreq != EFeedsEditAutomaticUpdatingOff) && (iPreviousFreq != iFreq))
+ {
+ HBufC* note = StringLoader::LoadLC( R_FEEDS_DATAQUERY_AUTOUPDATEWARN );
+ if(iPreviousFreq == 0)
+ {
+ ShowInfoDialogwithOkSoftKeyL(note->Des());
+ }
+ CleanupStack::PopAndDestroy(); // note
+ iPreviousFreq = iFreq;
+ }
+ iObserver.UpdateFeedL(*name, *url, iFreq);
+ }
+
+ iExitDialog = ETrue;
+ }
+ }
+
+ // Clean up.
+ CleanupStack::PopAndDestroy(url);
+ CleanupStack::PopAndDestroy(name);
+
+ return valid;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::PreLayoutDynInitL
+//
+// Called by the framework before the form is initialised.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFeedDialog::PreLayoutDynInitL()
+ {
+ CEikEdwin* textEditor = NULL;
+
+ CAknForm::PreLayoutDynInitL();
+
+ // Get the name field
+ textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+
+ // If the name was set then set it.
+ if (iName.Length() > 0)
+ {
+ textEditor->SetTextL(&iName);
+ }
+
+ // Otherwise use the default name.
+ else
+ {
+ HBufC* text = NULL;
+
+ // Load the label
+ text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_ITEM);
+ CleanupStack::PushL(text);
+
+ textEditor->SetTextL(text);
+ SetFormFlag(EUnsavedEdit, ETrue);
+
+ CleanupStack::PopAndDestroy(text);
+ }
+
+ // Get the url field
+ textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogUrlId));
+
+ textEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode | EAknEditorNumericInputMode );
+
+ textEditor->SetAknEditorFlags
+ (
+ EAknEditorFlagLatinInputModesOnly |
+ EAknEditorFlagUseSCTNumericCharmap
+ );
+ textEditor->SetAknEditorPermittedCaseModes( EAknEditorUpperCase | EAknEditorLowerCase );
+
+ // If the url was set then set it.
+ if (iUrl.Length() > 0)
+ {
+ textEditor->SetTextL(&iUrl);
+ }
+
+ // Otherwise use the url.
+ else
+ {
+ HBufC* text = NULL;
+
+ // Load the label
+ text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_URL_ITEM);
+ CleanupStack::PushL(text);
+
+ textEditor->SetTextL(text);
+ SetFormFlag(EUnsavedEdit, ETrue);
+
+ CleanupStack::PopAndDestroy(text);
+ }
+ CAknPopupField *freqControl =
+ static_cast< CAknPopupField* >( Control( EFeedsEditAutomaticUpdatingId ) );
+ HBufC* text = NULL;
+ switch(iFreq)
+ {
+ case KAutoUpdatingOff:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF);
+ break;
+ case KFifteen:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN);
+ break;
+ case KOneHour:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY);
+ break;
+ case KFourHour:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS);
+ break;
+ case KDay:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY);
+ break;
+ case KWeek:
+ text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY);
+ break;
+ }
+ freqControl->SetEmptyTextL(text->Des());
+ CleanupStack::Pop();
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::ProcessCommandL
+//
+// Called by the framework to process the options menu.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFeedDialog::ProcessCommandL(TInt aCommandId)
+ {
+ switch (aCommandId)
+ {
+ case EAknCmdExit:
+ {
+ // Custom added commands. Forward to view.
+ // Note that we respond to EAknCmdExit, not CEikCmdExit; it's
+ // because we don't get it through the AppUi framework (instead,
+ // we forward it there now).
+ CBrowserAppUi::Static()->ActiveView()->ProcessCommandL( aCommandId );
+ break;
+ }
+
+ case EEikCmdExit:
+ break;
+
+#ifdef __SERIES60_HELP
+ case EAknFepCmdPredHelp:
+ case EAknCmdHelp:
+ HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+ iAppUi->AppHelpContextL());
+
+ break;
+#endif //__SERIES60_HELP
+ case EWmlCmdAboutProduct:
+ {
+ iAppUi->HandleCommandL( aCommandId );
+ break;
+ }
+ default:
+ // Standard form commands.
+ CAknForm::ProcessCommandL(aCommandId);
+
+ if (iExitDialog)
+ {
+ TryExitL(EAknSoftkeyBack);
+ }
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::GetHelpContext
+//
+// Get help context for the control.
+// -----------------------------------------------------------------------------
+//
+#ifdef __SERIES60_HELP
+void CFeedsEditFeedDialog::GetHelpContext(TCoeHelpContext& aContext) const
+ {
+ // This must be the Browser's uid becasue the help texts are under Browser topics.
+ aContext.iMajor = KUidBrowserApplication;
+
+ if (iIsNewFeed)
+ {
+ aContext.iContext = KOSS_HLP_RSS_ADD;
+ }
+ else
+ {
+ aContext.iContext = KOSS_HLP_RSS_EDIT;
+ }
+ }
+#endif // __SERIES60_HELP
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::ShowRadioButtonSettingPageL
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsEditFeedDialog::ShowRadioButtonSettingPageL(
+ TDesC& aTitle,
+ CDesCArrayFlat* aValues,
+ TInt aCurrentItem )
+ {
+
+ // index must be turned upside down, because options list is upside down
+ //TInt newItem = aCurrentItem = aValues->Count() - 1 - aCurrentItem;
+ TInt newItem = aCurrentItem;
+
+ // We have everything to create dialog
+ CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
+ R_RADIO_BUTTON_SETTING_PAGE, newItem, aValues );
+
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( aTitle );
+ CleanupStack::Pop(); // dlg
+ iActionCancelled = EFalse;
+ if ( !dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ // Changes confirmed
+ newItem = aCurrentItem;
+ iActionCancelled = ETrue;
+ }
+ //iActionCancelled = EFalse;
+
+ // index must be re-turned upside down, because options list is upside down
+ return newItem;
+ }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::ShowInfoDialogwithOkSoftKeyL
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::ShowInfoDialogwithOkSoftKeyL( const TDesC& aNoteText )
+ {
+ CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone,CAknNoteDialog::ENoTimeout);
+ dlg->SetTextL( aNoteText );
+ dlg->PrepareLC( R_FEEDS_EDIT_AUTOUPDATE_INFORMATION_NOTE_DIALOG );
+ dlg->RunLD();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsEditFolderDialog.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Encapsulates a edit folder dialog.
+*
+*/
+
+
+#include <AknPopupFieldText.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <eikedwin.h>
+#include <eikmenup.h>
+#include <charconv.h>
+#include <aknviewappui.h>
+
+#ifdef __SERIES60_HELP
+#include <hlplch.h>
+#endif
+
+#include "BrowserAppUi.h"
+#include "BrowserAppViewBase.h"
+#include "FeedsEditFolderDialog.h"
+
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFolderDialog* CFeedsEditFolderDialog::NewL(MFeedsEditFolderDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName)
+ {
+ CFeedsEditFolderDialog* self = new (ELeave) CFeedsEditFolderDialog(aObserver, aAppUi, aName);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFolderDialog* CFeedsEditFolderDialog::NewL(MFeedsEditFolderDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi)
+ {
+ CFeedsEditFolderDialog* self = new (ELeave) CFeedsEditFolderDialog(aObserver, aAppUi, KNullDesC);
+
+ CleanupStack::PushL(self);
+ self->iIsNewFolder = ETrue;
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::CFeedsEditFolderDialog
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFolderDialog::CFeedsEditFolderDialog(MFeedsEditFolderDialogObserver& aObserver,
+ CAknViewAppUi* aAppUi,
+ const TDesC& aName):
+ iObserver(aObserver), iAppUi(aAppUi), iName(aName)
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::~CFeedsEditFolderDialog
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFolderDialog::~CFeedsEditFolderDialog()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::PreLayoutDynInitL
+//
+// Called to setup the options menu with the dialog is active.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFolderDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+ {
+ CAknForm::DynInitMenuPaneL(aResourceId, aMenuPane);
+
+ if (aResourceId == R_AVKON_FORM_MENUPANE)
+ {
+ aMenuPane->SetItemDimmed(EAknFormCmdLabel, ETrue);
+ aMenuPane->SetItemDimmed(EAknFormCmdAdd, ETrue);
+ aMenuPane->SetItemDimmed(EAknFormCmdDelete, ETrue);
+
+ aMenuPane->AddMenuItemsL(R_FEEDS_HELP_EXIT_FEED_MENU);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::SaveFormDataL
+//
+// Called by the framework whenver the 'Save' menu item is selected.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsEditFolderDialog::SaveFormDataL()
+ {
+ CEikEdwin* textEditor;
+ HBufC* name = NULL;
+ TBool valid = EFalse;
+
+ // Extract the new name.
+ textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+ name = textEditor->GetTextInHBufL();
+ CleanupStack::PushL(name);
+
+ // Notify the observer.
+ valid = iObserver.IsFolderNameValidL(name, !iIsNewFolder);
+
+ // If invalid force the user to reentry it.
+ if (!valid)
+ {
+ // Focus and select the name field.
+ textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+
+ textEditor->SetFocus(ETrue);
+ textEditor->SelectAllL();
+
+ iExitDialog = EFalse;
+ }
+
+ // Otherwise pass the new values to the observer.
+ else
+ {
+ if (iIsNewFolder)
+ {
+ iObserver.NewFolderL(*name);
+ }
+ else
+ {
+ iObserver.UpdateFolderL(*name);
+ }
+
+ iExitDialog = ETrue;
+ }
+
+ // Clean up.
+ CleanupStack::PopAndDestroy(name);
+
+ return valid;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::PreLayoutDynInitL
+//
+// Called by the framework before the form is initialised.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFolderDialog::PreLayoutDynInitL()
+ {
+ CEikEdwin* textEditor = NULL;
+
+ CAknForm::PreLayoutDynInitL();
+
+ // Get the name field
+ textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+
+ // If the name was set then set it.
+ if (iName.Length() > 0)
+ {
+ textEditor->SetTextL(&iName);
+ }
+
+ // Otherwise use the default name.
+ else
+ {
+ HBufC* text = NULL;
+
+ // Load the label
+ text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FOLDER_ITEM);
+ CleanupStack::PushL(text);
+
+ textEditor->SetTextL(text);
+ SetFormFlag(EUnsavedEdit, ETrue);
+
+ CleanupStack::PopAndDestroy(text);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFolderDialog::ProcessCommandL
+//
+// Called by the framework to process the options menu.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFolderDialog::ProcessCommandL(TInt aCommandId)
+ {
+ switch (aCommandId)
+ {
+ case EAknCmdExit:
+ {
+ // Custom added commands. Forward to view.
+ // Note that we respond to EAknCmdExit, not CEikCmdExit; it's
+ // because we don't get it through the AppUi framework (instead,
+ // we forward it there now).
+ CBrowserAppUi::Static()->ActiveView()->ProcessCommandL( aCommandId );
+ break;
+ }
+
+ case EEikCmdExit:
+ break;
+
+#ifdef __SERIES60_HELP
+ case EAknCmdHelp:
+ HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+ iAppUi->AppHelpContextL());
+
+ break;
+#endif //__SERIES60_HELP
+ case EWmlCmdAboutProduct:
+ {
+ iAppUi->HandleCommandL( aCommandId );
+ break;
+ }
+ default:
+ // Standard form commands.
+ CAknForm::ProcessCommandL(aCommandId);
+
+ if (iExitDialog)
+ {
+ TryExitL(EAknSoftkeyBack);
+ }
+ break;
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsFeedContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1131 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a given feed.
+*
+*/
+
+
+#include <AknNavi.h>
+#include <AknNaviDe.h>
+#include <AknTabGrp.h>
+#include <AknNaviLabel.h>
+#include <aknutils.h>
+#include <AknViewAppUi.h>
+#include <brctlinterface.h>
+#include <CharConv.H>
+#include <StringLoader.h>
+#include <AknToolbar.h>
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <csxhelp/browser.hlp.hrh>
+#include "BrowserApplication.h"
+#endif // __SERIES60_HELP
+
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include "FeedsFeedContainer.h"
+#include "FeedsFeedView.h"
+#include <xmlencoding.h>
+#include "ApiProvider.h"
+#include "BrowserSpecialLoadObserver.h"
+#include "Display.h"
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+#include "BrowserAppUi.h"
+#include <feedattributes.h>
+#include <folderattributes.h>
+#include <feedsentity.h>
+#include <BidiText.h>
+
+#include "eikon.hrh"
+
+
+_LIT(KFeedsSchema, "feeds:");
+_LIT(KFeedsNavSchema, "feedsnav:");
+_LIT(KNext, "next");
+_LIT(KTemplate, "feeds_view_template.html");
+_LIT(KTokenTitle, "#Title#");
+_LIT(KTokenWebUrl, "#WebUrl#");
+_LIT(KTokenDate, "#Date#");
+_LIT(KTokenDescription, "#Description#");
+_LIT(KTokenEnclosure, "#Enclosure#");
+_LIT(KTokenShowPrev, "#ShowPrev#");
+_LIT(KTokenShowNext, "#ShowNext#");
+_LIT(KTokenTextDir, "#dir#");
+_LIT(KLTRTextDir, "\"ltr\"");
+_LIT(KRTLTextDir, "\"rtl\"");
+
+const TInt KDateSize = 30; // Size of Date strings
+const TInt KTimeSize = 30; // Size of Time strings
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFeedContainer* CFeedsFeedContainer::NewL(CFeedsFeedView* aView,
+ MApiProvider& aApiProvider)
+ {
+ CFeedsFeedContainer* self = new (ELeave) CFeedsFeedContainer(aView, aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::CFeedsFeedContainer
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFeedContainer::CFeedsFeedContainer(CFeedsFeedView* aView,
+ MApiProvider& aApiProvider ) :
+ iView( aView ),
+ iApiProvider( aApiProvider ),
+ iBrowserControl(0)
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::ConstructL()
+ {
+ EnsureTemplateL(KTemplate);
+ LoadTemplateL(KTemplate);
+
+ CreateWindowL();
+ SetMopParent( iView );
+ //SetRect(aRect);
+ ActivateL();
+
+ TRect rect(Position(), Size());
+
+ iBrowserControl = CreateBrowserControlL(this, rect,
+ TBrCtlDefs::ECapabilityDisplayScrollBar | TBrCtlDefs::ECapabilityLoadHttpFw,
+ TBrCtlDefs::ECommandIdBase, NULL, NULL, this, NULL, NULL, NULL, NULL);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::~CFeedsFeedContainer
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFeedContainer::~CFeedsFeedContainer()
+ {
+ delete iTemplate;
+ delete iNaviPaneTabsGroup;
+ delete iBrowserControl;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::OfferKeyEventL
+//
+// Handles key event.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFeedsFeedContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+ {
+
+ TKeyResponse response = EKeyWasConsumed;
+
+ if (aType == EEventKey)
+ {
+ switch (aKeyEvent.iCode)
+ {
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftArrow: // West
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ ShowPrevItemL();
+ }
+ return response;
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyRightArrow: // East
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ ShowNextItemL();
+ }
+ return response;
+
+ }
+ }
+
+ response = iBrowserControl->OfferKeyEventL(aKeyEvent, aType);
+ if(iBrowserControl->FocusedElementType() != TBrCtlDefs::EElementAnchor && iView->Toolbar() )
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsSeeFullStory, ETrue, ETrue);
+ }
+ else
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsSeeFullStory, EFalse, ETrue);
+ }
+ // now "simulate" another key event for proper handling of middle-softkey
+ if ( (aKeyEvent.iScanCode == EStdKeyDevice3) && (aType == EEventKeyDown) )
+ {
+ TKeyEvent keyEvent;
+ keyEvent.iCode = 0xf845;
+ keyEvent.iModifiers = 1;
+ keyEvent.iRepeats = 0;
+ keyEvent.iCode = EKeyDevice3;
+ keyEvent.iScanCode = EStdKeyDevice3;
+ response = iBrowserControl->OfferKeyEventL( keyEvent, EEventKey );
+ }
+ return response;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::GetHelpContext
+//
+// Get help context for the control.
+// -----------------------------------------------------------------------------
+//
+#ifdef __SERIES60_HELP
+void CFeedsFeedContainer::GetHelpContext(TCoeHelpContext& aContext) const
+ {
+ // This must be the Browser's uid becasue the help texts are under Browser topics.
+ aContext.iMajor = KUidBrowserApplication;
+ aContext.iContext = KOSS_HLP_RSS_ARTICLE;
+ }
+#endif // __SERIES60_HELP
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::MakeVisible
+//
+// Sets this control as visible or invisible.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::MakeVisible(TBool aVisible)
+ {
+ if (iBrowserControl)
+ {
+ iBrowserControl->MakeVisible(aVisible);
+ }
+
+ CCoeControl::MakeVisible(aVisible);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::SizeChanged
+//
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::SizeChanged()
+ {
+ if (iBrowserControl)
+ {
+ iBrowserControl->SetRect(Rect());
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::HandleResourceChange
+//
+// Called by the framework when a display resource changes (i.e. skin or layout).
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::HandleResourceChange(TInt aType)
+ {
+ CCoeControl::HandleResourceChange(aType);
+ iBrowserControl->HandleResourceChange(aType);
+
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+
+ if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect))
+ {
+ SetRect(rect);
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::CountComponentControls
+//
+// Returns number of components.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFeedContainer::CountComponentControls() const
+ {
+ TInt ctrls = 0;
+ if ( iBrowserControl )
+ {
+ ctrls++;// Brctl
+ }
+ return ctrls;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::NetworkConnectionNeededL
+//
+// Request to create a network connection.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::NetworkConnectionNeededL(TInt* aConnectionPtr,
+ TInt* aSockSvrHandle, TBool* aNewConn, TApBearerType* aBearerType)
+ {
+ iApiProvider.SpecialLoadObserver().NetworkConnectionNeededL(aConnectionPtr, aSockSvrHandle,
+ aNewConn, aBearerType);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::HandleRequestL
+//
+// Request the host applicaion to handle non-http request.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFeedContainer::HandleRequestL(RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray)
+ {
+ HBufC* url = NULL;
+ TBool handled = ETrue;
+
+ // The 2 arrays must be in sync. Each element in iTypeArray
+ // identifies the type of the corresponding element in iDesArray.
+ if (aTypeArray->Count() != aDesArray->Count())
+ {
+ User::Leave(KErrArgument);
+ }
+
+ // Get the url.
+ for (TInt i = 0; i < aTypeArray->Count(); i++)
+ {
+ if ((*aTypeArray)[i] == EParamRequestUrl)
+ {
+ url = HBufC::NewLC((*aDesArray)[i].Length());
+ url->Des().Copy((*aDesArray)[i]);
+ break;
+ }
+ }
+
+ // Leave if the url wasn't found.
+ if (url == NULL)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ // Handle the "feeds:" schema
+ if (url->Find(KFeedsSchema) == 0)
+ {
+ // Extract the real url from the "feed" url.
+ TPtrC loadUrl(url->Ptr() + KFeedsSchema().Length(),
+ url->Length() - KFeedsSchema().Length());
+
+ // Handle the "feeds_nav:" schema.
+ if (loadUrl.Find(KFeedsNavSchema) == 0)
+ {
+ // Get the direction
+ TPtrC dir(loadUrl.Ptr() + KFeedsNavSchema().Length(),
+ loadUrl.Length() - KFeedsNavSchema().Length());
+
+ if (dir.FindF(KNext) == 0)
+ {
+ ShowNextItemL();
+ }
+ else
+ {
+ ShowPrevItemL();
+ }
+ }
+ else
+ {
+ // Otherwise dispatch the url to the client.
+ iApiProvider.FeedsClientUtilities().LoadUrlL(loadUrl);
+ }
+ }
+ // Otherwise, send request to SchemeHandler through default BrCtlSpecialLoadObserver
+ else
+ {
+ handled = iApiProvider.SpecialLoadObserver().HandleRequestL( aTypeArray, aDesArray );
+ }
+
+ CleanupStack::PopAndDestroy(url);
+ return handled;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::HandleDownloadL
+//
+// Called when the browser control wants the host application (us) to handle
+// downloaded content
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFeedContainer::HandleDownloadL(RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray)
+ {
+ HBufC* url = NULL;
+ TBool handled = EFalse;
+
+ //
+ // Pass first to the main special load observer to be handled.
+ // If it's not handled, continue here
+ //
+ handled = iApiProvider.SpecialLoadObserver().HandleDownloadL( aTypeArray, aDesArray );
+
+ if (!handled)
+ {
+ // The 2 arrays must be in sync. Each element in iTypeArray
+ // identifies the type of the corresponding element in iDesArray.
+ if (aTypeArray->Count() != aDesArray->Count())
+ {
+ User::Leave(KErrArgument);
+ }
+
+ // Get the url.
+ for (TInt i = 0; i < aTypeArray->Count(); i++)
+ {
+ if ((*aTypeArray)[i] == EParamRequestUrl)
+ {
+ url = HBufC::NewLC((*aDesArray)[i].Length());
+ url->Des().Copy((*aDesArray)[i]);
+ break;
+ }
+ }
+
+ TPtrC pUrl(url->Des());
+
+ // Leave if the url wasn't found.
+ if (url == NULL)
+ {
+ User::Leave(KErrArgument);
+ }
+ else
+ {
+ // Otherwise dispatch the url to the client.
+ iApiProvider.FeedsClientUtilities().SubscribeToL(KNullDesC, pUrl);
+ handled = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy(url);
+ }
+ return handled;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ComponentControl
+//
+// Returns pointer to particular component.
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CFeedsFeedContainer::ComponentControl(TInt aIndex) const
+ {
+ CCoeControl *ctrl = NULL;
+
+ switch (aIndex)
+ {
+ case 0:
+ {
+ ctrl = iBrowserControl;
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ return ctrl;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::SetCurrentFeedL
+//
+// Sets the current feed
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::SetCurrentFeedL(CFeedsEntity& aFeed, TInt aInitialItem)
+ {
+ iFeed = &aFeed;
+ iCurrentItem = aInitialItem;
+
+ // Update the view.
+ if (iView->iContainerOnStack)
+ {
+ // Only do this if it's view is active.
+ TPtrC title;
+ iFeed->GetStringValue(EFeedAttributeTitle,title);
+ if (title.Length() > 0)
+ {
+ iApiProvider.Display().SetTitleL( title );
+ }
+ else
+ {
+ iApiProvider.Display().SetTitleL( KNullDesC );
+ }
+ }
+
+ ShowFeedItemL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::GetItemUrl
+//
+// Returns the current item's url.
+// -----------------------------------------------------------------------------
+//
+const TDesC& CFeedsFeedContainer::GetItemUrl()
+ {
+ iFeed->GetChildren()[iCurrentItem]->GetStringValue(EItemAttributeLink,iUrl);
+ return iUrl;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::CurrentItem
+//
+// Returns the index of the current item.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFeedContainer::CurrentItem()
+ {
+ return iCurrentItem;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ItemCount
+//
+// Returns the number of items.
+// -----------------------------------------------------------------------------
+TInt CFeedsFeedContainer::ItemCount() const
+ {
+ return iFeed->GetChildren().Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ShowNextItemL
+//
+// Shows the next item if possible.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::ShowNextItemL()
+ {
+ if (iFeed->GetChildren().Count() <= 1)
+ {
+ return;
+ }
+
+ if ((iCurrentItem + 1) < iFeed->GetChildren().Count())
+ {
+ iCurrentItem++;
+ }
+ else
+ {
+ iCurrentItem = 0;
+ }
+ if (iView->Toolbar())
+ iView->Toolbar()->SetItemDimmed(EFeedsSeeFullStory, EFalse, ETrue);
+ ShowFeedItemL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ShowPrevItemL
+//
+// Shows the prev item if possible.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::ShowPrevItemL()
+ {
+ if (iFeed->GetChildren().Count() <= 1)
+ {
+ return;
+ }
+
+ if ((iCurrentItem - 1) >= 0)
+ {
+ iCurrentItem--;
+ }
+ else
+ {
+ iCurrentItem = iFeed->GetChildren().Count() - 1;
+ }
+ if (iView->Toolbar())
+ iView->Toolbar()->SetItemDimmed(EFeedsSeeFullStory, EFalse, ETrue);
+ ShowFeedItemL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::Clear
+//
+// Clears the navigation pane.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::ClearNavigationPane()
+ {
+ delete iNaviPaneTabsGroup;
+ iNaviPaneTabsGroup = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::UpdateNavigationPaneL
+//
+// Handles the changes needed to the Navigation Pane.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::UpdateNavigationPaneL()
+ {
+ const TInt KTabId = 88888;
+ const TInt KMaxNaviText = 25; // format is "<int>/<int>".
+ _LIT(KFormat, "%d/%d");
+
+ CAknNavigationControlContainer* naviPane = NULL;
+ TBuf<KMaxNaviText> buf;
+ CAknTabGroup* tabGroup = NULL;
+ TInt itemCount = 0;
+
+ if (iFeed)
+ {
+ itemCount = iFeed->GetChildren().Count();
+ }
+
+ // Get the navigation sub-pane.
+ CAknViewAppUi* appUi;
+ TUid uid;
+
+ // Get the title sub-pane.
+ appUi = static_cast<CAknViewAppUi*>(CCoeEnv::Static()->AppUi());
+
+ uid.iUid = EEikStatusPaneUidNavi;
+
+ CEikStatusPaneBase::TPaneCapabilities subPane = appUi->StatusPane()->
+ PaneCapabilities(uid);
+
+ // Set the title if the pane belongs to the app.
+ if (subPane.IsPresent() && subPane.IsAppOwned())
+ {
+ naviPane = (CAknNavigationControlContainer*) appUi->StatusPane()->ControlL(uid);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ // Ensure the tab group was created.
+ if (!iNaviPaneTabsGroup)
+ {
+ iNaviPaneTabsGroup = naviPane->CreateTabGroupL();
+ }
+
+ // Format Navi Pane text "index/count" style.
+ buf.Format(KFormat, iCurrentItem + 1, itemCount);
+
+ // Update the tab-group.
+ tabGroup = static_cast<CAknTabGroup*>(iNaviPaneTabsGroup->DecoratedControl());
+
+ // Already created, replacd the tab.
+ if (tabGroup->TabCount() != NULL)
+ {
+ tabGroup->ReplaceTabL(KTabId, buf);
+ }
+
+ // Otherwise add the tab.
+ else
+ {
+ tabGroup->AddTabL(KTabId, buf);
+ }
+
+ tabGroup->SetTabFixedWidthL(EAknTabWidthWithOneTab);
+ tabGroup->SetActiveTabById(KTabId);
+
+ // If not yet pushed, this will do the push; if already there, this brings
+ // it to top and draws.
+ naviPane->PushL(*iNaviPaneTabsGroup);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ShowFeedItemL
+//
+// Shows the given feed item.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::ShowFeedItemL()
+ {
+ _LIT(KSchema, "data:");
+ _LIT8(KType, "text/html");
+
+ const TInt KInt64Length = 25;
+
+ HBufC* link = NULL;
+ HBufC* htmlTemplate = NULL;
+ HBufC* enclosureStr = NULL;
+ TDataType datatype(KType);
+ TUid uid;
+ CFeedsEntity* item = iFeed->GetChildren()[iCurrentItem];
+ HBufC* enclosure = NULL;
+ TInt enclosureLen = 0;
+
+ // Mark the item as read.
+ iApiProvider.FeedsClientUtilities().SetItemStatusL(iFeed->GetChildren()[iCurrentItem], EItemStatusRead);
+
+ // Load the localized strings.
+ enclosureStr = StringLoader::LoadLC(R_FEEDS_ENCLOSURE);
+
+ // Convert the item's UTC timestamp into a localized string.
+ TBuf<KDateSize + KTimeSize + 1> timestamp;
+ TBuf<KTimeSize> temp;
+ TTime ts;
+
+ item->GetTimeValue(EItemAttributeTimestamp,ts);
+
+ // Translate from UTC to local time.
+ TTime local;
+ TTime utc;
+ TTimeIntervalSeconds delta;
+
+ local.HomeTime();
+ utc.UniversalTime();
+ utc.SecondsFrom(local, delta);
+ ts -= delta;
+
+ // Create the localized time string.
+ //Set time
+ HBufC* timeFormat = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_USUAL_WITH_ZERO );
+ ts.FormatL( timestamp, *timeFormat );
+ CleanupStack::PopAndDestroy( timeFormat );//timeFormat
+ //
+ timestamp.Append(_L(" "));
+ //Set date
+ HBufC* dateFormat = iEikonEnv->AllocReadResourceLC( R_QTN_DATE_USUAL_WITH_ZERO );
+ ts.FormatL( temp, *dateFormat );
+ CleanupStack::PopAndDestroy( dateFormat );//dateFormat
+ //
+ timestamp.Append(temp);
+
+ // Create the enclosure string, which is a a series of the following string.
+ // <div><a href="theUrl">Enclosure[theContentType]: theSize MB</a></div>
+ _LIT(KEnclosureMarkup, "<div><a href=\"%S\">%S[%S MB]: %S</a></div>");
+
+ TBuf16<KInt64Length> size;
+ TInt64 sizeInt;
+ TReal64 sizeReal;
+ TRealFormat format;
+ TPtrC url;
+ TPtrC contentType;
+ TPtrC len;
+ TPtrC title;
+ TPtrC desc;
+
+ format.iType = KRealFormatFixed;
+ format.iPlaces = 2;
+
+ // Determine how large the enclosure string needs to be.
+ for (TInt i = 0; i < item->GetChildren().Count(); i++)
+ {
+ CFeedsEntity* en = item->GetChildren()[i];
+
+ en->GetStringValue(EEnclosureAttributeContentType,contentType);
+ en->GetStringValue(EEnclosureAttributeSize,len);
+ en->GetStringValue(EEnclosureAttributeLink,url);
+ en->GetStringValue(EEnclosureAttributeTitle,title);
+ TLex16 lex(len);
+ // Convert the enclosure size to mega-bytes.
+ lex.Val(sizeInt);
+ sizeReal = sizeInt / 1000000.0;
+
+ size.Zero();
+ size.AppendNum(sizeReal, format);
+
+ enclosureLen += KEnclosureMarkup().Length();
+ enclosureLen += url.Length();
+ enclosureLen += enclosureStr->Length();
+ enclosureLen += size.Length();
+ enclosureLen += contentType.Length();
+ }
+
+ // Allocate the enclosure string.
+ enclosure = HBufC::NewLC(enclosureLen);
+
+ // Construct the enclosure string.
+ for (TInt i = 0; i < item->GetChildren().Count(); i++)
+ {
+ CFeedsEntity* en = item->GetChildren()[i];
+
+ en->GetStringValue(EEnclosureAttributeContentType,contentType);
+ en->GetStringValue(EEnclosureAttributeSize,len);
+ en->GetStringValue(EEnclosureAttributeLink,url);
+ en->GetStringValue(EEnclosureAttributeTitle,title);
+ TLex16 lex(len);
+
+ // Convert the enclosure size to mega-bytes.
+ lex.Val(sizeInt);
+ sizeReal = sizeInt / 1000000.0;
+
+ size.Zero();
+ size.AppendNum(sizeReal, format);
+
+ enclosure->Des().AppendFormat(KEnclosureMarkup, &(url), enclosureStr,
+ &size, &(contentType));
+ }
+
+ // Load and prepare the html template.
+ item->GetStringValue(EItemAttributeTitle,title);
+ item->GetStringValue(EItemAttributeDescription,desc);
+ item->GetStringValue(EItemAttributeLink,url);
+
+ htmlTemplate = ResolveTemplateL(title, timestamp, desc,
+ url, *enclosure);
+
+
+ CleanupStack::PushL(htmlTemplate);
+ iFeed->GetStringValue(EFeedAttributeTitle,title);
+ // Load the htmlTemplate in the browser control.
+ uid.iUid = KCharacterSetIdentifierUcs2;
+
+ link = HBufC::NewLC(KSchema().Length() + title.Length());
+ link->Des().Copy(KSchema);
+ link->Des().Append(title);
+
+ TPtrC8 ptr((const TUint8*) htmlTemplate->Ptr(), htmlTemplate->Size());
+ iBrowserControl->LoadDataL(*link, ptr, datatype, uid);
+
+ CleanupStack::PopAndDestroy(link);
+ CleanupStack::PopAndDestroy(htmlTemplate);
+ CleanupStack::PopAndDestroy(enclosure);
+ CleanupStack::PopAndDestroy(enclosureStr);
+
+ // Update the nav-pane.
+ UpdateNavigationPaneL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::LoadTemplateL
+//
+// Loads the template html file.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::LoadTemplateL(const TDesC& aTemplateName)
+ {
+ RFs rfs;
+ RFile file;
+ TInt size;
+ TBuf<KMaxFileName> path;
+ TUint encoding;
+ HBufC8* buff;
+ CXmlEncoding* xmlEncoding = NULL;
+ TInt loc;
+
+ // Build the path to the file and open the file.
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ path.Append(_L("\\"));
+ path.Append(aTemplateName);
+
+ User::LeaveIfError(file.Open(rfs, path, EFileRead));
+ CleanupClosePushL(file);
+
+ // Read the file into the buffer.
+ User::LeaveIfError(file.Size(size));
+
+ buff = HBufC8::NewL(size);
+ CleanupStack::PushL(buff);
+
+ TPtr8 ptr((TUint8*) buff->Ptr(), size);
+ User::LeaveIfError(file.Read(ptr, size));
+
+ // Convert the buffer to ucs2 and clean up.
+ xmlEncoding = CXmlEncoding::NewL();
+ CleanupStack::PushL(xmlEncoding);
+
+ if (!xmlEncoding->DetermineCharEncodingL(ptr, KNullDesC, encoding))
+ {
+ User::Leave(KErrCorrupt);
+ }
+
+ iTemplate = xmlEncoding->ConvertToUcs2L(encoding, ptr);
+
+ CleanupStack::PopAndDestroy(xmlEncoding);
+ CleanupStack::PopAndDestroy(buff);
+ CleanupStack::PopAndDestroy(/*file*/);
+ CleanupStack::PopAndDestroy(/*rfs*/);
+
+ // Count the number of token. These counts are used in ResolveTemplate
+ // to determine how big the resolved buffer should be.
+ TPtrC findPtr;
+
+ iTitleCount = 0;
+ iWebUrlCount = 0;
+ iDateCount = 0;
+ iDescriptionCount = 0;
+ iEnclosureCount = 0;
+ iShowPrevCount = 0;
+ iShowNextCount = 0;
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find(KTokenTitle())) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenTitle().Length()));
+ iTitleCount++;
+ }
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find(KTokenWebUrl())) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenWebUrl().Length()));
+ iWebUrlCount++;
+ }
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find(KTokenDate())) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenDate().Length()));
+ iDateCount++;
+ }
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find(KTokenDescription())) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenDescription().Length()));
+ iDescriptionCount++;
+ }
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find((KTokenEnclosure))) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenEnclosure().Length()));
+ iEnclosureCount++;
+ }
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find((KTokenShowPrev))) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenShowPrev().Length()));
+ iShowPrevCount++;
+ }
+
+ findPtr.Set(*iTemplate);
+ while ((loc = findPtr.Find((KTokenShowNext))) != KErrNotFound)
+ {
+ findPtr.Set(findPtr.Mid(loc + KTokenShowNext().Length()));
+ iShowNextCount++;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::ResolveTemplateL
+//
+// Loads and resolves the tokens in the template html file.
+// -----------------------------------------------------------------------------
+//
+HBufC* CFeedsFeedContainer::ResolveTemplateL(const TDesC& aTitle,
+ const TDesC& aTimestamp, const TDesC& aDescription, const TDesC& aUrl,
+ const TDesC& aEnclosure)
+ {
+ HBufC* ucs2Buff;
+ TInt loc;
+
+ // Create and init the resolved buffer.
+ ucs2Buff = HBufC::NewLC(iTemplate->Length() + (aTitle.Length() * iTitleCount) +
+ (aTimestamp.Length() * iDateCount) + (aDescription.Length() * iDescriptionCount) +
+ (aUrl.Length() * iWebUrlCount) +
+ (aEnclosure.Length() * iEnclosureCount) + iShowPrevCount + iShowNextCount);
+
+ ucs2Buff->Des().Copy(*iTemplate);
+
+ // Resolve the tokens.
+ TPtr ucs2Ptr(ucs2Buff->Des());
+
+ // Add the text direction information here
+ TBool found(EFalse);
+ TBidiText::TDirectionality dir = TBidiText::TextDirectionality(aTitle, &found);
+ TBuf<5> textDirection;
+ if ( dir == TBidiText::ERightToLeft )
+ {
+ textDirection.Copy(KRTLTextDir);
+ }
+ else
+ {
+ textDirection.Copy(KLTRTextDir);
+ }
+
+ // replace the text direction string
+ if ((loc = ucs2Ptr.Find(KTokenTextDir())) != KErrNotFound)
+ {
+ ucs2Ptr.Replace(loc, textDirection.Length(), textDirection);
+ }
+
+ // Replace the title tokens.
+ while ((loc = ucs2Ptr.Find(KTokenTitle())) != KErrNotFound)
+ {
+ ucs2Ptr.Replace(loc, KTokenTitle().Length(), aTitle);
+ }
+
+ // Replace the url tokens.
+ while ((loc = ucs2Ptr.Find(KTokenWebUrl())) != KErrNotFound)
+ {
+ ucs2Ptr.Replace(loc, KTokenWebUrl().Length(), aUrl);
+ }
+
+ // Replace the date tokens.
+ while ((loc = ucs2Ptr.Find(KTokenDate())) != KErrNotFound)
+ {
+ ucs2Ptr.Replace(loc, KTokenDate().Length(), aTimestamp);
+ }
+
+ // Replace the description tokens.
+ while ((loc = ucs2Ptr.Find(KTokenDescription())) != KErrNotFound)
+ {
+ ucs2Ptr.Replace(loc, KTokenDescription().Length(), aDescription);
+ }
+
+ // Replace the enclosure tokens.
+ while ((loc = ucs2Ptr.Find(KTokenEnclosure())) != KErrNotFound)
+ {
+ ucs2Ptr.Replace(loc, KTokenEnclosure().Length(), aEnclosure);
+ }
+
+ CleanupStack::Pop(ucs2Buff);
+ return ucs2Buff;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedContainer::EnsureTemplateL
+//
+// If need be copy the template from ROM.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedContainer::EnsureTemplateL(const TDesC& aName)
+ {
+ TInt err;
+ RFs defaultRfs;
+ TUint attValue = 0;
+ TBuf<KMaxFileName> path;
+
+ // Open a connection to the working drive.
+ User::LeaveIfError(defaultRfs.Connect());
+ CleanupClosePushL(defaultRfs);
+ User::LeaveIfError(defaultRfs.SetSessionPath(_L("c:\\")));
+
+ // Build the path to the file.
+ path.Append(_L("\\"));
+ path.Append(aName);
+
+ // Test whether or not the folder file is present.
+ err = defaultRfs.Att(path, attValue);
+
+ // The file is there, just return.
+ if (err == KErrNone)
+ {
+ CleanupStack::PopAndDestroy(/*defaultRfs*/);
+ return;
+ }
+
+ // If the file is missing copy it from ROM.
+ if ((err == KErrNotFound) || (err == KErrPathNotFound))
+ {
+ RFs romRfs;
+ RFile file;
+ RFile romFile;
+ TInt size;
+ HBufC8* buffer = NULL;
+
+ // Open an rfs for the z drive.
+ User::LeaveIfError(romRfs.Connect());
+ CleanupClosePushL(romRfs);
+ User::LeaveIfError(romRfs.SetSessionPath(_L("z:\\")));
+
+ // Create the destination file.
+ User::LeaveIfError(file.Create(defaultRfs, path, EFileWrite));
+ CleanupClosePushL(file);
+
+ // Open the source file.
+ User::LeaveIfError(romFile.Open(romRfs, path, EFileRead));
+ CleanupClosePushL(romFile);
+
+ // Copy the file.
+ User::LeaveIfError(romFile.Size(size));
+ buffer = HBufC8::NewLC(size);
+ TPtr8 bufferPtr(buffer->Des());
+
+ User::LeaveIfError(romFile.Read(bufferPtr, size));
+ User::LeaveIfError(file.Write(bufferPtr, size));
+
+ // Clean up
+ CleanupStack::PopAndDestroy(buffer);
+ CleanupStack::PopAndDestroy(/*romFile*/);
+ CleanupStack::PopAndDestroy(/*file*/);
+ CleanupStack::PopAndDestroy(/*romRfs*/);
+ CleanupStack::PopAndDestroy(/*defaultRfs*/);
+ }
+ }
+
+// ---------------------------------------------------------
+// CFeedsFeedContainer::ExtractBrCtlParam()
+// ---------------------------------------------------------
+//
+TPtrC CFeedsFeedContainer::ExtractBrCtlParam
+ ( TUint aParamTypeToFind,
+ RArray<TUint>* aTypeArray,
+ CDesCArrayFlat* aDesArray,
+ TBool& aParamFound ) const
+ {
+ // initialize output parameter
+ aParamFound = EFalse;
+ TPtrC16 retParamValue;
+
+ for ( TInt j = 0; j < aTypeArray->Count(); j++ )
+ {
+ const TUint paramType = (*aTypeArray)[j];
+ if ( aParamTypeToFind == paramType )
+ {
+ // That's we need
+ retParamValue.Set( aDesArray->MdcaPoint(j) );
+ aParamFound = ETrue; // Indicate it in the out param
+ break; // break the loop - we found it
+ }
+ }
+ return retParamValue;
+ }
+
+void CFeedsFeedContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ iBrowserControl->HandlePointerEventL(aPointerEvent);
+ if(iBrowserControl->FocusedElementType()!= TBrCtlDefs::EElementAnchor && iView->Toolbar() )
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsSeeFullStory, ETrue, ETrue);
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsFeedView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a given feed.
+*
+*/
+
+
+#include <aknviewappui.h>
+#include <aknutils.h>
+#include <AknToolbar.h>
+#include <brctlinterface.h>
+#include <eikbtgpc.h>
+#include <eikmenup.h>
+#include <hlplch.h>
+
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include "BrowserUtil.h"
+#include <feedattributes.h>
+#include <folderattributes.h>
+#include "FeedsFeedContainer.h"
+#include "FeedsFeedView.h"
+
+#include "Logger.h"
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFeedView* CFeedsFeedView::NewL( MApiProvider& aApiProvider, TRect& aRect )
+
+ {
+ CFeedsFeedView* self = new (ELeave) CFeedsFeedView(aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL(aRect);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::CFeedsFeedView
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFeedView::CFeedsFeedView(MApiProvider& aApiProvider)
+: CBrowserViewBase( aApiProvider ),iPageScalerEnabled(EFalse),iPenEnabled(EFalse)
+ {
+ iPenEnabled = AknLayoutUtils::PenEnabled();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::ConstructL(TRect& aRect)
+ {
+ // this is here in case content view wasn't activated yet on browser startup.
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+
+ BaseConstructL(R_FEEDS_FEED_VIEW);
+
+ iContainer = CFeedsFeedContainer::NewL( this, ApiProvider() );
+ iContainer->SetRect( aRect );
+ iOrigRect.iTl = aRect.iTl;
+ iOrigRect.iBr = aRect.iBr;
+ iContainer->MakeVisible(EFalse);
+
+ if(iPenEnabled)
+ {
+ Toolbar()->SetToolbarObserver(this);;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::~CFeedsFeedView
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFeedView::~CFeedsFeedView()
+ {
+ DoDeactivate();
+
+ delete iContainer;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::Id
+//
+// Returns the id of the view.
+// -----------------------------------------------------------------------------
+//
+TUid CFeedsFeedView::Id() const
+ {
+ return KUidBrowserFeedsFeedViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::HandleCommandL
+//
+// Processes commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::HandleCommandL(TInt aCommand)
+ {
+ TBool handled = EFalse;
+
+ // Handle softkeys and other Symbian commands first.
+ switch (aCommand)
+ {
+ case EAknSoftkeyBack:
+ iApiProvider.FeedsClientUtilities().ShowTopicViewLocalL(iContainer->CurrentItem());
+ handled = ETrue;
+ break;
+
+ case EAknSoftkeyNext:
+ iContainer->ShowNextItemL();
+ handled = ETrue;
+ break;
+
+#ifdef __SERIES60_HELP
+ case EAknCmdHelp:
+ {
+ iApiProvider.SetLastActiveViewId(Id());
+ HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+ AppUi()->AppHelpContextL());
+ handled = ETrue;
+ break;
+ }
+#endif //__SERIES60_HELP
+ }
+
+ if (handled)
+ {
+ return;
+ }
+
+ switch (aCommand)
+ {
+ case EFeedsBack:
+ iApiProvider.FeedsClientUtilities().ShowTopicViewLocalL(iContainer->CurrentItem());
+ break;
+
+ case EFeedsShowNextItem:
+ iContainer->ShowNextItemL();
+ break;
+
+ case EFeedsShowPrevItem:
+ iContainer->ShowPrevItemL();
+ break;
+
+ case EFeedsSeeFullStory:
+ iContainer->iBrowserControl->HandleCommandL((TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandOpen));
+ break;
+
+ default:
+ iApiProvider.FeedsClientUtilities().HandleCommandL(Id(),aCommand);
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::DoActivateL
+//
+// Called when the view is activated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+ {
+ // fix bug RFON-7FJS2Z: need to activate status pane going back from full story page to feeds view
+ StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
+ StatusPane()->MakeVisible( ETrue );
+ //Take Button group pointer
+ CEikButtonGroupContainer* pButtonGroupContainer = CEikButtonGroupContainer::Current();
+ if (!iContainerOnStack)
+ {
+ AppUi()->AddToViewStackL(*this, iContainer);
+ //Make button group invisible in order to let container have correct Rect.
+ //Patch is based on comments received from AVKON
+ if(pButtonGroupContainer) pButtonGroupContainer->MakeVisible(EFalse);
+ iContainer->SetRect(iOrigRect);
+ if(iContainer->iBrowserControl->BrowserSettingL(TBrCtlDefs::ESettingsPageOverview))
+ {
+ TRAP_IGNORE(iContainer->iBrowserControl->SetBrowserSettingL(TBrCtlDefs::ESettingsPageOverview, EFalse));
+ iPageScalerEnabled = ETrue;
+ }
+ TRAP_IGNORE(iContainer->iBrowserControl->HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandGainFocus));
+
+ iContainer->MakeVisible(ETrue);
+ //Again make Button group visible
+ if(pButtonGroupContainer) pButtonGroupContainer->MakeVisible(ETrue);
+ iContainerOnStack = ETrue;
+ // resize screen after calling SetRect. This way looks better
+ iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ }
+
+ // Set the current feed.
+ iContainer->SetCurrentFeedL(*(iApiProvider.FeedsClientUtilities().CurrentFeed()), iInitialItem);
+
+ iApiProvider.SetLastActiveViewId(Id());
+ UpdateToolbarButtonsState();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::DoDeactivate
+//
+// Called when the view is deactivated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::DoDeactivate()
+ {
+ if (iContainerOnStack)
+ {
+ iContainer->ClearNavigationPane();
+
+ if(iPageScalerEnabled)
+ {
+ TRAP_IGNORE(iContainer->iBrowserControl->SetBrowserSettingL(TBrCtlDefs::ESettingsPageOverview, ETrue));
+ iPageScalerEnabled = EFalse;
+ }
+ TRAP_IGNORE(iContainer->iBrowserControl->HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandLoseFocus));
+
+ AppUi()->RemoveFromViewStack(*this, iContainer);
+ iContainer->MakeVisible(EFalse);
+
+ iInitialItem = iContainer->CurrentItem();
+ iContainerOnStack = EFalse;
+
+ // when exit from feeds view, viewMgr might be deleted already
+ if ( !ApiProvider().ExitInProgress() )
+ {
+ TRAP_IGNORE(iApiProvider.FeedsClientUtilities().ItemStatusWriteToServerL());
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::DynInitMenuPaneL
+//
+// Disables unrelated menu options.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+ {
+ __ASSERT_DEBUG( (aMenuPane != NULL), Util::Panic( Util::EUninitializedData ));
+
+ // Handle the main menu.
+ if (aResourceId == R_FEEDS_FEED_VIEW_MENU)
+ {
+ // Back to Page (if page loaded)
+ if ( iApiProvider.IsPageLoaded() )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdBackToPage, R_BROWSER_MENU_ITEM_BACK_TO_PAGE );
+ }
+ }
+
+ iApiProvider.FeedsClientUtilities().DynInitMenuPaneL(aResourceId, aMenuPane );
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::SetInitialItem
+//
+// Sets the initial item once the view is activated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::SetInitialItem(TInt aItemIndex)
+ {
+ iInitialItem = aItemIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::UpdateToolbarButtonsState
+//
+// Updates the state of the toolbar buttons depending on the situation
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsFeedView::UpdateToolbarButtonsState()
+ {
+ if ( iContainer->ItemCount() > 1 )
+ {
+ Toolbar()->SetItemDimmed(EFeedsShowPrevItem, EFalse, ETrue);
+ Toolbar()->SetItemDimmed(EFeedsShowNextItem, EFalse, ETrue);
+ }
+ else
+ {
+ Toolbar()->SetItemDimmed(EFeedsShowPrevItem, ETrue, ETrue);
+ Toolbar()->SetItemDimmed(EFeedsShowNextItem, ETrue, ETrue);
+ }
+ Toolbar()->SetItemDimmed(EFeedsSeeFullStory, EFalse, ETrue);
+ }
+
+// ---------------------------------------------------------------------------
+// CFeedsFeedView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CFeedsFeedView::CommandSetResourceIdL()
+ {
+ // It is never called, but this function have to be implemented
+ return KWmlEmptyResourceId;
+ }
+
+// ---------------------------------------------------------
+// CFeedsFeedView::HandleClientRectChange
+// ---------------------------------------------------------
+//
+void CFeedsFeedView::HandleClientRectChange()
+ {
+ if( iContainer )
+ {
+ iContainer->MakeVisible(EFalse);
+ iContainer->SetRect(ClientRect());
+ iContainer->MakeVisible(ETrue);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFeedView::DisconnectL
+// -----------------------------------------------------------------------------
+//
+void CFeedsFeedView::DisconnectL()
+ {
+ if( iContainer )
+ {
+ iContainer->iBrowserControl->HandleCommandL( TBrCtlDefs::ECommandDisconnect + TBrCtlDefs::ECommandIdBase );
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsFileSearchAgent.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,426 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "FeedsFileSearchAgent.h"
+#include <fbs.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::CFileSearchAgent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFeedsFileSearchAgent::CFeedsFileSearchAgent(MFeedsFileSearchAgentCallback& aCallback)
+ : iCallback(&aCallback), iCancelSearch(EFalse)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFileSearchAgent::ConstructL()
+ {
+ TDriveList driveList;
+ TChar driveLetter;
+
+ // we'll keep two lists. one for the drives in the system, the
+ // other for the list of found files
+ iDriveEntryList = new(ELeave) CDriveEntryList(KMaxDrives);
+ iFileEntryList = new(ELeave) CFileEntryList(FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS);
+ // Create a directory scan object.
+ iScan = CDirScan::NewL(iFs);
+ iLazyCaller = CIdle::NewL(CActive::EPriorityIdle );
+
+ // Connect to fs for FS ops, etc
+ User::LeaveIfError(iFs.Connect());
+
+ // populate list of drives
+ GetDriveListL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFileSearchAgent* CFeedsFileSearchAgent::NewL(MFeedsFileSearchAgentCallback& aCallback)
+ {
+ CFeedsFileSearchAgent* self = new( ELeave ) CFeedsFileSearchAgent(aCallback);
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::~CFeedsFileSearchAgent()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFeedsFileSearchAgent::~CFeedsFileSearchAgent()
+ {
+ CancelSearch();
+ iFs.Close();
+ delete iScan;
+ delete iLazyCaller;
+ delete iDriveEntryList;
+ delete iFileEntryList;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::StartSearchingL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CFeedsFileSearchAgent::StartSearchingL()
+ {
+ iSearchDriveIndex = -1;
+
+ // Return control to the CIdle
+ // The searching work will be done in LazyCallBack.
+ iLazyCaller->Start(TCallBack(CFeedsFileSearchAgent::LazyCallBack,this));
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::GetFileEntry
+//
+//
+// -----------------------------------------------------------------------------
+//
+TFileEntry* CFeedsFileSearchAgent::GetFileEntry(const TInt aIndex)
+ {
+ // for a client, return a pointer to a file that was found given
+ // it's index within the list of found files
+ if(aIndex >= iFileEntryList->Count())
+ {
+ return NULL;
+ }
+ else
+ {
+ return &(iFileEntryList->At(aIndex));
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::GetDriveListL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CFeedsFileSearchAgent::GetDriveListL()
+ {
+ TDriveList driveList;
+
+ // Setup List of drives
+ // DriveList will return an array of 26 bytes.
+ // nonzero entries means there is media present in
+ // that drive letter.
+ User::LeaveIfError(iFs.DriveList(driveList));
+ for (TInt i=0; i<KMaxDrives; i++)
+ {
+ if (driveList[i])
+ {
+ TDriveEntry driveEntry;
+
+ // Assign a drive letter to the drive entry.
+ // In the returned list of drives, index 0 corresponds to A:\,
+ // 1 to B:\, etc.
+ driveEntry.iLetter = 'A' + i;
+
+ // map the letter back to the drive number. This should be the
+ // same as "i"
+ iFs.CharToDrive(driveEntry.iLetter, driveEntry.iNumber);
+
+ // Add to the list of drives that we keep
+ iDriveEntryList->AppendL(driveEntry);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::DoSearchFilesL
+//
+// Searches a given path or paths for a filename and add it to this class' list
+// of found files. The filename can contain wildcards.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFileSearchAgent::DoSearchFiles(const TDesC& aFileName, const TDesC& aPath)
+ {
+ TFindFile fileFinder(iFs);
+ CDir* dir = NULL;
+
+ // given a semicolon-separated lists of paths to search in,
+ // look for the filename (that can include wildcards) found in that path or paths
+ // This first search will allocate memory for dir and will contain the list of
+ // files found within the first path given
+ TInt err = fileFinder.FindWildByPath(aFileName, &aPath, dir);
+
+ while(err == KErrNone)
+ {
+ // For the current path given,
+ // loop through list of found items within that path
+ for (TInt i=0; i<dir->Count(); i++)
+ {
+ TEntry entry = (*dir)[i];
+
+ // create and setup TParse object, useful for later extracting parts
+ // of the found files used by clients of this class
+ TParse parsedName;
+ parsedName.Set(entry.iName, &fileFinder.File(), NULL);
+
+ // as a sanity check,
+ // make sure the drive, path are valid and
+ // that the drive found matches the path given
+ if(parsedName.Drive().Length() && aPath.Length() && parsedName.Drive()[0] == aPath[0])
+ {
+ // the wildcard search may have found directories that match
+ // exlude these from our list because we use this function to
+ // record files only
+ if(!entry.IsDir())
+ {
+ // Create a fileEntry based upon the found file
+ // FullName will be the complete path specifier for the file
+ // while entry will be just the name within the directory
+ TFileEntry fileEntry;
+ fileEntry.iPath = parsedName.FullName();
+ fileEntry.iEntry = entry;
+
+ // copy this entry into to our list of found files
+ TRAP(err, iFileEntryList->AppendL(fileEntry));
+
+ // If we have exceeded our maximum number of possible entries,
+ // or we're cancelling an ongoing search
+ // then stop adding to the list
+ if(iFileEntryList->Count() >= FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS ||
+ iCancelSearch)
+ {
+ // cleanup dir
+ if(dir != NULL)
+ {
+ delete(dir);
+ dir = NULL;
+ }
+ return err;
+ }
+ }
+ }
+ }
+
+ //
+ // We have completed looking at the results for this dir. Look
+ // At the results where we left off, for the next path given.
+ // If there is no next path, KErrNotFound will be returned, we'll
+ // complete the search cycle.
+ //
+ if(dir != NULL)
+ {
+ delete(dir);
+ dir = NULL;
+ }
+ err = fileFinder.FindWild(dir);
+ }
+
+ // Cleanup the final instance of dir that has been allocated
+ if(dir != NULL)
+ {
+ delete(dir);
+ dir = NULL;
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::DoSearchFilesRecursive
+//
+// Starting from a given path, search the filesystem recursively for a given
+// filename. The filename may contain wildcards.
+// -----------------------------------------------------------------------------
+//
+
+TInt CFeedsFileSearchAgent::DoSearchFilesRecursive(const TDesC& aFileName)
+ {
+ TInt err(KErrNone);
+ CDir* dir = NULL;
+
+ // Find the entries from the next directory in the hierarchy
+ // or NULL/error if there are none
+ TRAP(err, iScan->NextL(dir));
+
+ // done, break out of loop
+ if(!dir || (err != KErrNone) )
+ {
+ return KErrGeneral;
+ }
+
+ // loop through the number of found directories
+ for(TInt i=0; i < dir->Count(); i++)
+ {
+ TEntry entry = (*dir)[i];
+
+ // The search will find directories as well as files. We're
+ // only interested here in directories.
+ if(entry.IsDir())
+ {
+ // From the scan, get the full path including the drive letter
+ // being scanned.
+ TFileName path(iScan->FullPath());
+
+ if(path.Length())
+ {
+ // If valid, append a slash to the end of the directory,
+ // and then search for the desired filename given this path
+ path.Append(entry.iName);
+ path.Append(_L("\\"));
+ DoSearchFiles(aFileName,path);
+ }
+ }
+ }
+
+ // Delete the dir that was allocated in this iteration
+ if(dir != NULL)
+ {
+ delete(dir);
+ dir = NULL;
+ }
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::LazyCallBack
+//
+// This function calls StartSearchFile instead of calling it from StartSearchingL function
+// To ensure it doesn't called if user has cancelled the request
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFileSearchAgent::LazyCallBack(TAny* aPtr)
+ {
+ CFeedsFileSearchAgent* ptr = (CFeedsFileSearchAgent*)aPtr;
+ // if we've cancelled the search
+ // then stop adding to the list
+ if(!ptr->iCancelSearch)
+ {
+ return ptr->StartSearchFile();
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::StartSearchFile
+//
+// starts the search of *.OPML Files.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFileSearchAgent::StartSearchFile()
+ {
+ // Quit looping and don't try to scan if we've already exceeded the number of
+ // possible file entries
+ // or if we've cancelled the search
+ if(iFileEntryList->Count() >= FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS ||
+ iCancelSearch)
+ {
+ TRAP_IGNORE(iCallback->FeedsFileSearchCompleteL( iFileEntryList->Count() ));
+ return EFalse;
+ }
+ TInt retVal = KErrGeneral;
+ if(iSearchDriveIndex != -1)
+ {
+ retVal = DoSearchFilesRecursive( _L("*.opml"));
+ }
+ if(retVal != KErrNone)
+ {
+ iSearchDriveIndex++;
+ if(iSearchDriveIndex < iDriveEntryList->Count())
+ {
+ TDriveEntry driveEntry = iDriveEntryList->At(iSearchDriveIndex);
+ TBuf<5> driveRoot;
+
+ driveRoot.Append(driveEntry.iLetter);
+ driveRoot.Append(_L(":\\"));
+
+ // Search the base of the drive and also search recursively
+ // through it's folder hierarchy.
+ DoSearchFiles(_L("*.opml"),driveRoot);
+ TRAP_IGNORE(iScan->SetScanDataL(driveRoot, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst));
+ return ETrue;
+ }
+ else
+ {
+ TRAP_IGNORE(iCallback->FeedsFileSearchCompleteL( iFileEntryList->Count() ));
+ return EFalse;
+ }
+ }
+ else
+ {
+ return ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFileSearchAgent::CancelSearch.
+//
+// Cancel the ongoing search.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFileSearchAgent::CancelSearch()
+ {
+ if(iLazyCaller->IsActive())
+ {
+ iLazyCaller->Cancel();
+ }
+ iCancelSearch = ETrue;
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsFolderContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,2283 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a user's list of feeds.
+*
+*/
+
+#include <Browser_platform_variant.hrh>
+#include <AknNavi.h>
+#include <AknNaviDe.h>
+#include <AknNaviLabel.h>
+#include <akniconarray.h>
+#include <aknlists.h>
+#include <aknpopup.h>
+#include <aknsconstants.h>
+#include <aknsutils.h>
+#include <AknToolbar.h>
+#include <avkon.mbg>
+#include <data_caging_path_literals.hrh>
+#include <eikclbd.h>
+#include <f32file.h>
+#include <gulicon.h>
+#include <aknconsts.h>
+#include <StringLoader.h>
+
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <csxhelp/browser.hlp.hrh>
+#include "BrowserApplication.h"
+#endif // __SERIES60_HELP
+
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include <browser.mbg>
+#include <brctldialogsprovider.h>
+#include <browserdialogsprovider.h>
+
+#include <feedattributes.h>
+#include <folderattributes.h>
+
+#include <feedsentity.h>
+#include "FeedsFolderContainer.h"
+#include "FeedsFolderView.h"
+#include "ApiProvider.h"
+#include "Display.h"
+#include "BrowserAppUi.h"
+#include "BrowserDialogs.h"
+#include "BrowserUtil.h"
+#include <AknUtils.h>
+// It's also the size of the icon array without favicon
+const TInt KFirstFaviconIndex = 6;
+const TInt KDateSize = 30; // Size of Date strings
+const TInt KTimeSize = 30; // Size of Time strings
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFolderContainer* CFeedsFolderContainer::NewL( CFeedsFolderView* aView,
+ MApiProvider& aApiProvider, const TRect& aRect)
+
+ {
+ CFeedsFolderContainer* self = new (ELeave) CFeedsFolderContainer(aView, aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL(aRect);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::CFeedsFolderContainer
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFolderContainer::CFeedsFolderContainer(CFeedsFolderView* aView,
+ MApiProvider& aApiProvider ) :
+ iView( aView ),
+ iApiProvider( aApiProvider ),
+ iOwnsListBoxIcons(ETrue)
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::ConstructL(const TRect& aRect)
+ {
+ // Set up the control.
+ CreateWindowL();
+ SetMopParent( iView );
+ InitContainerL(aRect);
+ SetRect(aRect);
+ ActivateL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::~CFeedsFolderContainer
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFolderContainer::~CFeedsFolderContainer()
+ {
+ iTargetFolderList.Close();
+ if (iOwnsListBoxIcons)
+ {
+ delete iListBoxIcons;
+ }
+
+ delete iListBox;
+ delete iListBoxRows;
+ if(iNaviDecorator)
+ {
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::OfferKeyEventL
+//
+// Handles key event.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFeedsFolderContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
+ TEventCode aType)
+ {
+ TKeyResponse isConsumed = EKeyWasConsumed;
+
+ if (aType != EEventKey)
+ {
+ return EKeyWasNotConsumed;
+ }
+
+ // handle # key press by marking current unmarked item or unmarking current marked item.
+ if ((aType == EEventKey) && (aKeyEvent.iScanCode == EStdKeyHash))
+ {
+
+ // Check if current item is marked
+ const CArrayFix<TInt>* markedIndexes = MarkedItems();
+ TInt i;
+ TBool currentMarked = EFalse;
+
+ // check to see if there are any items in the list, if not ignore the #
+ if (iListBoxRows->Count() > 0)
+ {
+ for ( i = 0; i < MarkedItems()->Count(); i++ )
+ {
+ if ( CurrentItemIndex() == (*markedIndexes)[i] )
+ {
+ currentMarked = ETrue;
+ break;
+ }
+ }
+
+ if (currentMarked)
+ {
+ HandleMarkL( EAknCmdUnmark );
+ }
+ else
+ {
+ HandleMarkL( EAknCmdMark );
+ }
+ UpdateCbaL();
+ }
+
+ return EKeyWasConsumed;
+ }
+
+ // If a move is active process the move.
+ else if (iMoveActive && ((aKeyEvent.iCode == EKeyOK) || (aKeyEvent.iCode == EKeyEnter)))
+ {
+ PostHandleMoveL();
+
+ iMoveActive = EFalse;
+ UpdateCbaL();
+ // Undim Toolbar
+ DimToolbar(EFalse);
+
+ return isConsumed;
+ }
+
+ // If the C-Key was pressed then delete the current item.
+ else if (aKeyEvent.iCode == EKeyBackspace)
+ {
+ HandleDeleteL();
+ return isConsumed;
+ }
+
+ isConsumed = EKeyWasNotConsumed;
+ // For handling Enter key in emulator / Keyboard ( Enter key should behave similar to MSK )
+ if(EStdKeyEnter == aKeyEvent.iScanCode && EEventKey == aType && AknLayoutUtils::MSKEnabled())
+ {
+ CEikButtonGroupContainer* myCba = CEikButtonGroupContainer::Current();
+ if(myCba != NULL)
+ {
+ TInt cmdId = myCba->ButtonGroup()->CommandId(CEikButtonGroupContainer::EMiddleSoftkeyPosition);
+ if(EAknSoftkeyContextOptions == cmdId)
+ {
+ iView->MenuBar()->TryDisplayContextMenuBarL();
+ isConsumed = EKeyWasConsumed;
+ }
+ else if(iListBox->Model()->ItemTextArray()->MdcaCount() == 0)
+ {
+ iView->HandleCommandL(cmdId);
+ isConsumed = EKeyWasConsumed;
+ }
+ }
+ }
+ // Otherwise let the listbox handle it.
+ if(isConsumed != EKeyWasConsumed)
+ {
+ isConsumed = iListBox->OfferKeyEventL(aKeyEvent, aType);
+
+ // Toolbar buttons should be updated when focus moves from feed to folder or vice versa
+ if((aType == EEventKey) && ((aKeyEvent.iScanCode == EStdKeyUpArrow)||(aKeyEvent.iScanCode == EStdKeyDownArrow)) )
+ {
+ UpdateToolbarButtonsState();
+ }
+ }
+ return isConsumed;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::GetHelpContext
+//
+// Get help context for the control.
+// -----------------------------------------------------------------------------
+//
+#ifdef __SERIES60_HELP
+void CFeedsFolderContainer::GetHelpContext(TCoeHelpContext& aContext) const
+ {
+ // This must be the Browser's uid becasue the help texts are under Browser topics.
+ aContext.iMajor = KUidBrowserApplication;
+ aContext.iContext = KOSS_HLP_RSS_MAIN;
+ }
+#endif // __SERIES60_HELP
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::SizeChanged
+//
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::SizeChanged()
+ {
+ iListBox->SetRect(Rect());
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleResourceChange
+//
+// Called by the framework when a display resource changes (i.e. skin or layout).
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleResourceChange(TInt aType)
+ {
+ CCoeControl::HandleResourceChange(aType);
+ iListBox->HandleResourceChange(aType);
+
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+
+ if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect))
+ {
+ SetRect(rect);
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::CountComponentControls
+//
+// Returns number of components.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFolderContainer::CountComponentControls() const
+ {
+ return 1;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::ComponentControl
+//
+// Returns pointer to particular component.
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CFeedsFolderContainer::ComponentControl(TInt aIndex) const
+ {
+ switch (aIndex)
+ {
+ case 0:
+ return iListBox;
+
+ default:
+ return NULL;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleListBoxEventL
+//
+// Processes key events from the listbox.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType)
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ if (aEventType == MEikListBoxObserver::EEventEmptyListClicked)
+ {
+ return;
+ }
+#endif
+ // An item was selected.
+ if ((aEventType == MEikListBoxObserver::EEventEnterKeyPressed) ||
+ (aEventType == MEikListBoxObserver::EEventItemDoubleClicked)
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ || (aEventType == MEikListBoxObserver::EEventItemSingleClicked)
+#endif
+ )
+ {
+ if ( iMoveActive )
+ {
+ HandleOkL();
+ }
+ else
+ {
+ HandleSelectionL();
+ }
+ }
+ // Toolbar buttons status should be changed when focus is moved from feed to folder or viceversa
+ else if ( (aEventType == MEikListBoxObserver::EEventItemClicked)
+#ifdef BRDO_TOUCH_ENABLED_FF
+ ||(aEventType == MEikListBoxObserver::EEventFlickStopped)
+#endif // BRDO_TOUCH_ENABLED_FF
+ )
+ {
+ UpdateToolbarButtonsState();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::SearchForFeed
+//
+// Recursive loop to find a feed
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderContainer::SearchForFeedL(const CFeedsEntity* aCurrent)
+ {
+ TBool isFeed = EFalse;
+
+ __ASSERT_DEBUG( (aCurrent != NULL), Util::Panic( Util::EUninitializedData ));
+
+ for (int i = 0; i < (aCurrent->GetChildren().Count()); i++)
+ {
+ const CFeedsEntity* item = aCurrent->GetChildren()[i];
+
+ if ( !(item->GetType() == EFolder ))
+ {
+ return ETrue;
+ }
+ else
+ {
+ // is folder empty?
+ if ( item->GetChildren().Count() == 0 )
+ {
+ continue;
+ }
+ else
+ {
+ isFeed = SearchForFeedL(item); // recursive
+
+ if ( isFeed )
+ {
+ return ETrue;
+ }
+ }
+ }
+
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateToolbarButtons
+//
+// Updates the state of the toolbar buttons depending on the situation
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsFolderContainer::UpdateToolbarButtonsState()
+ {
+ TBool isFeed = EFalse;
+ TBool feedInFocus = EFalse;
+
+
+ if (iMoveActive || !iCurrentFolder)
+ {
+ return;
+ }
+
+
+ TInt num = iCurrentFolder->GetChildren().Count();
+
+ if ( iCurrentFolder->GetChildren().Count() == 0 )
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdate, ETrue, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdateAll, ETrue, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsOpen, ETrue, ETrue);
+ }
+ else
+ {
+ TRAP_IGNORE(
+ {
+ isFeed = SearchForFeedL(iRootFolder);
+ });
+
+ // if feed is not in focus in the current view, then dim the 'update' button
+ const CFeedsEntity* fItem = NULL;
+ // Get the current item.
+ fItem = CurrentItem();
+ if ( !(fItem->GetType() == EFolder ))
+ {
+ feedInFocus = ETrue;
+ }
+
+ if ( isFeed && feedInFocus )
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdate,IsMarkedItemFolder()?ETrue:EFalse, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdateAll, EFalse, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsOpen, EFalse, ETrue);
+ }
+ else if ( isFeed && !feedInFocus )
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdate, ETrue, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdateAll, EFalse, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsOpen, EFalse, ETrue);
+ }
+ else
+ {
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdate, ETrue, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdateAll, ETrue, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsOpen, EFalse, ETrue);
+ }
+ }
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateFeedL
+//
+// Called when a feed's name and/or url is changed -- this is called after both
+// IsValidFeedName and IsValidFeedUrl are called.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq)
+ {
+ UpdateCurrentItemL(&aName, &aUrl, aFreq);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::NewFeedL
+//
+// Called when a new feed is created -- this is called after both
+// IsValidFeedName and IsValidFeedUrl are called.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::NewFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq)
+ {
+ AddNewFeedL(aName, aUrl, aFreq);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::IsFeedNameValidL
+//
+// Validates the Feed's updated name.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderContainer::IsFeedNameValidL(const TDesC* aName, TBool aIsEditing)
+ {
+ TBool valid = ETrue;
+ TInt pos(0);
+
+ // If aName is NULL show an info dialog and reject it.
+ if (aName == NULL)
+ {
+ TBrowserDialogs::ErrorNoteL( R_FEEDS_TITLE_NEEDED );
+ valid = EFalse;
+ }
+
+ //If aName contains single quote character, then show an info dialog and reject it
+ else if ((pos = aName->Locate('\'')) != KErrNotFound)
+ {
+ TBrowserDialogs::ErrorNoteL( R_FEEDS_TITLE_SINGLE_QUOTE_NOT_ALLOWED );
+ valid = EFalse;
+ }
+
+ // If the name is a duplicate show an info dialog and reject it.
+ else
+ {
+ const CFeedsEntity* otherItem;
+
+ // Reject it if _some other_ item has the same name.
+ if ((iRootFolder != NULL) && ((otherItem = iApiProvider.FeedsClientUtilities().Search(*aName,*iRootFolder)) != NULL))
+ {
+ if (!((otherItem == CurrentItem()) && aIsEditing))
+ {
+ TBrowserDialogs::ErrorNoteL( R_FEEDS_NAME_ALREADY_IN_USE );
+ valid = EFalse;
+ }
+ }
+ }
+
+ return valid;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::IsFeedUrlValidL
+//
+// Validates the Feed's updated url.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderContainer::IsFeedUrlValidL(const TDesC* aUrl)
+ {
+ TBool valid = ETrue;
+
+ // If aUrl is NULL show an info dialog and reject it.
+ if (aUrl == NULL)
+ {
+ valid = EFalse;
+ }
+
+ // Otherwise if the user didn't change the default url (i.e. "http://"
+ // then reject it too.
+ else
+ {
+ HBufC* defaultUrl = NULL;
+
+ // Load the label
+ defaultUrl = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_URL_ITEM);
+ if (defaultUrl->Compare(*aUrl) == 0)
+ {
+ valid = EFalse;
+ }
+
+ delete defaultUrl;
+ }
+
+ // Show the error.
+ if (!valid)
+ {
+ TBrowserDialogs::ErrorNoteL( R_FEEDS_ADDRESS_NEEDED );
+ }
+
+ return valid;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateFolderL
+//
+// Called when a folder's name is changed -- this is called
+// after IsValidFolderName is called.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateFolderL(const TDesC& aName)
+ {
+ UpdateCurrentItemL(&aName, NULL,0);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::NewFolderL
+//
+// Called when a new folder is created -- this is called
+// after IsValidFolderName is called.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::NewFolderL(const TDesC& aName)
+ {
+ AddNewFolderL(aName);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::IsFolderNameValidL
+//
+// Validates the folder's updated name.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderContainer::IsFolderNameValidL(const TDesC* aName, TBool aIsEditing)
+ {
+ // IsFeedNameValidL does the same thing...
+ return IsFeedNameValidL(aName, aIsEditing);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFolderView::RootFolderChangedL
+//
+// Called to notify the view the that root folder has changed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::RootFolderChangedL(const CFeedsEntity& aRootFolder)
+ {
+ // Set the new root folder.
+ iRootFolder = &aRootFolder;
+
+ // Restore the previous current folder.
+ SetCurrentFolder(iApiProvider.FeedsClientUtilities().Search(iCurrentFolderId,aRootFolder));
+
+ // Update the list box to reflect the new root folder.
+ UpdateListBoxL(CurrentItemIndex());
+
+ // Update the Cba to reflect the new state.
+ UpdateCbaL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateTitleL
+//
+// Update the view's title.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateTitleL()
+ {
+
+ TPtrC title;
+ // Set the view's title.
+ if (iCurrentFolder != NULL && iCurrentFolder != iRootFolder)
+ {
+ if (iCurrentFolder->GetStringValue(EFolderAttributeTitle,title) != KErrNotFound && title.Length() != 0)
+ {
+ iApiProvider.Display().SetTitleL(title);
+ }
+ else
+ {
+ iApiProvider.Display().SetTitleL(KNullDesC);
+ }
+ }
+ else
+ {
+ iApiProvider.Display().SetTitleL(R_FEEDS_FOLDER_VIEW_TITLE);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::CurrentItem
+//
+// Returns the current folder-item.
+// -----------------------------------------------------------------------------
+//
+CFeedsEntity* CFeedsFolderContainer::CurrentItem() const
+ {
+ CFeedsEntity* item = NULL;
+ TInt index;
+
+ index = iListBox->CurrentItemIndex();
+ if (index >= 0)
+ {
+ item = iCurrentFolder->GetChildren()[index];
+ }
+
+ return item;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::CurrentItemIndex
+//
+// Returns the index of the current folder-item.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFolderContainer::CurrentItemIndex() const
+ {
+ return iListBox->CurrentItemIndex();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateCurrentItemL
+//
+// Updates the current folder-item.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateCurrentItemL(const TDesC* aName, const TDesC* aUrl, TInt aFreq)
+ {
+ TPtrC name(KNullDesC);
+ TPtrC url(KNullDesC);
+
+ if (aName != NULL)
+ {
+ name.Set(*aName);
+ }
+ if (aUrl != NULL)
+ {
+ url.Set(*aUrl);
+ }
+
+ // Update the folder item.
+ CFeedsEntity *aCurrentItem = CurrentItem();
+ __ASSERT_DEBUG( (aCurrentItem != NULL), Util::Panic( Util::EUninitializedData ) );
+ iApiProvider.FeedsClientUtilities().ChangeFolderItemL(*(aCurrentItem), name, url, aFreq);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::AddNewFeedL
+//
+// Add a new feed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::AddNewFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq)
+ {
+ // Add the new feed.
+ iApiProvider.FeedsClientUtilities().AddFolderItemL(aName, aUrl, EFalse, *iCurrentFolder, aFreq);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::AddNewFolderL
+//
+// Add a new folder.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::AddNewFolderL(const TDesC& aName)
+ {
+ // Add the new folder.
+ iApiProvider.FeedsClientUtilities().AddFolderItemL(aName, KNullDesC, ETrue, *iCurrentFolder, 0);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::DeleteItemL
+//
+// Delete the current feed or folder
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::DeleteCurrentItemL()
+ {
+ RPointerArray<const CFeedsEntity> markedItems(10);
+ const CArrayFix<TInt>* markedIndexes = NULL;
+ const CFeedsEntity* folder = NULL;
+
+ CleanupClosePushL(markedItems);
+
+ // Get the array of marked items.
+ markedIndexes = MarkedItems();
+ if ((markedIndexes == NULL) || (markedIndexes->Count() == 0))
+ {
+ iListBox->View()->SelectItemL(CurrentItemIndex());
+ markedIndexes = MarkedItems();
+ }
+
+ // Copy the marked items into a temp array.
+ for (TInt i = 0; i < markedIndexes->Count(); i++)
+ {
+ folder = iCurrentFolder->GetChildren()[(*markedIndexes)[i]];
+ User::LeaveIfError(markedItems.Append(folder));
+ }
+
+ // Delete the items.
+ iApiProvider.FeedsClientUtilities().DeleteFolderItemsL(markedItems);
+
+ // Clean up
+ CleanupStack::PopAndDestroy(/*markedItems*/);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HasMarkedItem
+//
+// Returns an array containing the indexes of the marked items.
+// -----------------------------------------------------------------------------
+//
+const CArrayFix<TInt>* CFeedsFolderContainer::MarkedItems()
+ {
+ return iListBox->View()->SelectionIndexes();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleShowParentFolderL
+//
+// Replaces the current folder with its parent.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderContainer::HandleShowParentFolderL(void)
+ {
+ TBool handled = ETrue;
+
+ if (iCurrentFolder && ( iCurrentFolder != iRootFolder))
+ {
+ const CFeedsEntity* oldItem = NULL;
+
+ // Refresh the list-box with the parent's contents.
+ oldItem = iCurrentFolder;
+ SetCurrentFolder(iCurrentFolder->GetParent());
+ UpdateListBoxL();
+
+ // Restore the old selection.
+ __ASSERT_DEBUG( (oldItem != NULL), Util::Panic( Util::EUninitializedData ));
+ TInt index = 0;
+ for(TInt i=0;i<iCurrentFolder->GetChildren().Count();i++)
+ {
+ if(iCurrentFolder->GetChildren()[i] == oldItem)
+ {
+ index = i;
+ }
+ }
+ iListBox->SetCurrentItemIndex(index);
+ iListBox->DrawDeferred();
+
+ // Update the Cba to reflect the new state.
+ UpdateCbaL();
+ }
+ else
+ {
+ handled = EFalse;
+ }
+
+ return handled;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleSelectionL
+//
+// Processes key events from the listbox.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleSelectionL(void)
+ {
+ TInt index;
+ const CFeedsEntity* item;
+
+ index = iListBox->CurrentItemIndex();
+ item = const_cast<CFeedsEntity*>(iCurrentFolder->GetChildren()[index]);
+ User::LeaveIfNull((void*) item);
+
+ // If a folder was selected - show it.
+ if (item->GetType() == EFolder)
+ {
+ SetCurrentFolder(item);
+ UpdateListBoxL();
+ UpdateCbaL();
+ UpdateToolbarButtonsState();
+ }
+
+ // Otherwise show the Feed.
+ else
+ {
+ ShowFeedL(*item);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleUpdateFeedL
+//
+// Handles updating the current Feed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleUpdateFeedL(TBool aUpdateAll)
+ {
+ // Update the selected items if "Update" was selected.
+ if (!aUpdateAll)
+ {
+ const CArrayFix<TInt>* markedIndexes = NULL;
+ RPointerArray<const CFeedsEntity> folderItems(10);
+
+ CleanupClosePushL(folderItems);
+
+ // Get the marked indexes.
+ markedIndexes = MarkedItems();
+
+ // If nothing is marked then use the current item.
+ if ((markedIndexes == NULL) || (markedIndexes->Count() == 0))
+ {
+ folderItems.AppendL(iCurrentFolder->GetChildren()[
+ CurrentItemIndex()]);
+ }
+
+ // Otherwise copy the marked items into a temp array.
+ else
+ {
+ for (TInt i = 0; i < markedIndexes->Count(); i++)
+ {
+ folderItems.AppendL(iCurrentFolder->GetChildren()[
+ (*markedIndexes)[i]]);
+ }
+ }
+
+ // Update the items.
+ iApiProvider.FeedsClientUtilities().UpdateFolderItemsL(folderItems);
+
+ // Clean up
+ CleanupStack::PopAndDestroy(/*folderItems*/);
+ }
+
+ // Otherwise update all of the items in the current FolderList.
+ else
+ {
+ iApiProvider.FeedsClientUtilities().UpdateFolderItemsL();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleNewFeedL
+//
+// Handles the add-feed command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleNewFeedL()
+ {
+ // Display the edit feed folder
+ CFeedsEditFeedDialog* dialog = NULL;
+
+ dialog = CFeedsEditFeedDialog::NewL(*this, iView->AppUi());
+
+ DimToolbar(ETrue);
+ // Note: The result is handled in the MEditFeedDialogObserver methods.
+ dialog->ExecuteLD(R_FEEDS_EDIT_FEED_DIALOG);
+ dialog = NULL;
+ DimToolbar(EFalse);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleNewFolderL
+//
+// Handles the add-folder command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleNewFolderL()
+ {
+ // Display the edit feed folder
+ CFeedsEditFolderDialog* dialog = NULL;
+
+ dialog = CFeedsEditFolderDialog::NewL(*this, iView->AppUi());
+
+ DimToolbar(ETrue);
+ // Note: The result is handled in the MEditFolderDialogObserver methods.
+ dialog->ExecuteLD(R_FEEDS_EDIT_FOLDER_DIALOG);
+ dialog = NULL;
+
+ DimToolbar(EFalse);
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleEditL
+//
+// Handles the edit command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleEditL()
+ {
+ const CFeedsEntity* item = NULL;
+
+ // Get the current item.
+ item = CurrentItem();
+ TPtrC title;
+ TPtrC url;
+ TInt freq;
+
+ if(item->GetType() == EFolder)
+ {
+ item->GetStringValue(EFolderAttributeTitle,title);
+ }
+ else
+ {
+ item->GetStringValue(EFeedAttributeTitle,title);
+ item->GetStringValue(EFeedAttributeLink,url);
+ item->GetIntegerValue(EFeedAttributeAutoUpdateFreq,freq);
+ }
+
+ __ASSERT_DEBUG( (item != NULL), Util::Panic( Util::EUninitializedData ));
+
+ DimToolbar(ETrue);
+
+ // Display the edit feed dialog
+ if (!(item->GetType() == EFolder))
+ {
+ CFeedsEditFeedDialog* dialog = NULL;
+
+ dialog = CFeedsEditFeedDialog::NewL(*this, iView->AppUi(), title, url, freq);
+
+ __ASSERT_DEBUG( (dialog != NULL), Util::Panic( Util::EUninitializedData ));
+
+ // Note: The result is handled in the MEditFeedDialogObserver methods.
+ dialog->ExecuteLD(R_FEEDS_EDIT_FEED_DIALOG);
+ dialog = NULL;
+ }
+
+ // Display the edit folder dialog.
+ else
+ {
+ CFeedsEditFolderDialog* dialog = NULL;
+
+ dialog = CFeedsEditFolderDialog::NewL(*this, iView->AppUi(), title);
+
+ __ASSERT_DEBUG( (dialog != NULL), Util::Panic( Util::EUninitializedData ));
+
+ // Note: The result is handled in the MEditFolderDialogObserver methods.
+ dialog->ExecuteLD(R_FEEDS_EDIT_FOLDER_DIALOG);
+ dialog = NULL;
+ }
+
+ DimToolbar(EFalse);
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleDelete
+//
+// Handles the delete command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleDeleteL()
+ {
+ TBool deleteIt = EFalse;
+ TBool clearOnCancel = EFalse;
+ const CArrayFix<TInt>* markedIndexes = NULL;
+
+ // Return if there are no items in the folder
+ if (CurrentItem() == NULL)
+ {
+ return;
+ }
+
+ // Get the marked items.
+ markedIndexes = MarkedItems();
+
+ // If none are marked then mark the current one.
+ if ((markedIndexes == NULL) || (markedIndexes->Count() == 0))
+ {
+ iListBox->View()->SelectItemL(CurrentItemIndex());
+ clearOnCancel = ETrue;
+ markedIndexes = MarkedItems();
+ }
+
+
+ // Multiple items are being deleted.
+ if (markedIndexes->Count() > 1)
+ {
+ if(TBrowserDialogs::ConfirmQueryYesNoL(R_FEEDS_DELETE_MULTIPLE_FEED))
+ {
+ deleteIt = ETrue;
+ }
+ }
+
+ // Otherwise only a single item is being deleted.
+ else
+ {
+ const CFeedsEntity* item = NULL;
+
+ // Get the item.
+ item = iCurrentFolder->GetChildren()[((*markedIndexes)[0])];
+
+ TPtrC title;
+ if (item->GetType() == EFolder)
+ {
+ item->GetStringValue(EFolderAttributeTitle,title);
+ }
+ else
+ {
+ item->GetStringValue(EFeedAttributeTitle,title);
+ }
+ if(TBrowserDialogs::ConfirmQueryYesNoL(R_FEEDS_DELETE_FEED, title))
+ {
+ deleteIt = ETrue;
+ }
+ }
+
+ // Delete it
+ if (deleteIt)
+ {
+ DeleteCurrentItemL();
+ }
+ else if (clearOnCancel)
+ {
+ iListBox->View()->ClearSelection();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleMove
+//
+// Handles the move command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleMoveL()
+ {
+ const CArrayFix<TInt>* markedItems = NULL;
+
+ // Set the move flag.
+ iMoveActive = ETrue;
+
+ // If nothing was marked then mark the current item.
+ markedItems = MarkedItems();
+ if ((markedItems == NULL) || (markedItems->Count() == 0))
+ {
+ iListBox->View()->SelectItemL(CurrentItemIndex());
+ }
+
+ UpdateCbaL();
+ // Dim Toolbar
+ DimToolbar(ETrue);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleMoveToFolderL
+//
+// Handles the move to folder command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleMoveToFolderL()
+ {
+ CAknSingleGraphicPopupMenuStyleListBox* listBox = NULL;
+ CAknPopupList* popupList = NULL;
+ const CFeedsEntity* targetFolder = NULL;
+
+ // Construct the basic Pop-up
+ MoveToFolderInitL(listBox, popupList);
+ CleanupStack::PushL(listBox);
+
+ // Show the pop-up.
+ if (popupList->ExecuteLD())
+ {
+ TInt selected;
+
+ selected = listBox->CurrentItemIndex();
+
+ if (selected >= 0)
+ {
+ targetFolder = iTargetFolderList[selected];
+ }
+ }
+
+ CleanupStack::PopAndDestroy(listBox);
+
+ // Moved the marked items into the targeted folder.
+ if (targetFolder != NULL)
+ {
+ MoveToFolderMoveL(*targetFolder);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleMarkL
+//
+// Handles the mark-related commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleMarkL(TInt aCommand)
+ {
+ AknSelectionService::HandleMarkableListProcessCommandL(aCommand, iListBox);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleOkL
+//
+// Handles the ok commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleOkL()
+ {
+ // If a move is active process the move.
+ if (iMoveActive)
+ {
+ PostHandleMoveL();
+
+ iMoveActive = EFalse;
+ UpdateCbaL();
+ // Un-Dim Toolbar
+ DimToolbar(EFalse);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleCancelL
+//
+// Handles the cancel commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleCancelL()
+ {
+ if (iMoveActive)
+ {
+ // Clear the move state and update the Cba.
+ iMoveActive = EFalse;
+ // Remove the marks.
+ iListBox->View()->ClearSelection();
+ UpdateCbaL();
+ // Un-Dim Toolbar
+ DimToolbar(EFalse);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::HandleExportL
+//
+// Handles the export commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::HandleExportL()
+ {
+ RPointerArray<const CFeedsEntity> markedItems(10);
+ const CArrayFix<TInt>* markedIndexes = NULL;
+ const CFeedsEntity* folder = NULL;
+
+ CleanupClosePushL(markedItems);
+
+ // Get the array of marked items.
+ markedIndexes = MarkedItems();
+ if ((markedIndexes == NULL) || (markedIndexes->Count() == 0))
+ {
+ iListBox->View()->SelectItemL(CurrentItemIndex());
+ markedIndexes = MarkedItems();
+ }
+
+ // Copy the marked items into an array.
+ for (TInt i = 0; i < markedIndexes->Count(); i++)
+ {
+ folder = iCurrentFolder->GetChildren()[((*markedIndexes)[i])];
+ User::LeaveIfError(markedItems.Append(folder));
+ }
+
+ _LIT(KOpmlExt, ".opml");
+ HBufC* prompt = StringLoader::LoadLC( R_FEEDS_NAME_EXPORTED_FILE );
+ TBuf<KBrowserMaxPrompt+1> retString;
+ retString.Copy( KNullDesC );
+
+ TInt result = TBrowserDialogs::DialogPromptReqL(
+ prompt->Des(),
+ &retString,
+ EFalse,
+ KFavouritesMaxBookmarkNameDefine );
+
+ if( result )
+ {
+ // only append .opml if user has not already done so
+ TInt dotPos = retString.LocateReverse( '.' );
+
+ if ( dotPos != KErrNotFound )
+ {
+ // dot found, now check extension
+ TInt extLength = retString.Length() - dotPos;
+ HBufC* ext = retString.Right( extLength ).AllocL();
+ CleanupStack::PushL( ext );
+
+ // if not .opml append extension
+ if ( ext->CompareF( KOpmlExt ) != 0)
+ {
+ retString.Append(KOpmlExt);
+ }
+
+ CleanupStack::PopAndDestroy(); // ext buffer
+ }
+ else
+ {
+ // no dot, definitely append
+ retString.Append(KOpmlExt);
+ }
+
+ // Pass folder array to feeds utilities to export
+ iApiProvider.FeedsClientUtilities().ExportFeedsL(markedItems, retString);
+ }
+
+ CleanupStack::PopAndDestroy(); // prompt
+
+ // Clean up
+ CleanupStack::PopAndDestroy(/*markedItems*/);
+
+ // Clear the selection
+ iListBox->View()->ClearSelection();
+ UpdateCbaL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::ShowFeedL
+//
+// Show the feed in the TopicView.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::ShowFeedL(const CFeedsEntity& aFolderItem)
+ {
+ iApiProvider.FeedsClientUtilities().ShowTopicViewL(aFolderItem);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::InitContainerL
+//
+// Inits the container.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::InitContainerL(const TRect& aRect)
+ {
+ // Init the basic list-box
+ iListBox = new (ELeave) CAknDoubleGraphicStyleListBox;
+ iListBox->ConstructL(this, EAknListBoxMarkableList);
+ iListBox->SetContainerWindowL(*this);
+ iListBox->SetRect(aRect.Size());
+ iListBox->SetListBoxObserver(this);
+
+ HBufC* emptyText = iCoeEnv->AllocReadResourceLC(R_FEEDS_NO_FEEDS);
+ iListBox->View()->SetListEmptyTextL(*emptyText);
+ CleanupStack::PopAndDestroy(emptyText);
+
+ // Init the list-box's model.
+ iListBoxRows = new (ELeave) CDesCArraySeg(10);
+ iListBox->Model()->SetItemTextArray(iListBoxRows);
+ iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
+
+ // Add scrollbars.
+ iListBox->ActivateL();
+ iListBox->CreateScrollBarFrameL(ETrue);
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+
+ // Add the needed icons.
+ InitIconArrayL();
+
+ // Enable marquee.
+ iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
+
+ UpdateCbaL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::InitIconArrayL
+//
+// Inits the array of needed icons.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::InitIconArrayL()
+ {
+ _LIT(KDirAndFile,"z:browser.mbm");
+
+ TParse* fp = NULL;
+
+ // Build the path to the feeds resource file.
+ fp = new (ELeave) TParse();
+ CleanupStack::PushL(fp);
+
+ User::LeaveIfError(fp->Set(KDirAndFile, &KDC_APP_BITMAP_DIR, NULL));
+ TBuf<KMaxFileName> iconFile= fp->FullName();
+ CleanupStack::PopAndDestroy(fp);
+
+ // Create the icon array.
+ iListBoxIcons = new (ELeave) CAknIconArray( KFirstFaviconIndex );
+
+ // Add the mark icon.
+ AppendIconL(iListBoxIcons, KAknsIIDQgnIndiMarkedAdd, KAvkonBitmapFile(),
+ EMbmAvkonQgn_indi_marked_add, EMbmAvkonQgn_indi_marked_add_mask);
+
+ // Add the folder icon.
+ AppendIconL(iListBoxIcons, KAknsIIDQgnPropFolderRss, iconFile,
+ EMbmBrowserQgn_prop_folder_rss, EMbmBrowserQgn_prop_folder_rss_mask);
+
+ // Add the folder error icon
+ AppendIconL(iListBoxIcons, KAknsIIDQgnPropFolderRssError, iconFile,
+ EMbmBrowserQgn_prop_folder_rss_error, EMbmBrowserQgn_prop_folder_rss_error_mask);
+
+ // Add the feed icon for feed having unread count as 0.
+ AppendIconL(iListBoxIcons, KAknsIIDQgnPropFileRss, iconFile,
+ EMbmBrowserQgn_prop_file_rss, EMbmBrowserQgn_prop_file_rss_mask);
+
+ // Add the feed icon for feed having unread count as non-0.
+ AppendIconL(iListBoxIcons, KAknsIIDQgnPropFileRssNew, iconFile,
+ EMbmBrowserQgn_prop_file_rss_new, EMbmBrowserQgn_prop_file_rss_new_mask);
+
+ // Add the feed error icon
+ AppendIconL(iListBoxIcons, KAknsIIDQgnPropFileRssError, iconFile,
+ EMbmBrowserQgn_prop_file_rss_error, EMbmBrowserQgn_prop_file_rss_error_mask);
+
+ // Set the icons and cleanup
+ iListBox->ItemDrawer()->ColumnData()->SetIconArray(iListBoxIcons);
+ iOwnsListBoxIcons = EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::AppendIconL
+//
+// Loads and appends an icon to the icon array.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::AppendIconL(CArrayPtr<CGulIcon>* aIcons,
+ const TAknsItemID& aID, const TDesC& aFilename, const TInt aFileBitmapId,
+ const TInt aFileMaskId)
+ {
+ CGulIcon* newIcon;
+ CFbsBitmap* newIconBmp;
+ CFbsBitmap* newIconMaskBmp;
+
+ __ASSERT_DEBUG( (aIcons != NULL), Util::Panic( Util::EUninitializedData ));
+
+
+ // Create the bitmaps: the bitmaps are left on the cleanup stack.
+ AknsUtils::CreateIconL(AknsUtils::SkinInstance(), aID, newIconBmp,
+ newIconMaskBmp, aFilename, aFileBitmapId, aFileMaskId);
+
+ CleanupStack::PushL(newIconBmp);
+ CleanupStack::PushL(newIconMaskBmp);
+
+ newIcon = CGulIcon::NewL(newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(newIconMaskBmp);
+ CleanupStack::Pop(newIconBmp);
+ CleanupStack::PushL(newIcon);
+
+ aIcons->AppendL(newIcon);
+ CleanupStack::Pop(newIcon);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateListBoxL
+//
+// Sets the list-box's values.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateListBoxL(TInt aInitialSelection)
+ {
+ //0\t\1st Line of text\t2nd Line of text\t0
+ TBuf<255> listBoxtxt;
+
+ if (iCurrentFolder == NULL)
+ {
+ return;
+ }
+
+ // Clear the list.
+ iListBoxRows->Reset();
+
+ // Delete the old favicons.
+ iListBoxIcons->Delete(KFirstFaviconIndex, iListBoxIcons->Count() - KFirstFaviconIndex);
+
+ // Remove the marks.
+ iListBox->View()->ClearSelection();
+
+ if (iView->iContainer->IsVisible())
+ {
+ // Update the title.
+ UpdateTitleL();
+ }
+
+ // Add the feeds.
+ for (int i = 0; i < iCurrentFolder->GetChildren().Count(); i++)
+ {
+ const CFeedsEntity* item = NULL;
+ TInt iconIndex;
+
+ item = iCurrentFolder->GetChildren()[i];
+ TPtrC itemName;
+ TInt statusCode;
+
+ if (item->GetType() == EFolder)
+ {
+ item->GetStringValue(EFolderAttributeTitle,itemName);
+ }
+ else
+ {
+ item->GetStringValue(EFeedAttributeTitle,itemName);
+ }
+ item->GetIntegerValue(EFolderAttributeStatus, statusCode);
+
+ // Set the name.
+ TInt len;
+
+ len = itemName.Length();
+ if (len > 253)
+ {
+ len = 253;
+ }
+
+ // Build the item's string.
+ if (item->GetType() == EFolder)
+ {
+ if (statusCode == KErrNone)
+ {
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t"), EIconFolder, &itemName);
+ listBoxtxt.Append(KNullDesC());
+ }
+ else
+ {
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t"), EIconErrorFolder, &itemName);
+ listBoxtxt.Append(KNullDesC());
+ }
+ }
+ else
+ {
+ if(statusCode == KErrNone)
+ {
+ CGulIcon* favicon = NULL;
+ iconIndex = EIconFeed;
+
+ // Convert the item's timestamp into a localized string.
+ TBuf<KDateSize + KTimeSize + 1> timestamp;
+ TBuf<KTimeSize> temp;
+ TTime date;
+ TInt unreadCount;
+ item->GetIntegerValue(EFolderAttributeUnreadCount,unreadCount);
+
+ // Since the folder list isn't updated after it is fetched
+ // the FeedsClientUtilities tracks the update times for feeds
+ // the user visits in the current session.
+ date = iApiProvider.FeedsClientUtilities().FeedUpdatedTime(*item);
+
+ // If the date isn't zero then format the date
+ if (date.Int64() != 0)
+ {
+ // Translate from UTC to local time.
+ TTime local;
+ TTime utc;
+ TTimeIntervalSeconds delta;
+
+ local.HomeTime();
+ utc.UniversalTime();
+ utc.SecondsFrom(local, delta);
+ date -= delta;
+
+ //Set time
+ HBufC* timeFormat = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_USUAL_WITH_ZERO );
+ date.FormatL( timestamp, *timeFormat );
+ CleanupStack::PopAndDestroy( timeFormat );//timeFormat
+ //
+ timestamp.Append(_L(" "));
+ //Set date
+ HBufC* dateFormat = iEikonEnv->AllocReadResourceLC( R_QTN_DATE_USUAL_WITH_ZERO );
+ date.FormatL( temp, *dateFormat );
+ CleanupStack::PopAndDestroy( dateFormat );//dateFormat
+ //
+ timestamp.Append(temp);
+ // Convert to locale specific numbers
+ if (TBidiText::ERightToLeft == AknTextUtils::CurrentScriptDirectionality ())
+ {
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(timestamp);
+ }
+ }
+
+ // If there is a favicon for this url then add it to the icon list
+ // set the icon's index.
+ TPtrC url;
+ item->GetStringValue(EFeedAttributeLink,url);
+ favicon = iApiProvider.FeedsClientUtilities().FaviconL(url);
+ // favicon exist, no matter unread count is 0 or not, use favicon
+ if (favicon != NULL)
+ {
+ iListBoxIcons->AppendL(favicon);
+ iconIndex = iListBoxIcons->Count() - 1;
+ }
+ // no favicon, and unread count > 0, use unread icon
+ else if (unreadCount > 0)
+ {
+ iconIndex = EIconFeedUnread;
+ }
+ // else: no favicon, and unread count == 0, use read icon
+
+ // Add the line.
+ listBoxtxt.Zero();
+
+ if (unreadCount > 0)
+ {
+ listBoxtxt.AppendFormat(_L("%d\t%S(%d)\t%S"), iconIndex, &itemName, unreadCount, ×tamp);
+ }
+ else
+ {
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, ×tamp);
+ }
+
+ listBoxtxt.Append(KNullDesC());
+ }
+ else if(((statusCode >= 20400 )&& (statusCode < 20500 )) || (statusCode == KErrBadName))
+ {
+ iconIndex = EIconErrorFeed;
+ HBufC* text = NULL;
+
+ text = iCoeEnv->AllocReadResourceL(R_FEEDS_INVALID_URL);
+ TPtr txtPtr = text->Des();
+ CleanupStack::PushL(text);
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, &txtPtr);
+ listBoxtxt.Append(KNullDesC());
+ CleanupStack::PopAndDestroy();
+ }
+ else if( statusCode == KErrNotSupported)
+ {
+ iconIndex = EIconErrorFeed;
+ HBufC* text = NULL;
+
+ text = iCoeEnv->AllocReadResourceL(R_FEEDS_UNSUPPORTED_FEED);
+ TPtr txtPtr = text->Des();
+ CleanupStack::PushL(text);
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, &txtPtr);
+ listBoxtxt.Append(KNullDesC());
+ CleanupStack::PopAndDestroy();
+ }
+ else if ( statusCode == KErrTimedOut)
+ {
+ iconIndex = EIconErrorFeed;
+ HBufC* text = NULL;
+
+ text = iCoeEnv->AllocReadResourceL(R_FEEDS_NETWORK_ERROR);
+ TPtr txtPtr = text->Des();
+ CleanupStack::PushL(text);
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, &txtPtr);
+ listBoxtxt.Append(KNullDesC());
+ CleanupStack::PopAndDestroy();
+ }
+ else if ( statusCode == KErrCorrupt)
+ {
+ iconIndex = EIconErrorFeed;
+ HBufC* text = NULL;
+
+ text = iCoeEnv->AllocReadResourceL(R_FEEDS_MALFORMED_FEED);
+ TPtr txtPtr = text->Des();
+ CleanupStack::PushL(text);
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, &txtPtr);
+ listBoxtxt.Append(KNullDesC());
+ CleanupStack::PopAndDestroy();
+ }
+ else if(statusCode> 0)
+ {
+ iconIndex = EIconErrorFeed;
+ HBufC* text = NULL;
+
+ text = iCoeEnv->AllocReadResourceL(R_FEEDS_NETWORK_ERROR);
+ TPtr txtPtr = text->Des();
+ CleanupStack::PushL(text);
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, &txtPtr);
+ listBoxtxt.Append(KNullDesC());
+ CleanupStack::PopAndDestroy();
+ }
+ else
+ {
+ iconIndex = EIconErrorFeed;
+ HBufC* text = NULL;
+
+ text = iCoeEnv->AllocReadResourceL(R_FEEDS_GENERAL_ERROR_MAIN_PANE);
+ TPtr txtPtr = text->Des();
+ CleanupStack::PushL(text);
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("%d\t%S\t%S"), iconIndex, &itemName, &txtPtr);
+ listBoxtxt.Append(KNullDesC());
+ CleanupStack::PopAndDestroy();
+ }
+ }
+
+ // Add the row.
+ iListBoxRows->AppendL(listBoxtxt);
+ }
+
+ // Restore the selection -- the best it can that is.
+ if (iCurrentFolder->GetChildren().Count() > 0)
+ {
+ if (aInitialSelection > (iCurrentFolder->GetChildren().Count() - 1))
+ {
+ aInitialSelection = iCurrentFolder->GetChildren().Count() - 1;
+ }
+ if (aInitialSelection < 0)
+ {
+ aInitialSelection = 0;
+ }
+
+ iListBox->SetCurrentItemIndex(aInitialSelection);
+ }
+
+ iListBox->HandleItemAdditionL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::MoveToFolderInitL
+//
+// Inits the move-to-folder pop-up.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::MoveToFolderInitL(CAknSingleGraphicPopupMenuStyleListBox*&
+ aListBox, CAknPopupList*& aPopupList)
+ {
+ CDesCArraySeg* listBoxRows = NULL;
+ CTextListBoxModel* listboxModel = NULL;
+ HBufC* title = NULL;
+ CArrayPtr<CGulIcon>* icons = NULL;
+
+ // Construct the basic Pop-up
+ aListBox = new (ELeave) CAknSingleGraphicPopupMenuStyleListBox();
+ CleanupStack::PushL(aListBox);
+
+ aPopupList = CAknPopupList::NewL(aListBox,
+ R_FEEDS_FOLDER_VIEW_CBA_MOVETOFOLDER_MOVECANCEL);
+ CleanupStack::PushL(aPopupList);
+
+ aListBox->ConstructL(aPopupList, EAknListBoxSelectionList | EAknListBoxLoopScrolling);
+
+ // Set the title.
+ title = CCoeEnv::Static()->AllocReadResourceLC(R_FEEDS_FOLDER_VIEW_MOVE_TO_PRMPT);
+ aPopupList->SetTitleL(*title);
+ CleanupStack::PopAndDestroy(title);
+
+ // Construct the list-box's model.
+ listBoxRows = new (ELeave) CDesCArraySeg(10);
+
+ listboxModel = aListBox->Model();
+ listboxModel->SetItemTextArray(listBoxRows);
+ listboxModel->SetOwnershipType(ELbmOwnsItemArray);
+
+ // Add scrollbars.
+ aListBox->CreateScrollBarFrameL(ETrue);
+ aListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto);
+
+ // Enable item marqueeing.
+ aListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
+
+ // Add the folders to the list-box.
+ MoveToFolderSetItemsL(*listBoxRows);
+ aListBox->HandleItemAdditionL();
+
+ // Set the icons
+ icons = new (ELeave) CAknIconArray(1);
+ CleanupStack::PushL(icons);
+
+ // Add the folder icon.
+ AppendIconL(icons, KAknsIIDQgnPropFolderSmall, KAvkonBitmapFile(),
+ EMbmAvkonQgn_prop_folder_small, EMbmAvkonQgn_prop_folder_small_mask);
+
+ // Set the icons and cleanup
+ aListBox->ItemDrawer()->ColumnData()->SetIconArray(icons);
+ CleanupStack::Pop(icons);
+
+ CleanupStack::Pop(aPopupList);
+ CleanupStack::Pop(aListBox);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::MoveToFolderSetItemsL
+//
+// Sets the move-to-folder list-box's values.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::MoveToFolderSetItemsL(CDesCArraySeg& aListBoxRows)
+ {
+ iTargetFolderList.Reset();
+ //0\t\1st Line of text\t2nd Line of text\t0
+ TBuf<255> listBoxtxt;
+
+ // If need be add an entry for the root-level.
+ if (iCurrentFolder != iRootFolder)
+ {
+ TDesC* text = NULL;
+
+ text = CCoeEnv::Static()->AllocReadResourceLC(R_FEEDS_TEXT_FLDR_ROOT_LEVEL);
+
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("0\t%S"), text);
+ aListBoxRows.AppendL(listBoxtxt);
+ iTargetFolderList.Append(iRootFolder);
+
+ CleanupStack::PopAndDestroy(text);
+ }
+
+ if (iRootFolder)
+ {
+ AddFoldersToListL(*iRootFolder,aListBoxRows);
+ }
+ }
+
+// Recursive loop to find all folders
+void CFeedsFolderContainer::AddFoldersToListL(const CFeedsEntity& aFolder, CDesCArraySeg& aListBoxRows)
+ {
+ TBuf<255> listBoxtxt;
+
+ for (int i = 0; i < aFolder.GetChildren().Count(); i++)
+ {
+ const CFeedsEntity* item = NULL;
+
+ item = aFolder.GetChildren()[i];
+
+
+ // Skip all feeds and current folder
+ if (!(item->GetType()==EFolder) || iCurrentFolder == item)
+ {
+ if(iCurrentFolder == item)
+ {
+ AddFoldersToListL(*item,aListBoxRows);// recursive
+ }
+ continue;
+ }
+
+ TPtrC itemName;
+ item->GetStringValue(EFolderAttributeTitle,itemName);
+
+ // Set the name.
+ TInt len;
+
+ len = itemName.Length();
+ if (len > 253)
+ {
+ len = 253;
+ }
+
+ listBoxtxt.Zero();
+ listBoxtxt.AppendFormat(_L("0\t%S"), &itemName);
+ aListBoxRows.AppendL(listBoxtxt);
+ iTargetFolderList.Append(item);// save pointers to items to make selection easier
+
+ AddFoldersToListL(*item,aListBoxRows);// recursive
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::MoveToFolderMoveL
+//
+// Moves the marked items into the target-folder.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::MoveToFolderMoveL(const CFeedsEntity& aTargetFolder)
+ {
+ RPointerArray<const CFeedsEntity> markedItems(10);
+ RPointerArray<const CFeedsEntity> removedItems(10);
+ const RPointerArray<CFeedsEntity>& folderItems = aTargetFolder.GetChildren();
+ const CArrayFix<TInt>* markedIndexes = NULL;
+ const CFeedsEntity* folder = NULL;
+
+ CleanupClosePushL(markedItems);
+ CleanupClosePushL(removedItems);
+ // Get the array of marked items.
+ markedIndexes = MarkedItems();
+ if ((markedIndexes == NULL) || (markedIndexes->Count() == 0))
+ {
+ iListBox->View()->SelectItemL(CurrentItemIndex());
+ markedIndexes = MarkedItems();
+ }
+
+ // Copy the marked items into a temp array.
+ for (TInt i = 0; i < markedIndexes->Count(); i++)
+ {
+ folder = iCurrentFolder->GetChildren()[((*markedIndexes)[i])];
+ // if the target folder already has some feed
+ if(folderItems.Count() > 0)
+ {
+ TPtrC item;
+ TPtrC url;
+ folder->GetStringValue(EFeedAttributeTitle, item);
+ const CFeedsEntity* otherItem = iApiProvider.FeedsClientUtilities().Search(item, aTargetFolder);
+ if(!(otherItem == CurrentItem())&& otherItem != NULL)
+ {
+ otherItem->GetStringValue(EFeedAttributeLink, url);
+ iApiProvider.FeedsClientUtilities().AddFolderItemL(item,url,EFalse,aTargetFolder,0);
+ User::LeaveIfError(removedItems.Append(folder));
+ }
+ else
+ {
+ // feed not present in target folder
+ User::LeaveIfError(markedItems.Append(folder));
+ }
+ }
+ // if the target folder is empty
+ else
+ {
+ // Move the items.
+ User::LeaveIfError(markedItems.Append(folder));
+ }
+ }
+ if(removedItems.Count())
+ {
+ iApiProvider.FeedsClientUtilities().DeleteFolderItemsL(removedItems);
+ }
+ if(markedItems.Count())
+ {
+ // Move the items.
+ iApiProvider.FeedsClientUtilities().MoveFolderItemsToL(markedItems, aTargetFolder);
+ }
+ // Clean up
+ CleanupStack::PopAndDestroy(/*removedItems*/);
+ CleanupStack::PopAndDestroy(/*markedItems*/);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::PostHandleMoveL
+//
+// Moves the current or marked items -- called after the move-cmd is confirmed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::PostHandleMoveL()
+ {
+ const CArrayFix<TInt>* markedIndexes = NULL;
+ RPointerArray<const CFeedsEntity> markedItems(10);
+ TInt targetIndex;
+
+ CleanupClosePushL(markedItems);
+
+ // Get the marked indexes.
+ markedIndexes = MarkedItems();
+
+ // Return if there is nothing to do.
+ if ((markedIndexes == NULL) || (markedIndexes->Count() == 0))
+ {
+ return;
+ }
+
+ // Get the target index.
+ targetIndex = CurrentItemIndex();
+
+ // Copy the marked items into a temp array.
+ for (TInt i = 0; i < markedIndexes->Count(); i++)
+ {
+ User::LeaveIfError(markedItems.Append(
+ iCurrentFolder->GetChildren()[((*markedIndexes)[i])]));
+ }
+
+ // Move the items.
+ iApiProvider.FeedsClientUtilities().MoveFolderItemsL(markedItems, targetIndex);
+
+ // Clean up
+ CleanupStack::PopAndDestroy(/*markedItems*/);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateCba
+//
+// Updates the options softkey to reflect the current state.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateCbaL()
+ {
+ TInt commandSet;
+
+ // Set default menu type and resource
+ iView->MenuBar()->SetMenuTitleResourceId( R_FEEDS_FOLDER_VIEW_MENUBAR);
+ iView->MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions);
+
+ if ((MarkedItems() != NULL) && (MarkedItems()->Count() > 0))
+ {
+ // Change menu configuration to context-sensitive menu if any items are marked
+ iView->MenuBar()->SetContextMenuTitleResourceId( R_FEEDS_FOLDER_MENU_BAR_CONTEXT_MENU);
+ iView->MenuBar()->SetMenuType(CEikMenuBar::EMenuContext);
+ iView->MenuBar()->SetMenuTitleResourceId( R_FEEDS_FOLDER_VIEW_MENUBAR);
+ iView->MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions);
+
+ // normally, we use the back rsk unless we launched directly into feeds (in which case, exit)
+ if ( !iApiProvider.BrowserWasLaunchedIntoFeeds() )
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_BACK_CONTEXT_MENU;
+ }
+ else
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_EXIT_CONTEXT_MENU;
+ }
+ }
+ else if (iCurrentFolder && (iCurrentFolder->GetChildren().Count() > 0))
+ {
+ // normally, we use the back rsk unless we launched directly into feeds (in which case, exit)
+ if ( !iApiProvider.BrowserWasLaunchedIntoFeeds() )
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_BACK_OPEN;
+ }
+ else
+ {
+ if ( iCurrentFolder == iRootFolder )
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_EXIT_OPEN;
+ }
+ else
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_BACK_OPEN;
+ }
+ }
+ UpdateToolbarButtonsState();
+ }
+ else
+ {
+ // normally, we use the back rsk unless we launched directly into feeds (in which case, exit)
+ if ( !iApiProvider.BrowserWasLaunchedIntoFeeds() )
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_BACK_ADDFEED;
+ }
+ else
+ {
+ commandSet = R_FEEDS_FOLDER_VIEW_CBA_OPTIONS_EXIT_ADDFEED;
+ }
+ }
+
+ if (iMoveActive)
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ commandSet = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+#else
+ commandSet = R_AVKON_SOFTKEYS_CANCEL;
+#endif
+ }
+
+ iView->UpdateCbaL(commandSet);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::SetCurrentFolder
+//
+// Changes the current folder.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::SetCurrentFolder(const CFeedsEntity* aFolder,
+ TBool aResetSelection)
+ {
+ iCurrentFolder = aFolder;
+
+ if (aFolder != NULL)
+ {
+ iCurrentFolderId = aFolder->GetId();
+ }
+ else
+ {
+ iCurrentFolderId = -1;
+ }
+
+ if (aResetSelection && (iListBox != NULL))
+ {
+ iListBox->SetCurrentItemIndex(0);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::CountFolderFolders
+//
+// Count the number of subfolders within a folder
+//
+// -----------------------------------------------------------------------------
+void CFeedsFolderContainer::CountFolderFolders(const CFeedsEntity* aFolder, TInt& aFolderCount)
+ {
+ if (aFolder)
+ {
+ for(TInt index = 0; index < aFolder->GetChildren().Count(); index++)
+ {
+ if ((aFolder->GetChildren()[index])->GetType() == EFolder)
+ {
+ aFolderCount++;
+ CountFolderFolders(aFolder->GetChildren()[index], aFolderCount);
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UnreadCountChangedL
+//
+// Calculate the unread count based on delta, return the calculated value.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFolderContainer::UnreadCountChangedL( TInt aUnreadCountDelta )
+ {
+ TInt unreadCount = 0;
+ TInt index;
+ CFeedsEntity* item = NULL;
+
+ index = iListBox->CurrentItemIndex();
+ item = const_cast<CFeedsEntity*>(iCurrentFolder->GetChildren()[index]);
+ User::LeaveIfNull((void*) item);
+
+ // If it's a feed - update its unread count.
+ if (item->GetType() != EFolder)
+ {
+ // calculate how many are unread for the current feed
+ item->GetIntegerValue(EFolderAttributeUnreadCount, unreadCount );
+ unreadCount += aUnreadCountDelta;
+ if (unreadCount < 0)
+ {
+ unreadCount = 0;
+ }
+ CFeedsMap* map = CFeedsMap::NewL();
+ map->SetIntegerAttribute(EFolderAttributeUnreadCount,unreadCount);
+
+ // item->ChangeValue(*map);
+ delete map;
+ }
+ return unreadCount;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::SetUnreadCountL
+//
+// Set the unread count.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::SetUnreadCountL( TInt aUnreadCount )
+{
+ TInt index;
+ CFeedsEntity* item = NULL;
+
+ index = iListBox->CurrentItemIndex();
+ item = const_cast<CFeedsEntity*>(iCurrentFolder->GetChildren()[index]);
+ User::LeaveIfNull((void*) item);
+
+ // If it's a feed - update its unread count.
+ if (item->GetType() == EFalse)
+ {
+ CFeedsMap* map = CFeedsMap::NewL();
+ map->SetIntegerAttribute(EFolderAttributeUnreadCount,aUnreadCount);
+
+ // item->ChangeValue(*map);
+ delete map;
+ }
+}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::DynInitMarkUnmarkMenuPane
+//
+// Dynamically Initialize the Mark/Unmark sub-menu
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::DynInitMarkUnmarkMenuPane( CEikMenuPane *aMenuPane )
+{
+ AknSelectionService::HandleMarkableListDynInitMenuPane(R_AVKON_MENUPANE_MARKABLE_LIST_IMPLEMENTATION, aMenuPane, iListBox);
+}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::DimToolbar
+//
+// Dim or UnDim Toolbar
+// if aDim is ETrue, then dim toolbar
+// else undim toolbar
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::DimToolbar(TBool aDim)
+{
+ iView->Toolbar()->SetItemDimmed(EFeedsNewFeed, aDim, ETrue);
+ iView->Toolbar()->SetItemDimmed(EFeedsUpdateAll, aDim, ETrue);
+ iView->Toolbar()->SetItemDimmed(EWmlCmdPreferences, aDim, ETrue);
+ iView->Toolbar()->DrawNow();
+}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::IsMarkedItemFolder
+//
+// To Check Marked items contains Folder or Feed
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderContainer::IsMarkedItemFolder()
+{
+ const CArrayFix<TInt>* markedIndexes = NULL;
+
+ // Get the marked items.
+ markedIndexes = MarkedItems();
+
+ // Check for Folder is marked or not
+ for(TInt i=0 ; i< markedIndexes->Count(); i++)
+ {
+ if(iCurrentFolder->GetChildren()[(*markedIndexes)[i]] -> GetType() == EFolder)
+ {
+ return ETrue;
+ }
+
+ }
+ return EFalse;
+}
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::ClearNavigationPane
+//
+// Clears the navigation pane.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::ClearNavigationPane()
+ {
+ if (iNaviDecorator)
+ {
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderContainer::UpdateNavigationPaneL
+//
+// Handles the changes needed to the Navigation Pane.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderContainer::UpdateNavigationPaneL()
+ {
+ CAknNavigationControlContainer* naviPane = NULL;
+
+ // Get the navigation sub-pane.
+ CAknViewAppUi* appUi;
+ TUid uid;
+ TBuf<1> string;
+
+ string.Append(_L(" "));
+
+ // Get the title sub-pane.
+ appUi = static_cast<CAknViewAppUi*>(CCoeEnv::Static()->AppUi());
+
+ uid.iUid = EEikStatusPaneUidNavi;
+
+ CEikStatusPaneBase::TPaneCapabilities subPane = appUi->StatusPane()->
+ PaneCapabilities(uid);
+
+ // Set the title if the pane belongs to the app.
+ if (subPane.IsPresent() && subPane.IsAppOwned())
+ {
+ naviPane = (CAknNavigationControlContainer*) appUi->StatusPane()->ControlL(uid);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ // Ensure the NaviDecorator was created.
+ if (!iNaviDecorator)
+ {
+ iNaviDecorator = naviPane->CreateNavigationLabelL( string );
+ }
+
+
+ // If not yet pushed, this will do the push; if already there, this brings
+ // it to top and draws.
+ naviPane->PushL(*iNaviDecorator);
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsFolderView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,748 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a user's list of feeds.
+*
+*/
+
+
+
+#include <avkon.rsg>
+
+#include <aknviewappui.h>
+#include <aknutils.h>
+#include <AknToolbar.h>
+#include <eikmenup.h>
+#include <hlplch.h>
+#include <s32mem.h>
+
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include <feedattributes.h>
+#include <folderattributes.h>
+#include "FeedsFolderContainer.h"
+#include "FeedsFolderView.h"
+#include "Display.h"
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFolderView* CFeedsFolderView::NewL( MApiProvider& aApiProvider, TRect& aRect )
+ {
+ CFeedsFolderView* self = new (ELeave) CFeedsFolderView(aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL(aRect);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::CFeedsFolderView
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFolderView::CFeedsFolderView(MApiProvider& aApiProvider):
+CBrowserViewBase( aApiProvider ),iPenEnabled(EFalse)
+ {
+ iPenEnabled = AknLayoutUtils::PenEnabled();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::ConstructL(TRect& aRect)
+ {
+ BaseConstructL(R_FEEDS_FOLDER_VIEW);
+
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ iContainer = CFeedsFolderContainer::NewL( this, ApiProvider(), aRect );
+ iContainer->MakeVisible(EFalse);
+#endif
+
+ if(iPenEnabled)
+ {
+ Toolbar()->SetToolbarObserver(this);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::~CFeedsFolderView
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsFolderView::~CFeedsFolderView()
+ {
+ DoDeactivate();
+
+ delete iContainer;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::Id
+//
+// Returns the id of the view.
+// -----------------------------------------------------------------------------
+//
+TUid CFeedsFolderView::Id() const
+ {
+ return KUidBrowserFeedsFolderViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::HandleCommandL
+//
+// Processes commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::HandleCommandL(TInt aCommand)
+ {
+ TBool handled = EFalse;
+
+ // Handle softkeys and some standard commands first.
+ switch (aCommand)
+ {
+ case EAknSoftkeyBack:
+ if (!iContainer->HandleShowParentFolderL())
+ {
+ // If we are in embedded mode (perhaps someone imported a feed from the messaging app)
+ // then we want to close the browser vs. returning to the bookmark view
+ if (iApiProvider.IsEmbeddedModeOn())
+ {
+ AppUi()->HandleCommandL( EWmlCmdCloseBrowser );
+ }
+ // Go back to content view only if we came from there. Note that ContentView can be
+ // on the history if another application launched a URL.
+ else if(((ApiProvider().GetPreviousViewFromViewHistory() == KUidBrowserContentViewId)
+ && (ApiProvider().FeedsClientUtilities().CalledFromView() == KUidBrowserContentViewId))
+ ||(ApiProvider().GetPreviousViewFromViewHistory() == KUidBrowserFeedsTopicViewId)
+ && (ApiProvider().FeedsClientUtilities().CalledFromView() != KUidBrowserBookmarksViewId))
+ {
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );
+ }
+ else
+ {
+ iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
+ }
+ }
+ handled = ETrue;
+ break;
+ case EAknSoftkeyOk:
+ iContainer->HandleOkL();
+ handled = ETrue;
+ break;
+
+ case EAknSoftkeyCancel:
+ iContainer->HandleCancelL();
+ handled = ETrue;
+ break;
+
+ case EAknCmdMark:
+ case EAknCmdUnmark:
+ case EAknMarkAll:
+ case EAknUnmarkAll:
+ iContainer->HandleMarkL(aCommand);
+ handled = ETrue;
+ iContainer->UpdateCbaL();
+ iContainer->UpdateToolbarButtonsState();
+ break;
+
+#ifdef __SERIES60_HELP
+ case EAknCmdHelp:
+ {
+ iApiProvider.SetLastActiveViewId(Id());
+ HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+ AppUi()->AppHelpContextL());
+ handled = ETrue;
+ break;
+ }
+#endif //__SERIES60_HELP
+
+
+ case EEikCmdExit:
+ case EAknSoftkeyExit:
+ AppUi()->HandleCommandL(aCommand);
+ handled = ETrue;
+ break;
+ }
+
+ if (handled)
+ {
+ return;
+ }
+
+ // Handle menu commands.
+ switch (aCommand)
+ {
+ case EFeedsOpen:
+ case EFeedsActivate:
+ iContainer->HandleSelectionL();
+ break;
+
+ case EFeedsUpdate:
+ iContainer->HandleUpdateFeedL();
+ break;
+
+ case EFeedsUpdateAll:
+ iContainer->HandleUpdateFeedL(ETrue);
+ break;
+
+ case EFeedsNewFeed:
+ iContainer->HandleNewFeedL();
+ iContainer->UpdateToolbarButtonsState();
+ break;
+
+ case EFeedsNewFolder:
+ iContainer->HandleNewFolderL();
+ iContainer->UpdateToolbarButtonsState();
+ break;
+
+ case EFeedsEdit:
+ case EFeedsRename:
+ iContainer->HandleEditL();
+ iContainer->UpdateToolbarButtonsState();
+ break;
+
+ case EFeedsDelete:
+ iContainer->HandleDeleteL();
+ break;
+
+ case EFeedsMove:
+ iContainer->HandleMoveL();
+ break;
+
+ case EFeedsMoveToFolder:
+ iContainer->HandleMoveToFolderL();
+ break;
+
+ case EFeedsExport:
+ iContainer->HandleExportL();
+ break;
+
+ case EWmlCmdDownloads:
+ ApiProvider().BrCtlInterface().HandleCommandL(
+ (TInt)TBrCtlDefs::ECommandShowDownloads +
+ (TInt)TBrCtlDefs::ECommandIdBase );
+ break;
+
+ default:
+ iApiProvider.FeedsClientUtilities().HandleCommandL(Id(),aCommand);
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::DoActivateL
+//
+// Called when the view is activated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+ {
+ StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
+ StatusPane()->MakeVisible( ETrue );
+ ApiProvider().Display().ClearMessageInfo();
+
+ if (!iContainer)
+ {
+ iContainer = CFeedsFolderContainer::NewL( this, ApiProvider(), ClientRect() );
+
+ // Set the root folder.
+ if (iRootFolder != NULL)
+ {
+ iContainer->RootFolderChangedL(*iRootFolder);
+ }
+ }
+
+ if (!iContainerOnStack)
+ {
+ AppUi()->AddToViewStackL(*this, iContainer);
+ iContainer->SetRect(ClientRect());
+ iContainer->MakeVisible(ETrue);
+ iContainerOnStack = ETrue;
+ // resize screen after calling SetRect. This way looks better
+ iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ }
+
+ iApiProvider.SetLastActiveViewId(Id());
+ iContainer->UpdateTitleL();
+ iContainer->UpdateNavigationPaneL();
+ iContainer->UpdateListBoxL(iInitialItem);
+
+ iContainer->UpdateCbaL();
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::DoDeactivate
+//
+// Called when the view is deactivated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::DoDeactivate()
+ {
+ if (iContainerOnStack)
+ {
+ AppUi()->RemoveFromViewStack(*this, iContainer);
+ iContainer->MakeVisible(EFalse);
+ iContainer->ClearNavigationPane();
+ iContainerOnStack = EFalse;
+
+ iInitialItem = iContainer->CurrentItemIndex();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::DynInitMenuPaneL
+//
+// Disables unrelated menu options.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+ {
+ const CFeedsEntity* item = NULL;
+
+ // Get the current item.
+ item = iContainer->CurrentItem();
+
+ // Handle the main menu.
+ if (aResourceId == R_FEEDS_FOLDER_VIEW_MENU)
+ {
+ // Dynamically build the menu.
+
+ // Downloads (only if download menu not empty (ie, ongoing downloads)
+ if (ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ))
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdDownloads, R_FEEDS_OPTIONS_GO_DOWNLOADS);
+ }
+
+ iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsGoto,
+ R_FEEDS_OPTIONS_GOTO, R_FEEDS_OPTIONS_GOTO_SUBMENU);
+
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsFeedsActions,
+ R_FEEDS_OPTIONS_FEEDSACTIONS, R_FEEDS_OPTIONS_FEEDSACTIONS_SUBMENU);
+
+ iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsEdit,
+ R_FEEDS_OPTIONS_EDIT, R_FEEDS_OPTIONS_EDIT_SUBMENU);
+
+ // these items only visible for non-empty folder
+ if (item != NULL)
+ {
+ // Mark/Unmark submenu - only for non-empty folder
+ iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsMarkUnmark,
+ R_FEEDS_OPTIONS_MARKUNMARK, R_FEEDS_OPTIONS_MARKUNMARK_SUBMENU);
+ }
+#else
+ // ie, privacy submenu
+ //iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsClear,
+ // R_FEEDS_OPTIONS_CLEAR, R_FEEDS_OPTIONS_CLEAR_SUBMENU);
+
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsUpdateAll, R_FEEDS_UPDATE_ALL);
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsNewFeed, R_FEEDS_NEW_FEED);
+ if(iContainer->iCurrentFolder && ( iContainer->iCurrentFolder == iRootFolder) )
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsNewFolder, R_OPTIONS_ORG_NEW_FOLDER);
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsImport, R_OPTIONS_IMPORT_FEEDS);
+ if( item && iContainer->iCurrentFolder && !iContainer->isMoveActive() )
+ {
+ if ( (item->GetType() == EFolder) )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsRename, R_FLDR_RENAME);
+ aMenuPane->SetItemSpecific(EFeedsRename,ETrue);
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMove, R_OPTIONS_ORG_MOVE);
+ aMenuPane->SetItemSpecific(EFeedsMove,ETrue);
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsDelete, R_FEEDS_DELETE);
+ aMenuPane->SetItemSpecific(EFeedsDelete,ETrue);
+ }
+ else
+ {
+ // Update (only if feed has focus)
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdate, R_FEEDS_UPDATE);
+ aMenuPane->SetItemSpecific(EFeedsUpdate,ETrue);
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsExport, R_OPTIONS_EXPORT_FEEDS);
+ aMenuPane->SetItemSpecific(EFeedsExport,ETrue);
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsEdit, R_FEEDS_EDIT);
+ aMenuPane->SetItemSpecific(EFeedsEdit,ETrue);
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsDelete, R_FEEDS_DELETE);
+ aMenuPane->SetItemSpecific(EFeedsDelete,ETrue);
+
+ if ( iContainer &&
+ iContainer->iCurrentFolder &&
+ iContainer->iCurrentFolder->GetChildren().Count() >= 2 )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMove, R_OPTIONS_ORG_MOVE);
+ aMenuPane->SetItemSpecific(EFeedsMove,ETrue);
+ }
+ if (!(item->GetType() == EFolder))
+ {
+ TInt folderCount = 0;
+ iContainer->CountFolderFolders(iContainer->iRootFolder, folderCount);
+ if(iContainer && (folderCount> 0) && !iContainer->IsMarkedItemFolder())
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMoveToFolder, R_OPTIONS_ORG_MOVE_TO_FOLDER);
+ aMenuPane->SetItemSpecific(EFeedsMoveToFolder,ETrue);
+ }
+ }
+ }
+ }
+#endif
+
+ iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsClear,
+ R_FEEDS_OPTIONS_CLEAR, R_CLEAR_SUBMENU);
+ }
+ else if(aResourceId == R_FEEDS_OPTIONS_GOTO_SUBMENU)
+ {
+ // Back to Page (if page loaded)
+ if ( iApiProvider.IsPageLoaded() )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdBackToPage, R_BROWSER_MENU_ITEM_BACK_TO_PAGE );
+ }
+
+ // Bookmarks view (if browser wasn't launched directly into feeds)
+ if ( !iApiProvider.BrowserWasLaunchedIntoFeeds() )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdFavourites, R_BROWSER_MENU_ITEM_FAVOURITES );
+ }
+ }
+ else if(aResourceId == R_FEEDS_OPTIONS_FEEDSACTIONS_SUBMENU)
+ {
+ if(iContainer &&
+ iContainer->iCurrentFolder &&
+ iContainer->iCurrentFolder->GetChildren().Count() > 0)
+ {
+ if (!(item->GetType() == EFolder) && !iContainer->IsMarkedItemFolder())
+ {
+ // Update (only if feed has focus)
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdate, R_FEEDS_UPDATE);
+ }
+
+ // Update All (only for non-empty views/folders)
+ if(iContainer->SearchForFeedL(iRootFolder))
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdateAll, R_FEEDS_UPDATE_ALL);
+ }
+
+
+ // Send (only for non-empty views/folders)
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsExport, R_OPTIONS_EXPORT_FEEDS);
+ }
+
+ // Import Feeds
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsImport, R_OPTIONS_IMPORT_FEEDS);
+
+ // Create Feed
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsNewFeed, R_FEEDS_NEW_FEED);
+ }
+ else if(aResourceId == R_FEEDS_OPTIONS_EDIT_SUBMENU)
+ {
+ if (item != NULL)
+ {
+ TInt markedcount = (iContainer && iContainer->MarkedItems()) ? iContainer->MarkedItems()->Count() : 0;
+
+ // "Edit Feed" or "Rename Folder" depending upon which has focus
+ if (markedcount < 1)// don't allow edit/rename if feed(s)/folder(s) are marked
+ {
+ if (item->GetType() == EFolder)
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsRename, R_FLDR_RENAME);
+ }
+ else
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsEdit, R_FEEDS_EDIT);
+ }
+ }
+
+ // Delete (only if editable item has focus)
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsDelete, R_FEEDS_DELETE);
+
+ // move
+ if ( iContainer &&
+ iContainer->iCurrentFolder &&
+ iContainer->iCurrentFolder->GetChildren().Count() >= 2 )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMove, R_OPTIONS_ORG_MOVE);
+ }
+
+ // move to folder only if a feed has focus and there are folders available
+ if (!(item->GetType() == EFolder))
+ {
+ TInt folderCount = 0;
+ iContainer->CountFolderFolders(iContainer->iRootFolder, folderCount);
+
+ if(iContainer && (folderCount> 0) && !iContainer->IsMarkedItemFolder())
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMoveToFolder, R_OPTIONS_ORG_MOVE_TO_FOLDER);
+ }
+ }
+ }
+
+ // Create Folder
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsNewFolder, R_OPTIONS_ORG_NEW_FOLDER);
+ }
+ else if( (aResourceId == R_FEEDS_OPTIONS_MARKUNMARK_SUBMENU) || (aResourceId == R_FEEDS_FOLDER_VIEW_MARK_UNMARK_MENU ) )
+ {
+ // Mark (or unmark)
+ if(IsCurrentItemMarked())
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknCmdUnmark, R_OPTIONS_LIST_UNMARK_ONE);
+ }
+ else
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknCmdMark, R_OPTIONS_LIST_MARK_ONE);
+ }
+
+ // Mark All
+ if ( iContainer && iContainer->iCurrentFolder &&
+ iContainer->iCurrentFolder->GetChildren().Count() != iContainer->MarkedItems()->Count() )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknMarkAll, R_OPTIONS_LIST_MARK_ALL);
+ }
+
+ // Unmark ALL
+ if (AnyMarkedItems())
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknUnmarkAll, R_OPTIONS_LIST_UNMARK_ALL);
+ }
+ }
+ else if(aResourceId == R_FEEDS_OPTIONS_CLEAR_SUBMENU)
+ {
+
+
+ }
+ else if(aResourceId == R_FEEDS_FOLDER_MENU_PANE_CONTEXT_MENU)
+ {
+ // move
+ if ( iContainer &&
+ iContainer->iCurrentFolder &&
+ iContainer->iCurrentFolder->GetChildren().Count() < 2 )
+ {
+ aMenuPane->SetItemDimmed(EFeedsMove,ETrue);
+ }
+ aMenuPane->SetItemDimmed(EFeedsMoveToFolder,ETrue);
+
+ if (!(item->GetType() == EFolder))
+ {
+ TInt folderCount = 0;
+ iContainer->CountFolderFolders(iContainer->iRootFolder, folderCount);
+
+ if(iContainer && (folderCount> 0) && !iContainer->IsMarkedItemFolder())
+ {
+ aMenuPane->SetItemDimmed(EFeedsMoveToFolder,EFalse);
+ }
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(EFeedsUpdate, ETrue);
+ }
+ }
+ iApiProvider.FeedsClientUtilities().DynInitMenuPaneL(aResourceId, aMenuPane );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::UpdateCbaL
+//
+// Updates the options softkey to reflect the command set.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::UpdateCbaL(TInt aCommandSet)
+ {
+ if (Cba())
+ {
+ Cba()->SetCommandSetL(aCommandSet);
+ Cba()->DrawDeferred();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::RootFolderChangedL
+//
+// Called to notify the view the that root folder has changed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::RootFolderChangedL(const CFeedsEntity& aRootFolder)
+ {
+ iRootFolder = &aRootFolder;
+
+ if (iContainer != NULL)
+ {
+ iContainer->RootFolderChangedL(aRootFolder);
+ iContainer->UpdateToolbarButtonsState();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::SetCurrentFolder
+//
+// Changes the current folder.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::SetCurrentFolder(const CFeedsEntity& aFolder, TBool aResetSelection)
+ {
+ if (iContainer != NULL)
+ {
+ iContainer->SetCurrentFolder(&aFolder, aResetSelection);
+ }
+
+ if (aResetSelection)
+ {
+ iInitialItem = 0;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFeedsFolderView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CFeedsFolderView::CommandSetResourceIdL()
+ {
+ // It is never called, but this function have to be implemented
+ return KWmlEmptyResourceId;
+ }
+
+// ---------------------------------------------------------
+// CFeedsFolderView::HandleClientRectChange
+// ---------------------------------------------------------
+//
+void CFeedsFolderView::HandleClientRectChange()
+ {
+ if( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::UnreadCountChangedL
+//
+// Calculate the unread count based on delta, return the calculated value.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsFolderView::UnreadCountChangedL( TInt aUnreadCountDelta )
+{
+ TInt unreadCount = 0;
+
+ if (iContainer != NULL)
+ {
+ unreadCount = iContainer->UnreadCountChangedL( aUnreadCountDelta );
+ }
+
+ return unreadCount;
+}
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::SetUnreadCount
+//
+// Set the unread count.
+// -----------------------------------------------------------------------------
+//
+void CFeedsFolderView::SetUnreadCountL( TInt aUnreadCount )
+{
+ if (iContainer != NULL)
+ {
+ iContainer->SetUnreadCountL( aUnreadCount );
+ }
+}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::AnyFoldersMarked
+//
+// returns ETrue if any Feeds folders are marked otherwise returns EFalse
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderView::AnyFoldersMarked()
+{
+ const CArrayFix<TInt>* markedIndexes = iContainer->MarkedItems();
+ const CFeedsEntity* markedItem = NULL;
+ TInt i;
+
+ for ( i = 0; i < markedIndexes->Count(); i++ )
+ {
+ // Get the item.
+ markedItem = iContainer->iCurrentFolder->GetChildren()[(*markedIndexes)[i]];
+ if ( markedItem != NULL && markedItem->GetType() == EFolder )
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::AnyMarkedItems
+//
+// returns ETrue anything is marked otherwise returns EFalse
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsFolderView::AnyMarkedItems()
+{
+ const CArrayFix<TInt>* markedIndexes = iContainer->MarkedItems();
+
+ if (markedIndexes->Count() > 0 )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CFeedsFolderView::IsItemMarked
+//
+// returns ETrue if item is marked, otherwise returns EFalse
+// -----------------------------------------------------------------------------
+//
+
+TBool CFeedsFolderView::IsCurrentItemMarked()
+{
+ // Get the current item's index
+ TInt currIndex = iContainer->CurrentItemIndex();
+ const CArrayFix<TInt>* markedIndexes = iContainer->MarkedItems();
+
+ if (markedIndexes->Count() > 0)
+ {
+ TKeyArrayFix key(0, ECmpTInt);
+ TInt pos = 0;
+ TInt retVal = markedIndexes->Find(currIndex,key,pos);
+ if( retVal == KErrNone)
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsTopicContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,622 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a feed's topics.
+*
+*/
+
+
+
+#include <AknNavi.h>
+#include <AknNaviDe.h>
+#include <AknNaviLabel.h>
+#include <AknTabGrp.h>
+#include <AknViewAppUi.h>
+#include <akniconarray.h>
+#include <aknconsts.h>
+#include <aknsconstants.h>
+#include <aknlists.h>
+#include <aknsutils.h>
+#include <data_caging_path_literals.hrh>
+#include <eikclbd.h>
+#include <gulicon.h>
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <csxhelp/browser.hlp.hrh>
+#include "BrowserApplication.h"
+#endif // __SERIES60_HELP
+
+#include <browser.mbg>
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include <feedattributes.h>
+#include <folderattributes.h>
+#include <feedsentity.h>
+#include "FeedsTopicContainer.h"
+#include "FeedsTopicView.h"
+
+#include "ApiProvider.h"
+#include "Display.h"
+
+
+const TInt KDateSize = 30; // Size of Date strings
+const TInt KTimeSize = 30; // Size of Time strings
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsTopicContainer* CFeedsTopicContainer::NewL(CFeedsTopicView* aView,
+ MApiProvider& aApiProvider, const TRect& aRect)
+ {
+ CFeedsTopicContainer* self = new (ELeave) CFeedsTopicContainer(aView, aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL(aRect);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::CFeedsTopicContainer
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsTopicContainer::CFeedsTopicContainer(CFeedsTopicView* aView,
+ MApiProvider& aApiProvider ) :
+ iView( aView ),
+ iApiProvider( aApiProvider )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::ConstructL(const TRect& aRect)
+ {
+ CreateWindowL();
+ SetMopParent( iView );
+ InitContainerL(aRect);
+ ActivateL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::~CFeedsTopicContainer
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsTopicContainer::~CFeedsTopicContainer()
+ {
+ delete iListBox;
+ delete iListBoxRows;
+ delete iNaviDecorator;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::OfferKeyEventL
+//
+// Handles key event.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFeedsTopicContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+ {
+ if (aType != EEventKey)
+ {
+ return EKeyWasNotConsumed;
+ }
+
+ if (( aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter ) &&
+ ( aKeyEvent.iModifiers & EModifierShift ) )
+ {
+ return EKeyWasConsumed;
+ }
+
+ return iListBox->OfferKeyEventL(aKeyEvent, aType);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::GetHelpContext
+//
+// Get help context for the control.
+// -----------------------------------------------------------------------------
+//
+#ifdef __SERIES60_HELP
+void CFeedsTopicContainer::GetHelpContext(TCoeHelpContext& aContext) const
+ {
+ // This must be the Browser's uid becasue the help texts are under Browser topics.
+ aContext.iMajor = KUidBrowserApplication;
+ aContext.iContext = KOSS_HLP_RSS_ARTICLELST;
+ }
+#endif // __SERIES60_HELP
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::SizeChanged
+//
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::SizeChanged()
+ {
+ iListBox->SetRect(Rect());
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::HandleResourceChange
+//
+// Called by the framework when a display resource changes (i.e. skin or layout).
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::HandleResourceChange(TInt aType)
+ {
+ CCoeControl::HandleResourceChange(aType);
+ iListBox->HandleResourceChange(aType);
+
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+
+ if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect))
+ {
+ SetRect(rect);
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::CountComponentControls
+//
+// Returns number of components.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsTopicContainer::CountComponentControls() const
+ {
+ return 1;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::ComponentControl
+//
+// Returns pointer to particular component.
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CFeedsTopicContainer::ComponentControl(TInt aIndex) const
+ {
+ switch (aIndex)
+ {
+ case 0:
+ return iListBox;
+
+ default:
+ return NULL;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::HandleListBoxEventL
+//
+// Processes key events from the listbox.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
+ {
+ // An item was selected.
+ if ((aEventType == MEikListBoxObserver::EEventEnterKeyPressed) ||
+ (aEventType == MEikListBoxObserver::EEventItemDoubleClicked)
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ || (aEventType == MEikListBoxObserver::EEventItemSingleClicked)
+#endif
+ )
+ {
+ HandleOpenL();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::SetCurrentFeedL
+//
+// Sets the current feed
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::SetCurrentFeedL(const CFeedsEntity& aFeed, TInt aIndex)
+ {
+ // If the feed changes ignore aIndex.
+ if (iFeed != &aFeed)
+ {
+ aIndex = 0;
+ }
+
+ iFeed = &aFeed;
+
+ // Update the view.
+ UpdateTitleL();
+ UpdateListBoxL();
+ UpdateNavigationPaneL();
+
+ iListBox->SetCurrentItemIndex(aIndex);
+ iListBox->DrawDeferred();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::CurrentIndex
+//
+// Returns the current item.
+// -----------------------------------------------------------------------------
+TInt CFeedsTopicContainer::CurrentIndex() const
+ {
+ return iListBox->CurrentItemIndex();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::ItemCount
+//
+// Returns the number of items.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsTopicContainer::ItemCount() const
+ {
+ return iFeed->GetChildren().Count();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::UpdateTitleL
+//
+// Update the view's title.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::UpdateTitleL()
+ {
+
+ // Set the view's title
+ TPtrC title;
+ iFeed->GetStringValue(EFeedAttributeTitle,title);
+ iApiProvider.Display().SetTitleL(title);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::HandleOpenL
+//
+// Handle the open command.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::HandleOpenL()
+ {
+ TInt index;
+
+ // Get the index of the item to show.
+ index = iListBox->CurrentItemIndex();
+
+ // Show the FeedView.
+ iApiProvider.FeedsClientUtilities().ShowFeedViewLocalL(index);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::HandleUpdateFeedL
+//
+// Handles updating the current Feed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::HandleUpdateFeedL(void)
+ {
+ iApiProvider.FeedsClientUtilities().UpdateFeedL(*iFeed);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::InitContainerL
+//
+// Inits the container.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::InitContainerL(const TRect& aRect)
+ {
+ iListBox = new (ELeave) CAknSingleGraphicStyleListBox;
+ //iListBox = new (ELeave) CAknDoubleGraphicStyleListBox;
+ //iListBox = new (ELeave) CAknSingleStyleListBox;
+
+ // below flags equals EAknListBoxMarkableList without the EAknListBoxShiftEnterMarks
+ // so the shift key press is not handled by avkon
+ iListBox->ConstructL(this, (EAknGenericListBoxFlags | EAknListBoxMultipleSelection));
+ iListBox->SetContainerWindowL(*this);
+ iListBox->SetRect(aRect.Size());
+ iListBox->SetListBoxObserver(this);
+
+ iListBoxRows = new (ELeave) CDesCArraySeg(10);
+ iListBox->Model()->SetItemTextArray(iListBoxRows);
+ iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
+
+ iListBox->ActivateL();
+ iListBox->CreateScrollBarFrameL(ETrue);
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+
+ // Add the needed icons.
+ InitIconArrayL();
+
+ // Enable marquee.
+ iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::InitIconArrayL
+//
+// Inits the array of needed icons.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::InitIconArrayL()
+ {
+ _LIT(KDirAndFile,"z:browser.mbm");
+
+ TParse* fp = NULL;
+ CArrayPtr<CGulIcon>* icons = NULL;
+
+ // Build the path to the feeds resource file.
+ fp = new (ELeave) TParse();
+ CleanupStack::PushL(fp);
+
+ User::LeaveIfError(fp->Set(KDirAndFile, &KDC_APP_BITMAP_DIR, NULL));
+ TBuf<KMaxFileName> iconFile= fp->FullName();
+ CleanupStack::PopAndDestroy(fp);
+
+ // Create the icon array.
+ icons = new (ELeave) CAknIconArray(1);
+ CleanupStack::PushL(icons);
+
+ // Add the unread icon
+ AppendIconL(icons, KAknsIIDQgnPropFileRssUnread, iconFile,
+ EMbmBrowserQgn_prop_file_rss_unread, EMbmBrowserQgn_prop_file_rss_unread_mask);
+
+ // Add the read icon
+ AppendIconL(icons, KAknsIIDQgnPropFileRssRead, iconFile,
+ EMbmBrowserQgn_prop_file_rss_read, EMbmBrowserQgn_prop_file_rss_read_mask);
+
+ // Set the icons and cleanup
+ iListBox->ItemDrawer()->ColumnData()->SetIconArray(icons);
+ CleanupStack::Pop(icons);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::AppendIconL
+//
+// Loads and appends an icon to the icon array.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::AppendIconL(CArrayPtr<CGulIcon>* aIcons,
+ const TAknsItemID& aID, const TDesC& aFilename, const TInt aFileBitmapId,
+ const TInt aFileMaskId)
+ {
+ CGulIcon* newIcon;
+ CFbsBitmap* newIconBmp;
+ CFbsBitmap* newIconMaskBmp;
+
+ // Create the bitmaps: the bitmaps are left on the cleanup stack.
+ AknsUtils::CreateIconL(AknsUtils::SkinInstance(), aID, newIconBmp,
+ newIconMaskBmp, aFilename, aFileBitmapId, aFileMaskId);
+
+ CleanupStack::PushL(newIconBmp);
+ CleanupStack::PushL(newIconMaskBmp);
+
+ newIcon = CGulIcon::NewL(newIconBmp, newIconMaskBmp);
+ CleanupStack::Pop(newIconMaskBmp);
+ CleanupStack::Pop(newIconBmp);
+ CleanupStack::PushL(newIcon);
+
+ aIcons->AppendL(newIcon);
+ CleanupStack::Pop(newIcon);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::UpdateListBoxL
+//
+// Sets the list-box's values.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::UpdateListBoxL()
+ {
+ TBuf<255> listBoxtxt;
+
+ // Clear the list.
+ iListBoxRows->Reset();
+
+ if (iFeed == NULL)
+ {
+ return;
+ }
+
+ // Add the items.
+ for (int i = 0; i < iFeed->GetChildren().Count(); i++)
+ {
+ CFeedsEntity* item = iFeed->GetChildren()[i];
+ TPtrC title;
+ TPtrC desc;
+ TDesC* itemName;
+ TInt status;
+
+ item->GetStringValue(EItemAttributeTitle,title);
+ item->GetStringValue(EItemAttributeDescription,desc);
+ item->GetIntegerValue(EItemAttributeStatus,status);
+ // Get the title.
+ itemName = &(title);
+
+ // If the title is missing use the description instead.
+ if (itemName->Length() == 0)
+ {
+ itemName = &(desc);
+ }
+
+ // Ensure the title isn't too long.
+ TInt len = itemName->Length();
+ if (len > 253)
+ {
+ len = 253;
+ }
+
+ // Format: icon-index\t\1st Line of text\t2nd Line of text\t0
+ listBoxtxt.Zero();
+
+ switch (status)
+ {
+ // unread and new item all share the same unread icon
+ case EItemStatusNew:
+ listBoxtxt.Append(_L("0\t"));
+ break;
+
+ case EItemStatusUnread:
+ listBoxtxt.Append(_L("0\t"));
+ break;
+
+ default:
+ listBoxtxt.Append(_L("1\t"));
+ break;
+ }
+
+ listBoxtxt.Append(itemName->Ptr(), len);
+ listBoxtxt.Append(KNullDesC());
+
+ iListBoxRows->AppendL(listBoxtxt);
+ }
+
+ iListBox->SetCurrentItemIndex(0);
+ iListBox->HandleItemAdditionL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::Clear
+//
+// Clears the navigation pane.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::ClearNavigationPane()
+ {
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicContainer::UpdateNavigationPaneL
+//
+// Handles the changes needed to the Navigation Pane.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicContainer::UpdateNavigationPaneL()
+ {
+ CAknNavigationControlContainer* naviPane = NULL;
+
+ if (!iFeed)
+ {
+ return;
+ }
+
+ // Convert the feed's timestamp into a localized string.
+ TBuf<KDateSize + KTimeSize + 1> timestamp;
+ TBuf<KTimeSize> temp;
+ TTime date;
+ iFeed->GetTimeValue(EFeedAttributeTimestamp,date);
+
+ // Translate from UTC to local time.
+ TTime local;
+ TTime utc;
+ TTimeIntervalSeconds delta;
+
+ local.HomeTime();
+ utc.UniversalTime();
+ utc.SecondsFrom(local, delta);
+ date -= delta;
+
+ //Set time
+ HBufC* timeFormat = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_USUAL_WITH_ZERO );
+ date.FormatL( timestamp, *timeFormat );
+ CleanupStack::PopAndDestroy( timeFormat );//timeFormat
+ //
+ timestamp.Append(_L(" "));
+ //Set date
+ HBufC* dateFormat = iEikonEnv->AllocReadResourceLC( R_QTN_DATE_USUAL_WITH_ZERO );
+ date.FormatL( temp, *dateFormat );
+ CleanupStack::PopAndDestroy( dateFormat );//dateFormat
+ //
+ timestamp.Append(temp);
+ AknTextUtils::LanguageSpecificNumberConversion(timestamp);
+
+ // Get the navigation sub-pane.
+ CAknViewAppUi* appUi;
+ TUid uid;
+
+ // Get the title sub-pane.
+ appUi = static_cast<CAknViewAppUi*>(CCoeEnv::Static()->AppUi());
+
+ uid.iUid = EEikStatusPaneUidNavi;
+
+ CEikStatusPaneBase::TPaneCapabilities subPane = appUi->StatusPane()->
+ PaneCapabilities(uid);
+
+ // Set the title if the pane belongs to the app.
+ if (subPane.IsPresent() && subPane.IsAppOwned())
+ {
+ naviPane = (CAknNavigationControlContainer*) appUi->StatusPane()->ControlL(uid);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ // Ensure the NaviDecorator was created.
+ if (!iNaviDecorator)
+ {
+ iNaviDecorator = naviPane->CreateNavigationLabelL( timestamp );
+ }
+ else
+ {
+ CAknNaviLabel* naviLabel = static_cast<CAknNaviLabel*>(iNaviDecorator->DecoratedControl());
+ if(naviLabel)
+ {
+ naviLabel->SetTextL(timestamp);
+ }
+ }
+
+
+ // If not yet pushed, this will do the push; if already there, this brings
+ // it to top and draws.
+ naviPane->PushL(*iNaviDecorator);
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsTopicView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view to browse a feed's topics.
+*
+*/
+
+
+
+#include <aknviewappui.h>
+#include <aknutils.h>
+#include <AknToolbar.h>
+#include <eikbtgpc.h>
+#include <eikmenup.h>
+#include <hlplch.h>
+
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include <feedattributes.h>
+#include <folderattributes.h>
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+
+#include "FeedsTopicView.h"
+#include "FeedsTopicContainer.h"
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsTopicView* CFeedsTopicView::NewL( MApiProvider& aApiProvider, TRect& aRect )
+ {
+ CFeedsTopicView* self = new (ELeave) CFeedsTopicView(aApiProvider);
+
+ CleanupStack::PushL(self);
+ self->ConstructL(aRect);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::CFeedsTopicView
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsTopicView::CFeedsTopicView(MApiProvider& aApiProvider):
+ CBrowserViewBase( aApiProvider ),iPenEnabled(EFalse)
+ {
+ iPenEnabled = AknLayoutUtils::PenEnabled();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::ConstructL(TRect& aRect)
+ {
+ BaseConstructL(R_FEEDS_TOPIC_VIEW);
+
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ iContainer = CFeedsTopicContainer::NewL( this, ApiProvider(), aRect );
+ iContainer->MakeVisible(EFalse);
+
+ if(iPenEnabled)
+ {
+ Toolbar()->SetToolbarObserver(this);
+ }
+#endif
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::~CFeedsTopicView
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsTopicView::~CFeedsTopicView()
+ {
+ DoDeactivate();
+
+ delete iContainer;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::Id
+//
+// Returns the id of the view.
+// -----------------------------------------------------------------------------
+//
+TUid CFeedsTopicView::Id() const
+ {
+ return KUidBrowserFeedsTopicViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::HandleCommandL
+//
+// Processes commands.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::HandleCommandL(TInt aCommand)
+ {
+ TBool handled = EFalse;
+
+ // Handle softkeys and other Symbian commands first.
+ switch (aCommand)
+ {
+ case EAknSoftkeyBack:
+ iApiProvider.FeedsClientUtilities().ShowFolderViewLocalL();
+ handled = ETrue;
+ break;
+
+#ifdef __SERIES60_HELP
+ case EAknCmdHelp:
+ {
+ iApiProvider.SetLastActiveViewId(Id());
+ HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+ AppUi()->AppHelpContextL());
+ handled = ETrue;
+ break;
+ }
+#endif //__SERIES60_HELP
+ }
+
+ if (handled)
+ {
+ return;
+ }
+
+ // Handle menu commands.
+ switch (aCommand)
+ {
+ case EFeedsOpen:
+ if ((iApiProvider.FeedsClientUtilities().CurrentFeed()->GetChildren().Count()) > 0)
+ {
+ iContainer->HandleOpenL();
+ }
+ break;
+
+ case EFeedsUpdate:
+ iContainer->HandleUpdateFeedL();
+ break;
+
+ case EFeedsBackToPage:
+ iApiProvider.FeedsClientUtilities().HandleCommandL(Id(), EWmlCmdBackToPage );
+ break;
+
+ default:
+ iApiProvider.FeedsClientUtilities().HandleCommandL(Id(),aCommand);
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::DoActivateL
+//
+// Called when the view is activated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+ {
+
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ if (!iContainer)
+ {
+ iContainer = CFeedsTopicContainer::NewL( this, ApiProvider(), ClientRect() );
+ iContainer->MakeVisible(EFalse);
+ }
+ Toolbar()->SetToolbarVisibility(EFalse,EFalse);
+#endif
+ // If need be, add the container to the control stack.
+ if (!iContainerOnStack)
+ {
+ AppUi()->AddToViewStackL(*this, iContainer);
+ iContainer->SetRect(ClientRect());
+ iContainer->MakeVisible(ETrue);
+ iContainerOnStack = ETrue;
+ // resize screen after calling SetRect. This way looks better
+ iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ }
+
+ // Set the current feed.
+ iContainer->SetCurrentFeedL(*(iApiProvider.FeedsClientUtilities().CurrentFeed()), iInitialItem);
+ iApiProvider.SetLastActiveViewId(Id());
+ UpdateToolbarButtonsState();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::DoDeactivate
+//
+// Called when the view is deactivated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::DoDeactivate()
+ {
+ if (iContainerOnStack)
+ {
+ AppUi()->RemoveFromViewStack(*this, iContainer);
+ iContainer->MakeVisible(EFalse);
+ iContainer->ClearNavigationPane();
+ iContainerOnStack = EFalse;
+
+ iInitialItem = iContainer->CurrentIndex();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::DynInitMenuPaneL
+//
+// Disables unrelated menu options.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+ {
+
+
+ if (aResourceId == R_FEEDS_TOPIC_VIEW_MENU)
+ {
+ // Refresh (same as update?)
+ iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdate, R_FEEDS_UPDATE);
+
+ // Back to Page (if page loaded)
+ if ( iApiProvider.IsPageLoaded() )
+ {
+ iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdBackToPage, R_BROWSER_MENU_ITEM_BACK_TO_PAGE );
+ }
+ }
+
+ iApiProvider.FeedsClientUtilities().DynInitMenuPaneL(aResourceId, aMenuPane );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::SetCurrentFeedL
+//
+// Sets the current feed
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::SetCurrentFeedL(const CFeedsEntity& aFeed, TInt aIndex)
+ {
+ iContainer->SetCurrentFeedL(aFeed, aIndex);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::SetInitialItem
+//
+// Sets the initial item once the view is activated.
+// -----------------------------------------------------------------------------
+//
+void CFeedsTopicView::SetInitialItem(TInt aItemIndex)
+ {
+ iInitialItem = aItemIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CFeedsTopicView::UpdateToolbarButtonsState
+//
+// Updates the state of the toolbar buttons depending on the situation
+// -----------------------------------------------------------------------------
+//
+
+void CFeedsTopicView::UpdateToolbarButtonsState()
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ Toolbar()->SetToolbarVisibility(EFalse,EFalse);
+ return;
+#else
+ if (iApiProvider.IsPageLoaded())
+ {
+ Toolbar()->SetItemDimmed(EFeedsBackToPage, EFalse, ETrue);
+ }
+ else
+ {
+ Toolbar()->SetItemDimmed(EFeedsBackToPage, ETrue, ETrue);
+ }
+ if ((iApiProvider.FeedsClientUtilities().CurrentFeed()->GetChildren().Count()) > 0)
+ {
+ Toolbar()->SetItemDimmed(EFeedsOpen, EFalse, ETrue);
+ }
+ else
+ {
+ Toolbar()->SetItemDimmed(EFeedsOpen, ETrue, ETrue);
+ }
+#endif
+ }
+
+// ---------------------------------------------------------------------------
+// CFeedsTopicView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CFeedsTopicView::CommandSetResourceIdL()
+ {
+ // It is never called, but this function have to be implemented
+ return KWmlEmptyResourceId;
+ }
+
+// ---------------------------------------------------------
+// CFeedsTopicView::HandleClientRectChange
+// ---------------------------------------------------------
+//
+void CFeedsTopicView::HandleClientRectChange()
+ {
+ if( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsWaitDialog.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Encapsulates a wait or progress dialog.
+*
+*/
+
+
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+
+#include <AknWaitDialog.h>
+#include <eikprogi.h>
+#include <eikdialg.h>
+#include <StringLoader.h>
+
+#include "FeedsWaitDialog.h"
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsWaitDialog* CFeedsWaitDialog::NewL(MFeedsWaitDialogListener& aListener)
+ {
+ CFeedsWaitDialog* self = new (ELeave) CFeedsWaitDialog(aListener);
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::CFeedsWaitDialog
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsWaitDialog::CFeedsWaitDialog(MFeedsWaitDialogListener& aListener):
+ iListener(aListener)
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::ConstructL()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::~CFeedsWaitDialog
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsWaitDialog::~CFeedsWaitDialog()
+ {
+ delete iWaitDialog;
+ delete iProgressDialog;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::DialogDismissedL
+//
+// Called when the user presses the cancel button.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::DialogDismissedL(TInt /*aButtonId*/)
+ {
+ iListener.DialogDismissedL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::ShowWaitDialogL
+//
+// Displays a WaitDialog.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::ShowWaitDialogL(TInt aLabelId)
+ {
+ iWaitDialog = new (ELeave) CAknWaitDialog(
+ reinterpret_cast<CEikDialog**>(&iWaitDialog));
+ iWaitDialog->PrepareLC(R_FEEDS_WAIT_NOTE_DIALOG);
+
+ UpdateLabelL(aLabelId);
+ iWaitDialog->SetCallback(this);
+ iWaitDialog->RunLD();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::ShowProgressDialogL
+//
+// Displays a ProgressDialog.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::ShowProgressDialogL(TInt aLabelId)
+ {
+ iProgressDialog = new (ELeave) CAknProgressDialog(
+ reinterpret_cast<CEikDialog**>(&iProgressDialog));
+ iProgressDialog->PrepareLC(R_FEEDS_PROGRESS_NOTE_DIALOG);
+
+ UpdateLabelL(aLabelId);
+ iProgressDialog->SetCallback(this);
+ iProgressInfo = iProgressDialog->GetProgressInfoL();
+ iProgressDialog->RunLD();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::UpdateLabelL
+//
+// Updates the dialog's label.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::UpdateLabelL(TInt aLabelId)
+ {
+ HBufC* label = NULL;
+
+ // Load the label's resource.
+ label = StringLoader::LoadLC(aLabelId);
+
+ // Set the label.
+ if (iWaitDialog != NULL)
+ {
+ iWaitDialog->SetTextL(*label);
+ }
+ else if (iProgressDialog != NULL)
+ {
+ iProgressDialog->SetTextL(*label);
+ }
+
+ CleanupStack::PopAndDestroy(label);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::SetMaxProgressL
+//
+// For progress dialogs this method set the max progress value.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::SetMaxProgressL(TInt aMaxValue)
+ {
+ if (iProgressDialog != NULL)
+ {
+ iProgressInfo->SetFinalValue(aMaxValue);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::UpdateProgressL
+//
+// For progress dialogs this method updates the progress.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::UpdateProgressL(TInt aIncrement)
+ {
+ if (iProgressDialog != NULL)
+ {
+ iProgressInfo->IncrementAndDraw(aIncrement);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsWaitDialog::Close
+//
+// Closes the dialog.
+// -----------------------------------------------------------------------------
+//
+void CFeedsWaitDialog::Close()
+ {
+ if (iWaitDialog != NULL)
+ {
+ //iWaitDialog->ProcessFinishedL();
+ delete iWaitDialog;
+ iWaitDialog = NULL;
+ }
+ else if (iProgressDialog != NULL)
+ {
+ //iProgressDialog->ProcessFinishedL();
+ delete iProgressDialog;
+ iProgressDialog = NULL;
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/32browsericons.txt Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,97 @@
+/c8,8 qgn_indi_find_goto.bmp\
+/c8,1 qgn_prop_wml_bm_tab2.bmp\
+/c8,1 qgn_prop_wml_pages_tab2.bmp\
+/c8,1 qgn_prop_wml_home.bmp\
+/c8,1 qgn_prop_wml_bm_last.bmp\
+/c8,1 qgn_prop_wml_bm.bmp\
+/c8,1 qgn_prop_wml_page.bmp\
+/c8,1 qgn_indi_wml_csd_add.bmp\
+/c8,1 qgn_indi_wml_hscsd_add.bmp\
+/c8,1 qgn_indi_wml_gprs_add.bmp\
+/c8,1 qgn_prop_folder.bmp\
+/c8,1 qgn_prop_wml_folder_link_seamless.bmp\
+/c8,1 qgn_prop_wml_folder_adap.bmp\
+/c8,1 qgn_prop_wml_bm_adap.bmp\
+/c8,1 qgn_prop_psln_active.bmp\
+/c8,8 qgn_prop_folder_tab1.bmp\
+/c8,8 qgn_menu_wml_02.bmp\
+/c8,8 qgn_menu_wml_03.bmp\
+/c8,8 qgn_menu_wml_04.bmp\
+/c8,8 qgn_menu_wml_05.bmp\
+/c8,8 qgn_menu_wml_06.bmp\
+/c8,8 qgn_menu_wml_07.bmp\
+/c8,8 qgn_menu_wml_08.bmp\
+/c8,8 qgn_menu_wml_09.bmp\
+/c8,8 qgn_menu_wml_10.bmp\
+/c8,8 qgn_menu_wml_11.bmp\
+/c8,8 qgn_menu_wml_12.bmp\
+/c8,8 qgn_menu_wml_13.bmp\
+/c8,8 qgn_menu_wml_14.bmp\
+/c8,8 qgn_menu_wml_15.bmp\
+/c8,8 qgn_menu_wml_16.bmp\
+/c8,1 qgn_indi_wait_wml_csd_1.bmp\
+/c8,1 qgn_indi_wait_wml_csd_2.bmp\
+/c8,1 qgn_indi_wait_wml_csd_3.bmp\
+/c8,1 qgn_indi_wait_wml_csd_4.bmp\
+/c8,1 qgn_indi_wait_wml_csd_5.bmp\
+/c8,1 qgn_indi_wait_wml_csd_6.bmp\
+/c8,1 qgn_indi_wait_wml_csd_7.bmp\
+/c8,1 qgn_indi_wait_wml_hscsd_2.bmp\
+/c8,1 qgn_indi_wait_wml_hscsd_3.bmp\
+/c8,1 qgn_indi_wait_wml_hscsd_4.bmp\
+/c8,1 qgn_indi_wait_wml_hscsd_5.bmp\
+/c8,1 qgn_indi_wait_wml_hscsd_6.bmp\
+/c8,1 qgn_indi_wait_wml_gprs_2.bmp\
+/c8,1 qgn_indi_wait_wml_gprs_3.bmp\
+/c8,1 qgn_indi_wait_wml_gprs_4.bmp\
+/c8,1 qgn_indi_wait_wml_gprs_5.bmp\
+/c8,1 qgn_indi_wait_wml_gprs_6.bmp\
+/c8,8 qgn_menu_wml_lst.bmp\
+/c8,1 qgn_prop_file_rss.bmp\
+/c8,1 qgn_prop_file_rss_new.bmp\
+/c8,1 qgn_prop_folder_rss.bmp\
+/c8,1 qgn_prop_file_rss_unread.bmp\
+/c8,1 qgn_prop_file_rss_read.bmp\
+/c8,1 qgn_indi_button_decrease.bmp\
+/c8,1 qgn_indi_browser_tb_go.bmp\
+/c8,1 qgn_indi_browser_tb_home.bmp\
+/c8,8 qgn_indi_browser_tb_help.svg\
+/c8,8 qgn_indi_browser_tb_switch_win.svg\
+/c8,8 qgn_indi_browser_tb_save_page.svg\
+/c8,8 qgn_indi_browser_tb_view_images.svg\
+/c8,8 qgn_indi_browser_tb_view_pages.svg\
+/c8,8 qgn_indi_browser_tb_bm.svg\
+/c8,8 qgn_indi_browser_tb_rotate.svg\
+/c8,8 qgn_indi_browser_tb_settings.svg\
+/c8,8 qgn_indi_browser_tb_zoom_out.svg\
+/c8,8 qgn_indi_browser_tb_zoom_in.svg\
+/c8,8 qgn_indi_browser_tb_find_kw.svg\
+/c8,8 qgn_indi_browser_tb_save_bm.svg\
+/c8,8 qgn_indi_browser_tb_goto.svg\
+/c8,8 qgn_indi_browser_tb_tb.svg\
+/c8,8 qgn_indi_browser_tb_key_map.svg\
+/c8,8 qgn_indi_browser_tb_page.svg\
+/c8,8 qgn_indi_browser_tb_reload.svg\
+/c8,8 qgn_indi_browser_tb_find.svg\
+/c8,8 qgn_indi_browser_tb_rss.svg\
+/c8,8 qgn_indi_browser_tb_back.svg\
+/c8,8 qgn_indi_browser_tb_forward.svg\
+/c8,8 qgn_indi_browser_feeds_tb_back_to_web.svg\
+/c8,8 qgn_indi_browser_feeds_tb_next.svg\
+/c8,8 qgn_indi_browser_feeds_tb_open_detail.svg\
+/c8,8 qgn_indi_browser_feeds_tb_open_full.svg\
+/c8,8 qgn_indi_browser_feeds_tb_open_topic.svg\
+/c8,8 qgn_indi_browser_feeds_tb_previous.svg\
+/c8,8 qgn_indi_browser_feeds_tb_update.svg\
+/c8,8 qgn_indi_browser_feeds_tb_update_all.svg\
+/c8,8 qgn_indi_browser_tb_find_kw_next.svg\
+/c8,8 qgn_indi_browser_tb_find_kw_prev.svg\
+/c8,8 qgn_indi_browser_tb_feeds.svg\
+/c8,8 qgn_indi_browser_bm_tb_new.svg\
+/c8,8 qgn_indi_browser_tb_delete.svg\
+/c8,8 qgn_indi_button_exit_fs.svg\
+/c8,8 qgn_indi_browser_tb_history_back.svg\
+/c8,8 qgn_indi_browser_tb_history_fw.svg\
+/c8,8 qgn_prop_folder_rss_error.svg\
+/c8,8 qgn_prop_file_rss_error.svg
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/72browsericons.txt Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,101 @@
+-c8,8 qgn_indi_find_goto
+-c8,1 qgn_prop_wml_bm_tab2
+-c8,1 qgn_prop_wml_pages_tab2
+-c8,1 qgn_prop_wml_home
+-c8,1 qgn_prop_wml_bm_last
+-c8,1 qgn_prop_wml_bm
+-c8,1 qgn_prop_wml_page
+-c8,1 qgn_indi_wml_csd_add
+-c8,1 qgn_indi_wml_hscsd_add
+-c8,1 qgn_indi_wml_gprs_add
+-c8,1 qgn_prop_folder
+-c8,1 qgn_prop_wml_folder_link_seamless
+-c8,1 qgn_prop_wml_folder_adap
+-c8,1 qgn_prop_wml_bm_adap
+-c8,1 qgn_prop_psln_active
+-c8,8 qgn_prop_folder_tab1
+-c8,8 qgn_menu_wml_02
+-c8,8 qgn_menu_wml_03
+-c8,8 qgn_menu_wml_04
+-c8,8 qgn_menu_wml_05
+-c8,8 qgn_menu_wml_06
+-c8,8 qgn_menu_wml_07
+-c8,8 qgn_menu_wml_08
+-c8,8 qgn_menu_wml_09
+-c8,8 qgn_menu_wml_10
+-c8,8 qgn_menu_wml_11
+-c8,8 qgn_menu_wml_12
+-c8,8 qgn_menu_wml_13
+-c8,8 qgn_menu_wml_14
+-c8,8 qgn_menu_wml_15
+-c8,8 qgn_menu_wml_16
+-c8,1 qgn_indi_wait_wml_csd_1
+-c8,1 qgn_indi_wait_wml_csd_2
+-c8,1 qgn_indi_wait_wml_csd_3
+-c8,1 qgn_indi_wait_wml_csd_4
+-c8,1 qgn_indi_wait_wml_csd_5
+-c8,1 qgn_indi_wait_wml_csd_6
+-c8,1 qgn_indi_wait_wml_csd_7
+-c8,1 qgn_indi_wait_wml_hscsd_2
+-c8,1 qgn_indi_wait_wml_hscsd_3
+-c8,1 qgn_indi_wait_wml_hscsd_4
+-c8,1 qgn_indi_wait_wml_hscsd_5
+-c8,1 qgn_indi_wait_wml_hscsd_6
+-c8,1 qgn_indi_wait_wml_gprs_2
+-c8,1 qgn_indi_wait_wml_gprs_3
+-c8,1 qgn_indi_wait_wml_gprs_4
+-c8,1 qgn_indi_wait_wml_gprs_5
+-c8,1 qgn_indi_wait_wml_gprs_6
+-c8,8 qgn_menu_wml_lst
+-c8,1 qgn_prop_file_rss
+-c8,1 qgn_prop_file_rss_new
+-c8,1 qgn_prop_folder_rss
+-c8,1 qgn_prop_file_rss_unread
+-c8,1 qgn_prop_file_rss_read
+-c8,1 qgn_indi_button_decrease
+-c8,1 qgn_indi_browser_tb_go
+-c8,1 qgn_indi_browser_tb_home
+-c8,8 qgn_indi_browser_tb_help
+-c8,8 qgn_indi_browser_tb_switch_win
+-c8,8 qgn_indi_browser_tb_save_page
+-c8,8 qgn_indi_browser_tb_view_images
+-c8,8 qgn_indi_browser_tb_view_pages
+-c8,8 qgn_indi_browser_tb_bm
+-c8,8 qgn_indi_browser_tb_rotate
+-c8,8 qgn_indi_browser_tb_settings
+-c8,8 qgn_indi_browser_tb_zoom_out
+-c8,8 qgn_indi_browser_tb_zoom_in
+-c8,8 qgn_indi_browser_tb_find_kw
+-c8,8 qgn_indi_browser_tb_save_bm
+-c8,8 qgn_indi_browser_tb_goto
+-c8,8 qgn_indi_browser_tb_tb
+-c8,8 qgn_indi_browser_tb_key_map
+-c8,8 qgn_indi_browser_tb_page
+-c8,8 qgn_indi_browser_tb_reload
+-c8,8 qgn_indi_browser_tb_find
+-c8,8 qgn_indi_browser_tb_rss
+-c8,8 qgn_indi_browser_tb_back
+-c8,8 qgn_indi_browser_tb_forward
+-c8,8 qgn_indi_browser_feeds_tb_back_to_web
+-c8,8 qgn_indi_browser_feeds_tb_next
+-c8,8 qgn_indi_browser_feeds_tb_open_detail
+-c8,8 qgn_indi_browser_feeds_tb_open_full
+-c8,8 qgn_indi_browser_feeds_tb_open_topic
+-c8,8 qgn_indi_browser_feeds_tb_previous
+-c8,8 qgn_indi_browser_feeds_tb_update
+-c8,8 qgn_indi_browser_feeds_tb_update_all
+-c8,8 qgn_indi_browser_tb_find_kw_next
+-c8,8 qgn_indi_browser_tb_find_kw_prev
+-c8,8 qgn_indi_browser_tb_feeds
+-c8,8 qgn_indi_browser_bm_tb_new
+-c8,8 qgn_indi_browser_tb_delete
+-c8,8 qgn_indi_button_exit_fs
+-c8,8 qgn_indi_browser_tb_history_back
+-c8,8 qgn_indi_browser_tb_history_fw
+-c8,8 qgn_prop_folder_rss_error
+-c8,8 qgn_prop_file_rss_error
+-c8,8 qgn_indi_browser_tb_send_url
+-c8,8 qgn_indi_browser_tb_goto_and_search.svg
+-c8,8 qgn_prop_browser_info_small.svg
+-c8,8 qgn_indi_browser_tb_exit.svg
+-c8,8 qgn_indi_browser_tb_downloads.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/BrowserCommon.mmpi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGETTYPE exe
+
+EPOCSTACKSIZE 0x14000
+
+// There is no need to set a custom heap size as a custom allocator is used so the default values of 1 KB for
+// minimum and 1 MB for maximum should be used instead. These will be used for a short time at startup for
+// the default heap, which in turn is used to create the custom allocator. no gain in functionality
+//EPOCHEAPSIZE 0x5000 0x1000000
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_APPLICATION NetworkControl -Location
+
+EpocAllowDllData
+
+MACRO AVERELL2_LOADERCLI_MISSING
+#define AVERELL2_LOADERCLI_MISSING
+
+MACRO HTTP_SECURITY_WARNINGS
+#define HTTP_SECURITY_WARNINGS
+
+SOURCEPATH .
+
+USERINCLUDE ../BrowserAppInc
+USERINCLUDE ../SrcData
+USERINCLUDE ../FavouritesInc
+USERINCLUDE ../SettingsInc
+USERINCLUDE ../launcher2/inc
+
+#ifdef __RSS_FEEDS
+USERINCLUDE ../FeedsInc
+#endif //__RSS_FEEDS
+
+APP_LAYER_SYSTEMINCLUDE
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+
+
+#include "browserlogger.inc"
+
+SOURCE ../BrowserAppSrc/BrowserAppEntryPoint.cpp
+SOURCE ../BrowserAppSrc/BrowserApplication.cpp
+SOURCE ../BrowserAppSrc/BrowserAsyncExit.cpp
+SOURCE ../BrowserAppSrc/BrowserAppUi.cpp
+SOURCE ../BrowserAppSrc/BrowserAppDocument.cpp
+SOURCE ../BrowserAppSrc/BrowserAppViewBase.cpp
+SOURCE ../BrowserAppSrc/BrowserContentView.cpp
+SOURCE ../BrowserAppSrc/BrowserContentViewContainer.cpp
+SOURCE ../BrowserAppSrc/BrowserContentViewZoomModeTimer.cpp
+SOURCE ../BrowserAppSrc/BrowserContentViewToolbar.cpp
+SOURCE ../BrowserAppSrc/BrowserDownloadUtil.cpp
+
+SOURCE ../BrowserAppSrc/BrowserDialogs.cpp
+SOURCE ../BrowserAppSrc/BrowserPreferences.cpp
+SOURCE ../BrowserAppSrc/BrowserUtil.cpp
+SOURCE ../BrowserAppSrc/BrowserDisplay.cpp
+SOURCE ../BrowserAppSrc/BrowserCommsModel.cpp
+SOURCE ../BrowserAppSrc/BrowserGotoPane.cpp
+SOURCE ../BrowserAppSrc/BrowserProgressIndicator.cpp
+SOURCE ../BrowserAppSrc/BrowserBmOTABinSender.cpp
+SOURCE ../BrowserAppSrc/BrowserDownloadIndicatorTimer.cpp
+
+SOURCE ../BrowserAppSrc/BrowserAppServer.cpp
+SOURCE ../BrowserAppSrc/BrowserLauncherService.cpp
+
+SOURCE ../BrowserAppSrc/BrowserWindow.cpp
+SOURCE ../BrowserAppSrc/BrowserWindowManager.cpp
+
+SOURCE ../BrowserAppSrc/BrowserShortcutKeyMap.cpp
+
+SOURCE ../BrowserAppSrc/WlanObserver.cpp
+
+// Favourites View (common parts of Bookmarks View)
+SOURCE ../FavouritesSrc/BrowserFavouritesView.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesContainer.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesModel.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesListbox.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesListboxState.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesListboxModel.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesFolderSelector.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesListboxView.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesListboxItemDrawer.cpp
+SOURCE ../FavouritesSrc/CommandVisibility.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesListboxIconHandler.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesFolderListboxIconHandler.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesIncrementalDelete.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesIncrementalMove.cpp
+SOURCE ../FavouritesSrc/BrowserFavouritesIncrementalOp.cpp
+
+SOURCE ../FavouritesSrc/BrowserFaviconScaler.cpp
+SOURCE ../FavouritesSrc/BrowserFaviconHandler.cpp
+
+// Bookmarks View
+SOURCE ../FavouritesSrc/BrowserBookmarksView.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksContainer.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksModel.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksEditDialog.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksGotoPane.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksEditFormApModel.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksListboxIconHandler.cpp
+SOURCE ../FavouritesSrc/BrowserBookmarksOrder.cpp
+
+// Settings View
+SOURCE ../SettingsSrc/BrowserSettingsDlg.cpp
+SOURCE ../SettingsSrc/SettingsContainer.cpp
+SOURCE ../SettingsSrc/SettingsView.cpp
+
+SOURCE ../BrowserAppSrc/BrowserCommandLineParser.cpp
+
+SOURCE ../BrowserAppSrc/SessionAndSecurity.cpp
+
+//adaptive popup
+SOURCE ../FavouritesSrc/BrowserAdaptiveListPopup.cpp
+
+SOURCE ../BrowserAppSrc/BrowserLoadObserver.cpp
+SOURCE ../BrowserAppSrc/BrowserSpecialLoadObserver.cpp
+SOURCE ../BrowserAppSrc/BrowserSoftkeysObserver.cpp
+
+// Multiple Windows Support
+SOURCE ../BrowserAppSrc/BrowserDialogsProviderProxy.cpp
+SOURCE ../BrowserAppSrc/BrowserDialogsProviderBlocker.cpp
+SOURCE ../BrowserAppSrc/BrowserWindowFocusNotifier.cpp
+SOURCE ../BrowserAppSrc/BrowserPopupEngine.cpp
+
+// PushMtm Support
+SOURCE ../BrowserAppSrc/BrowserPushMtmObserver.cpp
+
+SOURCE ../BrowserAppSrc/Logger.cpp
+
+LIBRARY euser.lib apparc.lib cone.lib eikcore.lib egul.lib
+LIBRARY eikcoctl.lib avkon.lib eikdlg.lib
+LIBRARY eikctl.lib fbscli.lib bafl.lib
+LIBRARY apgrfx.lib
+LIBRARY CommonEngine.lib
+LIBRARY CommonUI.LIB
+LIBRARY apengine.lib
+LIBRARY favouritesengine.lib
+LIBRARY SYSUTIL.LIB
+LIBRARY ConnectionManager.lib
+LIBRARY APSETTINGSHANDLERUI.LIB
+LIBRARY FEPBASE.lib
+
+LIBRARY efsrv.lib
+LIBRARY sendui.lib
+LIBRARY esock.lib
+LIBRARY etext.lib
+
+
+LIBRARY Form.lib
+LIBRARY inetprotutil.lib
+LIBRARY AknSkins.lib // Skins support
+LIBRARY featmgr.lib // feature mannger support
+LIBRARY charconv.lib
+LIBRARY recenturlstore.lib
+LIBRARY cookiemanager.lib
+LIBRARY estor.lib
+LIBRARY CdlEngine.lib
+LIBRARY BrowserDialogsProvider.lib
+LIBRARY ecom.lib // for schemeHandler
+LIBRARY ws32.lib // window ordinalposition
+#if defined( WINS )
+LIBRARY commdb.lib
+#endif
+LIBRARY apmime.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#if defined( I__BROWSER_LOG_ENABLED) || defined (I__BROWSER_PERF_LOG_ENABLED )
+LIBRARY flogger.lib
+#endif
+
+LIBRARY Centralrepository.lib
+LIBRARY BrowserLauncher.lib
+LIBRARY ServiceHandler.lib
+LIBRARY AknLayout2.lib
+LIBRARY BitmapTransforms.lib
+LIBRARY gdi.lib
+LIBRARY bitgdi.lib
+LIBRARY aknicon.lib
+LIBRARY memman.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/BrowserLogger.inc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* This file enables or disables the logger
+* functionality in Browser Application.
+* File included into mmp files.
+*/
+
+// define this macro to enable browser log
+// #define __BROWSER_LOG_ENABLE
+
+// define this macro to enable browser performance log
+//#define __BROWSER_PERF_LOG_ENABLE
+
+
+// debug mode always activates log
+#if defined( __BROWSER_LOG_ENABLE ) || defined( _DEBUG )
+ MACRO I__BROWSER_LOG_ENABLED
+ #define I__BROWSER_LOG_ENABLED
+#endif
+
+#if defined( __BROWSER_PERF_LOG_ENABLE )
+ MACRO I__BROWSER_PERF_LOG_ENABLED
+ #define I__BROWSER_PERF_LOG_ENABLED
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/BrowserNG.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Build mmp file
+*
+*
+*/
+
+#include <data_caging_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET BrowserNG.exe
+UID 0x100039CE 0x10008D39
+
+// -----------
+#include "BrowserCommon.mmpi"
+
+SOURCE ../BrowserAppSrc/BrowserWindowSelectionContainer.cpp
+SOURCE ../BrowserAppSrc/BrowserWindowSelectionView.cpp
+SOURCE ../BrowserAppSrc/BrowserInitialContainer.cpp
+SOURCE ../BrowserAppSrc/BrowserInitialView.cpp
+#ifdef __RSS_FEEDS
+ // Utils from FeedsServer
+ SOURCE ../FeedsSrc/FeedsWaitDialog.cpp
+ SOURCE ../FeedsSrc/FeedsClientUtilities.cpp
+ SOURCE ../FeedsSrc/FeedsFeedContainer.cpp
+ SOURCE ../FeedsSrc/FeedsFeedView.cpp
+ SOURCE ../FeedsSrc/FeedsFolderContainer.cpp
+ SOURCE ../FeedsSrc/FeedsFolderView.cpp
+ SOURCE ../FeedsSrc/FeedsTopicContainer.cpp
+ SOURCE ../FeedsSrc/FeedsTopicView.cpp
+ SOURCE ../FeedsSrc/FeedsEditFolderDialog.cpp
+ SOURCE ../FeedsSrc/FeedsEditFeedDialog.cpp
+ SOURCE ../FeedsSrc/FeedsFileSearchAgent.cpp
+#endif
+
+START RESOURCE ../SrcData/BrowserNG.rss
+DEPENDS avkon.rsg
+TARGETPATH APP_RESOURCE_DIR
+HEADER
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+END
+
+START RESOURCE ../SrcData/BrowserNG_reg.rss
+DEPENDS browserng.rsg
+DEPENDS avkon.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
+#ifdef __RSS_FEEDS
+ LIBRARY FeedsServerApi.lib
+#endif // __RSS_FEEDS
+
+LIBRARY cmmanager.lib
+LIBRARY browserengine.lib
+LIBRARY edbms.lib
+LIBRARY hal.lib
+
+
+#ifdef BRDO_APP_GALLERY_SUPPORTED_FF
+LIBRARY MGXMediaFileAPI.lib
+#endif
+
+LIBRARY oommonitor.lib
+#ifdef RD_UI_TRANSITION_EFFECTS_LIST
+LIBRARY aknlistloadertfx.lib
+#endif //RD_UI_TRANSITION_EFFECTS_LIST
+LIBRARY aknpictograph.lib
+#ifdef RD_TACTILE_FEEDBACK
+LIBRARY touchfeedback.lib
+#endif // RD_TACTILE_FEEDBACK
+LIBRARY AknLayout2Scalable.lib
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+LIBRARY iaupdateapi.lib
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Build information file
+*
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+// Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+#ifdef __S60_32__
+../rom/browser_stub_32.sis /epoc32/release/armv5/urel/browser_stub.sis
+../data/qgn_indi_browser_bm_tb_new.svg /epoc32/s60/icons/qgn_indi_browser_bm_tb_new.svg
+../data/qgn_indi_browser_feeds_tb_back_to_web.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_back_to_web.svg
+../data/qgn_indi_browser_feeds_tb_next.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_next.svg
+../data/qgn_indi_browser_feeds_tb_open_detail.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_open_detail.svg
+../data/qgn_indi_browser_feeds_tb_open_full.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_open_full.svg
+../data/qgn_indi_browser_feeds_tb_open_topic.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_open_topic.svg
+../data/qgn_indi_browser_feeds_tb_previous.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_previous.svg
+../data/qgn_indi_browser_feeds_tb_update.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_update.svg
+../data/qgn_indi_browser_feeds_tb_update_all.svg /epoc32/s60/icons/qgn_indi_browser_feeds_tb_update_all.svg
+../data/qgn_indi_browser_tb_delete.svg /epoc32/s60/icons/qgn_indi_browser_tb_delete.svg
+../data/qgn_indi_browser_tb_find_kw_next.svg /epoc32/s60/icons/qgn_indi_browser_tb_find_kw_next.svg
+../data/qgn_indi_browser_tb_find_kw_prev.svg /epoc32/s60/icons/qgn_indi_browser_tb_find_kw_prev.svg
+../data/qgn_indi_browser_tb_history_back.svg /epoc32/s60/icons/qgn_indi_browser_tb_history_back.svg
+../data/qgn_indi_browser_tb_history_fw.svg /epoc32/s60/icons/qgn_indi_browser_tb_history_fw.svg
+../data/qgn_indi_browser_tb_view_images.svg /epoc32/s60/icons/qgn_indi_browser_tb_view_images.svg
+../data/qgn_indi_browser_tb_view_pages.svg /epoc32/s60/icons/qgn_indi_browser_tb_view_pages.svg
+../data/qgn_indi_button_exit_fs.svg /epoc32/s60/icons/qgn_indi_button_exit_fs.svg
+../data/qgn_prop_file_rss_error.svg /epoc32/s60/icons/qgn_prop_file_rss_error.svg
+../data/qgn_prop_folder_rss_error.svg /epoc32/s60/icons/qgn_prop_folder_rss_error.svg
+
+../data/A_H/qgn_indi_browser_tb_back.bmp /epoc32/s60/icons/A_H/qgn_indi_browser_tb_back.bmp
+../data/A_H/qgn_indi_browser_tb_back_mask_soft.bmp /epoc32/s60/icons/A_H/qgn_indi_browser_tb_back_mask_soft.bmp
+../data/A_H/qgn_indi_browser_tb_rss.bmp /epoc32/s60/icons/A_H/qgn_indi_browser_tb_rss.bmp
+../data/A_H/qgn_indi_browser_tb_rss_mask_soft.bmp /epoc32/s60/icons/A_H/qgn_indi_browser_tb_rss_mask_soft.bmp
+../data/A_H/qgn_prop_folder_rss.svg /epoc32/s60/icons/A_H/qgn_prop_folder_rss.svg
+../data/A_H/qgn_prop_folder_rss_error.svg /epoc32/s60/icons/A_H/qgn_prop_folder_rss_error.svg
+#else
+../rom/browser_stub.sis /epoc32/release/armv5/urel/browser_stub.sis
+#endif
+../SrcData/feeds_view_template.html /epoc32/winscw/c/feeds_view_template.html
+../SrcData/feeds_view_template.html /epoc32/data/c/feeds_view_template.html
+
+../SrcData/backup_registration.xml /epoc32/data/z/private/10008d39/backup_registration.xml
+../SrcData/backup_registration.xml /epoc32/release/winscw/udeb/z/private/10008d39/backup_registration.xml
+../SrcData/backup_registration.xml /epoc32/release/winscw/urel/z/private/10008d39/backup_registration.xml
+../loc/browserhp.loc APP_LAYER_LOC_EXPORT_PATH(browserhp.loc)
+../loc/feeds.loc APP_LAYER_LOC_EXPORT_PATH(feeds.loc)
+../loc/wmlbrowser.loc APP_LAYER_LOC_EXPORT_PATH(wmlbrowser.loc)
+
+../Rom/BrowserLauncher.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserLauncher.iby)
+../Rom/BrowserUi.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserUi.iby)
+../Rom/BrowserResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(BrowserResources.iby)
+
+// factory browser bookmarks confml file
+../conf/BrowserBookmarks.confml APP_LAYER_CONFML(BrowserBookmarks.confml)
+// genconfml file for processing of bookmarks confml file
+../conf/BookmarkItems.gcfml APP_LAYER_GCFML(BookmarkItems.gcfml)
+// default feeds confml file
+../conf/Feeds.confml APP_LAYER_CONFML(Feeds.confml)
+// genconfml file for processing of Feeds.confml into OPML file for default feeds
+../conf/Feeds_OPML.gcfml APP_LAYER_GCFML(Feeds_OPML.gcfml)
+
+../conf/browserui.confml APP_LAYER_CONFML(browserui.confml)
+../conf/browserui_101F861B.crml APP_LAYER_CRML(browserui_101F861B.crml)
+../conf/browserui_10008D39.crml APP_LAYER_CRML(browserui_10008D39.crml)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+gnumakefile browsericonsdc.mk
+#ifdef __SCALABLE_ICONS
+ gnumakefile browserngaifsvgiconsdc.mk
+#else // __SCALABLE_ICONS
+ gnumakefile browseraificonsdc.mk
+#endif // __SCALABLE_ICONS
+
+../launcher2/group/Browserlauncher.mmp
+BrowserNG.mmp
+
+#else
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE browser.mif
+OPTION HEADERFILE browser.mbg
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+OPTION SOURCEFILE 72browsericons.txt
+#else
+OPTION SOURCEFILE browsericons.txt
+#endif
+END
+START EXTENSION s60/mifconv
+OPTION TARGETFILE browserng_aif.mif
+OPTION SOURCES -c8,8 qgn_menu_browserng
+END
+
+PRJ_MMPFILES
+
+../launcher2/group/Browserlauncher.mmp
+BrowserNG.mmp
+
+#endif
+
+PRJ_TESTMMPFILES
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/browseraificonsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,68 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\browserng_aif.mbm
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_wml_lst.bmp \
+ /c8,8 qgn_menu_wml_cxt.bmp
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/browseraifsvgiconsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\browser_aif.mif
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_wml.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/browsericons.txt Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,99 @@
+-c8,8 qgn_indi_find_goto
+-c8,1 qgn_prop_wml_bm_tab2
+-c8,1 qgn_prop_wml_pages_tab2
+-c8,1 qgn_prop_wml_home
+-c8,1 qgn_prop_wml_bm_last
+-c8,1 qgn_prop_wml_bm
+-c8,1 qgn_prop_wml_page
+-c8,1 qgn_indi_wml_csd_add
+-c8,1 qgn_indi_wml_hscsd_add
+-c8,1 qgn_indi_wml_gprs_add
+-c8,1 qgn_prop_folder
+-c8,1 qgn_prop_wml_folder_link_seamless
+-c8,1 qgn_prop_wml_folder_adap
+-c8,1 qgn_prop_wml_bm_adap
+-c8,1 qgn_prop_psln_active
+-c8,8 qgn_prop_folder_tab1
+-c8,8 qgn_menu_wml_02
+-c8,8 qgn_menu_wml_03
+-c8,8 qgn_menu_wml_04
+-c8,8 qgn_menu_wml_05
+-c8,8 qgn_menu_wml_06
+-c8,8 qgn_menu_wml_07
+-c8,8 qgn_menu_wml_08
+-c8,8 qgn_menu_wml_09
+-c8,8 qgn_menu_wml_10
+-c8,8 qgn_menu_wml_11
+-c8,8 qgn_menu_wml_12
+-c8,8 qgn_menu_wml_13
+-c8,8 qgn_menu_wml_14
+-c8,8 qgn_menu_wml_15
+-c8,8 qgn_menu_wml_16
+-c8,1 qgn_indi_wait_wml_csd_1
+-c8,1 qgn_indi_wait_wml_csd_2
+-c8,1 qgn_indi_wait_wml_csd_3
+-c8,1 qgn_indi_wait_wml_csd_4
+-c8,1 qgn_indi_wait_wml_csd_5
+-c8,1 qgn_indi_wait_wml_csd_6
+-c8,1 qgn_indi_wait_wml_csd_7
+-c8,1 qgn_indi_wait_wml_hscsd_2
+-c8,1 qgn_indi_wait_wml_hscsd_3
+-c8,1 qgn_indi_wait_wml_hscsd_4
+-c8,1 qgn_indi_wait_wml_hscsd_5
+-c8,1 qgn_indi_wait_wml_hscsd_6
+-c8,1 qgn_indi_wait_wml_gprs_2
+-c8,1 qgn_indi_wait_wml_gprs_3
+-c8,1 qgn_indi_wait_wml_gprs_4
+-c8,1 qgn_indi_wait_wml_gprs_5
+-c8,1 qgn_indi_wait_wml_gprs_6
+-c8,8 qgn_menu_wml_lst
+-c8,1 qgn_prop_file_rss
+-c8,1 qgn_prop_file_rss_new
+-c8,1 qgn_prop_folder_rss
+-c8,1 qgn_prop_file_rss_unread
+-c8,1 qgn_prop_file_rss_read
+-c8,1 qgn_indi_button_decrease
+-c8,1 qgn_indi_browser_tb_go
+-c8,1 qgn_indi_browser_tb_home
+-c8,8 qgn_indi_browser_tb_help
+-c8,8 qgn_indi_browser_tb_switch_win
+-c8,8 qgn_indi_browser_tb_save_page
+-c8,8 qgn_indi_browser_tb_view_images
+-c8,8 qgn_indi_browser_tb_view_pages
+-c8,8 qgn_indi_browser_tb_bm
+-c8,8 qgn_indi_browser_tb_rotate
+-c8,8 qgn_indi_browser_tb_settings
+-c8,8 qgn_indi_browser_tb_zoom_out
+-c8,8 qgn_indi_browser_tb_zoom_in
+-c8,8 qgn_indi_browser_tb_find_kw
+-c8,8 qgn_indi_browser_tb_save_bm
+-c8,8 qgn_indi_browser_tb_goto
+-c8,8 qgn_indi_browser_tb_tb
+-c8,8 qgn_indi_browser_tb_key_map
+-c8,8 qgn_indi_browser_tb_page
+-c8,8 qgn_indi_browser_tb_reload
+-c8,8 qgn_indi_browser_tb_find
+-c8,8 qgn_indi_browser_tb_rss
+-c8,8 qgn_indi_browser_tb_back
+-c8,8 qgn_indi_browser_tb_forward
+-c8,8 qgn_indi_browser_feeds_tb_back_to_web
+-c8,8 qgn_indi_browser_feeds_tb_next
+-c8,8 qgn_indi_browser_feeds_tb_open_detail
+-c8,8 qgn_indi_browser_feeds_tb_open_full
+-c8,8 qgn_indi_browser_feeds_tb_open_topic
+-c8,8 qgn_indi_browser_feeds_tb_previous
+-c8,8 qgn_indi_browser_feeds_tb_update
+-c8,8 qgn_indi_browser_feeds_tb_update_all
+-c8,8 qgn_indi_browser_tb_find_kw_next
+-c8,8 qgn_indi_browser_tb_find_kw_prev
+-c8,8 qgn_indi_browser_tb_feeds
+-c8,8 qgn_indi_browser_bm_tb_new
+-c8,8 qgn_indi_browser_tb_delete
+-c8,8 qgn_indi_button_exit_fs
+-c8,8 qgn_indi_browser_tb_history_back
+-c8,8 qgn_indi_browser_tb_history_fw
+-c8,8 qgn_prop_folder_rss_error
+-c8,8 qgn_prop_file_rss_error
+-c8,8 qgn_indi_browser_tb_send_url
+-c8,8 qgn_indi_browser_tb_goto_and_search.svg
+-c8,8 qgn_prop_browser_info_small.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/browsericonsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,70 @@
+#
+# Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\browser.mif
+HEADERFILENAME=$(HEADERDIR)\browser.mbg
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /f32browsericons.txt
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(HEADERFILENAME)&& \
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Group/browserngaifsvgiconsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\browserng_aif.mif
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_browserng.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/BWinsCw/BROWSERLAUNCHERU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,14 @@
+EXPORTS
+ ??0CLauncherServerBase@@QAE@XZ @ 1 NONAME ; CLauncherServerBase::CLauncherServerBase(void)
+ ??1CBrowserLauncher@@UAE@XZ @ 2 NONAME ; CBrowserLauncher::~CBrowserLauncher(void)
+ ?Cancel@CBrowserLauncher@@QAEXXZ @ 3 NONAME ; void CBrowserLauncher::Cancel(void)
+ ?LaunchBrowserEmbeddedL@CBrowserLauncher@@QAEXABVTDesC16@@PAVMDownloadedContentHandler@@PAVMAknServerAppExitObserver@@PAVTBrowserOverriddenSettings@@@Z @ 4 NONAME ; void CBrowserLauncher::LaunchBrowserEmbeddedL(class TDesC16 const &, class MDownloadedContentHandler *, class MAknServerAppExitObserver *, class TBrowserOverriddenSettings *)
+ ?LaunchBrowserEmbeddedL@CBrowserLauncher@@QAEXHPAVMDownloadedContentHandler@@PAVMAknServerAppExitObserver@@PAVTBrowserOverriddenSettings@@@Z @ 5 NONAME ; void CBrowserLauncher::LaunchBrowserEmbeddedL(int, class MDownloadedContentHandler *, class MAknServerAppExitObserver *, class TBrowserOverriddenSettings *)
+ ?LaunchBrowserSyncEmbeddedL@CBrowserLauncher@@QAEHABVTDesC16@@PAVMDownloadedContentHandler@@PAVTBrowserOverriddenSettings@@@Z @ 6 NONAME ; int CBrowserLauncher::LaunchBrowserSyncEmbeddedL(class TDesC16 const &, class MDownloadedContentHandler *, class TBrowserOverriddenSettings *)
+ ?LaunchBrowserSyncEmbeddedL@CBrowserLauncher@@QAEHHPAVMDownloadedContentHandler@@PAVTBrowserOverriddenSettings@@@Z @ 7 NONAME ; int CBrowserLauncher::LaunchBrowserSyncEmbeddedL(int, class MDownloadedContentHandler *, class TBrowserOverriddenSettings *)
+ ?NewL@CBrowserLauncher@@SAPAV1@H@Z @ 8 NONAME ; class CBrowserLauncher * CBrowserLauncher::NewL(int)
+ ?NewL@CBrowserLauncher@@SAPAV1@XZ @ 9 NONAME ; class CBrowserLauncher * CBrowserLauncher::NewL(void)
+ ?NewLC@CBrowserLauncher@@SAPAV1@H@Z @ 10 NONAME ; class CBrowserLauncher * CBrowserLauncher::NewLC(int)
+ ?NewLC@CBrowserLauncher@@SAPAV1@XZ @ 11 NONAME ; class CBrowserLauncher * CBrowserLauncher::NewLC(void)
+ ?ServiceL@CLauncherServerBase@@UAEXABVRMessage2@@@Z @ 12 NONAME ; void CLauncherServerBase::ServiceL(class RMessage2 const &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/EABI/BROWSERLAUNCHERU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+ _ZN16CBrowserLauncher22LaunchBrowserEmbeddedLERK7TDesC16P25MDownloadedContentHandlerP25MAknServerAppExitObserverP26TBrowserOverriddenSettings @ 1 NONAME
+ _ZN16CBrowserLauncher22LaunchBrowserEmbeddedLEiP25MDownloadedContentHandlerP25MAknServerAppExitObserverP26TBrowserOverriddenSettings @ 2 NONAME
+ _ZN16CBrowserLauncher26LaunchBrowserSyncEmbeddedLERK7TDesC16P25MDownloadedContentHandlerP26TBrowserOverriddenSettings @ 3 NONAME
+ _ZN16CBrowserLauncher26LaunchBrowserSyncEmbeddedLEiP25MDownloadedContentHandlerP26TBrowserOverriddenSettings @ 4 NONAME
+ _ZN16CBrowserLauncher4NewLEi @ 5 NONAME
+ _ZN16CBrowserLauncher4NewLEv @ 6 NONAME
+ _ZN16CBrowserLauncher5NewLCEi @ 7 NONAME
+ _ZN16CBrowserLauncher5NewLCEv @ 8 NONAME
+ _ZN16CBrowserLauncher6CancelEv @ 9 NONAME
+ _ZN16CBrowserLauncherD0Ev @ 10 NONAME
+ _ZN16CBrowserLauncherD1Ev @ 11 NONAME
+ _ZN16CBrowserLauncherD2Ev @ 12 NONAME
+ _ZN19CLauncherServerBase8ServiceLERK9RMessage2 @ 13 NONAME
+ _ZN19CLauncherServerBaseC2Ev @ 14 NONAME
+ _ZTI19CLauncherServerBase @ 15 NONAME ; #<TI>#
+ _ZTI22RLauncherClientService @ 16 NONAME ; #<TI>#
+ _ZTI23CLauncherReceiveHandler @ 17 NONAME ; #<TI>#
+ _ZTI25CBrowserLauncherExtension @ 18 NONAME ; #<TI>#
+ _ZTV19CLauncherServerBase @ 19 NONAME ; #<VT>#
+ _ZTV22RLauncherClientService @ 20 NONAME ; #<VT>#
+ _ZTV23CLauncherReceiveHandler @ 21 NONAME ; #<VT>#
+ _ZTV25CBrowserLauncherExtension @ 22 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/group/BrowserLauncher.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET BrowserLauncher.dll
+TARGETTYPE dll
+UID 0x1000008d 0x101F8559
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/BROWSERLAUNCHERU_EKA2.def
+#elif defined( WINSCW )
+ DEFFILE ../BWinsCw/BROWSERLAUNCHERU_EKA2.def
+#endif
+
+APP_LAYER_SYSTEMINCLUDE
+USERINCLUDE ../Inc
+USERINCLUDE ../../BrowserAppInc
+USERINCLUDE ../../SettingsInc
+USERINCLUDE ../../FeedsInc
+USERINCLUDE ../../SrcData
+
+#include "../../Group/BrowserLogger.inc"
+
+SOURCEPATH ../Src
+SOURCE BrowserLauncher.cpp
+SOURCE BrowserLauncherExtension.cpp
+SOURCE LauncherReceiveHandler.cpp
+SOURCE LauncherServerBase.cpp
+SOURCE LauncherClientService.cpp
+SOURCE ../../BrowserAppSrc/Logger.cpp
+
+LIBRARY euser.lib
+LIBRARY avkon.lib
+LIBRARY cone.lib
+LIBRARY favouritesengine.lib
+LIBRARY efsrv.lib
+LIBRARY APPARC.lib
+LIBRARY eikcore.lib
+LIBRARY estor.lib
+LIBRARY servicehandler.lib
+LIBRARY centralrepository.lib
+LIBRARY sysutil.lib
+
+#if defined( I__BROWSER_LOG_ENABLED )
+LIBRARY flogger.lib
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Build information file
+*
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+BrowserLauncher.mmp
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/inc/BrowserLauncherExtension.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: BrowserLauncherExtension
+*
+*/
+
+
+
+#ifndef BROWSERLAUNCHEREXTENSION_H
+#define BROWSERLAUNCHEREXTENSION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <AknServerApp.h>
+#include "LauncherClientService.h"
+
+// FORWARD DECLARATIONS
+class CBrowserLauncher;
+class CLauncherCommandAbsorbingControl;
+//class MLaunchedServerObserver;
+
+// CLASS DECLARATION
+
+/**
+* Browser Launcher extension class.
+*/
+class CBrowserLauncherExtension : public CActive,
+ public MLaunchedServerObserver
+ {
+ public: // Constructors and destructor
+
+ static CBrowserLauncherExtension* NewL( CBrowserLauncher& aLauncher );
+ virtual ~CBrowserLauncherExtension();
+
+ public: // New functions
+
+ /**
+ * Wait for the Browser to finish the asynchronous execution.
+ * This method uses CActiveSchedulerWait!
+ * @return Exit code.
+ */
+ TInt WaitBrowserToFinish();
+
+ /**
+ * Set the packed laucher data. Ownership transferred.
+ */
+ void SetPackedLauncherData( HBufC8* aBuf );
+
+ private: // Functions from CActive
+
+ virtual void DoCancel();
+ virtual void RunL();
+ virtual TInt RunError( TInt aError );
+
+ private: // From MLaunchedServerObserver
+
+ virtual void HandleServerAppExit( TInt aReason );
+ virtual void HandleReceivedDataL( TRequestStatus aStatus );
+
+ private: // Constructors
+
+ CBrowserLauncherExtension( CBrowserLauncher& aLauncher );
+ void ConstructL();
+
+ public: // Data members
+
+ CBrowserLauncher& iLauncher; ///< Reference to the Launcher.
+ MAknServerAppExitObserver* iBrowserLauncherClientExitObserver; // uses-a
+ CActiveSchedulerWait iWait;
+ TInt iExitCode;
+ MDownloadedContentHandler *iDownloadedContentHandler; // uses-a
+ // Buffer to hold the data, that the server sends.
+ // The buffer should be allocated by the client, on receiving
+ // server HandleReceivedDataL() events.
+ HBufC8* iReceiveBuffer;
+ // The size of the buffer, which the client should allocate, to
+ // create iReceiveBuffer. This value is set on handling
+ // HandleReceivedDataL() event.
+ TInt iBufferSize;
+ // The prev member packed into a ptr
+ TPckg<TInt> iBufferSizeP;
+ RLauncherClientService iLauncherClientService;
+ TFileName iDownloadedFileName;
+ HBufC8* iPackedLauncherData; // Owned.
+
+ private:
+ CLauncherCommandAbsorbingControl* iCommandAbsorber;
+ };
+
+#endif // BROWSERLAUNCHEREXTENSION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/inc/LauncherClientService.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for RLauncherClientService
+*
+*
+*/
+
+
+#ifndef __LAUNCHERCLIENTSERVICE_H
+#define __LAUNCHERCLIENTSERVICE_H
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <e32base.h>
+#include <AknServerApp.h>
+#include "LauncherServerCommands.hrh"
+
+// FORWARD DECLARATIONS
+class CLauncherReceiveHandler;
+
+// CLASS DECLARATION
+// Observer class, observes server application events.
+class MLaunchedServerObserver: public MAknServerAppExitObserver
+ {
+public:
+
+ /**
+ * Notifies the client, that implements this class, about
+ * the server sent data.
+ * @param aStatus The status of the result of the completion.
+ */
+ virtual void HandleReceivedDataL( TRequestStatus aStatus ) = 0;
+
+ };
+
+// CLASS DECLARATION
+class RLauncherClientService : public RAknAppServiceBase
+ {
+public:
+ /**
+ * Returns the ID of this service.
+ * @return The UID of the service.
+ */
+ TUid ServiceUid() const;
+
+ /**
+ * Initializes this object. Call this before using this object.
+ * @param aServerAppUid The UID of the server application.
+ * @param aServerObserver Observes the server application.
+ */
+ void InitializeL( TUid aServerAppUid, MLaunchedServerObserver& aServerObserver );
+
+ /**
+ * Starts listening to the server application, so the observer
+ * will be notified about server application events.
+ */
+ void ListenL();
+
+ /**
+ * Stops listening to the server application, so the observer
+ * will not be notified about server application events.
+ */
+ void StopListening();
+
+ /**
+ * Destroy the object and release all memory objects
+ */
+ void Close();
+
+ /**
+ * Send data to process by the server application syncronously.
+ * @param aBufferToSend The data to send.
+ * @return The completion code of the processed data.
+ */
+ TInt SendSync( TDesC8& aBufferToSend );
+
+ /**
+ * Send data to process by the server application asyncronously.
+ * @param aBufferToSend Data to send.
+ * @param aBufferSize The size of the buffer which the client should
+ * allocate, to receive the data from server,
+ * before calling SendSyncBuffer() with the
+ * allocated descriptor. aBufferSize is defined
+ * by the server.
+ */
+ void SendAsync( TDesC8& aBufferToSend,TDes8& aBufferSize );
+
+ /**
+ * Send data to process by the server application asyncronously.
+ * @param aBufferToSend Data to send.
+ * @param aBufferSize The size of the buffer which the client should
+ * allocate, to receive the data from server,
+ * before calling SendSyncBuffer() with the
+ * allocated descriptor. aBufferSize is defined
+ * by the server.
+ */
+ void SendAsync();
+
+ void SendAsync(TDes8& aBufferSize );
+ /**
+ * Send data to process by the server application syncronously.
+ * @param aReceiveBuffer Buffer, which will be filled by the
+ * server application.
+ */
+ TInt SendSyncBuffer( TDes8 &aReceiveBuffer );
+
+ TInt SendSyncBools( TBool aClientWantsToContinue, TBool aWasContentHandled );
+
+ /**
+ * Send a command to execute by the server application. Server
+ * commands can be found in ServerCommands.hrh.
+ * Possibile commands: EOpenDownloadedContent, EServerExit.
+ * @param aCommand Command to send.
+ * @return The result of the processed command data.
+ */
+ TInt SendCommand( TInt aCommand );
+
+private:
+
+ /**
+ * Cancel receiving data.
+ */
+ void CancelReceive();
+
+public:
+
+ /*
+ * Observes server application exit. Owned!
+ */
+ CApaServerAppExitMonitor* iServerExitMonitor;
+
+ friend class CLauncherReceiveHandler;
+
+private:
+
+ /*
+ * Active object that is notified when receiving data ayncronously from
+ * server application. Internal use only. Owned!
+ */
+ CLauncherReceiveHandler* iActiveHandler;
+};
+
+#endif // __LAUNCHER_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/inc/LauncherReceiveHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CBrowserAppUi
+*
+*
+*/
+
+
+#ifndef __LAUNCHERRECEIVEHANDLER_H__
+#define __LAUNCHERRECEIVEHANDLER_H__
+
+// INCLUDE FILES
+#include <e32base.h>
+#include "Launcherclientservice.h"
+
+// CLASS DECLARATION
+class CLauncherReceiveHandler : public CActive
+{
+public:
+ /**
+ * Default constructor.
+ * @param aHandler Notify events of server exit, and server asyncronous data handling.
+ * @param aSession Session of the RLauncherClientService
+ */
+ CLauncherReceiveHandler( MLaunchedServerObserver* aHandler, RLauncherClientService& aSession );
+
+ /**
+ * Destroy the object and release all memory objects.
+ */
+ ~CLauncherReceiveHandler();
+
+ /**
+ * Create a CLauncherReceiveHandler object.
+ * @param aHandler Notify events of server exit, and server asyncronous data handling.
+ * @param aSession Session of the RLauncherClientService
+ * @return A pointer to the created instance of CLauncherReceiveHandler
+ */
+ static CLauncherReceiveHandler* NewL( MLaunchedServerObserver* aHandler, RLauncherClientService& aSession );
+
+ /**
+ * Create a CLauncherReceiveHandler object
+ * @param aHandler Notify events of server exit, and server asyncronous data handling.
+ * @param aSession Session of the RLauncherClientService
+ * @return A pointer to the created instance of CLauncherReceiveHandler
+ */
+ static CLauncherReceiveHandler* NewLC( MLaunchedServerObserver* aHandler, RLauncherClientService& aSession );
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Starts listening of the server appliacion, so the client can be notified
+ * when the server application sends data.
+ */
+ void StartListen();
+
+protected: // from CActive
+ /**
+ * Cancel any outstanding requests
+ */
+ void DoCancel();
+
+ /**
+ * Respond to an event
+ */
+ void RunL();
+
+private:
+ /**
+ * Observes server application events.
+ */
+ MLaunchedServerObserver* iServerObserver; // "uses-a"
+
+ /**
+ * Reference to the current session.
+ */
+ RLauncherClientService& iSession; // "uses-a"
+};
+
+#endif // __LAUNCHERReceiveHANDLER_H__
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/inc/LauncherServerBase.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CLauncherServerBase
+*
+*
+*/
+
+
+#ifndef __LAUNCHERSERVERBASE_H__
+#define __LAUNCHERSERVERBASE_H__
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <AknServerApp.h>
+
+// FORWARD DECLARATION
+class TBrowserOverriddenSettings;
+class CBrowserAppDocument;
+class CBrowserAppUi;
+
+// CLASS DECLARATION
+class CLauncherServerBase : public CAknAppServiceBase
+{
+public:
+
+ /**
+ * Default constructor
+ */
+ IMPORT_C CLauncherServerBase();
+
+ /**
+ * Handle incoming IPC messages.
+ * @param aMessage Object which encapsulates a client request.
+ */
+ IMPORT_C void ServiceL( const RMessage2& aMessage );
+
+ /**
+ * Pointer to the Browser`s Ui.
+ */
+ CBrowserAppUi* iBrowserAppUi; // not owned
+
+private:
+
+ /**
+ * Handle syncronous messages. Parse the recieved message,
+ * and call ProcessMessageSyncL
+ * @param aMessage Object which encapsulates a client request.
+ */
+ void HandleMessageSyncL( /*const RMessage2& aMessage*/ );
+
+ /**
+ * Handle asyncronous messages. Parse the recieved message,
+ * and call ProcessMessageASyncL.
+ * @param aMessage Object which encapsulates a client request.
+ */
+ void HandleMessageASyncL( /*const RMessage2& aMessage*/ );
+
+ /**
+ *
+ * @param aMessage Object which encapsulates a client request.
+ */
+ void HandleMessageSyncBufferL( /*const RMessage2& aMessage*/ );
+
+ /**
+ *
+ * @param aMessage Object which encapsulates a client request.
+ */
+ void HandleMessageSyncBoolsL( /*const RMessage2& aMessage*/ );
+
+ /**
+ *
+ * @param aMessage Object which encapsulates a client request.
+ */
+ void HandleBrowserExit( /*const RMessage2& aMessage*/ );
+
+
+ /**
+ * Process incoming messages syncronously.
+ * @param aEmbeddingApplicationUid Embedding application`s UID
+ * @param aSettings Overridden user preferences.
+ * @param aFolderUid Uid of the folder that the Browser should open.
+ * @param aSeamlessParam
+ * @param aIsContentHandlerRegistered True if a content handler is registered
+ * @return The result of processing. ( same as SendRecieve() )
+ */
+ virtual TInt ProcessMessageSyncL( TUid aEmbeddingApplicationUid,
+ TBrowserOverriddenSettings aSettings,
+ TInt aFolderUid, TPtrC aSeamlessParam,
+ TBool aIsContentHandlerRegistered ) = 0;
+
+ /**
+ * Process incoming messages asyncronously.
+ * @param aEmbeddingApplicationUid Embedding application`s UID
+ * @param aSettings Overridden user preferences.
+ * @param aFolderUid Uid of the folder that the Browser should open.
+ * @param aSeamlessParam
+ * @param aIsContentHandlerRegistered True if a content handler is registered
+ * @param isOverridenSettings True if the client sended an overidden setting
+ */
+ virtual void ProcessMessageASyncL( TUid aEmbeddingApplicationUid,
+ TBrowserOverriddenSettings aSettings,
+ TInt aFolderUid,
+ TPtrC aSeamlessParam,
+ TBool aIsContentHandlerRegistered,
+ TBool aIsOverridenSettings ) = 0;
+
+ /**
+ * Process incoming messages asyncronously.
+ * @param aMessage Object which encapsulates a client request.
+ * @param aSettings Overridden user preferences.
+ * @param aFolderUid Uid of the folder that the Browser should open.
+ * @param aSeamlessParam
+ * @param aParam The index of the parameter, in SendRecieve() function`s
+ * parameters, which is the buffer on client side.
+ */
+ virtual TInt ProcessMessageSyncBufferL( ) = 0;
+
+ /**
+ * Process TBool parameters.
+ */
+ virtual void ProcessBoolsL( TBool aClientWantsToContinue, TBool aWasContentHandled ) = 0;
+
+ /**
+ * Process BrowserExit.
+ */
+ virtual void DoBrowserExit( ) = 0;
+
+protected:
+
+ /**
+ * Buffer which will be copied to the client`s address
+ * space on completing asyncronous requests.
+ */
+ HBufC8* iClientBuffer;
+
+ /**
+ * Pointer to the Browser`s document.
+ */
+ CBrowserAppDocument* iBrowserDocument; // not owned
+
+ /**
+ * Object which encapsulates a copy of a client request.
+ */
+ RMessage2 iMySyncMessage; // One slot for synchronous requests.
+ RMessage2 iMyAsyncMessage; // One slot for asynchronous requests.
+
+/* Capability check will come later...
+public:
+ CLauncherServerBase( TCapability aClientReqs );
+
+private:
+ CPolicyServer::TCustomResult SecurityCheckL ( const RMessage2& aMsg,
+ TInt& aAction,
+ TSecurityInfo& aMissing );
+ TCapability iClientReqs;
+*/
+};
+
+#endif // __LAUNCHERSERVERBASE_H__
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/inc/LauncherServerCommands.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* contains common definitions for menu id:s
+*
+*
+*/
+
+
+#ifndef LAUNCHERSERVERCOMMANDS_HRH
+#define LAUNCHERSERVERCOMMANDS_HRH
+
+// Commands
+enum TIpcMessageIds
+ {
+ ELauncherSendSync = RApaAppServiceBase::KServiceCmdBase,
+ ELauncherSendASync,
+ ELauncherSendASyncListen,
+ ELauncherCancelReceive,
+ ELauncherSendSyncBuffer,
+ ELauncherSendSyncBools
+ };
+
+enum TClientStatus
+ {
+ EListenAlreadyListening
+ };
+#endif
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/src/BrowserLauncher.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,563 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: BrowserLauncher
+*
+*/
+
+// INCLUDE FILES
+#include <browserlauncher.h>
+#include "BrowserLauncherExtension.h"
+#include "logger.h"
+#include "BrowserUiPrivateCRKeys.h"
+#include <browseroverriddensettings.h>
+#include "Browser.hrh"
+
+#include <favouriteslimits.h> // Context Id:s
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikenv.h>
+#include <centralrepository.h>
+#include <favouritesdb.h>
+#include <SysUtil.h>
+
+// CONSTANTS
+const TInt KBrowserAppUid = 0x10008D39;
+const TInt KBrowserSeamlessParamLength = 20;
+_LIT( KBookmarkStarterString, "1 " );
+const TInt KMinimumCDriveDiskSpace = 512 * 1024;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::CBrowserLauncher
+// -----------------------------------------------------------------------------
+//
+CBrowserLauncher::CBrowserLauncher()
+ {
+ iBrowserUid = TUid::Uid( KBrowserAppUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncher::ConstructL()
+ {
+ LOG_CREATE;
+ LOG_ENTERFN( "CBrowserLauncher::ConstructL" );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C
+CBrowserLauncher* CBrowserLauncher::NewLC()
+ {
+ LOG_ENTERFN( "CBrowserLauncher::NewLC" );
+ CBrowserLauncher* self = new(ELeave) CBrowserLauncher();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C
+CBrowserLauncher* CBrowserLauncher::NewL()
+ {
+ LOG_ENTERFN( "CBrowserLauncher::NewL" );
+ CBrowserLauncher* self = NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C
+CBrowserLauncher* CBrowserLauncher::NewLC( TInt /*aOverrideBrowserUid*/ )
+ {
+ LOG_ENTERFN( "CBrowserLauncher::NewLC(TInt aOverrideBrowserUid) IS DEPRECATED" );
+ CBrowserLauncher* self = new(ELeave) CBrowserLauncher();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C
+CBrowserLauncher* CBrowserLauncher::NewL( TInt /*aOverrideBrowserUid*/ )
+ {
+ LOG_ENTERFN( "CBrowserLauncher::NewL(TInt aOverrideBrowserUid) IS DEPRECATED" );
+ CBrowserLauncher* self = NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+EXPORT_C
+CBrowserLauncher::~CBrowserLauncher()
+ {
+ LOG_ENTERFN( "CBrowserLauncher::~CBrowserLauncher" );
+ Cancel();
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLauncher::LaunchBrowserEmbeddedL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C
+void CBrowserLauncher::LaunchBrowserEmbeddedL
+ ( const TDesC& aParams,
+ MDownloadedContentHandler* aContentHandler,
+ MAknServerAppExitObserver* aExitObserver,
+ TBrowserOverriddenSettings* aSettings )
+ {
+ LaunchBrowserEmbeddedL
+ ( aParams,
+ /*aContextId*/KErrNotFound,
+ aContentHandler,
+ aExitObserver,
+ aSettings );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLauncher::LaunchBrowserEmbeddedL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C
+void CBrowserLauncher::LaunchBrowserEmbeddedL
+ ( TInt aContextId,
+ MDownloadedContentHandler* aContentHandler,
+ MAknServerAppExitObserver* aExitObserver,
+ TBrowserOverriddenSettings* aSettings )
+ {
+ LaunchBrowserEmbeddedL
+ ( /*aParams*/KNullDesC,
+ aContextId,
+ aContentHandler,
+ aExitObserver,
+ aSettings );
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLauncher::LaunchBrowserSyncEmbeddedL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C
+TInt CBrowserLauncher::LaunchBrowserSyncEmbeddedL
+ ( const TDesC& aParams,
+ MDownloadedContentHandler* aContentHandler,
+ TBrowserOverriddenSettings* aSettings )
+ {
+ LaunchBrowserEmbeddedL
+ ( aParams,
+ /*aContextId*/KErrNotFound,
+ aContentHandler,
+ /*aExitObserver*/0,
+ aSettings );
+
+ return (iExtension->WaitBrowserToFinish());
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLauncher::LaunchBrowserSyncEmbeddedL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C
+TInt CBrowserLauncher::LaunchBrowserSyncEmbeddedL
+ ( TInt aContextId,
+ MDownloadedContentHandler* aContentHandler,
+ TBrowserOverriddenSettings* aSettings )
+ {
+ LaunchBrowserEmbeddedL
+ ( /*aParams*/KNullDesC,
+ aContextId,
+ aContentHandler,
+ /*aExitObserver*/0,
+ aSettings );
+
+ return (iExtension->WaitBrowserToFinish());
+ }
+
+// ----------------------------------------------------------------------------
+// CBrowserLauncher::Cancel
+// ----------------------------------------------------------------------------
+//
+EXPORT_C
+void CBrowserLauncher::Cancel()
+ {
+ // Terminate the Browser
+ delete iExtension;
+ iExtension = 0;
+ iFavouritesSess.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::LaunchBrowserEmbeddedL
+// If aParams is not empty, then it is used, otherwise aContextId is used.
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncher::LaunchBrowserEmbeddedL
+ ( const TDesC& aParams,
+ TInt aContextId,
+ MDownloadedContentHandler* aContentHandler,
+ MAknServerAppExitObserver* aExitObserver,
+ TBrowserOverriddenSettings* aSettings )
+ {
+ LOG_ENTERFN( "CBrowserLauncher::LaunchBrowserEmbeddedL" );
+
+ LOG_WRITE_FORMAT(" aParams: [%S]", &aParams);
+ LOG_WRITE_FORMAT(" aContextId: %d", aContextId);
+ LOG_WRITE_FORMAT(" aContentHandler: 0x%x", aContentHandler);
+ LOG_WRITE_FORMAT(" aExitObserver: 0x%x", aExitObserver);
+ LOG_WRITE_FORMAT(" aSettings: 0x%x", aSettings);
+
+ // Check for ciritical disk space if starts as embeded
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ TInt drive( EDriveC );
+ TBool isSpace( EFalse );
+ TInt err( KErrNone );
+ TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL(&fs, KMinimumCDriveDiskSpace, drive ));
+ fs.Close();
+ if (!isSpace)
+ User::Leave(KErrDiskFull);
+
+
+ TInt folderUid = 0;
+ TInt folderPreferredUid = 0;
+
+ // keep a local ptr to aSettings
+ TBrowserOverriddenSettings* aOverrideSettings = aSettings;
+
+ TUid embeddingAppUid = CEikonEnv::Static()->EikAppUi()->Application()->AppDllUid();
+ LOG_WRITE_FORMAT(" embeddingAppUid: 0x%x", embeddingAppUid);
+
+ iExtension = CBrowserLauncherExtension::NewL( *this );
+ User::LeaveIfError( iFavouritesSess.Connect() );
+
+ if ( 0 == aParams.Length() )
+ {
+ // SPECIAL folder UID handling
+ folderUid = KFavouritesNullUid;
+ TUint specialContextId = EBrowserContextIdNormal;
+
+ switch(aContextId)
+ {
+ case KFavouritesFeedsContextId:
+ // For feeds, leave uid to Root as it is here.
+ // Upon launch, browser will then switch into the Feeds view
+ // upon opening.
+ specialContextId = EBrowserContextIdFeeds;
+ folderUid = KFavouritesRootUid;
+ folderPreferredUid = KFavouritesNullUid;
+ break;
+ default:
+ break;
+ }
+
+ // If we have now just set the folderUid, then
+ // we need to tell browser of the context id if it's not done already
+ if(folderUid != KFavouritesNullUid)
+ {
+ // if we're already given override settings and the specialContextId
+ // is not already given, set it now
+ if(aOverrideSettings)
+ {
+ if(aOverrideSettings->GetBrowserSetting(EBrowserOverSettingsContextId) != EBrowserContextIdUndefined)
+ {
+ aOverrideSettings->SetBrowserSetting(EBrowserOverSettingsContextId, specialContextId);
+ }
+ }
+ else
+ {
+ aOverrideSettings = new (ELeave) TBrowserOverriddenSettings;
+ CleanupStack::PushL( aOverrideSettings );
+ aOverrideSettings->SetBrowserSetting(EBrowserOverSettingsContextId, specialContextId);
+ }
+ }
+ if(folderUid == KFavouritesNullUid)
+ {
+ // Resolve folder uid
+ folderUid = FolderByContextIdL( aContextId );
+ if ( folderUid == KFavouritesNullUid )
+ {
+ folderUid = KFavouritesRootUid;
+ }
+ folderPreferredUid = BookmarksIdByFolderIdL( folderUid );
+ }
+ }
+ LOG_WRITE_FORMAT("folderPreferredUid = 0x%x", folderPreferredUid );
+
+ // Initialize client and connect to Browser application.
+ iExtension->iLauncherClientService.InitializeL( iBrowserUid, *iExtension );
+
+ LOG_WRITE("After iLauncherClientService.InitializeL ");
+
+ // Start listening to Browser application.
+ iExtension->iLauncherClientService.ListenL( );
+ LOG_WRITE("After iLauncherClientService.ListenL ");
+
+ // Set handler of finished download.
+ iExtension->iDownloadedContentHandler = aContentHandler;
+ // Set handler of server exit.
+ iExtension->iBrowserLauncherClientExitObserver = aExitObserver;
+
+ HBufC* seamlessParam = 0;
+ if ( !aParams.Length() && folderPreferredUid && EnhancedSeamlessLinkLocalFeaturesSupportedL() )
+ {
+ seamlessParam = HBufC::NewLC( KBrowserSeamlessParamLength );
+ seamlessParam->Des().Copy( KBookmarkStarterString );
+ seamlessParam->Des().AppendNum( folderPreferredUid );
+ }
+
+ // Pack aSettings,folderUid,aParams into a descriptor, and send the
+ // data to Browser application.
+ // Note: if seamlessParam is not empty, it must be used instead of aParams!
+ HBufC8* bufferToSend = 0;
+ if ( seamlessParam )
+ {
+ // Create descriptor with seamless seamlessParam
+ bufferToSend = TLauncherPackageUtils::PackLauncherDataL( embeddingAppUid, aOverrideSettings, folderUid, *seamlessParam, aContentHandler!=0 );
+ }
+ else
+ {
+ // Create descriptor with seamless aParams
+ bufferToSend = TLauncherPackageUtils::PackLauncherDataL( embeddingAppUid, aOverrideSettings, folderUid, aParams, aContentHandler!=0 );
+ }
+ // Remember for this buffer in the Extension, because re-initialization.
+ iExtension->SetPackedLauncherData( bufferToSend );
+
+ // dbg
+ // iExtension->iLauncherClientService.SendCommand( EServerExit );
+ // iExtension->iLauncherClientService.SendSync( *bufferToSend );
+ // dbg
+
+ // Send parameters to Browser application.
+ iExtension->iLauncherClientService.SendAsync( *bufferToSend, iExtension->iBufferSizeP );
+
+ if ( seamlessParam )
+ {
+ CleanupStack::PopAndDestroy( seamlessParam ); // seamlessParam
+ }
+
+ // Cleanup overridden settings. If it was passed in as NULL, and the local
+ // version is not, it means we allocated locally for it. Cleanup
+ if(!aSettings && aOverrideSettings)
+ {
+ CleanupStack::PopAndDestroy(1); //aOverrideSettings
+ }
+ LOG_WRITE("LaunchBrowserEmbeddedL End ");
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::FolderByContextIdL
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserLauncher::FolderByContextIdL( TUint32 aContextId )
+ {
+ LOG_ENTERFN( "CBrowserLauncher::FolderByContextIdL" );
+
+ TInt folder = KFavouritesNullUid;
+ if ( aContextId != (TUint32)KFavouritesNullContextId )
+ {
+ CArrayFix<TInt>* uids = new (ELeave) CArrayFixFlat<TInt>( 1 );
+ CleanupStack::PushL( uids );
+
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open( iFavouritesSess, KBrowserBookmarks ) );
+ CleanupClosePushL<RFavouritesDb>( db );
+ User::LeaveIfError( db.GetUids( *uids, KFavouritesNullUid,
+ CFavouritesItem::EFolder, NULL, aContextId ) );
+
+ if( uids->Count() > 0 )
+ {
+ folder = uids->At( 0 );
+ }
+ CleanupStack::PopAndDestroy( 2 ); // db, uids
+ }
+
+ return folder;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::BookmarksIdByFolderIdL
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserLauncher::BookmarksIdByFolderIdL( TUint32 aFolderId )
+ {
+ TInt bookmarkId = KFavouritesNullUid;
+ if ( aFolderId != (TUint32)NULL )
+ {
+
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open( iFavouritesSess, KBrowserBookmarks ) );
+ CleanupClosePushL<RFavouritesDb>( db );
+ User::LeaveIfError( db.PreferredUid( aFolderId , bookmarkId ) );
+
+ CleanupStack::PopAndDestroy( ); // db
+ }
+ return bookmarkId;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncher::EnhancedSeamlessLinkLocalFeaturesSupportedL
+// -----------------------------------------------------------------------------
+//
+TBool CBrowserLauncher::EnhancedSeamlessLinkLocalFeaturesSupportedL()
+ {
+ TBool supported = EFalse;
+ TInt featureBitmask;
+
+ CRepository* repository = CRepository::NewL( KCRUidBrowserUiLV );
+ //Read local features bitmask
+ if ( repository->Get( KBrowserUiCommonFlags, featureBitmask ) != KErrNone )
+ {
+ featureBitmask = 0;
+ }
+ if ( featureBitmask /*& KBrowserUiPreferredBookmarks*/ )
+ {
+ supported = ETrue;
+ }
+ delete repository;
+
+ return supported;
+ }
+
+// ---------------------------------------------------------
+// TLauncherPackageUtils::PackLauncherDataL()
+// ---------------------------------------------------------
+//
+HBufC8* TLauncherPackageUtils::PackLauncherDataL( const TUid aEmbeddingAppUid,
+ const TBrowserOverriddenSettings* aSettings,
+ TInt folderUid,
+ const TDesC& seamlessParam,
+ TBool aIsContentHandlerRegistered )
+ {
+ TBool isOverriddenSettings( EFalse );
+
+ // Check if the overridden settings was set
+ if ( aSettings )
+ {
+ isOverriddenSettings = ETrue;
+ }
+
+ // Create the package
+ TPckgC<TUid> embeddingAppUidPckg( aEmbeddingAppUid );
+ TPckgC<TBool> isOverriddenSettingsPckg( isOverriddenSettings );
+ TPckgC<TBrowserOverriddenSettings>* pSettingsPckg( 0 );
+ if ( aSettings )
+ {
+ // Put Overridden settings in package if it is not NULL
+ pSettingsPckg = new (ELeave) TPckgC<TBrowserOverriddenSettings>( *aSettings );
+ CleanupStack::PushL( pSettingsPckg );
+ }
+ TPckgC<TInt> folderUidPckg( folderUid );
+ TPtrC8 seamlessParamPtr( (const TUint8*)seamlessParam.Ptr(), seamlessParam.Size() );
+ TPckgC<TBool> isContentHandlerRegistered( aIsContentHandlerRegistered );
+
+ // Get the size of all packages
+ TInt totalSize;
+ if ( aSettings )
+ {
+ totalSize = embeddingAppUidPckg.Size() +
+ isOverriddenSettingsPckg.Size() +
+ (*pSettingsPckg).Size() +
+ folderUidPckg.Size() +
+ seamlessParamPtr.Size() +
+ isContentHandlerRegistered.Size();
+ }
+ else
+ {
+ totalSize = embeddingAppUidPckg.Size() +
+ isOverriddenSettingsPckg.Size() +
+ folderUidPckg.Size() +
+ seamlessParamPtr.Size() +
+ isContentHandlerRegistered.Size();
+ }
+
+ // Allocate buffer for packages
+ HBufC8* buff = HBufC8::NewL( totalSize );
+
+ // Pack the packages to buffer
+ buff->Des().Copy( embeddingAppUidPckg );
+ buff->Des().Append( isOverriddenSettingsPckg );
+ if ( aSettings )
+ {
+ buff->Des().Append( *pSettingsPckg );
+ }
+ buff->Des().Append( folderUidPckg );
+ buff->Des().Append( isContentHandlerRegistered );
+ buff->Des().Append( seamlessParamPtr );
+
+ if ( aSettings )
+ {
+ CleanupStack::PopAndDestroy( ); // pSettingsPckg
+ }
+ return buff;
+ }
+
+// ---------------------------------------------------------
+// TLauncherPackageUtils::PackLauncherDataL()
+// ---------------------------------------------------------
+//
+void TLauncherPackageUtils::UnPackLauncherDataL( TUid& aEmbeddingAppUid, TBrowserOverriddenSettings* aSettings, TInt& aFolderUid, TPtrC& aSeamlessParam, const TDesC8& aData, TBool& aIsContentHandlerRegistered, TBool& aIsOverriddenSettings )
+ {
+ TInt pos( 0 );
+
+ // Get the first parameter aEmbeddingAppUid from IPC data
+ TPckg<TUid> embeddingAppUid( aEmbeddingAppUid );
+ embeddingAppUid.Copy( aData.Mid( pos, embeddingAppUid.Size() ) );
+ pos += embeddingAppUid.Size();
+
+ // Get the parameter isOverriddenSettings from IPC data
+ TPckg<TBool> isOveriddenSettings( aIsOverriddenSettings );
+ isOveriddenSettings.Copy( aData.Mid( pos, isOveriddenSettings.Size() ) );
+ pos += isOveriddenSettings.Size();
+
+ if ( aIsOverriddenSettings )
+ {
+ // Unpack the overridden settings
+ TPckg<TBrowserOverriddenSettings> settingsPckg( *aSettings );
+ settingsPckg.Copy( aData.Mid( pos, settingsPckg.Size() ) );
+ pos += settingsPckg.Size();
+ }
+ else
+ {
+ // No overridden setings were put in IPC data
+ aSettings = NULL;
+ }
+
+ // Get second parameters from IPC data
+ TPckg<TInt> folderUidPckg( aFolderUid );
+ folderUidPckg.Copy( aData.Mid( pos, folderUidPckg.Size() ) );
+ pos += folderUidPckg.Size();
+
+ // Get third parameters from IPC data
+ TPckg<TBool> isContentHandlerRegistered( aIsContentHandlerRegistered );
+ isContentHandlerRegistered.Copy( aData.Mid( pos, isContentHandlerRegistered.Size() ) );
+ pos += isContentHandlerRegistered.Size();
+
+ TPtrC8 remaining = aData.Mid( pos );
+ aSeamlessParam.Set( (const TUint16*)remaining.Ptr(), remaining.Size()/2 );
+ }
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/src/BrowserLauncherExtension.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,368 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: BrowserLauncherExtension
+*
+*/
+
+// INCLUDE FILES
+#include <browserlauncher.h>
+#include "BrowserLauncherExtension.h"
+#include "logger.h"
+#include <downloadedcontenthandler.h>
+#include <favouriteslimits.h> // Context Id:s
+
+#include <eikenv.h>
+#include <AiwGenericParam.h>
+#include <s32mem.h>
+#include <coecntrl.h>
+#include <eikappui.h>
+
+NONSHARABLE_CLASS( CLauncherCommandAbsorbingControl ) : public CCoeControl
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CLauncherCommandAbsorbingControl* NewL( CActiveSchedulerWait& aWaiter, TInt& aExitCode );
+
+ /**
+ * Destructor.
+ */
+ ~CLauncherCommandAbsorbingControl();
+
+ /**
+ * Set enabled/disabled status
+ */
+ inline void SetEnabled( TBool aEnabled ) { iEnabled = aEnabled; }
+
+ private:
+ /**
+ * From CCoeControl
+ */
+ virtual TKeyResponse OfferKeyEventL( const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/ );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CLauncherCommandAbsorbingControl( CActiveSchedulerWait& aWaiter, TInt& aExitCode );
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // Data
+ CEikAppUi* iAppUi;
+ CActiveSchedulerWait& iWaiter;
+ TBool iEnabled;
+ TInt& iExitCode;
+ };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// ---------------------------------------------------------
+// CLauncherCommandAbsorbingControl::CLauncherCommandAbsorbingControl
+//
+// ---------------------------------------------------------
+//
+CLauncherCommandAbsorbingControl::CLauncherCommandAbsorbingControl( CActiveSchedulerWait& aWaiter, TInt& aExitCode )
+: iWaiter( aWaiter ), iExitCode( aExitCode )
+ {
+ }
+
+
+// ---------------------------------------------------------
+// CLauncherCommandAbsorbingControl::~CLauncherCommandAbsorbingControl
+//
+// ---------------------------------------------------------
+//
+CLauncherCommandAbsorbingControl::~CLauncherCommandAbsorbingControl()
+ {
+ if ( iCoeEnv && iAppUi )
+ {
+ iAppUi->RemoveFromStack( this );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CLauncherCommandAbsorbingControl::NewLC
+//
+// ---------------------------------------------------------
+//
+CLauncherCommandAbsorbingControl* CLauncherCommandAbsorbingControl::NewL( CActiveSchedulerWait& aWaiter, TInt& aExitCode )
+ {
+ CLauncherCommandAbsorbingControl* self = new( ELeave ) CLauncherCommandAbsorbingControl( aWaiter, aExitCode );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+
+// ---------------------------------------------------------
+// CLauncherCommandAbsorbingControl::ConstructL
+//
+// ---------------------------------------------------------
+//
+void CLauncherCommandAbsorbingControl::ConstructL()
+ {
+ iAppUi = iEikonEnv->EikAppUi();
+ //
+ CreateWindowL();
+ SetExtent( TPoint( 0,0 ), TSize( 0,0 ) );
+ ActivateL();
+ SetPointerCapture( ETrue );
+ ClaimPointerGrab( ETrue );
+ //
+ iAppUi->AddToStackL( this, ECoeStackPriorityDialog );
+ }
+
+
+// ---------------------------------------------------------
+// CLauncherCommandAbsorbingControl::OfferKeyEventL
+//
+// ---------------------------------------------------------
+//
+TKeyResponse CLauncherCommandAbsorbingControl::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse response = EKeyWasNotConsumed;
+ //
+ if ( iEnabled )
+ {
+ if ( aKeyEvent.iCode == EKeyEscape && aType == EEventKey )
+ {
+ if ( iWaiter.IsStarted() )
+ {
+ iExitCode = KErrCancel;
+ iWaiter.AsyncStop();
+ }
+ }
+
+ response = EKeyWasConsumed;
+ }
+ //
+ return response;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::CBrowserLauncherExtension
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBrowserLauncherExtension::CBrowserLauncherExtension
+ ( CBrowserLauncher& aLauncher )
+: CActive( CActive::EPriorityStandard ), iLauncher( aLauncher ), iBufferSizeP( iBufferSize )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherExtension::ConstructL()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBrowserLauncherExtension* CBrowserLauncherExtension::NewL( CBrowserLauncher& aLauncher )
+ {
+ LOG_ENTERFN( "CBrowserLauncherExtension::NewL" );
+ CBrowserLauncherExtension* self = new (ELeave) CBrowserLauncherExtension( aLauncher );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+CBrowserLauncherExtension::~CBrowserLauncherExtension()
+ {
+ LOG_ENTERFN( "CBrowserLauncherExtension::~CBrowserLauncherExtension" );
+ Cancel();
+ iLauncherClientService.Close();
+ delete iReceiveBuffer;
+ delete iPackedLauncherData;
+ delete iCommandAbsorber;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::WaitBrowserToFinish
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserLauncherExtension::WaitBrowserToFinish()
+ {
+ LOG_ENTERFN( "CBrowserLauncherExtension::WaitBrowserToFinish" );
+ if( !iCommandAbsorber )
+ {
+ iCommandAbsorber = CLauncherCommandAbsorbingControl::NewL( iWait, iExitCode );
+ }
+ iCommandAbsorber->SetEnabled( ETrue );
+ iWait.Start();
+ iCommandAbsorber->SetEnabled( EFalse );
+
+ // This class will complete us as an MAknServerAppExitObserver.
+ return iExitCode;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::SetPackedLauncherData
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherExtension::SetPackedLauncherData( HBufC8* aBuf )
+ {
+ delete iPackedLauncherData;
+ iPackedLauncherData = aBuf;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherExtension::DoCancel()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::RunL
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherExtension::RunL()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserLauncherExtension::RunError( TInt aError )
+ {
+ return aError;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::HandleServerAppExit
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherExtension::HandleServerAppExit( TInt aReason )
+ {
+ LOG_ENTERFN( "CBrowserLauncherExtension::HandleServerAppExit" );
+ if ( iWait.IsStarted() )
+ {
+ /* If the Launcher was started synchronously, then
+ iBrowserLauncherClientExitObserver cannot be set =>
+ no need to call iBrowserLauncherClientExitObserver->HandleServerAppExit() */
+
+ // Note down the exit reason
+ iExitCode = aReason;
+ iWait.AsyncStop();
+ iCommandAbsorber->SetEnabled( EFalse );
+ }
+ else if ( iBrowserLauncherClientExitObserver )
+ {
+ // Forward the exit event
+ iBrowserLauncherClientExitObserver->HandleServerAppExit( aReason );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserLauncherExtension::HandleReceivedDataL
+// -----------------------------------------------------------------------------
+//
+void CBrowserLauncherExtension::HandleReceivedDataL( TRequestStatus aStatus )
+ {
+ LOG_ENTERFN( "CBrowserLauncherExtension::HandleReceivedDataL" );
+
+ LOG_WRITE_FORMAT(" aStatus.Int(): %d", aStatus.Int());
+ User::LeaveIfError( aStatus.Int() );
+
+ //--------------------create buffer for server-----
+ // Create buffer to hold data, sent by Browser application.
+ // iBufferSize was defined by the server by now...
+ delete iReceiveBuffer;
+ iReceiveBuffer = 0;
+ iReceiveBuffer = HBufC8::NewL( iBufferSize );
+ TPtr8 tempRecBuf ( iReceiveBuffer->Des() );
+ // Send the allocated descriptor to server, who fills it.
+ User::LeaveIfError( iLauncherClientService.SendSyncBuffer( tempRecBuf ) );
+ // OK, buffer has been filled.
+
+ //--------------------internalize stream-----------
+ // Create Stream object.
+ RDesReadStream readStream( tempRecBuf );
+ CleanupClosePushL( readStream );
+ // Create param list object
+ CAiwGenericParamList* paramList = CAiwGenericParamList::NewL( readStream );
+ LOG_WRITE(" paramList OK");
+ CleanupStack::PopAndDestroy( &readStream );
+ CleanupStack::PushL( paramList );
+ //--------------------eof internalize stream-------
+
+ TBool clientWantsToContinue( EFalse );
+ TBool wasContentHandled = EFalse;
+
+ // If the embedding application handles the downloaded content.
+ if ( iDownloadedContentHandler )
+ {
+ LOG_WRITE_FORMAT(" iDownloadedContentHandler: 0x%x", iDownloadedContentHandler);
+ // Extract the file name from the generic paam list
+ TInt index(0);
+ const TAiwGenericParam* paramFileName =
+ paramList->FindFirst( index, EGenericParamFile, EVariantTypeDesC );
+ TPtrC fileName;
+ if ( index == KErrNotFound )
+ {
+ fileName.Set( KNullDesC );
+ }
+ else
+ {
+ fileName.Set( paramFileName->Value().AsDes() );
+ }
+
+ // Call the embedding app with these parameters, to handle the downloaded
+ // content
+ TRAPD( handlerLeave, wasContentHandled =
+ iDownloadedContentHandler->HandleContentL(
+ fileName,
+ *paramList,
+ clientWantsToContinue ) );
+ ++handlerLeave; // To avoid warnings. Used for logging.
+ LOG_WRITE_FORMAT(" handlerLeave: %d", handlerLeave);
+ }
+
+ // Tell the server app the output parameters
+ User::LeaveIfError( iLauncherClientService.SendSyncBools
+ ( clientWantsToContinue, wasContentHandled ) );
+
+ // This async request completed, reinitialize it
+ iLauncherClientService.SendAsync(iBufferSizeP);
+
+ CleanupStack::PopAndDestroy( paramList ); // paramList
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/src/LauncherClientService.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CLauncherClientService
+*
+*
+*/
+
+
+// INCLUDES
+#include "LauncherClientService.h"
+#include "LauncherReceiveHandler.h"
+#include "logger.h"
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::ServiceUid()
+// -----------------------------------------------------------------------------
+//
+TUid RLauncherClientService::ServiceUid() const
+ {
+ return TUid::Uid( 0x01010101 );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::InitializeL()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::InitializeL
+ ( TUid aServerAppUid, MLaunchedServerObserver& aServerObserver )
+ {
+ LOG_ENTERFN( "RLauncherClientService::InitializeL" );
+
+ iActiveHandler = CLauncherReceiveHandler::NewL( &aServerObserver, *this );
+ CActiveScheduler::Add( iActiveHandler );
+
+ ConnectChainedAppL( aServerAppUid );
+ iServerExitMonitor = CApaServerAppExitMonitor::NewL( *this,
+ aServerObserver,
+ CActive::EPriorityStandard );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::ListenL()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::ListenL()
+ {
+ LOG_ENTERFN( "RLauncherClientService::ListenL" );
+
+ if ( iActiveHandler )
+ {
+ __ASSERT_DEBUG(!iActiveHandler->IsActive(), User::Panic(_L("Already Listening..."),1));
+ iActiveHandler->StartListen();
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::StopListening()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::StopListening()
+ {
+ LOG_ENTERFN( "RLauncherClientService::StopListening" );
+
+ // tell receive handler to cancel receive and stop listening
+ iActiveHandler->Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendData()
+// -----------------------------------------------------------------------------
+//
+TInt RLauncherClientService::SendSync( TDesC8& aBufferToSend )
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendSync" );
+ return SendReceive( ELauncherSendSync, TIpcArgs( &aBufferToSend ) );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendAsync()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::SendAsync( TDesC8& aBufferToSend, TDes8& aBufferSize )
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendAsync" );
+ // If no previous request was done, which has not finished,
+ // then request is ok, send it...
+ SendReceive( ELauncherSendASync, TIpcArgs( &aBufferToSend, &aBufferSize ),
+ iActiveHandler->iStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendAsync()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::SendAsync()
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendAsyncListen" );
+ // If no previous request was done, which has not finished,
+ // then request is ok, send it...
+ SendReceive( ELauncherSendASyncListen, iActiveHandler->iStatus );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendAsync()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::SendAsync(TDes8& aBufferSize )
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendAsyncListen" );
+ // If no previous request was done, which has not finished,
+ // then request is ok, send it...
+
+
+ TPckg<TInt> dummyParam(0);
+
+ SendReceive( ELauncherSendASyncListen, TIpcArgs( &dummyParam, &aBufferSize ),iActiveHandler->iStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendSyncBuffer()
+// -----------------------------------------------------------------------------
+//
+TInt RLauncherClientService::SendSyncBuffer( TDes8& aReceiveBuffer )
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendSyncBuffer" );
+ // Else reset the state of the request, and send the buffer with
+ // the size, set by the SendAsync() function
+ // So the server can write into it.
+ return SendReceive( ELauncherSendSyncBuffer, TIpcArgs( &aReceiveBuffer ) );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendSyncBools()
+// -----------------------------------------------------------------------------
+//
+TInt RLauncherClientService::SendSyncBools
+ ( TBool aClientWantsToContinue, TBool aWasContentHandled )
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendSyncBools" );
+ // Else reset the state of the request, and send the buffer with
+ // the size, set by the SendAsync() function
+ // So the server can write into it.
+ return SendReceive( ELauncherSendSyncBools,
+ TIpcArgs( aClientWantsToContinue, aWasContentHandled ) );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::SendCommand()
+// -----------------------------------------------------------------------------
+//
+TInt RLauncherClientService::SendCommand( TInt aCommand )
+ {
+ LOG_ENTERFN( "RLauncherClientService::SendCommand" );
+ LOG_WRITE_FORMAT(" aCommand: %d", aCommand);
+ return SendReceive( aCommand, TIpcArgs() );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::CancelReceive()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::CancelReceive()
+ {
+ LOG_ENTERFN( "RLauncherClientService::CancelReceive" );
+ SendReceive( ELauncherCancelReceive, TIpcArgs( 0 ) );
+ }
+
+// -----------------------------------------------------------------------------
+// RLauncherClientService::Close()
+// -----------------------------------------------------------------------------
+//
+void RLauncherClientService::Close()
+ {
+ LOG_ENTERFN( "RLauncherClientService::Close" );
+
+ delete iActiveHandler;
+ iActiveHandler = 0;
+ LOG_WRITE(" iActiveHandler OK");
+
+ delete iServerExitMonitor;
+ iServerExitMonitor = 0;
+ LOG_WRITE(" iServerExitMonitor OK");
+
+ REikAppServiceBase::Close();
+ LOG_WRITE(" ServiceBase::Close OK");
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/src/LauncherReceiveHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CLauncherReceiveHandler
+*
+*
+*/
+
+
+// INCLUDES
+#include "LauncherReceiveHandler.h"
+#include "logger.h"
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::CLauncherReceiveHandler()
+// -----------------------------------------------------------------------------
+//
+CLauncherReceiveHandler::CLauncherReceiveHandler( MLaunchedServerObserver* aServerObserver, RLauncherClientService& aSession )
+: CActive(CActive::EPriorityStandard), iSession ( aSession )
+ {
+ iServerObserver = aServerObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::~CLauncherReceiveHandler()
+// -----------------------------------------------------------------------------
+//
+CLauncherReceiveHandler::~CLauncherReceiveHandler()
+ {
+ LOG_ENTERFN( "CLauncherReceiveHandler::~CLauncherReceiveHandler" );
+ Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::NewL()
+// -----------------------------------------------------------------------------
+//
+CLauncherReceiveHandler* CLauncherReceiveHandler::NewL( MLaunchedServerObserver* aServerObserver, RLauncherClientService& aSession )
+ {
+ LOG_ENTERFN( "CLauncherReceiveHandler::NewL" );
+ CLauncherReceiveHandler* self = NewLC( aServerObserver, aSession );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::NewLC()
+// -----------------------------------------------------------------------------
+//
+CLauncherReceiveHandler* CLauncherReceiveHandler::NewLC( MLaunchedServerObserver* aServerObserver, RLauncherClientService& aSession )
+ {
+ LOG_ENTERFN( "CLauncherReceiveHandler::NewLC" );
+ CLauncherReceiveHandler* self = new (ELeave) CLauncherReceiveHandler( aServerObserver, aSession );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CLauncherReceiveHandler::ConstructL()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::StartListen()
+// -----------------------------------------------------------------------------
+//
+void CLauncherReceiveHandler::StartListen()
+ {
+ LOG_ENTERFN( "CLauncherReceiveHandler::StartListen" );
+ iStatus = KRequestPending;
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::DoCancel()
+// -----------------------------------------------------------------------------
+//
+void CLauncherReceiveHandler::DoCancel()
+ {
+ LOG_ENTERFN( "CLauncherReceiveHandler::DoCancel" );
+ iSession.CancelReceive();
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherReceiveHandler::RunL()
+// -----------------------------------------------------------------------------
+//
+void CLauncherReceiveHandler::RunL()
+ {
+ LOG_ENTERFN( "CLauncherReceiveHandler::RunL" );
+ // Handle and re-initialize only if no error occured.
+ if ( iStatus.Int() == KErrNone )
+ {
+ iServerObserver->HandleReceivedDataL( iStatus );
+ iSession.ListenL();
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Launcher2/src/LauncherServerBase.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CLauncherServerBase
+*
+*
+*/
+
+// INCLUDES
+#include "LauncherClientService.h"
+#include "LauncherServerBase.h"
+#include "LauncherServerCommands.hrh"
+#include <browseroverriddensettings.h>
+#include <browserlauncher.h>
+#include "BrowserAppDocument.h"
+#include "BrowserAppUi.h"
+#include "eikenv.h"
+#include "eikappui.h"
+#include "logger.h"
+#include <SysUtil.h>
+
+const TInt KMinimumCDriveDiskSpace = 512 * 1024;
+
+// -----------------------------------------------------------------------------
+// CLauncherServerBase::CBrowserLauncherService()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CLauncherServerBase::CLauncherServerBase()
+ {
+ LOG_ENTERFN( "CLauncherServerBase::CLauncherServerBase" );
+
+ iClientBuffer = NULL;
+ CEikonEnv* browserAppEnv = CEikonEnv::Static();
+ if ( browserAppEnv )
+ {
+ iBrowserAppUi = ( CBrowserAppUi* ) browserAppEnv->EikAppUi();
+ if ( iBrowserAppUi )
+ {
+ iBrowserDocument = ( CBrowserAppDocument* ) iBrowserAppUi->Document();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherServerBase::ServiceL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CLauncherServerBase::ServiceL( const RMessage2& aMessage )
+ {
+ LOG_ENTERFN( "CLauncherServerBase::ServiceL" );
+ LOG_WRITE_FORMAT(" Function: %d", aMessage.Function());
+
+ switch ( aMessage.Function() )
+ {
+ case ELauncherSendSync :
+ {
+ __ASSERT_DEBUG(iMySyncMessage.Handle()==0, User::Panic(_L("Launcher"),2));
+ iMySyncMessage = aMessage;
+ HandleMessageSyncL();
+ __ASSERT_DEBUG(iMySyncMessage.Handle()==0, User::Panic(_L("Launcher"),21));
+ break;
+ }
+ case ELauncherSendASync :
+ {
+ __ASSERT_DEBUG(iMyAsyncMessage.Handle()==0, User::Panic(_L("Launcher"),3));
+ iMyAsyncMessage = aMessage;
+ HandleMessageASyncL();
+ __ASSERT_DEBUG(iMyAsyncMessage.Handle()!=0, User::Panic(_L("Launcher"),31));
+ break;
+ }
+ case ELauncherSendASyncListen:
+ {
+ __ASSERT_DEBUG(iMyAsyncMessage.Handle()==0, User::Panic(_L("Launcher"),4));
+ iMyAsyncMessage = aMessage;
+ // Nothing else to do. It's a reinitialization, we only wanted to know the message.
+ __ASSERT_DEBUG(iMyAsyncMessage.Handle()!=0, User::Panic(_L("Launcher"),41));
+ break;
+ }
+ case ELauncherSendSyncBuffer :
+ {
+ __ASSERT_DEBUG(iMySyncMessage.Handle()==0, User::Panic(_L("Launcher"),5));
+ iMySyncMessage = aMessage;
+ HandleMessageSyncBufferL();
+ __ASSERT_DEBUG(iMySyncMessage.Handle()==0, User::Panic(_L("Launcher"),51));
+ break;
+ }
+ case ELauncherSendSyncBools :
+ {
+ __ASSERT_DEBUG(iMySyncMessage.Handle()==0, User::Panic(_L("Launcher"),6));
+ iMySyncMessage = aMessage;
+ HandleMessageSyncBoolsL();
+ __ASSERT_DEBUG(iMySyncMessage.Handle()==0, User::Panic(_L("Launcher"),61));
+ break;
+ }
+ case ELauncherCancelReceive :
+ {
+ iMyAsyncMessage.Complete( KErrCancel );
+ HandleBrowserExit();
+ aMessage.Complete( KErrNone );
+ break;
+ }
+ default:
+ {
+ CAknAppServiceBase::ServiceL( aMessage );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherServerBase::HandleMessageSyncL()
+// -----------------------------------------------------------------------------
+//
+void CLauncherServerBase::HandleMessageSyncL()
+ {
+ LOG_ENTERFN( "CLauncherServerBase::HandleMessageSyncL" );
+
+ // Client parameters. These will be filled by function
+ // UnPackLauncherDataL()...
+ TUid embeddingApplicationUid;
+ TBrowserOverriddenSettings settings;
+ TBrowserOverriddenSettings* pSettings;
+ TInt folderUid;
+ TPtrC seamlessParam;
+ TBool isContentHandlerRegistered( EFalse );
+ TBool isOverridenSettings( EFalse );
+
+ TInt result; // The result of the processed data.
+
+ // Read the recieved data buffer
+ HBufC8* incomingDataBuffer = HBufC8::NewMaxLC( iMySyncMessage.GetDesLengthL( 0 ) );
+ TPtr8 incomingDataPointer = incomingDataBuffer->Des( );
+ iMySyncMessage.ReadL( 0, incomingDataPointer );
+ LOG_WRITE(" ReadL OK");
+
+ // Unpack the recieved data buffer
+ pSettings = &settings;
+ TLauncherPackageUtils::UnPackLauncherDataL( embeddingApplicationUid,
+ pSettings,
+ folderUid,
+ seamlessParam,
+ incomingDataPointer,
+ isContentHandlerRegistered,
+ isOverridenSettings );
+
+ // Process the unpacked data.
+ result = ProcessMessageSyncL( embeddingApplicationUid,
+ settings,
+ folderUid,
+ seamlessParam,
+ isContentHandlerRegistered );
+
+ // Cleanup, and complete the client`s request.
+ CleanupStack::PopAndDestroy( ); // incomingDataBuffer
+ iMySyncMessage.Complete( result );
+ }
+
+// -----------------------------------------------------------------------------
+// CLauncherServerBase::HandleMessageASyncL()
+// -----------------------------------------------------------------------------
+//
+void CLauncherServerBase::HandleMessageASyncL()
+ {
+ LOG_ENTERFN( "CLauncherServerBase::HandleMessageASyncL" );
+
+ // Check for ciritical disk space if starts in embeded mode
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ TInt drive( EDriveC );
+ TBool isSpace( EFalse );
+ TInt err( KErrNone );
+ TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL(&fs, KMinimumCDriveDiskSpace, drive ));
+ fs.Close();
+ if (!isSpace)
+ User::Leave(KErrDiskFull);
+
+ // Client parameters. These will be filled by function
+ // UnPackLauncherDataL()...
+ TUid embeddingApplicationUid;
+ TBrowserOverriddenSettings settings;
+ TBrowserOverriddenSettings* pSettings;
+ TInt folderUid;
+ TPtrC seamlessParam;
+ TBool isContentHandlerRegistered( EFalse );
+ TBool isOverridenSettings( EFalse );
+
+ // Read the recieved data buffer
+ HBufC8* incomingDataBuffer = HBufC8::NewMaxLC( iMyAsyncMessage.GetDesLengthL( 0 ) );
+ TPtr8 incomingDataPointer = incomingDataBuffer->Des( );
+ iMyAsyncMessage.ReadL( 0, incomingDataPointer );
+ LOG_WRITE(" ReadL OK");
+
+ // Unpack the recieved data buffer
+ pSettings = &settings;
+ TLauncherPackageUtils::UnPackLauncherDataL( embeddingApplicationUid,
+ pSettings,
+ folderUid,
+ seamlessParam,
+ incomingDataPointer,
+ isContentHandlerRegistered,
+ isOverridenSettings );
+
+ // Process the unpacked data.
+ ProcessMessageASyncL( embeddingApplicationUid,
+ settings,
+ folderUid,
+ seamlessParam,
+ isContentHandlerRegistered,
+ isOverridenSettings );
+
+ // Cleanup.
+ CleanupStack::PopAndDestroy( ); // incomingDataBuffer
+ }
+
+void CLauncherServerBase::HandleMessageSyncBufferL()
+ {
+ LOG_ENTERFN( "CLauncherServerBase::HandleMessageSyncBufferL" );
+
+ ProcessMessageSyncBufferL();
+ // And complete client`s request.
+ iMySyncMessage.Complete( KErrNone );
+ }
+
+void CLauncherServerBase::HandleMessageSyncBoolsL()
+ {
+ LOG_ENTERFN( "CLauncherServerBase::HandleMessageSyncBoolsL" );
+
+ TBool clientWantsToContinue = iMySyncMessage.Int0();
+ TBool wasContentHandled = iMySyncMessage.Int1();
+ ProcessBoolsL( clientWantsToContinue, wasContentHandled );
+ // And complete client`s request.
+ iMySyncMessage.Complete( KErrNone );
+ }
+
+void CLauncherServerBase::HandleBrowserExit()
+ {
+ LOG_ENTERFN( "CLauncherServerBase::HandleBrowserExit" );
+ DoBrowserExit( );
+ }
+
+/* Capability check will come later...
+CLauncherServerBase::CLauncherServerBase(TCapability aClientReqs = ECapability_None):iClientReqs(aClientReqs)
+ {
+ }
+
+CPolicyServer::TCustomResult SecurityCheckL( const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing)
+ {
+ switch (aMsg.Function())
+ {
+ case RLauncherClientService::EMessageId:
+ return aMsg.HasCapability(iClientReqs) ? CPolicyServer::EPass : CPolicyServer::EFail;
+ break;
+ default:
+ return CApaAppServiceBase::SecurityCheckL( aMsg, aAction, aMissing );
+ break;
+ }
+ }
+*/
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Rom/BrowserLauncher.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __BROWSERLAUNCHER_IBY__
+#define __BROWSERLAUNCHER_IBY__
+
+file=ABI_DIR\BUILD_DIR\browserlauncher.dll SHARED_LIB_DIR\browserlauncher.dll
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Rom/BrowserResources.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __BROWSERRESOURCES_IBY__
+#define __BROWSERRESOURCES_IBY__
+
+S60_APP_CAPTION(Browser)
+
+data=DATAZ_\RESOURCE_FILES_DIR\BrowserTelService.rsc RESOURCE_FILES_DIR\BrowserTelService.rsc
+
+S60_APP_RESOURCE(BrowserNG)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Rom/BrowserUi.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __BROWSERUI_IBY__
+#define __BROWSERUI_IBY__
+
+S60_APP_BITMAP(Browser)
+S60_APP_BITMAP2(Browser,browserbitmaps)
+
+
+S60_APP_EXE(BrowserNG)
+S60_APP_AIF_ICONS(BrowserNG)
+data=\epoc32\data\z\private\10003a3f\apps\BrowserNG_reg.rsc \private\10003a3f\import\apps\BrowserNG_reg.rsc
+data=ABI_DIR\BUILD_DIR\Browser_Stub.sis system\install\Browser_Stub.sis
+
+#ifdef __RSS_FEEDS
+data=EPOCROOT##epoc32\data\c\feeds_view_template.html feeds_view_template.html
+#endif
+
+data=\epoc32\data\z\private\10008d39\backup_registration.xml private\10008d39\backup_registration.xml
+
+
+#undef BR_EXPORT_
+
+#endif __BROWSERUI_IBY__
Binary file browserui/browser/Rom/Browser_stub.SIS has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Rom/Browser_stub.pkg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,24 @@
+;
+; Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+
+;Languages
+&EN
+
+;Header
+#{"Web Browser"},(0x10008D39),7,2,3, TYPE=SA
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/Rom/Browser_stub_32.pkg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,150 @@
+
+;Languages
+&EN
+
+;Header
+#{"Web Browser"},(0x10008D39),7,1,0, TYPE=SA
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+""-"z:\RESOURCE\APPS\BrowserAudioVideoPlugin_aif.mif"
+""-"z:\RESOURCE\APPS\VideoServices_AIF.MIF"
+""-"z:\RESOURCE\APPS\browser.mif"
+""-"z:\RESOURCE\APPS\browserng_aif.mif"
+""-"z:\RESOURCE\APPS\connman.mif"
+""-"z:\RESOURCE\APPS\downloadmgruilib.mif"
+""-"z:\RESOURCE\APPS\operatormenu_aif.mif"
+""-"z:\RESOURCE\APPS\pushmtm.mif"
+""-"z:\RESOURCE_FILES_DIR\WidgetMenu.R*"
+""-"z:\Resource\APPS\webkiticons.mif"
+""-"z:\Resource\APPS\webkitutilsicons.mif"
+""-"z:\Resource\Plugins\CodRecog.rsc"
+""-"z:\Resource\Plugins\CookieFilter.rsc"
+""-"z:\Resource\Plugins\DdRecog.rsc"
+""-"z:\Resource\Plugins\DeflateFilter.rsc"
+""-"z:\Resource\Plugins\HttpFilterAcceptHeader.rsc"
+""-"z:\Resource\Plugins\HttpFilterAuthentication.rsc"
+""-"z:\Resource\Plugins\HttpFilterCache.rsc"
+""-"z:\Resource\Plugins\HttpFilterPipeliningConfig.rsc"
+""-"z:\Resource\Plugins\PushMtmPushContentHandler.rsc"
+""-"z:\Resource\Plugins\PushMtmWhiteListAdapter.rsc"
+""-"z:\Resource\Plugins\SchemeDispatcher.rsc"
+""-"z:\Resource\Plugins\WidgetInstallerUI.rsc"
+""-"z:\Resource\Plugins\WidgetRecognizer.rsc"
+""-"z:\Resource\Plugins\httpfilterIop.rsc"
+""-"z:\Resource\Plugins\httpfilterconnhandler.rsc"
+""-"z:\Resource\Plugins\httpfilterproxy.rsc"
+""-"z:\Resource\Plugins\memoryplugin.rsc"
+""-"z:\Resource\Plugins\npBrowserAudioVideoPlugin.rsc"
+""-"z:\Resource\Plugins\npGpsPlugin.rsc"
+""-"z:\Resource\Plugins\npSystemInfoPlugin.rsc"
+""-"z:\Resource\Plugins\uaproffilter.rsc"
+""-"z:\Resource\Plugins\widgetmemoryplugin.rsc"
+""-"z:\Resource\WidgetInstallerUI.R*"
+""-"z:\private\10003a3f\import\apps\BrowserNG_reg.rsc"
+""-"z:\private\10003a3f\import\apps\CodViewer_reg.rsc"
+""-"z:\private\10003a3f\import\apps\DdViewer_reg.rsc"
+""-"z:\private\10003a3f\import\apps\Operatormenu_reg.rsc"
+""-"z:\private\10003a3f\import\apps\PushViewer_reg.rsc"
+""-"z:\private\10003a3f\import\apps\RoapApp_reg.rsc"
+""-"z:\private\10003a3f\import\apps\SchemeApp_reg.rsc"
+""-"z:\private\10003a3f\import\apps\VideoServices_reg.rsc"
+""-"z:\private\10003a3f\import\apps\WidgetUi_reg.rsc"
+""-"z:\resource\AiwBrowserProvider.R*"
+""-"z:\resource\BrowserAudioVideoPlugin.R*"
+""-"z:\resource\BrowserDialogsProvider.R*"
+""-"z:\resource\CodUi.R*"
+""-"z:\resource\ConnectionManager.R*"
+""-"z:\resource\DownloadMgrUiLib.R*"
+""-"z:\resource\apps\BrowserNG.R*"
+""-"z:\resource\apps\CodViewer.R*"
+""-"z:\resource\apps\DdViewer.R*"
+""-"z:\resource\apps\Operatormenu.R*"
+""-"z:\resource\apps\PushViewer.R*"
+""-"z:\resource\apps\RoapApp.R*"
+""-"z:\resource\apps\SchemeApp.R*"
+""-"z:\resource\apps\VideoServices.R*"
+""-"z:\resource\apps\WidgetUi.R*"
+""-"z:\resource\apps\schemeapp_aif.mif"
+""-"z:\resource\browsertelservice.R*"
+""-"z:\resource\messaging\PushMtmUi.R*"
+""-"z:\resource\messaging\mtm\PushRegistry.R*"
+""-"z:\resource\plugins\AiwBrowserProvider.rsc"
+""-"z:\resource\webkit.R*"
+""-"z:\resource\webkitutils.R*"
+""-"z:\sys\bin\AiwBrowserProvider.dll"
+""-"z:\sys\bin\BrowserCache.dll"
+""-"z:\sys\bin\BrowserLauncher.dll"
+""-"z:\sys\bin\BrowserNG.exe"
+""-"z:\sys\bin\BrowserTelService.dll"
+""-"z:\sys\bin\CodDownload.dll"
+""-"z:\sys\bin\CodEng.dll"
+""-"z:\sys\bin\CodRecog.dll"
+""-"z:\sys\bin\CodUi.dll"
+""-"z:\sys\bin\CodViewer.exe"
+""-"z:\sys\bin\ConnectionManager.dll"
+""-"z:\sys\bin\CookieServer.exe"
+""-"z:\sys\bin\DdRecog.dll"
+""-"z:\sys\bin\DdViewer.exe"
+""-"z:\sys\bin\DeflateFilter.DLL"
+""-"z:\sys\bin\DownloadMgr.dll"
+""-"z:\sys\bin\DownloadMgrServer.exe"
+""-"z:\sys\bin\DownloadMgrUiLib.dll"
+""-"z:\sys\bin\FavouritesEngine.dll"
+""-"z:\sys\bin\FavouritesSrv.exe"
+""-"z:\sys\bin\FeedsServer.exe"
+""-"z:\sys\bin\FeedsServerClient.dll"
+""-"z:\sys\bin\HttpCacheManager.dll"
+""-"z:\sys\bin\HttpDMServEng.dll"
+""-"z:\sys\bin\HttpFilterAcceptHeader.dll"
+""-"z:\sys\bin\HttpFilterAuthentication.dll"
+""-"z:\sys\bin\HttpFilterCache.dll"
+""-"z:\sys\bin\HttpFilterCommon.dll"
+""-"z:\sys\bin\HttpFilterPipeliningConfig.dll"
+""-"z:\sys\bin\JavaScriptCore.DLL"
+""-"z:\sys\bin\MemMan.dll"
+""-"z:\sys\bin\MultipartParser.dll"
+""-"z:\sys\bin\OperatorMenu.exe"
+""-"z:\sys\bin\PushMtmCliSrv.dll"
+""-"z:\sys\bin\PushMtmPushContentHandler.dll"
+""-"z:\sys\bin\PushMtmUi.dll"
+""-"z:\sys\bin\PushMtmUtil.dll"
+""-"z:\sys\bin\PushMtmWhiteListAdapter.dll"
+""-"z:\sys\bin\PushViewer.exe"
+""-"z:\sys\bin\RECENTURLSTORE.DLL"
+""-"z:\sys\bin\RoapApp.exe"
+""-"z:\sys\bin\SchemeApp.exe"
+""-"z:\sys\bin\SchemeDispatcher.dll"
+""-"z:\sys\bin\VideoServices.exe"
+""-"z:\sys\bin\WidgetBackupRestore.exe"
+""-"z:\sys\bin\WidgetInstaller.dll"
+""-"z:\sys\bin\WidgetInstallerUI.dll"
+""-"z:\sys\bin\WidgetRecognizer.DLL"
+""-"z:\sys\bin\WidgetRegistry.exe"
+""-"z:\sys\bin\WidgetRegistryClient.dll"
+""-"z:\sys\bin\WidgetUi.exe"
+""-"z:\sys\bin\browserdialogsprovider.dll"
+""-"z:\sys\bin\browserengine.dll"
+""-"z:\sys\bin\cXmlParser.dll"
+""-"z:\sys\bin\cookiefilter.dll"
+""-"z:\sys\bin\cookiemanager.dll"
+""-"z:\sys\bin\httpfilterIop.dll"
+""-"z:\sys\bin\httpfilterconnhandler.dll"
+""-"z:\sys\bin\httpfilterproxy.dll"
+""-"z:\sys\bin\memoryplugin.DLL"
+""-"z:\sys\bin\npBrowserAudioVideoPlugin.dll"
+""-"z:\sys\bin\npGpsPlugin.dll"
+""-"z:\sys\bin\npSystemInfoPlugin.dll"
+""-"z:\sys\bin\npscript.dll"
+""-"z:\sys\bin\pagescaler.dll"
+""-"z:\sys\bin\uaproffilter.dll"
+""-"z:\sys\bin\webkitutils.dll"
+""-"z:\sys\bin\webutils.dll"
+""-"z:\sys\bin\widgetengine.dll"
+""-"z:\sys\bin\widgetlauncher.exe"
+""-"z:\sys\bin\widgetmemoryplugin.DLL"
+""-"z:\sys\bin\wmlEngine.dll"
Binary file browserui/browser/Rom/Browser_stub_32.sis has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsInc/BrowserSettingsDlg.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Dialog for setting the gateway. It's used temporarily.
+*
+*
+*/
+
+
+#ifndef CBrowserSETTINGSDIALOG_H
+#define CBrowserSETTINGSDIALOG_H
+
+// INCLUDES
+
+#include <AknForm.h>
+
+// CLASS DECLARATION
+
+/**
+* Dialog for setting the gateway's IP address
+*/
+class CBrowserSettingsDlg : public CAknDialog
+ {
+ public : // construction
+ /**
+ * Two-phased constructor.
+ */
+ static CBrowserSettingsDlg* NewL();
+
+ protected : // construction
+ /**
+ * constructor, that may leave.
+ */
+ void ConstructL();
+
+ protected : // from CEikDialog
+ /**
+ * Set the gateway's IP address, if the user pressed OK.
+ * @param aButtonId The ID of the pressed button.
+ * @return May the dialog exit?
+ */
+ TBool OkToExitL( TInt aButtonId ) ;
+ };
+
+#endif
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsInc/BrowserUiPrivateCRKeys.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef BROWSERUIPRIVATECRKEYS_H
+#define BROWSERUIPRIVATECRKEYS_H
+
+#include <browseruisdkcrkeys.h>
+
+
+// Indicates whether to show connection dialogs or not.
+// Valid values: 0 = off, 1 = on
+const TUint32 KBrowserConnectionDialogs = 0x00000006;
+
+// Boolean value which determines whether a confirmation
+// query will be shown when exiting Browser.
+// Valid values: 0 = off, 1 = on
+const TUint32 KBrowserQueryOnExit = 0x0000000A;
+
+// Flags for variating Browser application for common code
+// Valid values: integer 0-255
+const TUint32 KBrowserUiCommonFlags = 0x00000002;
+
+// Flags for variating Browser application for CDMA branch
+// Valid values: integer 0-255
+const TUint32 KBrowserUiCdmaFlags = 0x00000003;
+
+// Enabling of the Auto Form Fill feature
+// Valid values: 0 = off, 1 = on
+const TUint32 KBrowserFormDataSaving = 0x00000022;
+
+// BrowserNG Private Keys
+
+// Browser Adaptive Bookmarks mode setting.
+// Valid values: 0 = on, 1 = hide folder, 2 = off
+const TUint32 KBrowserNGAdaptiveBookmarks = 0x00000028;
+
+// Determines whether the browser is in Full Screen or
+// Softkeys Only mode.
+// Valid values: 0 = normal, 1 = soft keys, 2 = full screen
+const TUint32 KBrowserNGFullScreen = 0x00000029;
+
+// Search Page URL setting. A string value. Can be up
+// to 1000 characters in length.
+// Valid Valies: up to 1000 characters in length.
+const TUint32 KBrowserNGSearchPageURL = 0x0000002A;
+
+// Determines whether pop-up blocking in Multiple Windows is enabled or not.
+// Valid values: 0 = off, 1 = on (default = 1)
+const TUint32 KBrowserNGPopupBlocking = 0x0000002F;
+
+// Browser's user-defined homepage URL setting.
+// Valid values: URL string, up to 1000 characters
+const TUint32 KBrowserNGHomepageURL = 0x00000030;
+
+//DEPRECATED/OBSOLETE: Determine if the platform toolbar should be visible next time Browser starts
+const TUint32 KBrowserNGShowPlatformToolbar = 0x00000048;
+
+//DEPRECATED/OBSOLETE: Int value which determines which of the toolbars was last visible. 0 - basic toolbar, 1 - address toolbar
+const TUint32 KBrowserNGLastVisibleToolbar = 0x00000049;
+
+// Int value which determines if the Access keys feature is enabled or disabled. 0 - disabled, 1 - enabled
+const TUint32 KBrowserNGAccessKeys = 0x00000051;
+
+#endif // BROWSERUIPRIVATECRKEYS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsInc/SettingsContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,462 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Container of the information about the active settings
+*
+*/
+
+
+#ifndef SETTINGS_CONTAINER_H
+#define SETTINGS_CONTAINER_H
+
+// INCLUDE FILES
+#include <coecntrl.h>
+#include <coemop.h>
+#include <AknLists.h>
+
+// CONSTANTS
+const TInt KWmlSettingsIndexNone = -1;
+const TInt KWmlSettingsItemMaxLength = 100;
+
+// FORWARD DECLARATION
+class MApiProvider;
+class CAknNavigationDecorator;
+class CAknSettingStyleListBox;
+
+
+struct TEncodingStruct
+ {
+ TUint32 iSystemId; // System id of the encoding (CHARCONV.h)
+ TUint32 iResId; // Resource string id
+ };
+
+// CLASS DECLARATION
+
+/**
+* Container of the settings view
+* @since 1.2
+*/
+class CSettingsContainer : public CCoeControl, public MEikListBoxObserver
+ {
+ public: // construction, destruction
+
+ /**
+ * Two-phased constructor.
+ * @since 1.2
+ * @param aRect Rectangle.
+ * @param aPreferences Preferences.
+ * @param aCommsModel Comms model.
+ */
+ static CSettingsContainer* NewLC(
+ const TRect& aRect,
+ MApiProvider& aApiProvider,
+ MObjectProvider& aMopParent
+ );
+
+ /**
+ * Two-phased constructor.
+ * @since 1.2
+ * @param aRect Rectangle.
+ * @param aPreferences Preferences.
+ * @param aCommsModel Comms model.
+ */
+ static CSettingsContainer* NewL(
+ const TRect& aRect,
+ MApiProvider& aApiProvider,
+ MObjectProvider& aMopParent
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSettingsContainer();
+
+ private: // constructor
+
+ /**
+ * Constructor.
+ * @param aPreferences Preferences.
+ * @param aCommsModel Comms model.
+ */
+ CSettingsContainer
+ ( MApiProvider& aApiProvider, MObjectProvider& aMopParent );
+
+ /**
+ * By default constructor is private.
+ */
+ void ConstructL( const TRect& aRect );
+
+ /**
+ * Inherited functions
+ */
+ public: // from CCoeControl
+
+ /**
+ * Count component controls.
+ * @since 1.2
+ * @return Number of component controls.
+ */
+ virtual TInt CountComponentControls() const;
+
+ /**
+ * Handles focus changing
+ * @param aDrawNow
+ */
+ void FocusChanged( TDrawNow aDrawNow );
+
+ /**
+ * Handle resource change.
+ * @param aType Event type.
+ */
+ void HandleResourceChange( TInt aType );
+
+
+ /**
+ * Get a component control by index.
+ * @since 1.2
+ * @param aIndex Index of component control to be returned.
+ * @return Component control or NULL.
+ */
+ virtual CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Handle size change, lay out and draw components.
+ * @since 1.2
+ */
+ virtual void SizeChanged();
+
+ /**
+ * Handle key event. Forwards all key events to the listbox, if present.
+ * @since 1.2
+ * @param aKeyEvent The key event.
+ * @param aType Key event type.
+ * @return Response (was the key event consumed?).
+ */
+ virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * HandleListBoxEventL
+ * From CCoeControl
+ *
+ */
+ void HandleListBoxEventL(CEikListBox* aListBox,TListBoxEvent aEventType);
+
+ /**
+ * HandleGainingForegroundL
+ * Handles Foreground Event.
+ */
+ void HandleGainingForegroundL();
+
+ /**
+ * New functions
+ */
+ public:
+
+ /**
+ * Handles selection key or menu command to change value of an item.
+ * @since 1.2
+ */
+ void ChangeItemL( TBool aSelectKeyWasPressed );
+
+ MApiProvider& ApiProvider() { return iApiProvider; }
+
+ /**
+ * Opens the appropriate setting list e.g. Page
+ * @since 3.1
+ */
+ void DisplayCorrectSettingCategoryListL();
+
+ /**
+ * Closes the current setting list, if the main list,
+ * then leaves settings
+ * @return ETrue if settings lists are closed EFalse if still open
+ * @since 3.1
+ */
+ TBool CloseSettingsListL();
+
+
+ /**
+ * Checks for errors in settings values
+ * @return ETrue if settings values are set incorrectly
+ * @since 5.0
+ */
+ TBool SettingsError();
+
+
+ /**
+ * Indicates if a setting item is modifiable
+ *
+ * @return TInt
+ * @since 3.1
+ */
+ TBool IsSettingModifiable() const;
+
+
+ /**
+ * Saves changes made by the user to the ini file
+ * @since 1.2
+ */
+ void SaveChangesL();
+
+
+
+ /**
+ * Shows the main setting categories in a list box
+ * @since 3.1
+ */
+ void DisplaySettingCategoriesL();
+
+ void DisplayGeneralSettingsL();
+ void DisplayPageSettingsL();
+ void DisplayPrivacySettingsL();
+ void DisplayWebFeedsSettingsL();
+ void DisplayToolbarSettingsL();
+ void DisplayShortcutsSettingsL();
+
+ /**
+ * New functions
+ */
+ private:
+ TInt SetToolbarButtonValues(CArrayFixFlat<TInt> *values, TInt value, CArrayFixFlat<TInt> *displaymap);
+ TInt SetShortcutKeysValues(CArrayFixFlat<TInt> *values, TInt value, CArrayFixFlat<TInt> *displaymap);
+
+ void AddCategoryListBoxItemL( TInt aResourceId, CDesCArray& aList );
+ void ClearListBoxContentL();
+ void StoreListBoxIndexL();
+ void RestoreListBoxIndexL();
+
+ // Methods for adding settings to the settings lists
+
+ //---------------------------------------------------------------------
+ // General Settings
+ void AppendDefaultAccessPointL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendHomePageL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendPageOverviewL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendBackListL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+ void AppendURLSuffixListL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+ void AppendHttpSecurityWarningsL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendEcmaL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendScriptLogL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendDownloadsOpenL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendSearchProviderL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+ //---------------------------------------------------------------------
+ // Page Settings
+ void AppendAutoLoadContentL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendAutoFullScreenL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendAutoMediaVolumeL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendEncodingL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendPopupBlockingL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendAutoRefreshL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendFontSizeL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ TInt GetFontSizeString();
+
+
+ //---------------------------------------------------------------------
+ // Toolbar Settings
+ void AppendToolbarOnOffL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendToolbarButtonsL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendShortcutKeysL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ //---------------------------------------------------------------------
+ // Privacy Settings
+ void AppendAdaptiveBookmarksL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendFormDataSavingL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendCookiesL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendIMEIL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ //---------------------------------------------------------------------
+ // Web feeds Settings
+ void AppendAutomaticUpdatingAPL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+
+ void AppendAutomaticUpdatingWhileRoamingL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText );
+ //---------------------------------------------------------------------
+ //
+ /**
+ * Pops up a custom dialog to allow user to set setting items
+ */
+ TInt ShowRadioButtonSettingPageL( TInt aTitle,
+ CArrayFixFlat<TInt>* aValues,
+ TInt aCurrentItem );
+
+
+ /**
+ * Pops up a custom dialog to allow user to set setting items
+ */
+ TBool ShowRadioButtonSettingPageBoolL( TInt aTitle,
+ CArrayFixFlat<TInt>* aValues,
+ TInt* aCurrentItem );
+
+ /**
+ * Appends two text from resources to display it on lisbox
+ */
+ void CreateItemFromTwoStringsL(
+ TInt aFirst,
+ TInt aSecond,
+ TBuf<KWmlSettingsItemMaxLength>& aResult);
+
+ TInt MapCurrentItem( TUint aCurrentItem ) const;
+
+ /**
+ * Gets encoding information as parameters.
+ * Creates an encoding object and add the new object to iEncodingArray.
+ */
+ void AddEncodingL( TUint32 aSystemId, TUint32 aResId );
+
+ /**
+ * Add encodings here.
+ * To add or remove encodings modify this function!
+ */
+ void CreateEncodingArrayL();
+
+ /**
+ * Check if the added encodings are supported by the system. Removes those that are not.
+ */
+ void RemoveUnsupportedEncodingsL();
+
+ /**
+ * Notify BrowserControl that a setting has been changed in the UI
+ */
+ void NotifySettingChanged( TInt aSettingItem, TInt aSettingValue );
+
+ /**
+ * Query user to delete Form data plus Password data
+ */
+ void ShowFormDataDeleteAllQueryDialogL( );
+ /**
+ * Query user to delete Form Password data
+ */
+ void ShowFormDataDeletePasswordQueryDialogL( );
+
+ /**
+ * Query user to select fromm user defined AP
+ */
+ void SelectUserDefinedAPL( TUint32& id );
+
+ /**
+ * Launch Search Application Settings View.
+ */
+ void RunSearchSettingsL();
+
+#ifdef __SERIES60_HELP
+ /**
+ * Get help context for the control.
+ * @param aContext The context that is filled in.
+ * @return None.
+ */
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+#endif // __SERIES60_HELP
+
+ private:
+
+ // Media Volume indices
+ enum TMediaVolumeIndices
+ {
+ EVolumeMute = 0,
+ EVolumeLevel1,
+ EVolumeLevel2,
+ EVolumeLevel3,
+ EVolumeLevel4
+ };
+
+ enum TSettingCategory
+ {
+ EMain = 0,
+ EGeneral,
+ EPrivacy,
+ EPage,
+ EWebFeeds,
+ EToolbar,
+ EShortCuts,
+ ENone
+ };
+
+ private: // members
+
+ MApiProvider& iApiProvider; // not owned
+ CAknNavigationDecorator* iNaviDecorator; // not owned
+
+ // Settings List Box related members
+ CAknSettingStyleListBox* iSettingListBox; // OWNED
+ CArrayFixFlat<TUint>* iSettingIndex; // OWNED
+ TInt iMainSettingCurrentIndex; // hold the most recent index in the main setting list box
+ TInt iMainSettingTopPosIndex;
+ TInt iSubSettingCurrentIndex; // hold the most recent index in the sub setting list boxes
+ TInt iSubSettingTopPosIndex;
+ TBool iActionCancelled;
+ TBool iPenEnabled; // stores platform pen enabled flag value
+
+ TSettingCategory iCurrentSettingCategory;
+
+ // The settings are only updated when we leave the settings
+ // view to avoid unnecessary redraws
+ TInt iFontSize;
+ TUint32 iEncoding;
+ TBool iTextWrap;
+
+ // Holds a 'list' of all encodings
+ CArrayFixFlat<TEncodingStruct>* iEncodingArray; // OWNED
+ TBool iSelectionKeyDownPressed;
+
+ TBool iFlashPluginPresent;
+ };
+
+#endif // SETTINGS_CONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsInc/SettingsView.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* View of the information about the active settings
+*
+*
+*/
+
+
+#ifndef SETTINGS_VIEW_H
+#define SETTINGS_VIEW_H
+
+// INCLUDES
+
+// #include <eiklbo.h>
+// #include <ActiveApDb.h>
+#include "BrowserAppViewBase.h"
+#include "CommsModel.h"
+
+// FORWARD DECLARATION
+
+class CSettingsContainer;
+class MApiProvider;
+
+// CLASS DECLARATION
+
+/**
+* View of settings info
+*/
+class CBrowserSettingsView: public CBrowserViewBase,
+ public MCommsModelObserver
+{
+ public: // construction
+
+ /**
+ * Two-phased constructor
+ * @param aApiProvider The API provider.
+ */
+ static CBrowserSettingsView* NewLC( MApiProvider& aApiProvider );
+
+ /**
+ * Two-phased constructor
+ * @param aApiProvider The API provider.
+ */
+ static CBrowserSettingsView* NewL( MApiProvider& aApiProvider );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBrowserSettingsView();
+
+ public: // From MCbaSetter (CWmlBrowserViewBase)
+
+ /**
+ * Return command set id, to be displayed.
+ * @return The command set's resource id.
+ */
+ TInt CommandSetResourceIdL();
+
+ /**
+ * Set command set lsk,rsk,msk dynamically via pointers.
+ * Derived classes should implement, though it can be empty.
+ * If it does nothing, empty softkeys will be assigned
+ * @since 5.0
+ */
+ void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/) {};
+
+ public: // From MCommsModelObserver
+
+ /**
+ * Handle change in comms model (AP-s).
+ */
+ void HandleCommsModelChangeL();
+
+ public: // from CAknView (CWmlBrowserViewBase)
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL(TInt aCommand);
+
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ /**
+ * Updates the options softkey to reflect the command set.
+ *
+ * @since 3.2
+ * @param aCommandSet The new "command set".
+ * @return void.
+ */
+ void UpdateCbaL(TInt aCommandSet);
+
+
+ protected: // from CAknView
+
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,const TDesC8& aCustomMessage);
+
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ void HandleClientRectChange();
+
+ /**
+ * @see CAknView
+ */
+ void HandleForegroundEventL (TBool aForeground);
+
+ private: // MEikMenuObserver
+
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ private: // destruction
+
+ /**
+ * Constructor.
+ * @param aApiProvider The API provider.
+ */
+ CBrowserSettingsView( MApiProvider& aApiProvider );
+
+ /**
+ * SymbianOS default constructor.
+ */
+ void ConstructL();
+
+ private: // members
+
+ CSettingsContainer* iContainer;
+
+ TVwsViewId iLastViewId; // The view to switch after closing this
+};
+#endif // SETTINGS_VIEW_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsSrc/BrowserSettingsDlg.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Dialog for setting the gateway. It's used temporarily.
+*
+*
+*/
+
+
+// INCLUDE FILES
+// System includes
+#include <avkon.hrh>
+#include <eikdef.h>
+#include <eikenv.h>
+#include <eikedwin.h>
+#include <BrowserNG.rsg>
+
+// User includes
+#include "BrowserSettingsDlg.h"
+#include "Browser.hrh"
+#include "BrowserUtil.h"
+
+// ================= MEMBER FUNCTIONS =========================================
+
+// ---------------------------------------------------------
+// CBrowserSettingsDlg::ConstructL()
+// ---------------------------------------------------------
+//
+void CBrowserSettingsDlg::ConstructL()
+ {
+ CAknDialog::ConstructL( R_BROWSER_SETTINGS_MENUBAR );
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsDlg::NewL()
+// ---------------------------------------------------------
+//
+CBrowserSettingsDlg* CBrowserSettingsDlg::NewL()
+ {
+ CBrowserSettingsDlg* self = new (ELeave) CBrowserSettingsDlg;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsDlg::OkToExitL
+// Good to know : EAknSoftkeyCancel is never called, because
+// EEikDialogFlagNotifyEsc flag is not set in the resource.
+// ---------------------------------------------------------
+//
+TBool CBrowserSettingsDlg::OkToExitL( TInt aButtonId )
+ {
+ TBool result( EFalse );
+
+ if ( aButtonId == EAknSoftkeyOk )
+ {
+ TBuf<256> buf;
+
+ STATIC_CAST( CEikEdwin*, Control(
+ EWmlControlSettingsEditGateway ) )->GetText( buf );
+ buf.ZeroTerminate();
+
+ result = ETrue;
+ }
+ return result;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsSrc/SettingsContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,3829 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Container of the information about the active settings
+*
+*/
+
+
+// INCLUDE FILES
+#include <bldvariant.hrh>
+#include <charconv.h>
+#include <aknkeys.h>
+#include <AknTabGrp.h>
+#include <AknViewAppUi.h>
+#include <AknTitle.h>
+#include <aknutils.h>
+#include <BrowserNG.rsg>
+#include <AKNLISTS.H>
+#include <AknRadioButtonSettingPage.h>
+#include <akntextsettingpage.h>
+#include <barsread.h> // for TResourceReader
+#include <gulicon.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <FeatMgr.h>
+#include <ApSettingsHandlerUi.h>
+#include <ApEngineConsts.h>
+#include <aputils.h>
+#include <commdb.h>
+#include <StringLoader.h>
+#include <downloadmgrclient.h>
+#include <VpnApItem.h>
+#include <aknnotewrappers.h>
+
+#include "ApiProvider.h"
+#include "SettingsContainer.h"
+#include "BrowserPreferences.h"
+#include "Display.h"
+#include "CommsModel.h"
+#include "Browser.hrh"
+#include "CommonConstants.h"
+#include "BrowserAppUi.h"
+#include "BrowserAppViewBase.h"
+#include "BrowserUtil.h"
+#include "BrowserUiVariant.hrh"
+#include "BrowserDialogs.h"
+#include "Logger.h"
+
+#include "BrowserWindowManager.h"
+#include "BrowserWindow.h"
+// Browser as a plugin
+#include <brctlinterface.h>
+#include <brctldefs.h>
+
+#include <browserplugininterface.h>
+//Zsolt
+#include <cmmanager.h>
+#include <cmdestination.h>
+#include <cmapplicationsettingsui.h>
+
+
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include "BrowserApplication.h"
+#include <csxhelp/browser.hlp.hrh>
+#endif // __SERIES60_HELP
+
+// CONSTANTS
+const TInt KSettingCategoryMaxLength = 50;
+_LIT( KSettingsCategoryListBoxItemNoIcon, " " );
+const TInt KDoesntExist = -1;
+const TInt KGranularity = 1;
+const TInt KMaxTitleLength = 512;
+
+
+_LIT( KWmlSettingsListBoxItemPrefix, " \t" );
+_LIT( KWmlSettingsListBoxItemPostfix, "\t\t" );
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::CSettingsContainer
+// -----------------------------------------------------------------------------
+//
+CSettingsContainer::CSettingsContainer( MApiProvider& aApiProvider,
+ MObjectProvider& aMopParent )
+ : iApiProvider( aApiProvider ),
+ iMainSettingCurrentIndex( KWmlSettingsIndexNone ),
+ iSubSettingCurrentIndex( KWmlSettingsIndexNone )
+ {
+ SetMopParent( &aMopParent );
+ }
+
+// ----------------------------------------------------------------------------
+// CSettingsContainer::NewLC
+// ----------------------------------------------------------------------------
+//
+CSettingsContainer* CSettingsContainer::NewLC ( const TRect& aRect,
+ MApiProvider& aApiProvider,
+ MObjectProvider& aMopParent )
+ {
+ CSettingsContainer* result;
+ result = new (ELeave) CSettingsContainer( aApiProvider, aMopParent );
+ CleanupStack::PushL( result );
+ result->ConstructL( aRect );
+ return result;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CSettingsContainer::NewL
+// ----------------------------------------------------------------------------
+//
+CSettingsContainer* CSettingsContainer::NewL ( const TRect &aRect,
+ MApiProvider& aApiProvider,
+ MObjectProvider& aMopParent )
+ {
+ CSettingsContainer* result;
+ result = CSettingsContainer::NewLC( aRect, aApiProvider, aMopParent );
+ CleanupStack::Pop(); // result
+ return result;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::~CSettingsContainer
+// -----------------------------------------------------------------------------
+//
+CSettingsContainer::~CSettingsContainer()
+ {
+ delete iNaviDecorator; // This pops off the Navi Pane (if pushed).
+ delete iSettingListBox;
+ delete iSettingIndex;
+ delete iEncodingArray;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::ConstructL( const TRect& aRect )
+ {
+ ApiProvider().Display().SetTitleL( R_WMLBROWSER_SETTINGS_TITLE );
+ // Push empty Navi Pane. Do not use PushDefault; that must be popped and
+ // that is problematic on exit (MDisplay may not be available).
+ // Create a blank navi pane control, its destructor handles it safely.
+ CAknNavigationControlContainer* naviPane =
+ ApiProvider().Display().NaviPaneL();
+ iNaviDecorator = naviPane->CreateNavigationLabelL();
+ naviPane->PushL( *iNaviDecorator );
+
+ iSettingIndex = new (ELeave) CArrayFixFlat<TUint>( 4 );
+
+ // construct listbox from resources
+ TResourceReader rr;
+
+ iEikonEnv->CreateResourceReaderLC( rr, R_BROWSER_SETTING_CATEGORIES_LISTBOX );
+
+ CreateWindowL();
+ iSettingListBox = new( ELeave )CAknSettingStyleListBox;
+ iSettingListBox->SetContainerWindowL( *this ) ;
+ iSettingListBox->ConstructFromResourceL( rr );
+ iPenEnabled = AknLayoutUtils::PenEnabled();
+ if (iPenEnabled)
+ {
+ iSettingListBox->SetListBoxObserver( this );
+ }
+ CleanupStack::PopAndDestroy(); // resource reader
+ iSettingListBox->CreateScrollBarFrameL( ETrue );
+ iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ iEncodingArray = new(ELeave) CArrayFixFlat<TEncodingStruct>( KGranularity );
+ CreateEncodingArrayL();
+ RemoveUnsupportedEncodingsL();
+
+ // Add Unicode
+ AddEncodingL( KCharacterSetIdentifierUCS2, R_WMLBROWSER_SETTINGS_ENCODING_UCS_2 );
+
+ // Preferences becomes active, WindowsManager is an observer,
+ // it provides some local settings
+ ApiProvider().Preferences().NotifyObserversL( EPreferencesActivate, TBrCtlDefs::ESettingsUnknown );
+
+ // These settings cause page relayouts and should only be
+ // updated upon leaving the settings page, this is why they are stored as
+ // member data rather than getting the values from CBrowserPreferences
+ iFontSize = ApiProvider().Preferences().FontSize();
+ iEncoding = ApiProvider().Preferences().Encoding();
+ iTextWrap = ApiProvider().Preferences().TextWrap();
+
+ // Check if flash plugin is present and set variable
+ iFlashPluginPresent = ApiProvider().FlashPresent();
+
+ // Updating listbox content
+ DisplaySettingCategoriesL();
+
+ SetRect( aRect );
+ ActivateL();
+ iSettingListBox->ScrollBarFrame()->MoveVertThumbTo( iSettingListBox->CurrentItemIndex() );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplaySettingCategoriesL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplaySettingCategoriesL()
+ {
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EMain;
+
+ ApiProvider().Display().SetTitleL( R_WMLBROWSER_SETTINGS_TITLE );
+
+ ClearListBoxContentL();
+
+ MDesCArray* itemList = iSettingListBox->Model()->ItemTextArray();
+ CDesCArray* itemArray = ( CDesCArray* ) itemList;
+ TBuf<KSettingCategoryMaxLength> itemText;
+
+ // General Category item
+ AddCategoryListBoxItemL( R_SETTINGS_CATEGORY_GENERAL, *itemArray );
+ iSettingIndex->AppendL( EWmlSettingsGeneral );
+
+ // Page Category item
+ AddCategoryListBoxItemL( R_SETTINGS_CATEGORY_PAGE, *itemArray );
+ iSettingIndex->AppendL( EWmlSettingsPage );
+
+ // Privacy Category item
+ AddCategoryListBoxItemL( R_SETTINGS_CATEGORY_PRIVACY, *itemArray );
+ iSettingIndex->AppendL( EWmlSettingsPrivacy );
+
+#ifdef __RSS_FEEDS
+ #if !defined(BRDO_OCC_ENABLED_FF)
+ // Web feeds Category item
+ if (!ApiProvider().IsEmbeddedModeOn())
+ {
+ AddCategoryListBoxItemL( R_SETTINGS_CATEGORY_WEBFEEDS, *itemArray );
+ iSettingIndex->AppendL( EWmlSettingsWebFeeds );
+ }
+ #endif
+#endif // __RSS_FEEDS
+
+
+ if (!iPenEnabled)
+ {
+ // Toolbar Category item
+ AddCategoryListBoxItemL( R_SETTINGS_CATEGORY_TOOLBAR, *itemArray );
+ iSettingIndex->AppendL( EWmlSettingsToolbar );
+
+ // Shortcut Keys Category item
+ if(!ApiProvider().Preferences().ShortcutKeysForQwerty())
+ {
+ AddCategoryListBoxItemL( R_SETTINGS_CATEGORY_SHORTCUTS, *itemArray );
+ iSettingIndex->AppendL( EWmlSettingsShortcuts );
+ }
+ }
+
+
+ RestoreListBoxIndexL();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplayCorrectSettingCategoryListL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayCorrectSettingCategoryListL()
+ {
+ switch ( iSettingIndex->At( iSettingListBox->CurrentItemIndex() ) )
+ {
+ // Open General Browser Settings
+ case EWmlSettingsGeneral:
+ {
+ DisplayGeneralSettingsL();
+ break;
+ }
+ // Open Privacy Browser Settings
+ case EWmlSettingsPrivacy:
+ {
+ DisplayPrivacySettingsL();
+ break;
+ }
+
+ // Open Page Browser Settings
+ case EWmlSettingsPage:
+ {
+ DisplayPageSettingsL();
+ break;
+ }
+
+ // Open Web Feeds Settings
+ case EWmlSettingsWebFeeds:
+ {
+ DisplayWebFeedsSettingsL();
+ break;
+ }
+
+ // Open Toolbar Settings
+ case EWmlSettingsToolbar:
+ {
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ // Open Shortcuts Settings
+ case EWmlSettingsShortcuts:
+ {
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ default:
+ {
+ DisplaySettingCategoriesL();
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AddCategoryListBoxItemL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AddCategoryListBoxItemL( TInt aResourceId, CDesCArray& aItemArray )
+ {
+ TBuf<KSettingCategoryMaxLength> itemText;
+ itemText.Zero();
+ itemText.Append( KSettingsCategoryListBoxItemNoIcon );
+ itemText.Append(KWmlSettingsListBoxItemPrefix);
+ HBufC* listItemText = iCoeEnv->AllocReadResourceLC( aResourceId );
+ itemText.Append( *listItemText );
+ CleanupStack::PopAndDestroy(); // listItemText
+ aItemArray.AppendL( itemText );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplayGeneralSettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayGeneralSettingsL()
+ {
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EGeneral;
+
+ ApiProvider().Display().SetTitleL( R_WMLBROWSER_SETTINGS_TITLE_GENERAL );
+
+ ClearListBoxContentL();
+
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+
+ TBuf<KWmlSettingsItemMaxLength> itemText;
+
+ //=========================================================================
+ // Add individual settings belonging to the 'General' Settings Category
+ //
+
+ // Default Access Point
+ if ( !ApiProvider().Preferences().CustomAccessPointDefined() )
+ {
+ //Access point setting is not required if OCC is enabled
+ AppendDefaultAccessPointL( itemArray, itemText );
+ }
+
+ // Home Page
+ if( ApiProvider().Preferences().
+ UiLocalFeatureSupported( KBrowserUiHomePageSetting ) &&
+ !ApiProvider().IsEmbeddedModeOn() )
+ {
+ AppendHomePageL( itemArray, itemText );
+ }
+
+ // Minimap not supported on touch devices
+ if (!iPenEnabled)
+ {
+ //MiniMap feature is determined by the PageScaler dll, not by the preference setting.
+ //We should query webkit for the feature.
+ if(ApiProvider().WindowMgr().CurrentWindow()->IsPageOverviewSupportedL())
+ {
+ // Page Overview
+ AppendPageOverviewL( itemArray, itemText );
+ }
+ }
+
+
+ if( iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserGraphicalHistory ))
+ {
+ // Back List
+ AppendBackListL( itemArray, itemText );
+ }
+
+ if (!ApiProvider().IsEmbeddedModeOn())
+ {
+ AppendURLSuffixListL(itemArray, itemText);
+ }
+ // Http Security Warnings
+ if ( !ApiProvider().Preferences().HttpSecurityWarningsStatSupressed() )
+ {
+ AppendHttpSecurityWarningsL( itemArray, itemText );
+ }
+
+ // Ecma
+ AppendEcmaL( itemArray, itemText );
+
+ // Script Logging
+ AppendScriptLogL( itemArray, itemText );
+
+ // Downloads open settings
+ if( PROGRESSIVE_DOWNLOAD )
+ {
+ AppendDownloadsOpenL( itemArray, itemText );
+ }
+
+ if( ApiProvider().Preferences().SearchFeature() )
+ {
+ AppendSearchProviderL( itemArray, itemText );
+ }
+
+ RestoreListBoxIndexL();
+ iSettingListBox->DrawNow();
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplayPageSettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayPageSettingsL()
+ {
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EPage;
+
+ ApiProvider().Display().SetTitleL( R_WMLBROWSER_SETTINGS_TITLE_PAGE );
+
+ ClearListBoxContentL();
+
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+
+ TBuf<KWmlSettingsItemMaxLength> itemText;
+
+ //=========================================================================
+ // Add individual settings belonging to the 'General' Settings Category
+ //
+
+ // AutoLoad Content
+ AppendAutoLoadContentL( itemArray, itemText );
+
+ // Media Volume
+ if( !HAS_SIDE_VOLUME_KEYS ) //some phones don't have side volume keys
+ {
+ AppendAutoMediaVolumeL( itemArray, itemText );
+ }
+
+ // Encoding
+ AppendEncodingL( itemArray, itemText );
+
+ // Pop-up Blocking
+ if ( ApiProvider().Preferences().UiLocalFeatureSupported(
+ KBrowserMultipleWindows ) &&
+ !ApiProvider().IsEmbeddedModeOn() )
+ {
+ AppendPopupBlockingL( itemArray, itemText );
+ }
+
+ // Auto Refresh
+ AppendAutoRefreshL( itemArray, itemText );
+
+ // Font Size
+ AppendFontSizeL( itemArray, itemText );
+
+ RestoreListBoxIndexL();
+ iSettingListBox->DrawNow();
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplayPrivacySettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayPrivacySettingsL()
+ {
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EPrivacy;
+
+ ApiProvider().Display().SetTitleL( R_WMLBROWSER_SETTINGS_TITLE_PRIVACY );
+
+ ClearListBoxContentL();
+
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+
+ TBuf<KWmlSettingsItemMaxLength> itemText;
+
+ //=========================================================================
+ // Add individual settings belonging to the 'General' Settings Category
+ //
+
+ // Adaptive Bookmarks
+ if ( ADAPTIVEBOOKMARKS )
+ {
+ AppendAdaptiveBookmarksL( itemArray, itemText );
+ }
+
+ if (iApiProvider.Preferences().UiLocalFeatureSupported(KBrowserAutoFormFill) )
+ {
+ // Form Data Saving
+ AppendFormDataSavingL( itemArray, itemText );
+ }
+
+ // Cookies
+ AppendCookiesL( itemArray, itemText );
+
+ // IMEI
+ if ( IMEI_NOTIFICATION && !ApiProvider().IsEmbeddedModeOn() )
+ {
+ AppendIMEIL( itemArray, itemText );
+ }
+
+ RestoreListBoxIndexL();
+ iSettingListBox->DrawNow();
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplayWebFeedsSettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayWebFeedsSettingsL()
+ {
+ MPreferences& preferences = ApiProvider().Preferences();
+
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EWebFeeds;
+ ApiProvider().Display().SetTitleL( R_SETTINGS_CATEGORY_WEBFEEDS );
+ ClearListBoxContentL();
+
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+ TBuf<KWmlSettingsItemMaxLength> itemText;
+
+ // Add setting items
+ // Show the "Auto Update AP" option
+ AppendAutomaticUpdatingAPL( itemArray, itemText );
+
+ // Show the "Automatic update while roaming" option
+ AppendAutomaticUpdatingWhileRoamingL( itemArray, itemText );
+
+ RestoreListBoxIndexL();
+ iSettingListBox->DrawNow();
+ ActivateL();
+ }
+
+// CSettingsContainer::DisplayToolbarSettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayToolbarSettingsL()
+ {
+ MPreferences& preferences = ApiProvider().Preferences();
+
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EToolbar;
+ ApiProvider().Display().SetTitleL( R_SETTINGS_CATEGORY_TOOLBAR );
+ ClearListBoxContentL();
+
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+ TBuf<KWmlSettingsItemMaxLength> itemText;
+
+ // Toolbar On/Off Setting
+ AppendToolbarOnOffL(itemArray, itemText );
+
+ // Toolbar Buttons
+ AppendToolbarButtonsL(itemArray, itemText );
+
+ RestoreListBoxIndexL();
+ iSettingListBox->DrawNow();
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::DisplayShortcutsSettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::DisplayShortcutsSettingsL()
+ {
+ MPreferences& preferences = ApiProvider().Preferences();
+
+ StoreListBoxIndexL();
+ // Flag which setting category we are entering
+ iCurrentSettingCategory = EShortCuts;
+ ApiProvider().Display().SetTitleL( R_SETTINGS_CATEGORY_SHORTCUTS);
+ ClearListBoxContentL();
+
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+ TBuf<KWmlSettingsItemMaxLength> itemText;
+
+ // Shortcut Keys
+ AppendShortcutKeysL (itemArray, itemText );
+
+ RestoreListBoxIndexL();
+ iSettingListBox->DrawNow();
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::CloseSettingsListL
+// -----------------------------------------------------------------------------
+//
+TBool CSettingsContainer::CloseSettingsListL()
+ {
+ TBool ret( EFalse );
+ // Check which list we are in
+ switch ( iCurrentSettingCategory )
+ {
+ // About to leave
+ case EMain:
+ {
+ SaveChangesL();
+ ret = ETrue;
+ break;
+ }
+ // Return to Setting Category List
+ case EGeneral:
+ case EPrivacy:
+ case EWebFeeds:
+ case EPage:
+ case EToolbar:
+ case EShortCuts:
+ {
+ DisplaySettingCategoriesL();
+ ret = EFalse;
+ break;
+ }
+ default:
+ break;
+ }
+ return ret;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::SettingsError
+// -----------------------------------------------------------------------------
+//
+TBool CSettingsContainer::SettingsError()
+ {
+ TBool ret( EFalse );
+ if ( iCurrentSettingCategory == EToolbar )
+ {
+ // Return true is all toolbar buttons set to None for command (which is 0 in value)
+ MPreferences& preferences = ApiProvider().Preferences();
+ if ((preferences.ShowToolbarButton1Cmd() +
+ preferences.ShowToolbarButton2Cmd() +
+ preferences.ShowToolbarButton3Cmd() +
+ preferences.ShowToolbarButton4Cmd() +
+ preferences.ShowToolbarButton5Cmd() +
+ preferences.ShowToolbarButton6Cmd() +
+ preferences.ShowToolbarButton7Cmd() ) == 0 )
+ {
+ ret = ETrue;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendDefaultAccessPointL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendDefaultAccessPointL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText )
+ {
+ //get the connection identifier based on the connection type
+ switch (ApiProvider().Preferences().AccessPointSelectionMode())
+ {
+ case EAlwaysAsk:
+ {
+ #if !defined(BRDO_BROWSER_50_FF)
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_DEFAULT_AP,
+ R_WML_SETTINGS_ACCESS_POINT_ALWAYS_ASK,
+ aItemText );
+ #else
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_DEFAULT_AP,
+ R_WML_SETTINGS_ACCESS_POINT_ASK_WHEN_NEEDED,
+ aItemText );
+ #endif //BRDO_BROWSER_50_FF
+ break;
+ }
+
+ //get the destination identifyer based on the snap Id
+ case EDestination:
+ {
+ aItemText.Zero();
+ aItemText.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* defaultAp = iCoeEnv->AllocReadResourceLC(
+ R_WMLBROWSER_SETTINGS_DEFAULT_AP );
+ aItemText.Append( *defaultAp );
+ CleanupStack::PopAndDestroy(); // defaultAp
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+
+ RCmManager cmManager;
+ cmManager.OpenL();
+
+ TInt snapId = ApiProvider().Preferences().DefaultSnapId();
+ if (snapId != KWmlNoDefaultSnapId)
+ {
+ TRAPD(err, RCmDestination dest = cmManager.DestinationL( snapId ));
+ if (err == KErrNone)
+ {
+ RCmDestination dest = cmManager.DestinationL( snapId );
+ CleanupClosePushL( dest );
+ HBufC* destName = dest.NameLC();
+ aItemText.Append(*destName);
+ CleanupStack::PopAndDestroy( 2 ); // destName, dest
+ cmManager.Close();
+ break;
+ }
+ }
+ #if !defined(BRDO_BROWSER_50_FF)
+ HBufC* name = iCoeEnv->AllocReadResourceLC( R_WML_SETTINGS_ACCESS_POINT_ALWAYS_ASK );
+ #else
+ HBufC* name = iCoeEnv->AllocReadResourceLC( R_WML_SETTINGS_ACCESS_POINT_ASK_WHEN_NEEDED );
+ #endif // BRDO_BROWSER_50_FF
+ aItemText.Append( *name );
+ CleanupStack::PopAndDestroy(); // name
+
+ ApiProvider().Preferences().SetAccessPointSelectionModeL( EAlwaysAsk );
+ cmManager.Close();
+
+ break;
+ }
+
+ //if connecting with Iap Id
+ case EConnectionMethod:
+ {
+ aItemText.Zero();
+ aItemText.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* defaultAp = iCoeEnv->AllocReadResourceLC(
+ R_WMLBROWSER_SETTINGS_DEFAULT_AP );
+ aItemText.Append( *defaultAp );
+ CleanupStack::PopAndDestroy(); // defaultAp
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+
+ TUint id = ApiProvider().Preferences().DefaultAccessPoint();
+ if ( id != KWmlNoDefaultAccessPoint )
+ {
+ TBuf< KCommsDbSvrMaxFieldLength > name;
+ CApUtils* au = CApUtils::NewLC( ApiProvider().CommsModel().CommsDb() );
+ au->NameL( id, name );
+ aItemText.Append( name );
+ CleanupStack::PopAndDestroy(); // au
+ }
+ else
+ {
+ #if !defined(BRDO_BROWSER_50_FF)
+ HBufC* name = iCoeEnv->AllocReadResourceLC( R_WML_SETTINGS_ACCESS_POINT_ALWAYS_ASK );
+ #else
+ HBufC* name = iCoeEnv->AllocReadResourceLC( R_WML_SETTINGS_ACCESS_POINT_ASK_WHEN_NEEDED );
+ #endif // BRDO_BROWSER_50_FF
+ aItemText.Append( *name );
+ CleanupStack::PopAndDestroy(); // name
+
+ ApiProvider().Preferences().SetAccessPointSelectionModeL( EAlwaysAsk );
+ }
+
+ break;
+ }
+
+ default:
+ {
+ User::Leave( KErrNotSupported);
+ }
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsAccesspoint );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendHomePageL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendHomePageL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+LOG_ENTERFN( "CSettingsContainer::AppendHomePageL" );
+ aItemText.Zero();
+ aItemText.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* first = iCoeEnv->AllocReadResourceLC(
+ R_WMLBROWSER_SETTINGS_HOMEPAGE );
+ aItemText.Append( first->Des() );
+ CleanupStack::PopAndDestroy(); // first
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+
+ TWmlSettingsHomePage homepageType = ApiProvider().Preferences().HomePageType();
+BROWSER_LOG( ( _L( " pgtype: %d" ), homepageType ) );
+ if( homepageType == EWmlSettingsHomePageBookmarks )
+ {
+ HBufC* second = iCoeEnv->AllocReadResourceLC(
+ R_WMLBROWSER_SETTINGS_HOMEPAGE_BOOKMARKS );
+ aItemText.Append( second->Des() );
+ CleanupStack::PopAndDestroy(); // second
+ }
+ else
+ {
+ HBufC* second = HBufC::NewLC( KMaxHomePgUrlLength );
+ TPtr ptr( second->Des() );
+ if( ApiProvider().Preferences().HomePageUrlL( ptr ) == KErrNone )
+ {
+ TInt itemLength( KWmlSettingsItemMaxLength - aItemText.Length() );
+ if( ptr.Length() > itemLength )
+ {
+ aItemText.Append( ptr.Left( itemLength ) );
+ }
+ else
+ {
+ aItemText.Append( ptr );
+ }
+ }
+ else
+ {
+ // If access point homepage is to be used, but no homepage URL is
+ // defined, then display the bookmarks view instead.
+ if( homepageType == EWmlSettingsHomePageAccessPoint )
+ {
+ iCoeEnv->ReadResourceL( ptr,
+ R_WMLBROWSER_SETTINGS_HOMEPAGE_BOOKMARKS );
+ aItemText.Append( ptr );
+ }
+ else
+ {
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+ }
+ }
+ CleanupStack::PopAndDestroy(); // second
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsHomePage );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendPageOverviewL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendPageOverviewL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ if ( iApiProvider.Preferences().PageOverview() )
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_PAGEOVERVIEW,
+ R_WMLBROWSER_SETTINGS_PAGEOVERVIEW_ON,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_PAGEOVERVIEW,
+ R_WMLBROWSER_SETTINGS_PAGEOVERVIEW_OFF,
+ aItemText );
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsPageOverview );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendToolbarOnOffL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendToolbarOnOffL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ if ( iApiProvider.Preferences().ShowToolbarOnOff() )
+ {
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_ON_OFF,
+ R_BROWSER_SETTING_TOOLBAR_ON,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_ON_OFF,
+ R_BROWSER_SETTING_TOOLBAR_OFF,
+ aItemText );
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarOnOff );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendBackListL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendBackListL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ //-------------------------------------------------------------------------
+ // BackList
+ if ( iApiProvider.Preferences().BackList() )
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_BACK_LIST,
+ R_WMLBROWSER_SETTINGS_BACK_LIST_ON,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_BACK_LIST,
+ R_WMLBROWSER_SETTINGS_BACK_LIST_OFF,
+ aItemText );
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsBackList );
+ }
+
+void CSettingsContainer::AppendURLSuffixListL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ aItemText.Zero();
+ aItemText.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* first = iCoeEnv->AllocReadResourceLC( R_WMLBROWSER_SETTINGS_URL_SUFFIX );
+ aItemText.Append( first->Des() );
+ CleanupStack::PopAndDestroy(); // first
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+
+ HBufC* buf = iApiProvider.Preferences().URLSuffixList();
+ TPtrC suffix(buf->Des());
+
+ if ( !suffix.Length() )
+ {
+ // leave line empty
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+ }
+ else
+ {
+ TInt itemLength( KWmlSettingsItemMaxLength - aItemText.Length() );
+ if( suffix.Length() > itemLength )
+ {
+ aItemText.Append( suffix.Left( itemLength ) );
+ }
+ else
+ {
+ aItemText.Append( suffix );
+ }
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsUrlSuffix );
+ }
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendHttpSecurityWarningsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendHttpSecurityWarningsL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_HTTP_SEC_WRNS,
+ ApiProvider().Preferences().HttpSecurityWarnings() ?
+ R_WMLBROWSER_SETTINGS_WRN_VALUE_SHOW :
+ R_WMLBROWSER_SETTINGS_WRN_VALUE_HIDE,
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsHttpSecurityWarnings );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendEcmaL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendEcmaL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ // Add Ecma
+ switch ( ApiProvider().Preferences().Ecma() )
+ {
+ case EWmlSettingsECMAEnable:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_ECMA,
+ R_WMLBROWSER_SETTINGS_ECMA_VALUE_ENABLE,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsECMADisable:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_ECMA,
+ R_WMLBROWSER_SETTINGS_ECMA_VALUE_DISABLE,
+ aItemText );
+ break;
+ }
+ default:
+ break;
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsEcma );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendScriptLogL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendScriptLogL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ TInt scriptLog = ApiProvider().Preferences().ScriptLog();
+ CRepository* repo = CRepository::NewLC( KCRUidBrowser );
+ TInt newVal;
+ if ( repo )
+ {
+ if ( ( repo->Get( KBrowserNGScriptLog, newVal ) == KErrNone ) &&
+ newVal != scriptLog )
+ {
+ ApiProvider().Preferences().SetScriptLogL( newVal );
+ scriptLog = newVal;
+ }
+ }
+ CleanupStack::PopAndDestroy( repo );
+
+ switch ( scriptLog )
+ {
+ case EWmlSettingsScriptLogDisable:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG,
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_DISABLE,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsScriptLogToFile:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG,
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_TO_FILE,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsScriptLogToConsole:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG,
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_TO_CONSOLE,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsScriptLogToConsoleFile:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG,
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_TO_CONSOLE_FILE,
+ aItemText );
+ break;
+ }
+ default:
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG,
+ R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_DISABLE,
+ aItemText );
+ break;
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsScriptLog );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendDownloadsOpenL
+// -----------------------------------------------------------------------------
+void CSettingsContainer::AppendDownloadsOpenL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_DOWNLOAD_OPEN,
+ ApiProvider().Preferences().DownloadsOpen() ?
+ R_WMLBROWSER_SETTINGS_DOWNLOAD_OPEN_YES :
+ R_WMLBROWSER_SETTINGS_DOWNLOAD_OPEN_NO,
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsDownloadsOpen );
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendSearchProviderL
+// -----------------------------------------------------------------------------
+void CSettingsContainer::AppendSearchProviderL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ aItemText.Zero();
+ aItemText.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* settingTitle = iCoeEnv->AllocReadResourceLC( R_BROWSERS_SETT_WEB_SEARCH_PROVIDER );
+ aItemText.Append( *settingTitle );
+ CleanupStack::PopAndDestroy(); // settingTitle
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+
+ HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
+ TPtr searchProviderPtr = searchProvider->Des();
+
+ ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
+ KMaxTitleLength , searchProviderPtr);
+
+ if(searchProvider->Compare(KNullDesC()) == 0)
+ {
+ CleanupStack::PopAndDestroy(searchProvider);
+ searchProvider = iCoeEnv->AllocReadResourceLC( R_IS_LABEL_NOT_SELECTED );
+ }
+
+ aItemText.Append( *searchProvider );
+ CleanupStack::PopAndDestroy( searchProvider );
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsSearchProvider );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAutoLoadContentL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAutoLoadContentL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+
+ TInt autoLoadContent = ApiProvider().Preferences().AutoLoadContent();
+
+ switch ( autoLoadContent )
+ {
+ case EWmlSettingsAutoloadText:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_CONTENT,
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_TEXT,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsAutoloadImagesNoFlash:
+ {
+ if (iFlashPluginPresent)
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_CONTENT,
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_IMAGES_NO_FLASH,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_CONTENT,
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_ALL,
+ aItemText );
+ }
+ break;
+ }
+ case EWmlSettingsAutoloadAll:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_CONTENT,
+ R_WMLBROWSER_SETTINGS_AUTOLOAD_ALL,
+ aItemText );
+ break;
+ }
+ default:
+ break;
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsAutoLoadContent );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAutoFullScreenL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAutoFullScreenL(CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ switch ( ApiProvider().Preferences().FullScreen() )
+ {
+ case EWmlSettingsFullScreenSoftkeysOnly:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SOFTKEYS,
+ R_WMLBROWSER_SETTINGS_SOFTKEYS_ON,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsFullScreenFullScreen:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_SOFTKEYS,
+ R_WMLBROWSER_SETTINGS_SOFTKEYS_OFF,
+ aItemText );
+ break;
+ }
+ default:
+ break;
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsFullScreen );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAutomaticUpdatingAPL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAutomaticUpdatingAPL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ TUint id = ApiProvider().Preferences().AutomaticUpdatingAP();
+ aItemText.Zero();
+ aItemText.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* defaultAp = iCoeEnv->AllocReadResourceLC(
+ R_WMLBROWSER_SETTINGS_AUTOUPDATING_AP );
+ aItemText.Append( *defaultAp );
+ CleanupStack::PopAndDestroy(); // defaultAp
+ aItemText.Append( KWmlSettingsListBoxItemPostfix );
+
+ if ( id == KWmlNoDefaultAccessPoint )
+ {
+ // If user hasn't selected an AP, show a blank list entry. Once user
+ // selects an AP, it will be displayed. Note: The browser's default AP
+ // is used, until user makes a different AP selection.
+ aItemText.Append( KNullDesC );
+ }
+ else
+ {
+ // User (or configuration) has already selected an AP, display its name
+ TBuf< KCommsDbSvrMaxFieldLength > name;
+ CApUtils* au = CApUtils::NewLC( ApiProvider().CommsModel().CommsDb() );
+ TRAP_IGNORE(au->NameL( id, name ));
+ aItemText.Append( name );
+ CleanupStack::PopAndDestroy(); // au
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsAutomaticUpdatingAP );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAutomaticUpdatingWhileRoamingL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAutomaticUpdatingWhileRoamingL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+
+ if ( iApiProvider.Preferences().AutomaticUpdatingWhileRoaming() )
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING,
+ R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING_ON,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING,
+ R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING_OFF,
+ aItemText );
+ }
+ aItemArray->AppendL( aItemText );
+
+ iSettingIndex->AppendL( EWmlSettingsAutomaticUpdatingWhileRoaming );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAutoMediaVolumeL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAutoMediaVolumeL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ TInt volumeLevel = ApiProvider().Preferences().MediaVolume();
+
+ switch ( volumeLevel )
+ {
+ case EWmlSettingsVolumeMuted:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME,
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_MUTED,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsVolume1:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME,
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_1,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsVolume2:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME,
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_2,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsVolume3:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME,
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_3,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsVolume4:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME,
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_4,
+ aItemText );
+ break;
+ }
+ default:
+ break;
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsMediaVolume );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendEncodingL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendEncodingL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ TBool currentEncodingFound = EFalse;
+ for( int i = 0; i < iEncodingArray->Count(); i++ )
+ {
+ if( iEncodingArray->At(i).iSystemId == iEncoding )
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_ENCODING,
+ iEncodingArray->At(i).iResId,
+ aItemText );
+ currentEncodingFound = ETrue;
+ break;
+ }
+ }
+
+ if( !currentEncodingFound )
+ {
+ __ASSERT_DEBUG( EFalse, Util::Panic( Util::EOutOfRange ));
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsEncoding );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendPopupBlockingL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendPopupBlockingL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ if ( ApiProvider().Preferences().PopupBlocking() )
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_POPUP_BLOCKING,
+ R_WMLBROWSER_SETTINGS_POPUP_BLOCKING_ON,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_POPUP_BLOCKING,
+ R_WMLBROWSER_SETTINGS_POPUP_BLOCKING_OFF,
+ aItemText );
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsPopupBlocking );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAutoRefreshL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAutoRefreshL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ if ( iApiProvider.Preferences().AutoRefresh() )
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTO_REFRESH,
+ R_WMLBROWSER_SETTINGS_AUTO_REFRESH_ON,
+ aItemText );
+ }
+ else
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_AUTO_REFRESH,
+ R_WMLBROWSER_SETTINGS_AUTO_REFRESH_OFF,
+ aItemText );
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsAutoRefresh );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendAdaptiveBookmarksL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendAdaptiveBookmarksL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ switch ( ApiProvider().Preferences().AdaptiveBookmarks() )
+ {
+ case EWmlSettingsAdaptiveBookmarksOn:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS,
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS_VALUE_ON,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsAdaptiveBookmarksHideFolder:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS,
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS_VALUE_HIDE_FOLDER,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsAdaptiveBookmarksOff:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS,
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS_VALUE_OFF,
+ aItemText );
+ break;
+ }
+ default:
+ break;
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsAdaptiveBookmarks );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendFormDataSavingL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendFormDataSavingL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ switch ( ApiProvider().Preferences().FormDataSaving() )
+ {
+ case EWmlSettingsFormDataPlusPassword:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING,
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING_ON,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsFormDataOnly:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING,
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING_ONLY,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsFormDataOff:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING,
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING_OFF,
+ aItemText );
+ break;
+ }
+
+ default:
+ break;
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsFormDataSaving );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendCookiesL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendCookiesL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ switch ( ApiProvider().Preferences().Cookies() )
+ {
+ case EWmlSettingsCookieAllow:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_COOKIES,
+ R_WMLBROWSER_SETTINGS_C_VALUE_ALLOW,
+ aItemText );
+ break;
+ }
+ case EWmlSettingsCookieReject:
+ {
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_COOKIES,
+ R_WMLBROWSER_SETTINGS_C_VALUE_REJECT,
+ aItemText );
+ break;
+ }
+ default:
+ break;
+ }
+
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsCookies );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendIMEIL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendIMEIL(
+ CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ switch ( ApiProvider().Preferences().IMEINotification() )
+ {
+ case EWmlSettingsIMEIEnable:
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_IMEI,
+ R_WMLBROWSER_SETTINGS_IMEI_VALUE_ENABLED,
+ aItemText );
+ break;
+ case EWmlSettingsIMEIDisable:
+ CreateItemFromTwoStringsL(
+ R_WMLBROWSER_SETTINGS_IMEI,
+ R_WMLBROWSER_SETTINGS_IMEI_VALUE_DISABLED,
+ aItemText );
+ break;
+ default:
+ break;
+ }
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsIMEINotification );
+
+ }
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendFontSize
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendFontSizeL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+ CreateItemFromTwoStringsL(R_WMLBROWSER_SETTINGS_FONT_SIZE,
+ GetFontSizeString(),
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsFontSize );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::GetFontSizeString
+// Convenience utility. Note that many of the settings duplicate the
+// code to generate this sort od string. This pattern could be applied
+// to many of the settings to reduce the code size. A side effect of this
+// code is that the iFontSize variable may be modified in the Chinese
+// Build case. This code is in one place now and not duplicated.
+// -----------------------------------------------------------------------------
+//
+TInt CSettingsContainer::GetFontSizeString()
+ {
+ // China build (__AVKON_APAC__) has only three font sizes.
+ // If for some reason smaller/larger is selected, display it as "normal"
+ if (!AVKONAPAC)
+ {
+ switch (iFontSize)
+ {
+ case 0:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_SMALL;
+ case 1:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_SMALLER;
+ case 2:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_NORMAL;
+ case 3:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_LARGER;
+ case 4:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_LARGE;
+ default:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_NORMAL;
+ }
+ }
+ else
+ {
+ switch (iFontSize)
+ {
+ case 0:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_SMALL;
+ case 1:
+ case 2:
+ case 3:
+ //These three map to same size.
+ iFontSize = 2;
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_NORMAL;
+ case 4:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_LARGE;
+ default:
+ return R_WMLBROWSER_SETTINGS_FS_VALUE_NORMAL;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendToolbarButtonsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendToolbarButtonsL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON1,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton1Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton1Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON2,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton2Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton2Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON3,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton3Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton3Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON4,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton4Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton4Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON5,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton5Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton5Cmd );
+
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON6,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton6Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton6Cmd );
+
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_TOOLBAR_BUTTON7,
+ ToolbarCommandDecodeMatrix[iApiProvider.Preferences().ShowToolbarButton7Cmd()][KToolbarCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsToolbarButton7Cmd );
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::AppendShortcutKeysL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::AppendShortcutKeysL( CDesCArray*& aItemArray,
+ TBuf<KWmlSettingsItemMaxLength>& aItemText)
+ {
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY1,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey1Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey1Cmd );
+
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY2,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey2Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey2Cmd );
+
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY3,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey3Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey3Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY4,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey4Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey4Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY5,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey5Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey5Cmd );
+
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY6,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey6Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey6Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY7,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey7Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey7Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY8,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey8Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey8Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY9,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey9Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey9Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEY0,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey0Cmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKey0Cmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEYSTAR,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKeyStarCmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKeyStarCmd );
+
+ CreateItemFromTwoStringsL(
+ R_BROWSER_SETTING_SHORTCUT_KEYHASH,
+ ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKeyHashCmd()][KShortcutsCommandDecodeMatrixStringId],
+ aItemText );
+ aItemArray->AppendL( aItemText );
+ iSettingIndex->AppendL( EWmlSettingsShortCutKeyHashCmd );
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::ClearListBoxContentL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::ClearListBoxContentL()
+ {
+ CDesCArray* itemArray =
+ ( CDesCArray* ) ( iSettingListBox->Model()->ItemTextArray() );
+
+ // Clear out the listbox content - it is reusable
+ while ( itemArray->Count() )
+ {
+ itemArray->Delete( 0 );
+ }
+ while ( iSettingIndex->Count() )
+ {
+ iSettingIndex->Delete( 0 );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::StoreListBoxIndexL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::StoreListBoxIndexL()
+ {
+ // We only use one list box for all of the lists in the Settings,
+ // we need to keep track of the current & top indices so that focus
+ // is updated correctly
+
+ if ( iCurrentSettingCategory == EMain )
+ {
+ iMainSettingCurrentIndex = iSettingListBox->CurrentItemIndex();
+ iMainSettingTopPosIndex = iSettingListBox->TopItemIndex();
+
+ // Reinitialise the subsetting indices
+ iSubSettingCurrentIndex = KWmlSettingsIndexNone;
+ iSubSettingTopPosIndex = 0;
+ }
+ else
+ {
+ iSubSettingCurrentIndex = iSettingListBox->CurrentItemIndex();
+ iSubSettingTopPosIndex = iSettingListBox->TopItemIndex();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::RestoreListBoxIndexL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::RestoreListBoxIndexL()
+ {
+ iSettingListBox->Reset();
+
+ // Listbox might not have index
+ if ( iCurrentSettingCategory == EMain )
+ {
+ if ( iMainSettingCurrentIndex != KWmlSettingsIndexNone )
+ {
+ iSettingListBox->SetCurrentItemIndex( iMainSettingCurrentIndex );
+ iSettingListBox->SetTopItemIndex( iMainSettingTopPosIndex );
+ }
+ }
+ else
+ {
+ if ( iSubSettingCurrentIndex != KWmlSettingsIndexNone )
+ {
+ iSettingListBox->SetCurrentItemIndex( iSubSettingCurrentIndex );
+ iSettingListBox->SetTopItemIndex( iSubSettingTopPosIndex );
+ }
+ }
+ iSettingListBox->HandleItemAdditionL();
+ iSettingListBox->DrawNow();
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::ChangeItemL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::ChangeItemL( TBool aSelectKeyWasPressed )
+ {
+ LOG_ENTERFN("CSettingsContainer::ChangeItemL");
+ // item is selected for modification
+ TInt currentItem( iSettingListBox->CurrentItemIndex() );
+
+
+
+ // creating array to hold resource ids of options
+ CArrayFixFlat<TInt> *values=new(ELeave)CArrayFixFlat<TInt>( 4 );
+
+ // creating an array to hold mapping between displayed choices and resource ids
+ // in the case of Toolbar/Shortcut key assignments
+ // where some commands (like ROTATE) are not visible.
+ CArrayFixFlat<TInt> *valueDisplayMapping=new(ELeave)CArrayFixFlat<TInt>(4);
+
+
+ CleanupStack::PushL( values );
+ CleanupStack::PushL( valueDisplayMapping );
+ TInt value;
+ MPreferences& preferences = ApiProvider().Preferences();
+ TInt settingsItem = MapCurrentItem( currentItem );
+ switch ( settingsItem )
+ {
+ case EWmlSettingsAccesspoint:
+ {
+ TInt err(KErrNone);
+ TInt retVal( KErrNone );
+ //start the connection dialog
+ CCmApplicationSettingsUi* settings = CCmApplicationSettingsUi::NewL();
+ CleanupStack::PushL( settings );
+
+ TCmSettingSelection selection;
+
+ //
+ // In Avkon tradition,
+ // set the id of selection from the existing setting in preferences
+ // so it is shown that way in the selection dialog box.
+ //
+ // Note the CCmApplicationSettingsUi API should ensure that if
+ // "Connection Method" was previously selected, it should show up as
+ // "Uncategorized" being shown selected
+ //
+ switch (preferences.AccessPointSelectionMode())
+ {
+ case EAlwaysAsk:
+ {
+ selection.iResult = EAlwaysAsk;
+ selection.iId = preferences.DefaultSnapId();
+ break;
+ }
+ case EDestination:
+ {
+ selection.iResult = EDestination;
+ selection.iId = preferences.DefaultSnapId();
+ break;
+ }
+ case EConnectionMethod:
+ {
+ selection.iResult = EConnectionMethod;
+ selection.iId = Util::IapIdFromWapIdL( ApiProvider(), preferences.DefaultAccessPoint() );
+ break;
+ }
+ default:
+ // default case, set it to nothing
+ selection.iResult = EDefaultConnection;
+ break;
+ }
+
+ // empty filter array because no filtering is wanted
+ TBearerFilterArray filterArray;
+ TRAP ( err, retVal = settings->RunApplicationSettingsL( selection,
+ EShowAlwaysAsk | EShowDestinations | EShowConnectionMethods,
+ // turn off SNAP
+// EShowAlwaysAsk | EShowConnectionMethods,
+ filterArray ) );
+ CleanupStack::PopAndDestroy();//settings
+
+ //if something has been selected
+ if (retVal)
+ {
+ //set the selection mode
+ preferences.SetAccessPointSelectionModeL(
+ STATIC_CAST( TCmSettingSelectionMode, selection.iResult ) );
+
+ //based on the chosen connection type, store the connection identifier(iapid, snap id, always ask)
+ //in the preferences list
+ switch (preferences.AccessPointSelectionMode())
+ {
+ case EConnectionMethod:
+ {
+ BROWSER_LOG( ( _L( "CSettingsContainer::ChangeItemL CApSettingsHandler" ) ) );
+
+ TUint32 id = preferences.DefaultAccessPoint();
+ // CMManager gives us IAPid, need to translate to WAPid
+ if (selection.iId != 0)
+ {
+ id = Util::WapIdFromIapIdL( ApiProvider(), selection.iId );
+ }
+ preferences.SetDefaultAccessPointL( id );
+ BROWSER_LOG( ( _L( " SetDefaultAccessPointL OK" ) ) );
+ // Requested AP is preset for PushMtm
+ ApiProvider().SetRequestedAP( preferences.DefaultAccessPoint() );
+ break;
+ }
+
+ case EDestination:
+ {
+ TUint32 snapId = preferences.DefaultSnapId();
+ if (selection.iId != 0)
+ {
+ snapId = selection.iId;
+ }
+ preferences.SetDefaultSnapId( snapId );
+
+ break;
+ }
+
+ case EAlwaysAsk:
+ {
+ break;
+ }
+
+ default:
+ {
+ LOG_ENTERFN(" Wrong value in CSettingsContainer::ChangeItemL");
+ }
+ }
+ }
+
+ DisplayGeneralSettingsL();
+ BROWSER_LOG( ( _L( "DisplayGeneralSettingsL OK" ) ) );
+
+ break;
+ }
+
+ case EWmlSettingsAutoLoadContent:
+ {
+ if(iFlashPluginPresent)
+ {
+ value = 2 - preferences.AutoLoadContent();
+
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOLOAD_ALL ); // 2
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOLOAD_IMAGES_NO_FLASH ); // 1
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOLOAD_TEXT ); // 0
+
+ value = 2 - (ShowRadioButtonSettingPageL(R_WMLBROWSER_SETTINGS_AUTOLOAD_CONTENT,
+ values,
+ value ));
+ }
+ else
+ {
+ // Below is cenrep values for Load Content for cenrep key KBrowserNGImagesEnabled
+ // Load Content
+ // Valid values:
+ // If flash plugin is present: 0 = Text only, 1 = Images,No flash, 2 = All
+ // If flash plugin is not present 0 = Text only, 1 = All
+
+ // Based on this we have to manually translate the value of 1 from Images,No flash to All
+ // in case where the flash plugin is not present.
+
+
+ value = 1 - preferences.AutoLoadContent();
+
+ if ( value < 0 )
+ {
+ // for case of EWmlSettingsAutoloadAll value would be negative ;
+ // reset to 0 to prevent crash later
+ value = 0;
+ }
+
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOLOAD_ALL ); // 1 (translated from 2 when flash plugin is present)
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOLOAD_TEXT ); // 0
+
+ value = 1 - (ShowRadioButtonSettingPageL(R_WMLBROWSER_SETTINGS_AUTOLOAD_CONTENT,
+ values,
+ value ));
+
+ if (value == EWmlSettingsAutoloadImagesNoFlash)
+ // Flash plugin not present so reset value from 1 to 2
+ {
+ value = EWmlSettingsAutoloadAll;
+ }
+ }
+
+ preferences.SetAutoLoadContentL( value );
+ DisplayPageSettingsL();
+ break;
+ }
+
+ case EWmlSettingsFontSize:
+ {
+ //The relationship between index and fontsize is awkward because
+ //the radio buttons reverse the order and the routine called tries
+ //to straighten that out.
+ TInt fontIndex = 4 - iFontSize; // (0,1,2,3,4 >> 4,3,2,1,0)
+ if (!AVKONAPAC)
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_LARGE );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_LARGER );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_NORMAL );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_SMALLER );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_SMALL );
+ //Convert result to (4,3,2,1,0 >> 0,1,2,3,4)
+ iFontSize = 4 - (ShowRadioButtonSettingPageL(R_WMLBROWSER_SETTINGS_FONT_SIZE,
+ values,
+ fontIndex ));
+ }
+ else
+ {
+ // China build has only three font sizes. Radio button
+ // indices are 0, 1, 2. Map these to 0, 2, 4 (all small,
+ // normal, all large) for preferences.
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_LARGE );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_NORMAL );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FS_VALUE_ALL_SMALL );
+ //Convert result to (4,3,2,1,0 >> 0,1,2,3,4)
+ iFontSize = 4 - (ShowRadioButtonSettingPageL(R_WMLBROWSER_SETTINGS_FONT_SIZE,
+ values,
+ fontIndex >> 1 ) << 1);
+ }
+ preferences.SetFontSizeL( iFontSize );
+ DisplayPageSettingsL();
+ break;
+ }
+
+ case EWmlSettingsPageOverview:
+ {
+ if( ApiProvider().WindowMgr().CurrentWindow()->IsPageOverviewSupportedL() )
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_PAGEOVERVIEW_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_PAGEOVERVIEW_ON );
+ value = preferences.PageOverview();
+ value = aSelectKeyWasPressed ?
+ 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_PAGEOVERVIEW,
+ values,
+ value );
+ preferences.SetPageOverviewL( value );
+ DisplayGeneralSettingsL();
+ }
+ break;
+ }
+
+ case EWmlSettingsBackList:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_BACK_LIST_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_BACK_LIST_ON );
+ value = preferences.BackList();
+ value = aSelectKeyWasPressed ?
+ 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_BACK_LIST,
+ values,
+ value );
+ preferences.SetBackListL( value );
+ DisplayGeneralSettingsL();
+ break;
+ }
+ case EWmlSettingsUrlSuffix:
+ {
+ TInt ret;
+
+ HBufC* suffixBuf = iApiProvider.Preferences().URLSuffixList();
+ HBufC* suffixToPass = HBufC::NewLC( KMaxSearchPgUrlLength );
+ suffixToPass = suffixBuf;
+ TPtr ptr = suffixToPass->Des();
+
+ TInt resource = R_URL_SUFFIX_PAGE;
+
+ CAknSettingPage* dlg = new ( ELeave ) CAknTextSettingPage(
+ resource, ptr, CAknTextSettingPage::EZeroLengthAllowed );
+
+ ret = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+
+ if ( ret )
+ {
+ iApiProvider.Preferences().SetURLSuffixList(suffixToPass);
+ }
+
+ CleanupStack::PopAndDestroy(); // suffixToPass
+ DisplayGeneralSettingsL();
+ break;
+ }
+ case EWmlSettingsAutoRefresh:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTO_REFRESH_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTO_REFRESH_ON );
+ value = preferences.AutoRefresh();
+ value = aSelectKeyWasPressed ?
+ 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_AUTO_REFRESH,
+ values,
+ value );
+ preferences.SetAutoRefreshL( value );
+ DisplayPageSettingsL();
+ break;
+ }
+
+ case EWmlSettingsEncoding:
+ {
+ TInt highlightedItemIndex = KDoesntExist;
+ TInt lathinIndex = KDoesntExist;
+ for( int i = iEncodingArray->Count() - 1; i >= 0; i-- )
+ {
+ TEncodingStruct encoding = iEncodingArray->At(i);
+
+ if ( encoding.iSystemId == KCharacterSetIdentifierIso88591 )
+ {
+ lathinIndex = i;
+ }
+
+ values->AppendL( encoding.iResId );
+
+ if ( encoding.iSystemId == iEncoding )
+ {
+ highlightedItemIndex = i;
+ }
+ }
+
+ if( highlightedItemIndex == KDoesntExist )
+ {
+ if( lathinIndex != KDoesntExist )
+ {
+ highlightedItemIndex = lathinIndex;
+ }
+ else
+ {
+ highlightedItemIndex = 0;
+ }
+ }
+
+ TInt selectedIndex =
+ iEncodingArray->Count() - 1 -
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_ENCODING,
+ values,
+ iEncodingArray->Count() - 1 - highlightedItemIndex );
+
+ TEncodingStruct selectedEncoding =
+ iEncodingArray->At( selectedIndex );
+
+ iEncoding = selectedEncoding.iSystemId;
+ DisplayPageSettingsL();
+ break;
+ }
+
+ case EWmlSettingsAdaptiveBookmarks:
+ {
+ values->AppendL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS_VALUE_OFF );
+ values->AppendL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS_VALUE_HIDE_FOLDER );
+ values->AppendL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS_VALUE_ON );
+
+ value = 2-preferences.AdaptiveBookmarks();
+ value = ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_ADAPTIVE_BOOKMARKS,
+ values,
+ value );
+ preferences.SetAdaptiveBookmarksL(
+ ( TWmlSettingsAdaptiveBookmarks )(2-value) );
+ DisplayPrivacySettingsL();
+ break;
+ }
+
+ case EWmlSettingsFormDataSaving:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING_ONLY );
+ values->AppendL( R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING_ON );
+
+ value = preferences.FormDataSaving();
+ TInt origValue(value);
+ value = ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_FORM_DATA_SAVING,
+ values,
+ value );
+ preferences.SetFormDataSavingL( (TWmlSettingsFormData) value );
+
+ if (origValue > value)
+ {
+ // query to see if we need to delete stored form data
+ if (origValue == EWmlSettingsFormDataPlusPassword && value == EWmlSettingsFormDataOnly)
+ {
+ // delete password data?
+ ShowFormDataDeletePasswordQueryDialogL();
+ }
+ else if (origValue == EWmlSettingsFormDataPlusPassword && value == EWmlSettingsFormDataOff)
+ {
+ // delete password and form data
+ ShowFormDataDeleteAllQueryDialogL();
+ }
+ else if (origValue == EWmlSettingsFormDataOnly && value == EWmlSettingsFormDataOff)
+ {
+ // delete form data
+ ShowFormDataDeleteAllQueryDialogL();
+ }
+ }
+
+ DisplayPrivacySettingsL();
+ break;
+ }
+
+ case EWmlSettingsFullScreen:
+ {
+
+ values->AppendL( R_WMLBROWSER_SETTINGS_SOFTKEYS_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_SOFTKEYS_ON );
+ value = preferences.FullScreen();
+ value = aSelectKeyWasPressed ?
+ 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_SOFTKEYS,
+ values,
+ value );
+ preferences.SetFullScreenL( ( TWmlSettingsFullScreen )( value ) );
+ DisplayPageSettingsL();
+ break;
+ }
+
+ case EWmlSettingsHomePage:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_HOMEPAGE_BOOKMARKS );
+
+ // "Use current page" is available only if a page is loaded.
+ // so there might be a hole in the array!
+ HBufC *url = CBrowserAppUi::Static()->BrCtlInterface().PageInfoLC(
+ TBrCtlDefs::EPageInfoUrl );
+
+ TInt useCurrent( 0 );
+ if( url && url->Length() )
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_HOMEPAGE_USE_CURRENT );
+ ++useCurrent;
+ }
+
+ values->AppendL( R_WMLBROWSER_SETTINGS_HOMEPAGE_NEW_ADDRESS );
+ values->AppendL( R_WMLBROWSER_SETTINGS_HOMEPAGE_ACCESS_POINT );
+ TBool dialogCancel( ETrue );
+ while( dialogCancel )
+ {
+ value = preferences.HomePageType();
+ if( !useCurrent )
+ {
+ // 'Use current' is not shown as current item
+ if( (TWmlSettingsHomePage)value == EWmlSettingsHomePageUseCurrent )
+ {
+ value = EWmlSettingsHomePageAddress;
+ }
+ // items behind UseCurrent must be shifted below
+ else if( (TWmlSettingsHomePage)value > EWmlSettingsHomePageUseCurrent )
+ {
+ --value;
+ }
+ }
+ // sanity check
+ if( value >= 7 + useCurrent )
+ {
+ value = 7 + useCurrent;
+ }
+ if( ShowRadioButtonSettingPageBoolL(
+ R_WMLBROWSER_SETTINGS_STARTPAGE, values, &value ) )
+ { // OK was pressed on RadioSetting
+ // shift value if needed
+ if( !useCurrent &&
+ ( (TWmlSettingsHomePage)value >= EWmlSettingsHomePageUseCurrent) )
+ {
+ ++value;
+ }
+ if( (TWmlSettingsHomePage)value == EWmlSettingsHomePageAddress )
+ {
+ HBufC* prompt = StringLoader::LoadLC( R_BROWSER_PROMPT_HOMEPAGE_URL );
+ HBufC* retBuf = HBufC::NewL( KMaxHomePgUrlLength );
+ TPtr retString = retBuf->Des();
+ retString.Copy( KNullDesC );
+
+ if( preferences.HomePageUrlL( retString, ETrue ) != KErrNone )
+ {
+ retString.Zero();
+ retString.Copy( KNullDesC );
+ }
+ TInt result = TBrowserDialogs::DialogPromptReqL(
+ prompt->Des(),
+ &retString,
+ ETrue,
+ KMaxHomePgUrlLength );
+ CleanupStack::PopAndDestroy(); // prompt
+ if( result ) // URL was accepted
+ {
+ preferences.SetHomePageUrlL( retString );
+ preferences.SetHomePageTypeL( (TWmlSettingsHomePage) value );
+ dialogCancel = EFalse;
+ }
+ if( retBuf )
+ {
+ delete retBuf;
+ }
+ // else URL was cancelled! one more round
+ }
+ else if( (TWmlSettingsHomePage)value == EWmlSettingsHomePageAccessPoint )
+ {
+ preferences.SetHomePageTypeL( (TWmlSettingsHomePage) value );
+ dialogCancel = EFalse;
+ }
+ else if( (TWmlSettingsHomePage)value == EWmlSettingsHomePageUseCurrent )
+ {
+ // url was already checked. it exists.
+ TPtr urlPtr = url->Des();
+ preferences.SetHomePageUrlL( urlPtr );
+ preferences.SetHomePageTypeL( (TWmlSettingsHomePage) value );
+ dialogCancel = EFalse;
+ }
+ else if( (TWmlSettingsHomePage)value == EWmlSettingsHomePageBookmarks )
+ {
+ preferences.SetHomePageTypeL( (TWmlSettingsHomePage) value );
+ dialogCancel = EFalse;
+ }
+ }
+ else // Cancel was pressed on RadioSetting, nothing to do
+ {
+ dialogCancel = EFalse;
+ }
+ DisplayGeneralSettingsL();
+ }
+ CleanupStack::PopAndDestroy( url ); // url
+ break;
+ }
+
+ case EWmlSettingsAutomaticUpdatingAP:
+ {
+ TUint32 id = preferences.AutomaticUpdatingAP();
+ SelectUserDefinedAPL( id );
+
+ preferences.SetAutomaticUpdatingApL( id );
+ BROWSER_LOG( ( _L( "EWmlSettingsAutomaticUpdatingAP SetAutomaticUpdatingApL()" ) ) );
+
+ DisplayWebFeedsSettingsL();
+ BROWSER_LOG( ( _L( "EWmlSettingsAutomaticUpdatingAP DisplayWebFeedsSettingsL()" ) ) );
+ break;
+ }
+
+ case EWmlSettingsMediaVolume:
+ {
+ // Add option list items
+ values->AppendL( R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_4 );
+ values->AppendL( R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_3 );
+ values->AppendL( R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_2 );
+ values->AppendL( R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_1 );
+ values->AppendL( R_WMLBROWSER_SETTINGS_MEDIA_VOLUME_MUTED );
+
+ TInt itemcount = values->Count();
+
+ // Get Media Volume Value
+ value = preferences.MediaVolume();
+
+ // Convert volume to list index
+ switch ( value )
+ {
+ case EWmlSettingsVolumeMuted:
+ value = EVolumeMute;
+ break;
+ case EWmlSettingsVolume1:
+ value = EVolumeLevel1;
+ break;
+ case EWmlSettingsVolume2:
+ value = EVolumeLevel2;
+ break;
+ case EWmlSettingsVolume3:
+ value = EVolumeLevel3;
+ break;
+ case EWmlSettingsVolume4:
+ value = EVolumeLevel4;
+ break;
+ default:
+ break;
+ }
+
+ // Open Volume Option List Page
+ value = ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_MEDIA_VOLUME, values,
+ ( itemcount - 1 ) - value );
+
+ // Reconvert list index to volume
+ value = ( itemcount - 1 ) - value;
+ switch ( value )
+ {
+ case EVolumeMute:
+ value = EWmlSettingsVolumeMuted;
+ break;
+ case EVolumeLevel1:
+ value = EWmlSettingsVolume1;
+ break;
+ case EVolumeLevel2:
+ value = EWmlSettingsVolume2;
+ break;
+ case EVolumeLevel3:
+ value = EWmlSettingsVolume3;
+ break;
+ case EVolumeLevel4:
+ value = EWmlSettingsVolume4;
+ break;
+ default:
+ break;
+ }
+
+ // Save Media Volume Value
+ preferences.SetMediaVolumeL( value );
+ DisplayPageSettingsL();
+ break;
+ }
+
+ case EWmlSettingsCookies:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_C_VALUE_REJECT );
+ values->AppendL( R_WMLBROWSER_SETTINGS_C_VALUE_ALLOW );
+ value = preferences.Cookies();
+ value = aSelectKeyWasPressed ? 1 - value : ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_COOKIES,
+ values,
+ value );
+ preferences.SetCookiesL( ( TWmlSettingsCookies )value );
+ DisplayPrivacySettingsL();
+ break;
+ }
+
+ case EWmlSettingsEcma:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_ECMA_VALUE_DISABLE );
+ values->AppendL( R_WMLBROWSER_SETTINGS_ECMA_VALUE_ENABLE );
+ value = preferences.Ecma();//items need to be appended in reverse order
+ value = aSelectKeyWasPressed ? 1 - value : ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_ECMA,
+ values,
+ value );
+ preferences.SetEcmaL( ( TWmlSettingsECMA ) value );
+ DisplayGeneralSettingsL();
+ break;
+ }
+
+ case EWmlSettingsScriptLog:
+ {
+ value = 3 - preferences.ScriptLog();
+
+ values->AppendL( R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_TO_CONSOLE_FILE );
+ values->AppendL( R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_TO_CONSOLE );
+ values->AppendL( R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_TO_FILE );
+ values->AppendL( R_WMLBROWSER_SETTINGS_SCRIPTLOG_VALUE_DISABLE );
+
+ value = 3 - (ShowRadioButtonSettingPageL(R_WMLBROWSER_SETTINGS_SCRIPTLOG,
+ values,
+ value ));
+ preferences.SetScriptLogL( value );
+ DisplayGeneralSettingsL();
+
+ break;
+ }
+
+ case EWmlSettingsDownloadsOpen:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_DOWNLOAD_OPEN_YES );
+ values->AppendL( R_WMLBROWSER_SETTINGS_DOWNLOAD_OPEN_NO );
+ value = preferences.DownloadsOpen();
+ value = aSelectKeyWasPressed ? value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_DOWNLOAD_OPEN,
+ values,
+ 1 - value );
+ preferences.SetDownloadsOpenL( 1 - value );
+ DisplayGeneralSettingsL();
+ break;
+ }
+
+ case EWmlSettingsHttpSecurityWarnings:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_WRN_VALUE_SHOW );
+ values->AppendL( R_WMLBROWSER_SETTINGS_WRN_VALUE_HIDE );
+ value = preferences.HttpSecurityWarnings();
+ value = aSelectKeyWasPressed ? value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_HTTP_SEC_WRNS,
+ values,
+ 1 - value );
+ preferences.SetHttpSecurityWarningsL( 1 - value ); // show=1, hide=0 in preferences
+ DisplayGeneralSettingsL();
+ break;
+ }
+
+ case EWmlSettingsSearchProvider:
+ {
+ RunSearchSettingsL();
+ break;
+ }
+
+
+
+ case EWmlSettingsIMEINotification:
+ {
+ if ( IMEI_NOTIFICATION )
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_IMEI_VALUE_DISABLED );
+ values->AppendL( R_WMLBROWSER_SETTINGS_IMEI_VALUE_ENABLED );
+ value = preferences.IMEINotification();
+ //items need to be appended in reverse order
+ value = aSelectKeyWasPressed ? 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_IMEI,
+ values,
+ value );
+ preferences.SetIMEINotificationL( ( TWmlSettingsIMEI ) value );
+ DisplayPrivacySettingsL();
+ }
+ break;
+ }
+
+ case EWmlSettingsSendReferrer:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_SEND_REFERRER_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_SEND_REFERRER_ON );
+ value = preferences.SendReferrer();
+ value = aSelectKeyWasPressed ? 1 - value : ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_SEND_REFERRER,
+ values,
+ value );
+ DisplayPrivacySettingsL();
+ break;
+ }
+
+ case EWmlSettingsPopupBlocking:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_POPUP_BLOCKING_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_POPUP_BLOCKING_ON );
+ value = preferences.PopupBlocking();
+ value = aSelectKeyWasPressed ? 1 - value : ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_POPUP_BLOCKING,
+ values,
+ value );
+ preferences.SetPopupBlockingL( value );
+ DisplayPageSettingsL();
+ break;
+ }
+
+
+ case EWmlSettingsAutomaticUpdatingWhileRoaming:
+ {
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING_OFF );
+ values->AppendL( R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING_ON );
+
+ value = preferences.AutomaticUpdatingWhileRoaming();
+ value = aSelectKeyWasPressed ?
+ 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_WMLBROWSER_SETTINGS_AUTOUPDATING_ROAMING,
+ values,
+ value );
+ preferences.SetAutomaticUpdatingWhileRoamingL( value );
+
+ DisplayWebFeedsSettingsL();
+ break;
+ }
+
+
+ case EWmlSettingsToolbarOnOff:
+ {
+ values->AppendL( R_BROWSER_SETTING_TOOLBAR_OFF );
+ values->AppendL( R_BROWSER_SETTING_TOOLBAR_ON );
+
+ value = preferences.ShowToolbarOnOff();
+ value = aSelectKeyWasPressed ?
+ 1 - value :
+ ShowRadioButtonSettingPageL(
+ R_BROWSER_SETTING_TOOLBAR_ON_OFF,
+ values,
+ value );
+ preferences.SetToolbarOnOffL( value );
+
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+
+ case EWmlSettingsToolbarButton1Cmd:
+ {
+ value = preferences.ShowToolbarButton1Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON1,
+ values,
+ value );
+
+ preferences.SetToolbarButton1CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsToolbarButton2Cmd:
+ {
+ value = preferences.ShowToolbarButton2Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON2,
+ values,
+ value );
+
+ preferences.SetToolbarButton2CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsToolbarButton3Cmd:
+ {
+ value = preferences.ShowToolbarButton3Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON3,
+ values,
+ value );
+
+ preferences.SetToolbarButton3CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsToolbarButton4Cmd:
+ {
+ value = preferences.ShowToolbarButton4Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON4,
+ values,
+ value );
+
+ preferences.SetToolbarButton4CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsToolbarButton5Cmd:
+ {
+ value = preferences.ShowToolbarButton5Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON5,
+ values,
+ value );
+
+ preferences.SetToolbarButton5CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsToolbarButton6Cmd:
+ {
+ value = preferences.ShowToolbarButton6Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON6,
+ values,
+ value );
+
+ preferences.SetToolbarButton6CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsToolbarButton7Cmd:
+ {
+ value = preferences.ShowToolbarButton7Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetToolbarButtonValues(values, value, valueDisplayMapping);
+
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_TOOLBAR_BUTTON7,
+ values,
+ value );
+
+ preferences.SetToolbarButton7CmdL( valueDisplayMapping->At(value) );
+ DisplayToolbarSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey1Cmd:
+ {
+ value = preferences.ShortcutKey1Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY1,
+ values,
+ value );
+ preferences.SetShortcutKey1CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey2Cmd:
+ {
+ value = preferences.ShortcutKey2Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY2,
+ values,
+ value );
+ preferences.SetShortcutKey2CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey3Cmd:
+ {
+ value = preferences.ShortcutKey3Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY3,
+ values,
+ value );
+ preferences.SetShortcutKey3CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey4Cmd:
+ {
+ value = preferences.ShortcutKey4Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY4,
+ values,
+ value );
+ preferences.SetShortcutKey4CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey5Cmd:
+ {
+ value = preferences.ShortcutKey5Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY5,
+ values,
+ value );
+ preferences.SetShortcutKey5CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey6Cmd:
+ {
+ value = preferences.ShortcutKey6Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY6,
+ values,
+ value );
+ preferences.SetShortcutKey6CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey7Cmd:
+ {
+ value = preferences.ShortcutKey7Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY7,
+ values,
+ value );
+ preferences.SetShortcutKey7CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey8Cmd:
+ {
+ value = preferences.ShortcutKey8Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY8,
+ values,
+ value );
+ preferences.SetShortcutKey8CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey9Cmd:
+ {
+ value = preferences.ShortcutKey9Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY9,
+ values,
+ value );
+ preferences.SetShortcutKey9CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKey0Cmd:
+ {
+ value = preferences.ShortcutKey0Cmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEY0,
+ values,
+ value );
+ preferences.SetShortcutKey0CmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKeyStarCmd:
+ {
+ value = preferences.ShortcutKeyStarCmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEYSTAR,
+ values,
+ value );
+ preferences.SetShortcutKeyStarCmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ case EWmlSettingsShortCutKeyHashCmd:
+ {
+ value = preferences.ShortcutKeyHashCmd();
+ // set toolbar values will build values into an array to be displayed to the user
+ // this may mean filtering out some items, so we have to know the mapping between our
+ // fixed array of commands as well as the current value from settings
+ value = SetShortcutKeysValues(values, value, valueDisplayMapping);
+ value = ShowRadioButtonSettingPageL( R_BROWSER_SETTING_SHORTCUT_KEYHASH,
+ values,
+ value );
+ preferences.SetShortcutKeyHashCmdL( valueDisplayMapping->At(value) );
+ DisplayShortcutsSettingsL();
+ break;
+ }
+
+ default:
+ break;
+ }
+ CleanupStack::PopAndDestroy(2); // values, valueDisplayMapping
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::SetToolbarButtonValues
+// -----------------------------------------------------------------------------
+//
+TInt CSettingsContainer::SetToolbarButtonValues(CArrayFixFlat<TInt> *values, TInt value, CArrayFixFlat<TInt> *displaymap)
+ {
+ TInt valueNewMapping = 0;
+
+ for ( TInt i=0 ; i < KToolbarCommandDecodeMatrixCount ; i++ )
+ {
+ TInt stringId = ToolbarCommandDecodeMatrix[i][KToolbarCommandDecodeMatrixStringId];
+
+ if ((stringId == R_BROWSER_SETTING_ROTATE_SCREEN) && (!ApiProvider().Preferences().RotateDisplay()) )
+ { // Rotate Display is not available so don't show it as a toolbar button command
+ continue;
+ }
+
+#ifndef __RSS_FEEDS
+ if (stringId == R_BROWSER_SETTING_SUBSCRIBE_TO_FEEDS)
+ { // Subscribe to Feeds is not available so don't show it as a toolbar button command
+ continue;
+ }
+#endif
+
+ // Disable save page until it's officially supported
+ if (stringId == R_BROWSER_SETTING_SAVE_PAGE )
+ {
+ continue;
+ }
+
+ // make a note at the index within the new array that the current value is at
+ // before appending (Count will then correspond to the index, rather than needing to use
+ // Count() - 1 AFTER we add it
+ if(i == value)
+ {
+ valueNewMapping = displaymap->Count();
+ }
+ displaymap->AppendL( i );
+ values->AppendL( stringId );
+ }
+
+ return valueNewMapping;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::SetShortcutKeysValues
+// -----------------------------------------------------------------------------
+//
+TInt CSettingsContainer::SetShortcutKeysValues(CArrayFixFlat<TInt> *values, TInt value, CArrayFixFlat<TInt> *displaymap)
+ {
+ TInt valueNewMapping = 0;
+
+ for ( TInt i=0 ; i < KShortcutsCommandDecodeMatrixCount ; i++ )
+ {
+
+ TInt stringId = ShortcutsCommandDecodeMatrix[i][KShortcutsCommandDecodeMatrixStringId];
+
+ if ((stringId == R_BROWSER_SETTING_ROTATE_SCREEN) && (!ApiProvider().Preferences().RotateDisplay()) )
+ { // Rotate Display is not available so don't show it as a shortcut key command
+ continue;
+ }
+
+#ifndef __RSS_FEEDS
+ if (stringId == R_BROWSER_SETTING_SUBSCRIBE_TO_FEEDS)
+ { // Subscribe to Feeds is not available so don't show it as a shortcut key command
+ continue;
+ }
+#endif
+
+
+ // Disable save page until it's officially supported
+ if (stringId == R_BROWSER_SETTING_SAVE_PAGE )
+ {
+ continue;
+ }
+
+ // make a note at the index within the new array that the current value is at
+ // before appending (Count will then correspond to the index, rather than needing to use
+ // Count() - 1 AFTER we add it
+ if(i == value)
+ {
+ valueNewMapping = displaymap->Count();
+ }
+
+ displaymap->AppendL( i );
+ values->AppendL(stringId );
+ }
+
+ return valueNewMapping;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::IsSettingModifiable
+// -----------------------------------------------------------------------------
+//
+TBool CSettingsContainer::IsSettingModifiable() const
+ {
+ TBool ret( EFalse );
+
+ switch ( iCurrentSettingCategory )
+ {
+ // Only these setting lists contain items which can be modified
+ case EGeneral:
+ case EPage:
+ case EWebFeeds:
+ case EPrivacy:
+ case EToolbar:
+ case EShortCuts:
+ {
+ ret = ETrue;
+ break;
+ }
+ default:
+ break;
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::ShowRadioButtonSettingPageL
+// -----------------------------------------------------------------------------
+//
+TInt CSettingsContainer::ShowRadioButtonSettingPageL(
+ TInt aTitle,
+ CArrayFixFlat<TInt>* aValues,
+ TInt aCurrentItem )
+ {
+ // title of the dialog
+ HBufC* title = iCoeEnv->AllocReadResourceLC( aTitle );
+
+ __ASSERT_DEBUG( (aValues != NULL), Util::Panic( Util::EUninitializedData ));
+
+
+ // options array
+ CDesCArrayFlat* values = new( ELeave )CDesCArrayFlat(1);
+ CleanupStack::PushL( values );
+
+ for ( TInt i = aValues->Count() - 1; i >= 0; i-- )
+ {
+ HBufC* value = iCoeEnv->AllocReadResourceLC( aValues->At( i ) );
+ values->AppendL( *value );
+ CleanupStack::PopAndDestroy(); // value
+ }
+
+ // index must be turned upside down, because options list is upside down
+ TInt newItem = aCurrentItem = aValues->Count() - 1 - aCurrentItem;
+
+ // We have everything to create dialog
+ CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
+ R_RADIO_BUTTON_SETTING_PAGE, newItem, values );
+
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( *title );
+ //dlg->ConstructL();
+ //dlg->ListBoxControl()->SetCurrentItemIndex( newItem );
+ CleanupStack::Pop(); // dlg
+ iActionCancelled = EFalse;
+ if ( !dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ // Changes confirmed
+ newItem = aCurrentItem;
+ iActionCancelled = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // title, values
+
+ // index must be re-turned upside down, because options list is upside down
+ return aValues->Count() - 1 - newItem;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::ShowRadioButtonSettingPageL
+// -----------------------------------------------------------------------------
+//
+TBool CSettingsContainer::ShowRadioButtonSettingPageBoolL(
+ TInt aTitle,
+ CArrayFixFlat<TInt>* aValues,
+ TInt* aCurrentItem )
+ {
+ // title of the dialog
+ HBufC* title = iCoeEnv->AllocReadResourceLC( aTitle );
+
+ __ASSERT_DEBUG( (aValues != NULL), Util::Panic( Util::EUninitializedData ));
+ __ASSERT_DEBUG( (aCurrentItem != NULL), Util::Panic( Util::EUninitializedData ));
+
+
+ // options array
+ CDesCArrayFlat* values = new( ELeave )CDesCArrayFlat(1);
+ CleanupStack::PushL( values );
+
+ for ( TInt i = aValues->Count() - 1; i >= 0; i-- )
+ {
+ HBufC* value = iCoeEnv->AllocReadResourceLC( aValues->At( i ) );
+ values->AppendL( *value );
+ CleanupStack::PopAndDestroy(); // value
+ }
+
+ TInt newItem = *aCurrentItem;
+ CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
+ R_RADIO_BUTTON_SETTING_PAGE, newItem, values );
+
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( *title );
+ CleanupStack::Pop(); // dlg
+
+ TBool retval = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+
+ if ( retval ) // OK was selected, store new value
+ {
+ *aCurrentItem = newItem;
+ }
+ CleanupStack::PopAndDestroy( 2 ); // title, values
+ return retval;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::SaveChangesL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::SaveChangesL()
+ {
+ // These settings result in page layout changes, and changes to these
+ // settings should only be relayed once the settings page is closed
+ MPreferences& preferences = ApiProvider().Preferences();
+
+ if ( iFontSize != preferences.FontSize() )
+ {
+ preferences.SetFontSizeL( iFontSize );
+ }
+
+ if ( iEncoding != preferences.Encoding() )
+ {
+ preferences.SetEncodingL( iEncoding );
+ }
+
+ if ( iTextWrap != preferences.TextWrap() )
+ {
+ preferences.SetTextWrapL( iTextWrap );
+ }
+ preferences.FlushSD();
+
+ preferences.NotifyObserversL( EPreferencesDeactivate, TBrCtlDefs::ESettingsUnknown );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CSettingsContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse ret = EKeyWasNotConsumed;
+ TKeyEvent keyEvent(aKeyEvent);
+
+ // Special case for MSK enabled mode - turn MSK KeyUp to MSK KeyEvent to process Settings toggle function
+ // This is what is done in BookmarksContainer::OfferKeyEventL
+ if (( keyEvent.iScanCode == EStdKeyDevice3 ) || (keyEvent.iScanCode == EStdKeyEnter))
+ {
+ if( aType == EEventKeyDown )
+ {
+ iSelectionKeyDownPressed = ETrue;
+ ret = EKeyWasConsumed;
+ }
+ else if( aType == EEventKeyUp )
+ {
+ if( iSelectionKeyDownPressed )
+ {
+ keyEvent.iCode = EKeyOK;
+ ret = EKeyWasNotConsumed;
+ iSelectionKeyDownPressed = EFalse;
+ }
+ else
+ {
+ // long press of Selection key was already processed
+ ret = EKeyWasConsumed;
+ }
+ }
+ }
+
+
+ switch ( keyEvent.iCode )
+ {
+ // Open List Box item
+ case EKeyEnter:
+ {
+ switch ( iSettingIndex->At( iSettingListBox->CurrentItemIndex() ) )
+ {
+ case EWmlSettingsGeneral:
+ case EWmlSettingsPrivacy:
+ case EWmlSettingsPage:
+ case EWmlSettingsWebFeeds:
+ case EWmlSettingsToolbar:
+ case EWmlSettingsShortcuts:
+ {
+ DisplayCorrectSettingCategoryListL();
+ break;
+ }
+
+ // Individual Settings
+ case EWmlSettingsAccesspoint:
+ case EWmlSettingsHomePage:
+ case EWmlSettingsBackList:
+ case EWmlSettingsHttpSecurityWarnings:
+ case EWmlSettingsEcma:
+ case EWmlSettingsScriptLog:
+ case EWmlSettingsDownloadsOpen:
+ case EWmlSettingsAutoLoadContent:
+ case EWmlSettingsFullScreen:
+ case EWmlSettingsPageOverview:
+ case EWmlSettingsMediaVolume:
+ case EWmlSettingsEncoding:
+ case EWmlSettingsPopupBlocking:
+ case EWmlSettingsAutoRefresh:
+ case EWmlSettingsAdaptiveBookmarks:
+ case EWmlSettingsFormDataSaving:
+#ifdef __WIM
+ case EWmlSettingsSaveReceipt:
+#endif
+ case EWmlSettingsCookies:
+ case EWmlSettingsIMEINotification:
+ case EWmlSettingsAutomaticUpdatingAP:
+ case EWmlSettingsAutomaticUpdatingWhileRoaming:
+ case EWmlSettingsUrlSuffix:
+ case EWmlSettingsFontSize:
+ case EWmlSettingsToolbarButton1Cmd:
+ case EWmlSettingsToolbarButton2Cmd:
+ case EWmlSettingsToolbarButton3Cmd:
+ case EWmlSettingsToolbarButton4Cmd:
+ case EWmlSettingsToolbarButton5Cmd:
+ case EWmlSettingsToolbarButton6Cmd:
+ case EWmlSettingsToolbarButton7Cmd:
+ case EWmlSettingsShortCutKey1Cmd:
+ case EWmlSettingsShortCutKey2Cmd:
+ case EWmlSettingsShortCutKey3Cmd:
+ case EWmlSettingsShortCutKey4Cmd:
+ case EWmlSettingsShortCutKey5Cmd:
+ case EWmlSettingsShortCutKey6Cmd:
+ case EWmlSettingsShortCutKey7Cmd:
+ case EWmlSettingsShortCutKey8Cmd:
+ case EWmlSettingsShortCutKey9Cmd:
+ case EWmlSettingsShortCutKey0Cmd:
+ case EWmlSettingsShortCutKeyStarCmd:
+ case EWmlSettingsShortCutKeyHashCmd:
+ case EWmlSettingsSearchProvider:
+ {
+ ChangeItemL( ETrue );
+ ret = EKeyWasConsumed;
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ }
+
+ case EKeyOK:
+ {
+ // MSK command handles the commands - no need for key handling
+ ret = EKeyWasConsumed;
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ if ( iSettingListBox && ( ret == EKeyWasNotConsumed || iSettingListBox ) )
+ {
+ ret = iSettingListBox->OfferKeyEventL( keyEvent, aType );
+ }
+ return ret;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::HandleListBoxEventL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::HandleListBoxEventL(CEikListBox* aListBox,TListBoxEvent aEventType)
+ {
+ if (iPenEnabled)
+ {
+ if (iSettingListBox && aListBox == iSettingListBox)
+ {
+ switch (aEventType)
+ {
+ //case MEikListBoxObserver::EEventEnterKeyPressed:
+ case MEikListBoxObserver::EEventItemClicked:
+ break;
+ case MEikListBoxObserver::EEventItemDoubleClicked:
+ {
+ TKeyEvent keyEvent;
+ keyEvent.iModifiers = 0;
+ keyEvent.iRepeats = 0;
+ keyEvent.iCode = EKeyEnter;
+ keyEvent.iScanCode = EStdKeyEnter;
+ CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey );
+ }
+ break;
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ case MEikListBoxObserver::EEventItemSingleClicked:
+
+ switch ( iSettingIndex->At( iSettingListBox->CurrentItemIndex() ) )
+ {
+ case EWmlSettingsGeneral:
+ case EWmlSettingsPrivacy:
+ case EWmlSettingsPage:
+ case EWmlSettingsWebFeeds:
+ case EWmlSettingsToolbar:
+ case EWmlSettingsShortcuts:
+ {
+ DisplayCorrectSettingCategoryListL();
+ break;
+ }
+
+ // Individual Settings
+ case EWmlSettingsAccesspoint:
+ case EWmlSettingsHomePage:
+ case EWmlSettingsBackList:
+ case EWmlSettingsHttpSecurityWarnings:
+ case EWmlSettingsEcma:
+ case EWmlSettingsScriptLog:
+ case EWmlSettingsDownloadsOpen:
+ case EWmlSettingsAutoLoadContent:
+ case EWmlSettingsFullScreen:
+ case EWmlSettingsPageOverview:
+ case EWmlSettingsMediaVolume:
+ case EWmlSettingsEncoding:
+ case EWmlSettingsPopupBlocking:
+ case EWmlSettingsAutoRefresh:
+ case EWmlSettingsAdaptiveBookmarks:
+ case EWmlSettingsFormDataSaving:
+ #ifdef __WIM
+ case EWmlSettingsSaveReceipt:
+ #endif
+ case EWmlSettingsCookies:
+ case EWmlSettingsIMEINotification:
+ case EWmlSettingsAutomaticUpdatingAP:
+ case EWmlSettingsAutomaticUpdatingWhileRoaming:
+ case EWmlSettingsUrlSuffix:
+ case EWmlSettingsFontSize:
+ case EWmlSettingsToolbarButton1Cmd:
+ case EWmlSettingsToolbarButton2Cmd:
+ case EWmlSettingsToolbarButton3Cmd:
+ case EWmlSettingsToolbarButton4Cmd:
+ case EWmlSettingsToolbarButton5Cmd:
+ case EWmlSettingsToolbarButton6Cmd:
+ case EWmlSettingsToolbarButton7Cmd:
+ case EWmlSettingsShortCutKey1Cmd:
+ case EWmlSettingsShortCutKey2Cmd:
+ case EWmlSettingsShortCutKey3Cmd:
+ case EWmlSettingsShortCutKey4Cmd:
+ case EWmlSettingsShortCutKey5Cmd:
+ case EWmlSettingsShortCutKey6Cmd:
+ case EWmlSettingsShortCutKey7Cmd:
+ case EWmlSettingsShortCutKey8Cmd:
+ case EWmlSettingsShortCutKey9Cmd:
+ case EWmlSettingsShortCutKey0Cmd:
+ case EWmlSettingsShortCutKeyStarCmd:
+ case EWmlSettingsShortCutKeyHashCmd:
+ case EWmlSettingsSearchProvider:
+ {
+ ChangeItemL( ETrue );
+ break;
+ }
+ default:
+ break;
+ }
+#endif
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::HandleGainingForegroundL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::HandleGainingForegroundL()
+ {
+ switch(iCurrentSettingCategory)
+ {
+ case EGeneral:
+ DisplayGeneralSettingsL();
+ break;
+ default: // do nothing
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::CreateItemFromTwoStringsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::CreateItemFromTwoStringsL(
+ TInt aFirst,
+ TInt aSecond,
+ TBuf<KWmlSettingsItemMaxLength>& aResult )
+ {
+ // Appends two text from resources next to each other
+ aResult.Zero();
+ aResult.Append( KWmlSettingsListBoxItemPrefix );
+ HBufC* first = iCoeEnv->AllocReadResourceLC( aFirst );
+ aResult.Append( first->Des() );
+ CleanupStack::PopAndDestroy(); // first
+ aResult.Append( KWmlSettingsListBoxItemPostfix );
+ HBufC* second = iCoeEnv->AllocReadResourceLC( aSecond );
+ aResult.Append( second->Des() );
+ CleanupStack::PopAndDestroy(); //second
+ }
+
+
+// ----------------------------------------------------------------------------
+// CSettingsContainer::AddEncodingL()
+// ----------------------------------------------------------------------------
+//
+void CSettingsContainer::AddEncodingL( TUint32 aSystemId, TUint32 aResId )
+ {
+ TEncodingStruct encoding;
+
+ encoding.iSystemId = aSystemId;
+ encoding.iResId = aResId;
+
+ iEncodingArray->AppendL( encoding );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::RemoveUnsupportedEncodingsL()
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::RemoveUnsupportedEncodingsL()
+ {
+ RFs fsSession;
+ User::LeaveIfError( fsSession.Connect() );
+ CleanupClosePushL<RFs>( fsSession );
+
+ CCnvCharacterSetConverter* charConv;
+ charConv = CCnvCharacterSetConverter::NewLC();
+
+ CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* charSets;
+ charSets = charConv->CreateArrayOfCharacterSetsAvailableLC(fsSession);
+
+ TInt lastIndex = iEncodingArray->Count()-1;
+
+ for ( int i = lastIndex; i >= 0; i-- )
+ {
+ TBool remove = ETrue;
+ TEncodingStruct encoding = iEncodingArray->At(i);
+ for ( int j = 0; j < charSets->Count(); j++ )
+ {
+ TUint32 identifier = charSets->At(j).Identifier();
+
+ if ( identifier == encoding.iSystemId )
+ {
+ remove = EFalse;
+ break;
+ }
+ }
+
+ if ( remove &&
+ ( encoding.iSystemId != KCharacterSetIdentifierAutomatic ) )
+ {
+ iEncodingArray->Delete(i);
+ }
+ }
+
+ fsSession.Close();
+ CleanupStack::PopAndDestroy(3); // charConv, charSets, fsSession
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::CreateEncodingArrayL()
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::CreateEncodingArrayL()
+ {
+ AddEncodingL( KCharacterSetIdentifierGb2312, R_WMLBROWSER_SETTINGS_ENCODING_GB2312 );
+ AddEncodingL( KCharacterSetIdentifierIso88591, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_1 );
+ AddEncodingL( KCharacterSetIdentifierBig5, R_WMLBROWSER_SETTINGS_ENCODING_BIG5 );
+ AddEncodingL( KCharacterSetIdentifierUtf8, R_WMLBROWSER_SETTINGS_ENCODING_UTF8 );
+ AddEncodingL( KCharacterSetIdentifierIso88592, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_2 );
+ AddEncodingL( KCharacterSetIdentifierIso88594, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_4 );
+ AddEncodingL( KCharacterSetIdentifierIso88595, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_5 );
+ AddEncodingL( KCharacterSetIdentifierIso88597, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_7 );
+ AddEncodingL( KCharacterSetIdentifierIso88599, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_9 );
+ AddEncodingL( KCharacterSetIdentifierIso88598, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_8 );
+ AddEncodingL( KCharacterSetIdentifierIso88596, R_WMLBROWSER_SETTINGS_ENCODING_ISO8859_6 );
+ AddEncodingL( KCharacterSetIdentifierWindows1256, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1256 );
+ AddEncodingL( KCharacterSetIdentifierWindows1255, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1255 );
+ AddEncodingL( KCharacterSetIdentifierWindows1250, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1250 );
+ AddEncodingL( KCharacterSetIdentifierWindows1251, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1251 );
+ AddEncodingL( KCharacterSetIdentifierWindows1253, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1253 );
+ AddEncodingL( KCharacterSetIdentifierWindows1254, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1254 );
+ AddEncodingL( KCharacterSetIdentifierWindows1257, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1257 );
+ AddEncodingL( KCharacterSetIdentifierWindows1258, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_1258 );
+ AddEncodingL( KCharacterSetIdentifierTis620, R_WMLBROWSER_SETTINGS_ENCODING_TIS_620 ); // Thai
+ AddEncodingL( KCharacterSetIdentifierWindows874, R_WMLBROWSER_SETTINGS_ENCODING_WINDOWS_874 ); // Thai
+ AddEncodingL( KCharacterSetIdentifierEucJpPacked, R_WMLBROWSER_SETTINGS_ENCODING_EUC_JP );
+ AddEncodingL( KCharacterSetIdentifierJis, R_WMLBROWSER_SETTINGS_ENCODING_ISO_2022_JP );
+ AddEncodingL( KCharacterSetIdentifierShiftJis, R_WMLBROWSER_SETTINGS_ENCODING_SHIFT_JIS );
+ AddEncodingL( KCharacterSetIdentifierKoi8_r, R_WMLBROWSER_SETTINGS_ENCODING_KOI8_R );
+ AddEncodingL( KCharacterSetIdentifierKoi8_u, R_WMLBROWSER_SETTINGS_ENCODING_KOI8_U );
+ AddEncodingL( KCharacterSetIdentifierIscii_temp, R_WMLBROWSER_SETTINGS_ENCODING_ISCII);
+ AddEncodingL( KCharacterSetIdentifierEucKr, R_WMLBROWSER_SETTINGS_ENCODING_EUC_KR );
+ AddEncodingL( KCharacterSetIdentifierKsc5601_temp, R_WMLBROWSER_SETTINGS_ENCODING_KSC_5601 );
+ AddEncodingL( KCharacterSetIdentifierAutomatic, R_WMLBROWSER_SETTINGS_ENCODING_AUTOMATIC );
+ }
+
+#ifdef __SERIES60_HELP
+// -----------------------------------------------------------------------------
+// CSettingsContainer::GetHelpContext()
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KUidBrowserApplication;
+ /*
+ context is dependent on what Category we are in
+ enum TSettingCategory
+ {
+ EMain = 0,
+ EGeneral,
+ EPrivacy,
+ EPage,
+ EWebFeeds,
+ EToolbar,
+ EShortCuts,
+ ENone
+ };
+ */
+ switch ( iCurrentSettingCategory )
+ {
+ case EMain:
+ aContext.iContext = KOSS_HLP_SETTINGS_FOLDERS;
+ break;
+ case EGeneral:
+ aContext.iContext = KOSS_HLP_SETTINGS_GENERAL;
+ break;
+ case EPrivacy:
+ aContext.iContext = KOSS_HLP_SETTINGS_PRIVACY;
+ break;
+ case EPage:
+ aContext.iContext = KOSS_HLP_SETTINGS_PAGE;
+ break;
+ case EWebFeeds:
+ aContext.iContext = KOSS_HLP_SETTINGS_RSS;
+ break;
+ case ENone:
+ aContext.iContext = KOSS_HLP_SETTINGS_FOLDERS;
+ break;
+ default:
+ aContext.iContext = KOSS_HLP_SETTINGS_FOLDERS;
+ break;
+
+
+ }
+
+ }
+#endif // __SERIES60_HELP
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::MapCurrentItem
+// -----------------------------------------------------------------------------
+//
+TInt CSettingsContainer::MapCurrentItem( TUint aCurrentItem ) const
+ {
+ return iSettingIndex->At( aCurrentItem );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CSettingsContainer::CountComponentControls() const
+ {
+ return iSettingListBox ? 1 : 0;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CSettingsContainer::ComponentControl( TInt aIndex ) const
+ {
+ return ( aIndex ? NULL : iSettingListBox );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::SizeChanged
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::SizeChanged()
+ {
+ if ( iSettingListBox )
+ {
+ iSettingListBox->SetRect( Rect() );
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CSettingsContainer::FocusChanged
+// ----------------------------------------------------------------------------
+//
+void CSettingsContainer::FocusChanged( TDrawNow aDrawNow )
+ {
+ if ( iSettingListBox && iSettingListBox->IsVisible() )
+ {
+ iSettingListBox->SetFocus( IsFocused(), aDrawNow );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::HandleResourceChange( TInt aType )
+ {
+ if ( iSettingListBox )
+ {
+ iSettingListBox->HandleResourceChange( aType );
+ }
+
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+ if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect))
+ {
+ SetRect(rect);
+ }
+ DrawDeferred();
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CSettingsContainer::ShowFormDataDeleteAllQueryDialogL
+// ---------------------------------------------------------
+//
+void CSettingsContainer::ShowFormDataDeleteAllQueryDialogL( )
+ {
+ CAknQueryDialog* dlg = new (ELeave) CAknQueryDialog(CAknQueryDialog::EConfirmationTone);
+ HBufC* deleteQuery = StringLoader::LoadLC(R_WMLBROWSER_SETTINGS_FORM_DATA_DELETE_ALL);
+ dlg->SetPromptL(*deleteQuery);
+ dlg->PrepareLC( R_SETTINGS_QUERY_LINES);
+ TInt ret = dlg->RunLD();
+ if( ret == EAknSoftkeyYes )
+ {
+ // call brctl to clear data
+ CBrowserAppUi::Static()->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandClearAutoFormFillData);
+ CBrowserAppUi::Static()->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandClearAutoFormFillPasswordData);
+ }
+ CleanupStack::PopAndDestroy(1); // deleteQuery
+ }
+
+// ---------------------------------------------------------
+// CSettingsContainer::ShowFormDataDeletePasswordQueryDialogL
+// ---------------------------------------------------------
+//
+void CSettingsContainer::ShowFormDataDeletePasswordQueryDialogL( )
+ {
+ CAknQueryDialog* dlg = new (ELeave) CAknQueryDialog(CAknQueryDialog::EConfirmationTone);
+ HBufC* deleteQuery = StringLoader::LoadLC(R_WMLBROWSER_SETTINGS_FORM_DATA_DELETE_PASSWORD);
+ dlg->SetPromptL(*deleteQuery);
+ dlg->PrepareLC( R_SETTINGS_QUERY_LINES);
+ TInt ret = dlg->RunLD();
+ if( ret == EAknSoftkeyYes )
+ {
+ // call brctl to clear data
+ CBrowserAppUi::Static()->BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandClearAutoFormFillPasswordData);
+ }
+ CleanupStack::PopAndDestroy(1); // deleteQuery
+ }
+
+// ---------------------------------------------------------
+// CSettingsContainer::SelectUserDefinedAPL
+// ---------------------------------------------------------
+//
+void CSettingsContainer::SelectUserDefinedAPL( TUint32& id )
+ {
+ LOG_ENTERFN( "CSettingsContainer::SelectUserDefinedAPL" );
+
+ BROWSER_LOG( ( _L( "CApSettingsHandler()" ) ) );
+ CApSettingsHandler *ApUi = CApSettingsHandler::NewLC(
+ ETrue,
+ EApSettingsSelListIsPopUp,
+ EApSettingsSelMenuSelectNormal,
+ KEApIspTypeAll,
+ EApBearerTypeAll,
+ KEApSortNameAscending,
+ EIPv4 | EIPv6
+ );
+ BROWSER_LOG( ( _L( "EWmlSettingsAutomaticUpdatingAP RunSettingsL()" ) ) );
+ TInt ret = ApUi->RunSettingsL( id, id );
+ CleanupStack::PopAndDestroy( ApUi ); //ApUi
+ if ( ret & KApUiEventExitRequested ) // & because it is a bit-mask...
+ {
+ CBrowserAppUi::Static()->ExitBrowser( EFalse );
+ }
+
+ CApSelect* ApSel = CApSelect::NewLC(
+ iApiProvider.CommsModel().CommsDb(),
+ KEApIspTypeAll, //KEApIspTypeWAPMandatory,
+ EApBearerTypeAll,
+ KEApSortNameAscending,
+ EIPv4 | EIPv6 );
+ TInt apSelCount = ApSel->Count();
+ BROWSER_LOG( ( _L( " ApSel->Count(): %d" ), apSelCount ) );
+ CleanupStack::PopAndDestroy( ApSel ); //ApSel
+
+ CApUtils* au = CApUtils::NewLC( iApiProvider.CommsModel().CommsDb() );
+ TBool apExist = au->WapApExistsL( id );
+ CleanupStack::PopAndDestroy( au ); // au
+
+ if( ( 0 == apSelCount ) || ( EFalse == apExist ) )
+ {
+ id = KWmlNoDefaultAccessPoint;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSettingsContainer::RunSearchSettingsL
+// -----------------------------------------------------------------------------
+//
+void CSettingsContainer::RunSearchSettingsL()
+ {
+ // Get Search application UID from CenRep
+ TInt id = ApiProvider().Preferences().GetIntValue( KBrowserSearchAppUid );
+ TUid searchAppId( TUid::Uid( id ) );
+ id = ApiProvider().Preferences().GetIntValue( KBrowserSearchProviderSettingViewId );
+ TUid settingViewId( TUid::Uid( id ) );
+ TVwsViewId viewToOpen(searchAppId, settingViewId);
+ CBrowserAppUi::Static()->ActivateViewL(viewToOpen);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SettingsSrc/SettingsView.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* View of the information about the active settings
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AKNLISTS.H>
+#include <CALSLBS.H>
+#include <AKNVIEWAPPUI.H>
+#include <BrowserNG.rsg>
+#include <EikMenuP.H>
+
+#include "BrowserAppUi.h"
+#include "BrowserPreferences.h"
+#include "BrowserDialogs.h"
+#include "SettingsView.h"
+#include "SettingsContainer.h"
+#include "CommonConstants.h"
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <eikapp.h>
+#else
+#include <eikapp.h>
+#include <vwsdefpartner.h> // KNullViewId
+#endif
+
+// CONSTS
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::ConstructL()
+ {
+ BaseConstructL( R_BROWSER_SETTINGS_SETTINGS_VIEW );
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::NewLC
+// ---------------------------------------------------------
+//
+CBrowserSettingsView* CBrowserSettingsView::NewLC( MApiProvider& aApiProvider )
+ {
+ CBrowserSettingsView* result;
+ result = new( ELeave ) CBrowserSettingsView( aApiProvider );
+ CleanupStack::PushL( result );
+ result->ConstructL();
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::NewL
+// ---------------------------------------------------------
+//
+CBrowserSettingsView* CBrowserSettingsView::NewL( MApiProvider& aApiProvider )
+ {
+ CBrowserSettingsView* result;
+ result = CBrowserSettingsView::NewLC( aApiProvider );
+ CleanupStack::Pop();
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::CBrowserSettingsView
+// ---------------------------------------------------------
+//
+CBrowserSettingsView::CBrowserSettingsView( MApiProvider& aApiProvider )
+: CBrowserViewBase( aApiProvider )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::~CBrowserSettingsView
+// ---------------------------------------------------------
+//
+CBrowserSettingsView::~CBrowserSettingsView()
+ {
+ delete iContainer;
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserSettingsView::CommandSetResourceIdL
+// ---------------------------------------------------------------------------
+TInt CBrowserSettingsView::CommandSetResourceIdL()
+ {
+ // It is never called, but this function have to be implemented
+ return KWmlEmptyResourceId;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::HandleCommsModelChangeL
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::HandleCommsModelChangeL()
+ {
+ MPreferences& preferences = ApiProvider().Preferences();
+ TUint defaultAp = preferences.DefaultAccessPoint();
+
+ // re-check default access point in case it was deleted.
+ preferences.SetDefaultAccessPointL(defaultAp);
+
+ if ( iContainer )
+ {
+ iContainer->DisplayCorrectSettingCategoryListL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::HandleCommandL
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::HandleCommandL( TInt aCommandId )
+ {
+ switch ( aCommandId )
+ {
+ case EWmlCmdSettingsOpen:
+ {
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_CHANGE);
+ iContainer->DisplayCorrectSettingCategoryListL();
+ break;
+ }
+ case EWmlCmdSettingsChange:
+ {
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_CHANGE);
+ iContainer->ChangeItemL( ETrue );
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ if ( iContainer->SettingsError() )
+ {
+ TBrowserDialogs::ErrorNoteL( R_BROWSER_SETTING_TOOLBAR_SAVE_DIALOG );
+ break;
+ }
+
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_OPEN);
+
+ // Close the settings
+ if ( iContainer->CloseSettingsListL() )
+ {
+ if ( iLastViewId != KNullViewId )
+ {
+ ActivateViewL( iLastViewId );
+ }
+ }
+ break;
+ }
+ case EWmlNoCmd:
+ {
+ // Fake MSK command for settings -- update cba to label MSK as Change
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_CHANGE);
+ break;
+ }
+
+ case EWmlCmdUserExit:
+ {
+ if ( iContainer->SettingsError() )
+ {
+ TBrowserDialogs::ErrorNoteL( R_BROWSER_SETTING_TOOLBAR_SAVE_DIALOG );
+ break;
+ }
+
+ // Save the settings
+ iContainer->SaveChangesL();
+ }
+ // intentional fall through to default case below.
+
+ default:
+ {
+ AppUi()->HandleCommandL( aCommandId );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::Id
+// ---------------------------------------------------------
+//
+TUid CBrowserSettingsView::Id() const
+ {
+ return KUidBrowserSettingsViewId;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::DoActivateL
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
+ StatusPane()->MakeVisible( ETrue );
+
+ if (aPrevViewId.iAppUid == AppUi()->Application()->AppDllUid())
+ { // store this only if our own...
+ iLastViewId = aPrevViewId;
+ }
+ else
+ {
+ iLastViewId = TVwsViewId(AppUi()->Application()->AppDllUid(), ApiProvider().LastActiveViewId());
+ }
+
+ ApiProvider().SetLastActiveViewId( Id() );
+
+ // restoring container
+ iContainer = CSettingsContainer::NewL
+ ( ClientRect(), ApiProvider(), *this );
+
+
+ AppUi()->AddToViewStackL( *this, iContainer );
+ ApiProvider().CommsModel().AddObserverL( *this );
+
+ if (iContainer && ( aCustomMessageId == KUidSettingsGotoToolbarGroup ) )
+ {
+ iContainer->DisplayToolbarSettingsL();
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_CHANGE);
+ }
+ else if (iContainer && ( aCustomMessageId == KUidSettingsGotoShortcutsGroup ) )
+ {
+ iContainer->DisplayShortcutsSettingsL();
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_CHANGE);
+ }
+ else if (iContainer)
+ {
+ UpdateCbaL(R_BROWSER_SETTINGS_CBA_OPTIONS_BACK_OPEN);
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::DoDeactivate
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::DoDeactivate()
+ {
+ if ( !ApiProvider().ExitInProgress() )
+ {
+ ApiProvider().CommsModel().RemoveObserver( *this );
+ }
+ // removing container
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::HandleClientRectChange
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::HandleClientRectChange()
+ {
+ if( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBrowserSettingsView::HandleForegroundEventL
+// ---------------------------------------------------------
+//
+void CBrowserSettingsView::HandleForegroundEventL (TBool aForeground)
+ {
+ if(aForeground)
+ {
+ iContainer->HandleGainingForegroundL();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserSettingsView::DynInitMenuPaneL
+// ---------------------------------------------------------------------------
+void CBrowserSettingsView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ if ( aResourceId == R_BROWSER_SETTINGS_SETTINGS_MENU )
+ {
+ // Show the appropriate menu items, depending on whether
+ // we are in the main setting list, or sub category e.g. Page
+ if ( iContainer->IsSettingModifiable() )
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSettingsOpen, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EWmlCmdSettingsChange, ETrue );
+ }
+
+ }
+#endif
+ }
+
+// ---------------------------------------------------------------------------
+// CBrowserSettingsView::UpdateCba()
+// ---------------------------------------------------------------------------
+void CBrowserSettingsView::UpdateCbaL(TInt aCommandSet)
+ {
+ if (Cba())
+ {
+ Cba()->SetCommandSetL(aCommandSet);
+ Cba()->DrawDeferred();
+ }
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/Browser.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,537 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* contains common definitions for menu id:s
+*
+*
+*/
+
+
+#ifndef BROWSER_HRH
+#define BROWSER_HRH
+
+#include "WmlBrowserBuild.h"
+#include <bldvariant.hrh>
+
+// Commands
+
+enum TBrowserCommands
+ {
+ // No command (used, for example, for marking the end of commands in
+ // variable length command lists).
+
+ EWmlNoCmd = -1,
+
+ // for Feeds View Application commands
+ EWmlCmdFeedsViewCommandIdBase = 12000,
+ // leave this range empty !!!
+ EWmlCmdFeedsViewLastCommand = 12099,
+
+ // for FindItem submenu and menuitems
+ EWmlCmdFindInPage = 12100,
+ // and a couple of finditem specific command used in that module
+ // Phone number, Mail, Url, VoIP
+ // leave this range empty !!!
+ EWmlCmdFindInPageLast = 12109,
+
+ // put dynamic ranges here
+
+ // Common
+ EWmlCmdDisconnect = 12500,
+ EWmlCmdInfo,
+ EWmlCmdInfoSession,
+ EWmlCmdInfoSecurity,
+ EWmlCmdPageInfo,
+
+ // IAD: version
+ EWmlCmdAboutProduct,
+ // IAD: browser user-initiated IAD update
+ EWmlCmdProductUpdate,
+ //
+ // IAD: help cascade sub-menu
+ EWmlCmdHelpMenu,
+
+ EWmlCmdPreferences,
+ EWmlCmdPreferencesToolbar,
+ EWmlCmdCancelFetch,
+ EWmlCmdUserExit,
+ EWmlCmdCloseBrowser,
+ EWmlCmdChangeConnection,
+
+ // Goto Pane buttons
+
+ EWmlCmdGotoPaneGoTo,
+ EWmlCmdGotoPaneCancel,
+ EWmlCmdGotoPaneSelect,
+
+ // Save Image Dialog buttons
+
+ EWmlCmdGetUrlGo,
+ EWmlCmdGetUrlCancel,
+
+ // Browser View
+
+// EWmlCmdDone,
+ EWmlCmdHistory,
+ EWmlCmdServiceOptions,
+ EWmlCmdFavourites,
+ EWmlCmdGoToAddress,
+ EWmlCmdGoToAddressAndSearch,
+ EIsCmdSearchWeb, // launch search pane
+ EWmlCmdSaveAsBookmark,
+ EWmlCmdReload,
+ EWmlCmdBack,
+ EWmlCmdForward,
+ EWmlCmdLoadImages,
+ EWmlCmdShowToolBar,
+ EWmlCmdShowShortcutKeymap,
+ EWmlCmdOpenBookmarks,
+ EWmlCmdZoomMode,
+ EWmlCmdZoomSmallest,
+ EWmlCmdZoomSmall,
+ EWmlCmdZoomNormal,
+ EWmlCmdZoomLarge,
+ EWmlCmdZoomLargest,
+ EWmlCmdZoomIn,
+ EWmlCmdZoomOut,
+ EWmlCmdZoomSliderShow,
+ EWmlCmdZoomSliderHide,
+
+ EWmlCmdFind, // not used
+ EWmlCmdFindKeyword, // 'Find keyword' menuitem
+ EWmlCmdFindNext, // find pane's options list
+ EWmlCmdFindPrevious, // find pane's options list
+ // Goto Pane buttons
+ EWmlCmdFindKeywordPaneFind, // not used
+ EWmlCmdFindKeywordPaneClose,
+ EWmlCmdSubscribeTo, // subscribe to a feed menuitem
+
+ EWmlCmdSavePage,
+ EWmlCmdOpenLink,
+ EWmlCmdOpenLinkInNewWindow,
+ EWmlCmdOpenItem,
+ EWmlCmdDownload, // for bookmarks view with no DownloadSubmenu
+ EWmlCmdDownloadSubmenu, // for bookmarks view
+ EWmlCmdDownloadPage,
+ EWmlCmdDownloadPageNewWindow,
+ EWmlCmdSendAddressViaUnifiedMessage,
+ EWmlCmdDefaultHome,
+ EWmlCmdDefaultBack,
+ EWmlCmdInputElementDone,
+ EWmlCmdInputElementBack,
+ EWmlCmdTableDataElementBack,
+ EWmlCmdCancelScriptRunning,
+ EWmlCmdElementBack,
+ EWmlCmdSearchWeb,
+
+ // Favourites Views
+
+ EWmlCmdOpenFolder,
+ EWmlCmdOpenMarkedFolder, // for OK-Options menu.
+ EWmlCmdBackToPage,
+ EWmlCmdMarkUnmark,
+ EWmlCmdUnmarkOnly, // for OK-Options menu.
+ EWmlCmdMark,
+ EWmlCmdUnmark,
+ EWmlCmdMarkAll,
+ EWmlCmdUnmarkAll,
+ EWmlCmdDelete,
+ EWmlCmdDeleteItems,
+ EWmlCmdNewFolder,
+ EWmlCmdMove,
+ EWmlCmdMoveOk,
+ EWmlCmdMoveCancel,
+ EWmlCmdMoveToFolder,
+ EWmlCmdRename,
+ EWmlCmdRetry,
+ EWmlCmdCancel,
+ EWmlCmdBackFromFolder,
+ EWmlCmdRootFolder,
+ EWmlCmdBackToFeedsView,
+
+ // Bookmarks View
+
+ EWmlCmdAddBookmark,
+ EWmlCmdSwitchToGotoActive,
+ EWmlCmdEditBookmark,
+ EWmlCmdSendBookmarkViaUnifiedMessage,
+ EWmlCmdManageBookmarks, // when Small Screen is available
+ EWmlCmdWindowSelectionCancel,
+ EWmlCmdCloseAllWindowButThis,
+
+ // GENERIC commands used when dynamic softkey is active in Bookmarks View
+ EBrowserBookmarksCmdCancel,
+ EBrowserBookmarksCmdOpen,
+ EBrowserBookmarksCmdBack,
+ EBrowserBookmarksCmdSoftkeyEmpty,
+
+ //Adaptive Bookmarks
+ EWmlCmdCopyToBookmarks,
+ EWmlCmdClearAdaptiveBookmarks,
+ EWmlCmdClearAdaptiveBookmarksNoPrompt,
+ EWmlCmdSetPreferredBookmark,
+ EWmlCmdSetUnPreferredBookmark,
+
+ // Small screen layout specific menu item commands
+
+ EWmlCmdNavigation,
+
+ // Settings View
+
+ EWmlCmdSettingsOpen,
+ EWmlCmdSettingsChange,
+ EWmlCmdShowImages,
+ EWmlCmdDownloads,
+ EWmlCmdTools,
+ EWmlCmdShowMiniature,
+
+ // WIM buttons
+
+ EWmlCmdAccept,
+ EWmlCmdReject,
+
+ // Home Page
+ EWmlCmdSetAsHomePage,
+ EWmlCmdLaunchHomePage,
+
+ // Multiple Windows Support
+ EWmlCmdWindows,
+ EWmlCmdSwitchWindow,
+ EWmlCmdCloseWindow,
+ EWmlCmdAllowPopups,
+ EWmlCmdBlockPopups,
+
+ // Privacy Related Items
+ EWmlCmdPrivacy,
+ EWmlCmdClearAllPrivacy,
+ EWmlCmdClearTheCache,
+ EWmlCmdDeleteCookies,
+ EWmlCmdClearHistory,
+ EWmlCmdClearFormAndPasswd,
+
+ // Rotate Display Option Menu
+ EWmlCmdRotateDisplay,
+
+ // Open Main Feeds Folder in Bookmarks View
+ EWmlCmdOpenFeedsFolder,
+ EWmlCmdShowAnchorHref,
+ EWmlCmdSaveToGallery,
+ EWmlCmdOpenToViewer,
+ EWmlCmdSmartLinkMakeCall,
+ EWmlCmdSmartLinkSendEmail,
+ EWmlCmdSmartLinkSendSms,
+ EWmlCmdSmartLinkAddToContacts,
+ EWmlCmdSaveUrlAsBookmark,
+ EWmlCmdLoadFocusedImage,
+ EWmlCmdLoadImagesOnly,
+ EWmlCmdLoadImagesAndFlash,
+ EWmlCmdOneStepBack,
+ EWmlCmdShowSubscribeList,
+ EWmlCmdHome,
+ EWmlCmdEdwin,
+ EWmlCmdGo,
+ EWmlCmdOptionsView,
+ // Toolbar
+ EWmlCmdToolbarExtensionContentView,
+ // Keymap
+ EWmlCmdConfigureShortcutKeymap,
+ EWmlCmdHideShortcutKeymap,
+ // Bookmark Actions Submenu command
+ EWmlCmdBmActions,
+ //History View
+ EWmlCmdHistoryBack,
+ EWmlCmdHistoryForward,
+ // Content View Full Screen
+ EWmlCmdEnterFullScreenBrowsing,
+ EWmlCmdExitFullScreenBrowsing
+ };
+
+// Tabs (Favourites Views)
+
+enum TWmlBrowserFavouritesTabs
+ {
+ EWmlTabFavouritesUnused, // NOT USED Avoid controls with 0 id!
+ EWmlTabFavouritesBookmarks
+ };
+
+// Control ids.
+
+enum TWmlBrowserControls
+ {
+
+ // Edit Bookmark Form
+
+ EWmlControlEditBmEditTitle = 1, // Avoid controls with 0 id!
+ EWmlControlEditBmEditAddress,
+ EWmlControlEditBmEditUsername,
+ EWmlControlEditBmEditPassword,
+ EWmlControlEditBmWapApSelector,
+
+ // Settings Dialog
+ EWmlControlSettingsEditGateway,
+
+ // Script User Password Dialog
+ EWmlControlScriptUserPasswdDlgEditUsername,
+ EWmlControlScriptUserPasswdDlgEditPassword,
+
+ // Input element messages
+ EWmlControlInputFewNote,
+
+ // Favourites incremental operations wait note
+ EWmlControlIncrementalNote,
+ EWmlControlIdRefreshingPage,
+ EWmlControlIdProcessingPage
+ };
+
+// Limit constants (which are included into resources as well).
+
+/// Max length of URL.
+#define KBrowserMaxUrl 1024
+/// Max length of User name.
+#define KBrowserMaxUsername 40
+/// Max length of password.
+#define KBrowserMaxPassword 40
+/// Max length of WAP AP.
+#define KBrowserMaxWapApName 32 /*Display limit - real name is not limited*/
+/// Max length of text Dialogs.dlgPrompt
+#define KBrowserMaxPrompt 255
+
+/// Max length of URL.
+#define KFavouritesMaxUrlDefine 1024
+
+/// Max length of Goto Pane URL.
+#define KFavouritesMaxUrlGotoPaneDefine 1000
+
+
+/// Max length of User name.
+#define KFavouritesMaxUsernameDefine 40
+/// Max length of password.
+#define KFavouritesMaxPasswordDefine 40
+/// Max length of bookmark name.
+#define KFavouritesMaxBookmarkNameDefine 50
+
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+
+//----------------------------------------------------
+//
+// TWmlBrowserMenuRequests
+// menu elements
+//
+//----------------------------------------------------
+/*
+enum TWmlBrowserMenuRequests
+ {
+ EMaskNoneMenuItem = 0,
+ EMaskOpenMenuItem = 1,
+ EMaskViewImageMenuItem = 2,
+ EMaskSaveImageMenuItem = 4
+ };
+*/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+
+//----------------------------------------------------
+//
+// TAuthenticationDialogControlIds
+//
+//----------------------------------------------------
+/*
+enum TAuthenticationDialogControlIds
+ {
+ EAuthUrlId = 100,
+ EAuthRealmId,
+ EAuthUserId,
+ EAuthPasswordId
+ };
+*/
+// AdaptiveBookmarks
+enum TWmlSettingsAdaptiveBookmarks
+ {
+ EWmlSettingsAdaptiveBookmarksOn,
+ EWmlSettingsAdaptiveBookmarksHideFolder,
+ EWmlSettingsAdaptiveBookmarksOff
+ };
+
+
+// FullScreen
+enum TWmlSettingsFullScreen
+ {
+ EWmlSettingsFullScreenSoftkeysOnly,
+ EWmlSettingsFullScreenFullScreen
+ };
+
+// MediaVolume
+enum TWmlSettingsMediaVolume
+ {
+ EWmlSettingsVolumeMuted = 0,
+ EWmlSettingsVolume1 = 2,
+ EWmlSettingsVolume2 = 5,
+ EWmlSettingsVolume3 = 8,
+ EWmlSettingsVolume4 = 10
+ };
+
+// Cookies
+enum TWmlSettingsCookies
+ {
+ EWmlSettingsCookieReject,
+ EWmlSettingsCookieAllow
+ };
+
+// ECMA
+enum TWmlSettingsECMA
+ {
+ EWmlSettingsECMADisable,
+ EWmlSettingsECMAEnable
+ };
+
+// SCRIPT LOG
+enum TWmlSettingsScriptLog
+ {
+ EWmlSettingsScriptLogDisable,
+ EWmlSettingsScriptLogToFile,
+ EWmlSettingsScriptLogToConsole,
+ EWmlSettingsScriptLogToConsoleFile
+ };
+
+// IMEI
+enum TWmlSettingsIMEI
+ {
+ EWmlSettingsIMEIDisable,
+ EWmlSettingsIMEIEnable
+ };
+
+// HomePage
+enum TWmlSettingsHomePage
+ {
+ EWmlSettingsHomePageAccessPoint, // 0
+ EWmlSettingsHomePageAddress, // 1
+ EWmlSettingsHomePageUseCurrent, // 2
+ EWmlSettingsHomePageBookmarks // 3
+ };
+
+// FormData
+enum TWmlSettingsFormData
+ {
+ EWmlSettingsFormDataOff, // 0
+ EWmlSettingsFormDataOnly, // 1
+ EWmlSettingsFormDataPlusPassword // 2
+ };
+
+// settings listbox items
+enum TWmlBrowserSettingsItems
+ {
+ // Main Settings Categories
+ EWmlSettingsGeneral = 0,
+ EWmlSettingsPage,
+ EWmlSettingsPrivacy,
+ EWmlSettingsWebFeeds,
+ EWmlSettingsToolbar,
+ EWmlSettingsShortcuts,
+
+ // Individual Settings
+ EWmlSettingsAccesspoint,
+ EWmlSettingsAutoLoadContent,
+ EWmlSettingsPageOverview,
+ EWmlSettingsBackList,
+ EWmlSettingsAutoRefresh,
+ EWmlSettingsEncoding,
+ EWmlSettingsAdaptiveBookmarks,
+ EWmlSettingsFullScreen,
+ EWmlSettingsCookies,
+ EWmlSettingsEcma,
+ EWmlSettingsScriptLog,
+ EWmlSettingsHttpSecurityWarnings,
+ EWmlSettingsIMEINotification,
+
+#ifdef __WIM
+ EWmlSettingsSaveReceipt,
+#endif
+ EWmlSettingsMediaVolume,
+ EWmlSettingsAutomaticUpdatingAP,
+ EWmlSettingsAutomaticUpdatingWhileRoaming,
+ EWmlSettingsHomePage,
+ EWmlSettingsUrlSuffix,
+ EWmlSettingsFormDataSaving,
+ EWmlSettingsFontSize,
+
+ // Multiple Windows Support
+ EWmlSettingsPopupBlocking,
+ // Download Open Support
+ EWmlSettingsDownloadsOpen,
+ // Search provider support
+ EWmlSettingsSearchProvider,
+
+ // toolbar buttons
+ EWmlSettingsToolbarOnOff,
+ EWmlSettingsToolbarButton1Cmd,
+ EWmlSettingsToolbarButton2Cmd,
+ EWmlSettingsToolbarButton3Cmd,
+ EWmlSettingsToolbarButton4Cmd,
+ EWmlSettingsToolbarButton5Cmd,
+ EWmlSettingsToolbarButton6Cmd,
+ EWmlSettingsToolbarButton7Cmd,
+
+ // For CDMA settings, use any values within this range
+ EWmlSettingsCDMAMin = 50,
+ EWmlSettingsSendReferrer,
+ EWmlSettingsCDMAMax = 70,
+
+ // Shortcut Keys
+ EWmlSettingsShortCutKey1Cmd,
+ EWmlSettingsShortCutKey2Cmd,
+ EWmlSettingsShortCutKey3Cmd,
+ EWmlSettingsShortCutKey4Cmd,
+ EWmlSettingsShortCutKey5Cmd,
+ EWmlSettingsShortCutKey6Cmd,
+ EWmlSettingsShortCutKey7Cmd,
+ EWmlSettingsShortCutKey8Cmd,
+ EWmlSettingsShortCutKey9Cmd,
+ EWmlSettingsShortCutKey0Cmd,
+ EWmlSettingsShortCutKeyStarCmd,
+ EWmlSettingsShortCutKeyHashCmd
+ };
+
+ // ShortCuts
+enum TWmlSettingsShortCuts
+ {
+ EWmlSettingsShortCutsActivateHomepage, // 0
+ EWmlSettingsShortCutsActivateBkmkview,
+ EWmlSettingsShortCutsGotoPane,
+ EWmlSettingsShortCutsShowFindKeyword,
+ EWmlSettingsShortCutsShowSwitchWindowList,
+ EWmlSettingsShortCutsZoomOut,
+ EWmlSettingsShortCutsZoomIn,
+ EWmlSettingsShortCutsGotoPreviousPage,
+ EWmlSettingsShortCutsShowMiniature,
+ EWmlSettingsShortCutsShowFullScreen,
+ EWmlSettingsShortCutsZoomMode
+ };
+
+enum TWmlSettingsAutoloadContent
+ {
+ EWmlSettingsAutoloadText,
+ EWmlSettingsAutoloadImagesNoFlash,
+ EWmlSettingsAutoloadAll
+ };
+
+#ifdef __RSS_FEEDS
+#include "Feeds.hrh"
+#endif // __RSS_FEEDS
+
+#endif // BROWSER_HRH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/Browser.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,943 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Main browser resource file
+*
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+
+NAME SERV // for Services
+
+// INCLUDES
+#include <browser_platform_variant.hrh>
+#include "WmlBrowserBuild.h"
+#include <apcaptionfile.rh>
+#include <eikon.rh>
+#include <bldvariant.hrh>
+#include "Browser.hrh"
+#include <wmlbrowser.loc>
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.loc>
+#include <avkonsct.loc>
+#include <CommonDialogs.hrh>
+#include <CommonDialogs.rh>
+#include <data_caging_paths_strings.hrh>
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+#include <iaupdate.loc>
+#endif
+
+RESOURCE RSS_SIGNATURE { }
+
+ RESOURCE TBUF { buf="BrowsNG"; }
+
+RESOURCE EIK_APP_INFO
+ {
+ cba = R_AVKON_SOFTKEYS_EMPTY; // CBA commands are set dynamically
+ menubar= R_AVKON_MENUPANE_EMPTY;
+ }
+
+#include "BrowserBookmarks.rssi"
+#include "BrowserGenericDialogs.rssi"
+#include "BrowserScriptDialogs.rssi"
+#include "BrowserSettings.rssi"
+#include "BrowserAnimation.rssi"
+#include "BrowserHp.rssi"
+#include "browser_menu.rssi"
+#ifdef RD_SCALABLE_UI_V2
+ #include "browser_toolbar.rssi"
+#endif // RD_SCALABLE_UI_V2
+#include <appinfo.rh>
+
+//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+// IF RESOURCES NEEDS TO BE CHANGED :
+// IF NEW RESOURCE IS ADDED ONE r_browser_dummy_dialog_0..n
+// NEED TO BE REMOVED
+// IF NEW RESOURCE IS REMOVED ONE r_browser_dummy_dialog_0..n
+// NEED TO BE ADDED
+// THE RESOURCE ID OF THE ANIMATIONS CAN NOT BE CHANGED
+//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+//----------------------------------------------------
+//
+// r_browser_localisable_app_info
+// ?description
+//
+//----------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_browser_localisable_app_info
+ {
+ short_caption = qtn_apps_browserng_grid;
+ caption_and_icon =
+ CAPTION_AND_ICON_INFO
+ {
+ caption = qtn_apps_browserng_list;
+
+#ifdef __SCALABLE_ICONS
+ number_of_icons = 1;
+
+ icon_file =
+ APP_RESOURCE_DIR"\\browserng_aif.mif";
+
+#else
+ number_of_icons = 2;
+ icon_file =
+ APP_RESOURCE_DIR"\\browserng_aif.mbn";
+#endif // __SCALABLE_ICONS
+ };
+ }
+
+
+//----------------------------------------------------
+//
+// r_wmlbrowser_hotkeys
+// ?description
+//
+//----------------------------------------------------
+//
+RESOURCE HOTKEYS r_browser_hotkeys
+ {
+ control=
+ {
+ HOTKEY { command=EAknCmdExit; key='e'; }
+ };
+ }
+
+
+RESOURCE AVKON_VIEW r_browser_content_view
+ {
+ hotkeys = r_browser_hotkeys;
+ menubar = r_menu_bar;
+ cba = r_browser_options_menu_during_download;
+#ifdef RD_SCALABLE_UI_V2
+ toolbar = r_content_view_toolbar;
+#endif
+ }
+
+
+RESOURCE CBA r_cancel_data_buttons
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyEmpty; txt = " "; },
+ CBA_BUTTON { id = EWmlCmdCancelFetch; txt = text_softkey_stop; }
+ };
+ }
+
+
+//----------------------------------------------------
+//
+// r_input_element_buttons
+// CBA buttons for input element
+//
+//----------------------------------------------------
+RESOURCE CBA r_input_element_buttons
+ {
+ flags = EAknCBAFlagRespondWhenInvisible; // SEE NOTE BELOW:
+ // allows cba to work in full screen mode, but also can let cbas from
+ // other views work also so care must taken in using this flag. It should
+ // only used in BrowserContentView related CBAs due to full screen mode.
+
+ buttons =
+ {
+ // left softkey id has to be EAknSoftkeyOptions so that T9 will
+ // be able to replace it with "Spell" when needed
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;},
+ CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;},
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browser_default_buttons
+// Default CBA buttons for multipurpose browser display
+//
+//----------------------------------------------------
+//
+RESOURCE CBA r_browser_default_buttons
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;},
+ CBA_BUTTON {id=EWmlCmdBack; txt=text_softkey_back;},
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+ };
+ }
+
+RESOURCE CBA r_browser_default_buttons_at_beginning_of_history
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;},
+ CBA_BUTTON {id=EAknSoftkeyClose; txt=text_softkey_close;},
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+ };
+ }
+
+RESOURCE CBA r_browser_default_buttons_at_beginning_of_history_embedded
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;},
+ CBA_BUTTON {id=EAknSoftkeyClose; txt=text_softkey_back;},
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+ };
+ }
+
+RESOURCE CBA r_browser_options_menu_during_download
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;},
+ CBA_BUTTON {id=EWmlCmdCancelFetch; txt=text_softkey_stop;},
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+ };
+ }
+
+RESOURCE CBA r_browser_softkeys_cancel
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyEmpty; txt = ""; },
+ CBA_BUTTON {id=EAknSoftkeyCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+ };
+ }
+
+RESOURCE CBA r_browser_cba_find_keyword_pane_option_close // TEMP
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdFindKeywordPaneClose; txt = text_softkey_close; },
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; }
+ };
+ }
+
+RESOURCE CBA r_browser_default_buttons_at_thumbnail_view_on
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOk; txt=text_softkey_ok;},
+ CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;},
+ CBA_BUTTON {id=EAknSoftkeyOk; txt=text_softkey_ok;}
+ };
+ }
+
+RESOURCE CBA r_browser_default_buttons_at_zoom_mode_on
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeySelect; txt=text_softkey_select;},
+ CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}
+ };
+ }
+
+RESOURCE CBA r_browser_cba_options_back_options
+ {
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt = text_softkey_option;},
+ CBA_BUTTON {id=EAknSoftkeyBack; txt = text_softkey_back; },
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt = text_softkey_option;}
+ };
+ }
+
+RESOURCE CBA r_browser_cba_options_back_change
+ {
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt = text_softkey_option;},
+ CBA_BUTTON {id=EAknSoftkeyBack; txt = text_softkey_back;},
+ CBA_BUTTON {id=EAknSoftkeyChange; txt=text_softkey_empty;}
+ };
+ }
+
+RESOURCE CBA r_browser_softkeys_select_cancel_select
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ // This prevents EAknSoftkeySelect operating on a long keypress
+ AVKON_CBA_BUTTON{id=EAknSoftkeySelect; longpressid=0; txt= text_softkey_select; },
+ CBA_BUTTON{id=EAknSoftkeyCancel; txt= text_softkey_cancel; },
+ AVKON_CBA_BUTTON{id=EAknSoftkeySelect; longpressid=0; txt= text_softkey_select; }
+ };
+ }
+
+RESOURCE CBA r_browser_softkeys_configure_hide
+ {
+ buttons =
+ {
+ CBA_BUTTON{id=EWmlCmdConfigureShortcutKeymap; txt= text_softkey_configure; },
+ CBA_BUTTON{id=EWmlCmdHideShortcutKeymap; txt= qtn_softkey_hide; },
+ CBA_BUTTON{id=EAknSoftkeyForwardKeyEvent; txt= text_softkey_empty; }
+ };
+ }
+
+RESOURCE CBA r_browser_softkeys_exit_full_screen
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON {id=EWmlCmdExitFullScreenBrowsing; txt=text_softkey_empty;},
+ CBA_BUTTON {id=EWmlCmdExitFullScreenBrowsing; txt=text_softkey_empty;},
+ CBA_BUTTON {id=EAknSoftkeyForwardKeyEvent; txt=text_softkey_empty;}
+ };
+ }
+
+//
+// A NULL empty resource for tracking dynamic SK assignment
+//
+RESOURCE TBUF r_browser_dyn_sk_null {}
+
+//
+// Empty TBUF for getting an empty string for dynamic SK assignment
+//
+RESOURCE TBUF r_browser_dyn_sk_empty { buf = text_softkey_empty; }
+
+// NULL, empty CBA for initialization. DO not use. Only base view uses to
+// track dynamic cba assignments
+RESOURCE CBA r_browser_buttons_cba_null {}
+
+//Generic, empty CBA to be used for dynamic cba assignment
+RESOURCE CBA r_browser_buttons_cba_dynamic
+ {
+ buttons =
+ {
+ CBA_BUTTON {},
+ CBA_BUTTON {},
+ CBA_BUTTON {}
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browser_default_caption
+// Default caption for multipurpose browser
+// display view
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_browser_default_caption { buf = qtn_apps_browserng_list; }
+
+
+RESOURCE TBUF r_text_wml_exit_confirm { buf = text_wml_exit_confirm; }
+
+//----------------------------------------------------
+//
+// r_wmlbrowser_settings_menubar
+// TEMP by GTO : it's only a temporal thingie
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_browser_settings_menubar
+ {
+ }
+
+//----------------------------------------------------
+//
+// r_menu_bar
+// main menu for multipurpose browser display
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_menu_bar
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_menu_pane; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_menu_pane
+// new menu pane for the main menu of the
+// multipurpose browser display
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_menu_pane
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EWmlCmdShowShortcutKeymap;
+ txt = qtn_browser_list_main_show_shortcuts;
+ },
+ MENU_ITEM
+ {
+ cascade = r_DO_elements;
+ command = EWmlCmdServiceOptions;
+ txt = qtn_wml_list_srv_opts;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdShowSubscribeList;
+ txt=qtn_browser_list_subscribe_to;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdDownloads;
+ txt = qtn_browser_list_downloads;
+ },
+ MENU_ITEM
+ {
+ cascade = r_goto_submenu;
+ txt = qtn_browser_options_goto;
+ },
+ MENU_ITEM
+ {
+ cascade = r_pageactions_submenu;
+ txt = qtn_browser_options_pageactions;
+ },
+ MENU_ITEM
+ {
+ cascade = r_view_submenu;
+ command = EWmlCmdOptionsView;
+ txt = qtn_browser_options_view;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdFindKeyword;
+ txt = qtn_browser_find_keyword_mm;
+ },
+ MENU_ITEM
+ {
+ cascade = r_clear_submenu;
+ command = EWmlCmdPrivacy;
+ txt = qtn_browser_options_clear;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdPreferences;
+ txt = qtn_wmls_browser_opt_sett;
+ },
+ MENU_ITEM
+ {
+ cascade = r_help_submenu;
+ command = EAknCmdHelp;
+ txt = qtn_browser_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdUserExit;
+ txt = qtn_options_exit;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdFindNext;
+ txt = qtn_browser_find_keyword_search_for_next;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdFindPrevious;
+ txt = qtn_browser_find_keyword_search_for_previous;
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_option_zoom_level
+// Submenu pane for the main menu of zoom page
+// Actual items are loaded dynamically
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_option_zoom_level
+ {
+ }
+
+//----------------------------------------------------
+//
+// r_goto_submenu
+// Cascading menu for go to menu items
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_goto_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdGoToAddress; txt = qtn_browser_list_new_web_page; },
+ MENU_ITEM { command = EIsCmdSearchWeb; txt = qtn_is_list_search; },
+ MENU_ITEM { command = EWmlCmdBackToPage; txt = qtn_wml_list_ret_page; },
+ MENU_ITEM { command = EWmlCmdFavourites; txt = qtn_wml_faves; },
+ MENU_ITEM { command = EWmlCmdOpenFeedsFolder; txt = qtn_browser_list_web_feeds;},
+ MENU_ITEM { command = EWmlCmdHistory; txt = qtn_wml_list_history; },
+ MENU_ITEM { command = EWmlCmdLaunchHomePage; txt = qtn_browser_list_home; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_pageactions_submenu
+// Cascading menu for page actions menu items
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_pageactions_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdSaveAsBookmark; txt = qtn_wmlbm_fav_saveas_bm_sm; },
+ MENU_ITEM { command = EWmlCmdReload; txt = qtn_wml_list_reload; },
+ MENU_ITEM { command = EWmlCmdSendAddressViaUnifiedMessage; txt=qtn_options_send_via; },
+ MENU_ITEM { command = EWmlCmdSendBookmarkViaUnifiedMessage; txt =qtn_options_send_via; },
+ MENU_ITEM { command = EWmlCmdSetAsHomePage; txt=qtn_browserbm_list_set_as_home_page_sm; },
+ MENU_ITEM { command = EWmlCmdAllowPopups; txt = qtn_browser_list_windows_allow; },
+ MENU_ITEM { command = EWmlCmdBlockPopups; txt = qtn_browser_list_windows_block; },
+ MENU_ITEM { command = EWmlCmdCloseWindow; txt = qtn_browser_list_close_window; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_view_submenu
+// Cascading menu for view menu items
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_view_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdEnterFullScreenBrowsing; txt = qtn_browser_list_full_screen_enter; },
+ MENU_ITEM { command = EWmlCmdRotateDisplay; txt = qtn_browser_rotate_display; },
+ MENU_ITEM { command = EWmlCmdShowToolBar; txt = qtn_browser_list_toolbar; },
+ MENU_ITEM { command = EWmlCmdShowMiniature; txt = qtn_browser_list_miniature_show_mini; },
+ MENU_ITEM { command = EWmlCmdShowImages; txt = qtn_browser_list_view_images; },
+ MENU_ITEM { command = EWmlCmdLoadImages; txt = qtn_browser_list_fetch_img;},
+ MENU_ITEM { command = EWmlCmdSwitchWindow; txt = qtn_browser_list_switch_window; },
+ MENU_ITEM { command = EWmlCmdPageInfo; txt = qtn_browser_list_page_info; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_clear_submenu
+// Cascading menu for privacy related menu items
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_clear_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdClearAllPrivacy; txt = qtn_browser_list_privacy_clear_all; },
+ MENU_ITEM { command = EWmlCmdClearTheCache ; txt = text_wml_option_empty_cache; },
+ MENU_ITEM { command = EWmlCmdDeleteCookies ; txt = qtn_browser_list_delete_cookies; },
+ MENU_ITEM { command = EWmlCmdClearHistory; txt = qtn_browser_list_clear_history; },
+ MENU_ITEM { command = EWmlCmdClearFormAndPasswd; txt = qtn_browser_list_privacy_clear_form_data; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_DO_elements
+// empty submenu for the DO elements
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_DO_elements
+ {
+ }
+
+
+RESOURCE MENU_PANE r_help_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EAknCmdHelp; txt = qtn_browser_list_browser_help; },
+ MENU_ITEM { command = EWmlCmdAboutProduct; txt=qtn_browser_list_browser_version;}
+ };
+ }
+
+//----------------------------------------------------
+//
+// CBA text
+//
+//----------------------------------------------------
+//
+
+RESOURCE TBUF r_wml_unable_to_retrieve { buf=qtn_wml_informationnote_unable_to_retrieve; }
+RESOURCE TBUF r_wml_unable_to_fetch_bookmark { buf=qtn_wml_bookmark_not_found; }
+RESOURCE TBUF r_wml_memlo_not_enough_memory { buf=qtn_memlo_not_enough_memory; }
+
+
+//----------------------------------------------------
+//
+// r_wml_open_new_page_query
+// open new page query
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_wml_query_dwnl { buf=qtn_wml_query_dwnl; }
+RESOURCE TBUF r_wml_auth_fail_retry_query { buf=text_wml_auth_fail_retry_query; }
+RESOURCE TBUF r_wml_invalid_ap { buf=qtn_wml_info_invalid_ap; }
+RESOURCE TBUF r_wml_invalid_ap_sd { buf=qtn_wml_confquery_invalid_ap; }
+
+//----------------------------------------------------
+//
+// text_wml_cache_emptied_note
+// message to ui
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_text_wml_cache_emptied_note { buf=text_wml_cache_emptied_note; }
+RESOURCE TBUF r_wml_disconnect { buf = qtn_ics_cnote_disconn_from_service; }
+
+
+//----------------------------------------------------
+//
+// Wim dialog buttons texts
+//
+//----------------------------------------------------
+RESOURCE TBUF r_wml_enter_bookmark_name { buf = qtn_wml_query_bookmark_title; }
+RESOURCE TBUF r_wml_name_already_in_use { buf = qtn_wmlbm_name_already_used; }
+
+
+//----------------------------------------------------
+//
+// Progress bar texts
+//
+//----------------------------------------------------
+RESOURCE TBUF r_wml_unit_kb { buf = qtn_wml_unit_kb; }
+RESOURCE TBUF r_wml_unit_mb { buf = qtn_wml_unit_mb; }
+RESOURCE TBUF r_wml_unit_percent { buf = qtn_wml_unit_percent; }
+
+
+//----------------------------------------------------
+//
+// Connection Secured info notes
+//
+//----------------------------------------------------
+
+RESOURCE TBUF r_wml_conn_secured { buf=qtn_wmlsec_conn_secured; }
+RESOURCE TBUF r_wml_conn_secured_unk_serv { buf=qtn_wmlsec_conn_sec_unk_serv; }
+
+
+RESOURCE AVKON_LAYOUT_EDWIN r_goto_pane_layout
+ {
+ font = ELatinBold13;
+ C = 100;
+ l = 2;
+ r = 2;
+ B = 60;
+ W = 172;
+ J = ELayoutAlignRight;
+ lines = 1;
+ nextB = 76;
+ }
+
+
+//----------------------------------------------------
+//
+// qtn_browser_note_cookies_deleted
+// message to ui
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_browser_note_cookies_deleted { buf=qtn_browser_note_cookies_deleted; }
+
+//----------------------------------------------------
+//
+// qtn_browser_note_history_cleared
+// message to ui
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_browser_note_history_cleared { buf=qtn_browser_note_history_cleared; }
+
+
+//----------------------------------------------------
+//
+// qtn_browser_note_form_data_cleared
+// message to ui
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_browser_note_form_and_passwd_data_cleared { buf=qtn_browser_note_form_and_passwd_data_cleared; }
+
+//----------------------------------------------------
+//
+// qtn_browser_note_clear_all_privacy_done
+// message to ui
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_browser_note_clear_all_privacy_done { buf=qtn_browser_note_clear_all_privacy_done; }
+
+//----------------------------------------------------
+//
+// qtn_wmlbm_errornote_url_too_long
+// Confirmation query prompt when user confirmation
+// during login over unsecure connection.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_wmlbm_errornote_url_too_long { buf=qtn_wmlbm_errornote_url_too_long; }
+
+RESOURCE TBUF r_qtn_browsers_browser_name { buf = qtn_browsers_browser_name; }
+
+RESOURCE TBUF r_qtn_browsers_plugins_label { buf = qtn_browsers_plugins_label; }
+
+//----------------------------------------------------
+// qtn_browserbm_query_set_as_home_page
+// Confirmation query prompt before using "set as home page"
+// option.
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_browserbm_query_set_as_home_page { buf = qtn_browserbm_query_set_as_home_page; }
+
+//-----------------------------------------------------------------------------
+// Confirmation query for setting currently undefined search web setting
+// option.
+//-----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_browser_query_def_searchpage { buf = qtn_browser_query_search_url; }
+RESOURCE TBUF r_browser_prompt_search_url { buf = qtn_wml_prompt_search_url; }
+
+//-----------------------------------------------------------------------------
+// Data query for entering homepage url
+//-----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_browser_prompt_homepage_url { buf = qtn_wml_prompt_homepage_url; }
+
+//----------------------------------------------------
+// r_upload_progressnote
+// Upload progress note dialog.
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_upload_progressnote
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralNote;
+ control = AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ animation = 0;
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Upload progress note strings
+//
+//----------------------------------------------------
+//
+
+RESOURCE TBUF r_qtn_browser_upload_progressnote_uploaded { buf = qtn_browser_upload_progressnote_uploaded; }
+RESOURCE TBUF r_qtn_browser_upload_progressnote_unit_kbyte { buf = qtn_browser_upload_progressnote_unit_kbyte; }
+RESOURCE TBUF r_qtn_browser_upload_progressnote_unit_mb { buf = qtn_browser_upload_progressnote_unit_mb; }
+
+//----------------------------------------------------
+//
+// Download Manager related
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_browser_note_downloading { buf = qtn_browser_note_object_downloading; }
+
+
+//=============================================================================
+//
+// Multiple Windows Support
+//
+//=============================================================================
+RESOURCE TBUF r_browser_switch_window_header { buf = qtn_browser_query_switch_window_header; }
+RESOURCE TBUF r_browser_confirm_close_window { buf = qtn_browser_query_close_window; }
+RESOURCE TBUF r_browser_note_max_windows { buf = qtn_browser_note_pop_up_max_reached; }
+RESOURCE TBUF r_browser_note_popup_blocked { buf = qtn_browser_multiple_windows_tooltip; }
+RESOURCE TBUF r_browser_new_window_opened { buf = qtn_browser_note_pop_up_window_opened; }
+RESOURCE TBUF r_browser_multiple_windows_wml { buf = qtn_browser_multiple_windows_wml; }
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Browser version
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_browser_query_browser_version { buf = qtn_browser_list_browser_version; }
+
+//----------------------------------------------------
+//
+// r_gotopane_cancel_buttons
+// CBA buttons for gotopane cancel
+//
+//----------------------------------------------------
+RESOURCE CBA r_gotopane_cancel_buttons
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyEmpty; txt = " "; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneCancel; txt=text_softkey_cancel;},
+ CBA_BUTTON { id = EAknSoftkeyEmpty; txt = " "; }
+ };
+ }
+
+//=============================================================================
+//
+// Page overview
+//
+//=============================================================================
+RESOURCE TBUF r_browser_tooltip_page_overview_on { buf = qtn_browser_tooltip_page_overview_on; }
+RESOURCE TBUF r_browser_tooltip_page_overview_off { buf = qtn_browser_tooltip_page_overview_off; }
+
+//=============================================================================
+//
+// images / text
+//
+//=============================================================================
+RESOURCE TBUF r_browser_zoom_level { buf = qtn_browser_zoom_level_tooltip; }
+RESOURCE TBUF r_browser_zoom_level_max { buf = qtn_browser_zoom_level_tooltip_maximum; }
+RESOURCE TBUF r_browser_zoom_level_min { buf = qtn_browser_zoom_level_tooltip_minimum; }
+RESOURCE TBUF r_browser_image_zoom_level { buf = qtn_browser_image_zoom_level; }
+RESOURCE TBUF r_browser_text_size { buf = qtn_browser_text_size_tooltip; }
+
+//=============================================================================
+//
+// Web Feeds
+//
+//=============================================================================
+RESOURCE TBUF r_browser_menu_item_back_to_page { buf = qtn_wml_list_ret_page; }
+RESOURCE TBUF r_browser_menu_item_favourites { buf = qtn_wml_faves; }
+RESOURCE TBUF r_browser_menu_item_list_navigation { buf = qtn_wml_list_navigation; }
+
+RESOURCE TBUF r_browser_menu_item_list_option_goto { buf = text_wml_option_goto; }
+RESOURCE TBUF r_browser_menu_item_list_home { buf = qtn_browser_list_home; }
+
+RESOURCE TBUF r_browser_menu_item_list_folder_tools { buf = qtn_browser_list_folder_tools; }
+
+RESOURCE TBUF r_browser_menu_item_list_download { buf = qtn_browser_list_downloads; }
+
+RESOURCE TBUF r_browser_menu_item_list_change_connection { buf = qtn_wml_list_change_connection; }
+RESOURCE TBUF r_browser_menu_item_list_dconn { buf = qtn_wml_list_dconn; }
+RESOURCE TBUF r_browser_menu_item_list_delete_cookies { buf = qtn_browser_list_delete_cookies; }
+RESOURCE TBUF r_browser_menu_item_list_empty_cache { buf = text_wml_option_empty_cache; }
+
+RESOURCE TBUF r_browser_menu_item_list_infoview { buf = qtn_wml_option_infoview; }
+RESOURCE TBUF r_browser_menu_item_list_session { buf = qtn_wml_opt_smenu_session; }
+RESOURCE TBUF r_browser_menu_item_list_about_product { buf = qtn_wml_opt_about_product_oss; }
+//Send selected feeds
+RESOURCE TBUF r_browser_menu_item_help { buf = qtn_browser_options_help; }
+RESOURCE TBUF r_browser_menu_item_exit { buf = qtn_options_exit; }
+RESOURCE TBUF r_browser_menu_item_find_keyword { buf = qtn_browser_find_keyword_mm; }
+RESOURCE TBUF r_browser_menu_item_list_privacy { buf = qtn_browser_list_privacy; }
+RESOURCE TBUF r_browser_menu_item_rotate_display { buf = qtn_browser_rotate_display; }
+
+RESOURCE TBUF r_browser_tooltip_toolbar { buf = qtn_browser_tooltip_toolbar; }
+RESOURCE TBUF r_browser_subscribe_list { buf = qtn_browser_subscribe_list; }
+RESOURCE TBUF r_browser_query_set_as_home_page { buf = qtn_browser_query_set_as_home_page; }
+
+//=============================================================================
+//
+// Browser Keymap Key Assignments
+//
+//=============================================================================
+RESOURCE TBUF r_browser_keymap_key0 { buf = "1"; }
+RESOURCE TBUF r_browser_keymap_key1 { buf = "2"; }
+RESOURCE TBUF r_browser_keymap_key2 { buf = "3"; }
+RESOURCE TBUF r_browser_keymap_key3 { buf = "4"; }
+RESOURCE TBUF r_browser_keymap_key4 { buf = "5"; }
+RESOURCE TBUF r_browser_keymap_key5 { buf = "6"; }
+RESOURCE TBUF r_browser_keymap_key6 { buf = "7"; }
+RESOURCE TBUF r_browser_keymap_key7 { buf = "8"; }
+RESOURCE TBUF r_browser_keymap_key8 { buf = "9"; }
+RESOURCE TBUF r_browser_keymap_key9 { buf = "*"; }
+RESOURCE TBUF r_browser_keymap_key10 { buf = "0"; }
+RESOURCE TBUF r_browser_keymap_key11 { buf = "#"; }
+RESOURCE TBUF r_browser_keymap_keyDefault { buf = "X"; }
+
+//=============================================================================
+//
+// Browser Shortcut Keymap Text Assignments
+//
+//=============================================================================
+RESOURCE TBUF r_browser_keymap_text_none { buf = qtn_browser_keymap_text_none; }
+RESOURCE TBUF r_browser_keymap_text_show_help { buf = qtn_browser_keymap_text_show_help; }
+RESOURCE TBUF r_browser_keymap_text_switch_window { buf = qtn_browser_keymap_text_switch_window; }
+RESOURCE TBUF r_browser_keymap_text_save_page { buf = qtn_browser_keymap_text_save_page; }
+RESOURCE TBUF r_browser_keymap_text_view_images { buf = qtn_browser_keymap_text_view_images; }
+RESOURCE TBUF r_browser_keymap_text_visual_history { buf = qtn_browser_keymap_text_visual_history; }
+RESOURCE TBUF r_browser_keymap_text_manage_bookmarks { buf = qtn_browser_keymap_text_manage_bookmarks; }
+RESOURCE TBUF r_browser_keymap_text_subscribe_to_feeds { buf = qtn_browser_keymap_text_subscribe_to_feeds; }
+RESOURCE TBUF r_browser_keymap_text_rotate_screen { buf = qtn_browser_keymap_text_rotate_screen; }
+RESOURCE TBUF r_browser_keymap_text_settings { buf = qtn_browser_keymap_text_settings; }
+RESOURCE TBUF r_browser_keymap_text_zoom_out { buf = qtn_browser_keymap_text_zoom_out; }
+RESOURCE TBUF r_browser_keymap_text_zoom_in { buf = qtn_browser_keymap_text_zoom_in; }
+RESOURCE TBUF r_browser_keymap_text_zoom_mode { buf = qtn_browser_keymap_text_zoom_mode; }
+RESOURCE TBUF r_browser_keymap_text_go_to_homepage { buf = qtn_browser_keymap_text_go_to_homepage; }
+RESOURCE TBUF r_browser_keymap_text_previous_page { buf = qtn_browser_keymap_text_previous_page; }
+RESOURCE TBUF r_browser_keymap_text_miniature_show { buf = qtn_browser_keymap_text_miniature_show; }
+RESOURCE TBUF r_browser_keymap_text_reload { buf = qtn_browser_keymap_text_reload; }
+RESOURCE TBUF r_browser_keymap_text_find_keyword { buf = qtn_browser_keymap_text_find_keyword; }
+RESOURCE TBUF r_browser_keymap_text_save_as_bookmark { buf = qtn_browser_keymap_text_save_as_bookmark; }
+RESOURCE TBUF r_browser_keymap_text_go_to_web_address { buf = qtn_browser_keymap_text_go_to_web_address; }
+RESOURCE TBUF r_browser_keymap_text_show_toolbar { buf = qtn_browser_keymap_text_show_toolbar; }
+RESOURCE TBUF r_browser_keymap_text_show_keymap { buf = qtn_browser_keymap_text_show_keymap; }
+RESOURCE TBUF r_browser_keymap_text_full_screen { buf = qtn_browser_keymap_text_full_screen; }
+
+//RESOURCE TBUF r_update_tim { buf = "update infonote!"; }
+//RESOURCE TBUF r_about_tim { buf = "version infonote!"; }
+
+//=============================================================================
+//
+// Service
+//
+//=============================================================================
+RESOURCE TBUF r_is_recommendations { buf = qtn_is_recommendations; }
+RESOURCE TBUF r_is_recommendations_title { buf = qtn_is_recommendations_title; }
+
+//=============================================================================
+//
+// Search
+//
+//=============================================================================
+RESOURCE TBUF r_browsers_sett_web_search_provider { buf = qtn_browsers_sett_web_search_provider; }
+RESOURCE TBUF r_is_web_search { buf = qtn_is_web_search; }
+RESOURCE TBUF r_is_label_not_selected { buf = qtn_is_label_not_selected; }
+#ifdef BRDO_IAD_UPDATE_ENABLED_FF
+RESOURCE TBUF r_install_addon_browser { buf = qtn_install_addon_browser; }
+RESOURCE TBUF r_install_browser_now { buf = qtn_swupdate_now; }
+RESOURCE TBUF r_install_browser_later { buf = qtn_swupdate_later ; }
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserAnimation.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser animation resources
+
+*
+*/
+
+
+// INCLUDES
+#include "Browser.hrh"
+#include <browser.mbg>
+
+
+// RESOURCE DEFINITIONS
+//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+// IF RESOURCES NEEDS TO BE CHANGED :
+// IF NEW RESOURCE IS ADDED ONE r_browser_dummy_dialog_0..n
+// NEED TO BE REMOVED
+// IF NEW RESOURCE IS REMOVED ONE r_browser_dummy_dialog_0..n
+// NEED TO BE ADDED
+// THE RESOURCE ID OF THE ANIMATIONS CAN NOT BE CHANGED
+//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+// RESOURCE DEFINITIONS
+
+// Dummy resources to fix compatibility break
+RESOURCE DIALOG r_browser_dummy_dialog_0
+ {
+ }
+
+RESOURCE DIALOG r_browser_dummy_dialog_1
+ {
+ }
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting_csd
+//
+// ---------------------------------------------------------
+//
+RESOURCE BMPANIM_DATA r_browser_waiting_csd // animation
+ {
+ frameinterval = 300; // in milliseconds
+ playmode = EAknBitmapAnimationPlayModeCycle; // play, cycle or bounce
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ frames = r_browser_waiting_csd_image_array; // link to an array
+ }
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting_csd_image_array
+//
+// ---------------------------------------------------------
+//
+RESOURCE ARRAY r_browser_waiting_csd_image_array // array of frames
+ {
+ items={
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_1;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_1_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_2;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_2_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_3;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_3_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_4;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_4_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_5;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_5_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_6;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_6_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_csd_7;
+ maskid=EMbmBrowserQgn_indi_wait_wml_csd_7_mask;}
+ };
+ }
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting_gprs
+//
+// ---------------------------------------------------------
+//
+RESOURCE BMPANIM_DATA r_browser_waiting_gprs // animation
+ {
+ frameinterval = 300; // in milliseconds
+ playmode = EAknBitmapAnimationPlayModeCycle; // play, cycle or bounce
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ frames = r_browser_waiting_gprs_image_array; // link to an array
+ }
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting
+//
+// ---------------------------------------------------------
+//
+RESOURCE BMPANIM_DATA r_browser_waiting // animation
+ {
+ frameinterval = 300; // in milliseconds
+ playmode = EAknBitmapAnimationPlayModeCycle; // play, cycle or bounce
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ frames = r_browser_waiting_image_array; // link to an array
+ }
+// ---------------------------------------------------------
+//
+// r_browser_waiting_image_array
+//
+// ---------------------------------------------------------
+//
+RESOURCE ARRAY r_browser_waiting_image_array // array of frames
+ {
+ items={
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_02;
+ maskid=EMbmBrowserQgn_menu_wml_02_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_03;
+ maskid=EMbmBrowserQgn_menu_wml_03_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_04;
+ maskid=EMbmBrowserQgn_menu_wml_04_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_05;
+ maskid=EMbmBrowserQgn_menu_wml_05_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_06;
+ maskid=EMbmBrowserQgn_menu_wml_06_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_07;
+ maskid=EMbmBrowserQgn_menu_wml_07_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_08;
+ maskid=EMbmBrowserQgn_menu_wml_08_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_09;
+ maskid=EMbmBrowserQgn_menu_wml_09_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_10;
+ maskid=EMbmBrowserQgn_menu_wml_10_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_11;
+ maskid=EMbmBrowserQgn_menu_wml_11_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_12;
+ maskid=EMbmBrowserQgn_menu_wml_12_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_13;
+ maskid=EMbmBrowserQgn_menu_wml_13_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_14;
+ maskid=EMbmBrowserQgn_menu_wml_14_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_15;
+ maskid=EMbmBrowserQgn_menu_wml_15_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_menu_wml_16;
+ maskid=EMbmBrowserQgn_menu_wml_16_mask;}
+ };
+ }
+
+
+
+
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting_gprs_image_array
+//
+// ---------------------------------------------------------
+//
+RESOURCE ARRAY r_browser_waiting_gprs_image_array // array of frames
+ {
+ items={
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_gprs_2;
+ maskid=EMbmBrowserQgn_indi_wait_wml_gprs_2_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_gprs_3;
+ maskid=EMbmBrowserQgn_indi_wait_wml_gprs_3_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_gprs_4;
+ maskid=EMbmBrowserQgn_indi_wait_wml_gprs_4_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_gprs_5;
+ maskid=EMbmBrowserQgn_indi_wait_wml_gprs_5_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_gprs_6;
+ maskid=EMbmBrowserQgn_indi_wait_wml_gprs_6_mask;}
+ };
+ }
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting_hscsd
+//
+// ---------------------------------------------------------
+//
+RESOURCE BMPANIM_DATA r_browser_waiting_hscsd // animation
+ {
+ frameinterval = 300; // in milliseconds
+ playmode = EAknBitmapAnimationPlayModeCycle; // play, cycle or bounce
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ frames = r_browser_waiting_hscsd_image_array; // link to an array
+ }
+
+// ---------------------------------------------------------
+//
+// r_browser_waiting_hscsd_image_array
+//
+// ---------------------------------------------------------
+//
+RESOURCE ARRAY r_browser_waiting_hscsd_image_array // array of frames
+ {
+ items={
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_hscsd_2;
+ maskid=EMbmBrowserQgn_indi_wait_wml_hscsd_2_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_hscsd_3;
+ maskid=EMbmBrowserQgn_indi_wait_wml_hscsd_3_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_hscsd_4;
+ maskid=EMbmBrowserQgn_indi_wait_wml_hscsd_4_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_hscsd_5;
+ maskid=EMbmBrowserQgn_indi_wait_wml_hscsd_5_mask;},
+ BMPANIM_FRAME { bmpid=EMbmBrowserQgn_indi_wait_wml_hscsd_6;
+ maskid=EMbmBrowserQgn_indi_wait_wml_hscsd_6_mask;}
+ };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserBookmarks.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,626 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Resources for browser bookmarks view
+*
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_RSSI
+#define BROWSER_BOOKMARKS_RSSI
+
+#include "BrowserFavourites.rssi" // Components common to all favourites views
+#include "Browser.hrh" // Data definitions
+#include <wmlbrowser.loc> // Localization constants
+#include <browser.mbg>
+#include <bldvariant.hrh>
+#include "bookmark_toolbar.rssi"
+
+// VIEWS
+
+// Bookmarks view
+RESOURCE AVKON_VIEW r_browser_bookmarks_view
+ {
+ menubar = r_browser_bookmarks_menu_bar;
+ cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; // CBA commands are set dynamically
+ toolbar = r_bookmark_view_toolbar;
+ }
+
+// MENUBARS
+
+// Normal Options menubar for the bookmarks view
+RESOURCE MENU_BAR r_browser_bookmarks_menu_bar
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_browser_bookmarks_menu_pane; }
+ };
+ }
+
+// OK-Options menubar for the bookmarks view
+RESOURCE MENU_BAR r_browser_bookmarks_menu_bar_ok
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_browser_bookmarks_menu_pane_ok; }
+ };
+ }
+
+// MENU PANES
+
+
+// Normal Options menu pane for bookmarks
+RESOURCE MENU_PANE r_browser_bookmarks_menu_pane
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EWmlCmdDownloads;
+ txt = qtn_browser_list_downloads;
+ },
+ MENU_ITEM
+ {
+ cascade = r_goto_submenu;
+ txt = qtn_browser_options_goto;
+ },
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ MENU_ITEM
+ {
+ command = EWmlCmdAddBookmark;
+ txt = text_wmlbm_option_enter_new;
+ },
+
+ MENU_ITEM
+ {
+ command = EWmlCmdNewFolder;
+ txt = qtn_options_org_new_folder;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdSendAddressViaUnifiedMessage;
+ txt = qtn_options_send_via;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdSendBookmarkViaUnifiedMessage;
+ txt = qtn_options_send_via;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdSetAsHomePage;
+ txt = qtn_browserbm_list_set_as_home_page_sm;
+ flags = EEikMenuItemSpecific;
+ },
+#endif
+ MENU_ITEM
+ {
+ cascade = r_bmactions_submenu;
+ command = EWmlCmdBmActions;
+ txt = qtn_browser_options_bmactions;
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ flags = EEikMenuItemSpecific;
+#endif
+ },
+ MENU_ITEM
+ {
+ cascade = r_bookmarks_edit_submenu;
+ command = EWmlCmdManageBookmarks;
+ txt = qtn_wmlbm_manage_bm;
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ flags = EEikMenuItemSpecific;
+#endif
+ },
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ MENU_ITEM
+ {
+ cascade = r_browser_favourites_menu_pane_mark_unmark;
+ command = EWmlCmdMarkUnmark;
+ txt = qtn_browser_options_markunmark;
+ },
+#else
+ MENU_ITEM
+ {
+ command = EWmlCmdDelete;
+ txt = qtn_fldr_delete;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdMove;
+ txt = qtn_options_org_move;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdMoveToFolder;
+ txt = qtn_options_org_move_to_folder;
+ flags = EEikMenuItemSpecific;
+ },
+
+#endif
+ MENU_ITEM
+ {
+ cascade = r_clear_submenu;
+ command = EWmlCmdPrivacy;
+ txt = qtn_browser_options_clear;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdPreferences;
+ txt = qtn_wmls_browser_opt_sett;
+ },
+ MENU_ITEM
+ {
+ cascade = r_help_submenu;
+ command = EWmlCmdHelpMenu;
+ txt = qtn_browser_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdUserExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+// OK-Options menu pane for bookmarks
+RESOURCE MENU_PANE r_browser_bookmarks_menu_pane_ok
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdAddBookmark; txt = text_wmlbm_option_enter_new; },
+ MENU_ITEM { command = EWmlCmdDelete; txt = qtn_fldr_delete; },
+ MENU_ITEM { command = EWmlCmdMove; txt = qtn_options_org_move; },
+ MENU_ITEM { command = EWmlCmdMoveToFolder; txt = qtn_options_org_move_to_folder; },
+ MENU_ITEM { command = EWmlCmdNewFolder; txt = qtn_options_org_new_folder; },
+ MENU_ITEM { command = EWmlCmdCopyToBookmarks; txt = qtn_browserbm_options_copy_to_bookmarks; },
+ MENU_ITEM { command = EWmlCmdSwitchToGotoActive; txt = text_wml_option_goto; },
+ MENU_ITEM { cascade = r_browser_favourites_menu_pane_mark_unmark; command = EWmlCmdMarkUnmark; txt = qtn_browser_options_markunmark; }
+ };
+ }
+
+// Edit submenu
+RESOURCE MENU_PANE r_bookmarks_edit_submenu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EWmlCmdEditBookmark;
+ txt = qtn_wmlbm_edit_bm;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdRename;
+ txt = qtn_fldr_rename;
+ }
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ ,
+ MENU_ITEM
+ {
+ command = EWmlCmdDelete;
+ txt = qtn_fldr_delete;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdMove;
+ txt = qtn_options_org_move;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdMoveToFolder;
+ txt = qtn_options_org_move_to_folder;
+ },
+ MENU_ITEM
+ {
+ command = EWmlCmdNewFolder;
+ txt = qtn_options_org_new_folder;
+ }
+#endif
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_bmactions_submenu
+// Cascading menu for bookmark actions menu items
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_bmactions_submenu
+ {
+ items =
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ MENU_ITEM { command = EWmlCmdSendAddressViaUnifiedMessage; txt=qtn_options_send_via; },
+ MENU_ITEM { command = EWmlCmdSendBookmarkViaUnifiedMessage; txt =qtn_options_send_via; },
+ MENU_ITEM { command = EWmlCmdSetAsHomePage; txt=qtn_browserbm_list_set_as_home_page_sm; },
+ MENU_ITEM { command = EWmlCmdAddBookmark; txt = text_wmlbm_option_enter_new; },
+#endif
+ MENU_ITEM { command = EWmlCmdCopyToBookmarks; txt = qtn_browserbm_options_copy_to_bookmarks_sm; },
+ MENU_ITEM { command = EWmlCmdSetPreferredBookmark; txt = qtn_browserbm_list_set_as_preferred; },
+ MENU_ITEM { command = EWmlCmdSetUnPreferredBookmark; txt = qtn_browserbm_list_unset_from_preferred; }
+ };
+ }
+
+// sub-menu pane for bookmarks help form
+RESOURCE MENU_PANE r_browser_bookmarks_menu_pane_edit_bookmark
+ {
+ items =
+ {
+#ifdef __SERIES60_HELP
+ MENU_ITEM { command = EAknCmdHelp; txt=qtn_browser_options_help;},
+#endif
+ MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; }
+ };
+ }
+
+RESOURCE MENU_PANE r_browser_bookmarks_menu_pane_download_page
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdDownloadPage; txt = qtn_browserbm_options_download_page; },
+ MENU_ITEM { command = EWmlCmdDownloadPageNewWindow; txt = qtn_browserbm_options_download_in_new_window; }
+ };
+ }
+
+// CBA-s
+
+RESOURCE CBA r_browser_bookmarks_cba_goto_pane_goto_cancel // TEMP
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EWmlCmdGotoPaneGoTo; txt = qtn_wml_softk_go; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneGoTo; txt = qtn_wml_softk_go; }
+ };
+ }
+// No need for separate search command, active search editor is checked.
+RESOURCE CBA r_browser_bookmarks_cba_search_pane_search_cancel
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EWmlCmdGotoPaneGoTo; txt = qtn_is_softkey_search; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneGoTo; txt = qtn_is_softkey_search; }
+ };
+ }
+
+//adaptive popuplist needs it
+RESOURCE CBA r_browser_bookmarks_cba_goto_pane_opendir_cancel // TEMP
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EWmlCmdOpenFolder; txt = text_softkey_open; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EWmlCmdOpenFolder; txt = text_softkey_open; }
+ };
+ }
+
+// Adaptive popuplist needs it
+RESOURCE CBA r_browser_bookmarks_cba_goto_pane_select_cancel // TEMP
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EWmlCmdGotoPaneSelect; txt = text_softkey_select; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EWmlCmdGotoPaneSelect; txt = text_softkey_select; }
+ };
+ }
+
+/*
+RESOURCE DIALOG r_processing_wait_note
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EWmlControlIdProcessingPage;
+ control = AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_gen_note_processing;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+*/
+
+// LISTBOXES
+
+RESOURCE DIALOG r_browser_bookmarks_dialog_edit
+ {
+ flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect |
+ EEikDialogFlagButtonsRight | EEikDialogFlagNoTitleBar |
+ EEikDialogFlagCbaButtons | EEikDialogFlagWait
+ /*| EEikDialogFlagModeless */;
+ buttons = r_browser_cba_options_back_change ;
+ form = r_browser_bookmarks_form_edit;
+ }
+
+RESOURCE DIALOG r_browser_bookmarks_dialog_edit_apac // Dummy resource to fix compatibility break
+ {
+ }
+
+RESOURCE FORM r_browser_bookmarks_form_edit
+ {
+ flags = EEikFormEditModeOnly | EEikFormUseDoubleSpacedFormat;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ prompt = qtn_wmlbm_flabel_bmtitle;
+ id = EWmlControlEditBmEditTitle;
+ control = EDWIN
+ {
+ maxlength = KFavouritesMaxBookmarkNameDefine;
+ width = 10;
+ lines = 1;
+ max_view_height_in_lines = 5;
+ base_line_delta = 21;
+ default_input_mode = EAknEditorTextInputMode;
+ flags = EEikEdwinAllowUndo | EEikEdwinNoHorizScrolling | EEikEdwinResizable | EEikEdwinAutoSelection | EAknEditorNumericInputMode;
+ };
+ },
+
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ prompt = qtn_wmlbm_flabel_bmadrs;
+ id = EWmlControlEditBmEditAddress;
+ control = EDWIN
+ {
+ maxlength = KFavouritesMaxUrlDefine;
+ width = 10;
+ lines = 1;
+ max_view_height_in_lines = 5;
+ base_line_delta = 21;
+ default_case = EAknEditorLowerCase;
+ allowed_case_modes = EAknEditorLowerCase | EAknEditorUpperCase;
+ default_input_mode = EAknEditorTextInputMode;
+ allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode;
+ flags = EEikEdwinAllowUndo | EEikEdwinNoHorizScrolling | EEikEdwinResizable | EEikEdwinNoLineOrParaBreaks | EAknEditorNumericInputMode ;
+ special_character_table = R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG;
+ avkon_flags = EAknEditorFlagLatinInputModesOnly;
+ };
+ },
+
+ DLG_LINE
+ {
+ type = EAknCtPopupField;
+ prompt = qtn_wmlbm_flabel_wapap;
+ id = EWmlControlEditBmWapApSelector;
+ itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
+ control = POPUP_FIELD
+ {
+ flags = 0;
+ width = KBrowserMaxWapApName;
+ other = "x"; // unused, but dialog panics if empty.
+ emptynote = r_browser_bookmarks_info_no_valid_ap;
+ empty = qtn_wmlbm_text_ap_none;
+ invalid = qtn_wmlbm_text_ap_invalid;
+ };
+ },
+
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ prompt = qtn_wmlbm_flabel_username;
+ id = EWmlControlEditBmEditUsername;
+ control = EDWIN
+ {
+ maxlength = KFavouritesMaxUsernameDefine;
+ width = 10;
+ lines = 1;
+ max_view_height_in_lines = 5;
+ base_line_delta = 21;
+// default_case = EAknEditorLowerCase;
+ default_input_mode = EAknEditorTextInputMode;
+ flags = EEikEdwinAllowUndo | EEikEdwinNoHorizScrolling | EEikEdwinResizable | EEikEdwinAutoSelection | EAknEditorNumericInputMode;
+ avkon_flags = EAknEditorFlagLatinInputModesOnly;
+ };
+ },
+
+ DLG_LINE
+ {
+ type = EEikCtSecretEd;
+ prompt = qtn_wmlbm_flabel_passwd;
+ id = EWmlControlEditBmEditPassword;
+ control = SECRETED
+ {
+ num_letters = KFavouritesMaxPasswordDefine;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_browser_bookmarks_info_no_valid_ap
+ {
+ flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
+ EEikDialogFlagCbaButtons | EEikDialogFlagWait;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknPopupFieldEmptyListNote;
+ control = AVKON_NOTE
+ {
+ layout = EGeneralLayout;
+ singular_label = qtn_wmlbm_info_no_valid_ap;
+ plural_label = "";
+ animation = R_QGN_NOTE_INFO_ANIM;
+ };
+ }
+ };
+ }
+
+
+RESOURCE FORM r_browser_bookmarks_form_edit_apac // Dummy resource to fix compatibility break
+ {
+ }
+
+
+// ICONARRAYS
+/*
+RESOURCE AKN_ICON_ARRAY_ARRAY r_browser_bookmarks_listbox_icons
+ {
+ iconarrays =
+ {
+ AKN_ICON_ARRAY
+ {
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ icons =
+ {
+ AKN_ICON { iconId = EMbmAvkonQgn_indi_marked_add; maskId = EMbmAvkonQgn_indi_marked_add_mask; },
+ AKN_ICON { iconId = EMbmAvkonQgn_prop_folder_small; maskId = EMbmAvkonQgn_prop_folder_small_mask; }
+ };
+ },
+ AKN_ICON_ARRAY
+ {
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ icons =
+ {
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_home; maskId = EMbmBrowserQgn_prop_wml_home_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_bm_last; maskId = EMbmBrowserQgn_prop_wml_bm_last_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_bm; maskId = EMbmBrowserQgn_prop_wml_bm_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_indi_wml_csd_add; maskId = EMbmBrowserQgn_indi_wml_csd_add_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_indi_wml_hscsd_add; maskId = EMbmBrowserQgn_indi_wml_hscsd_add_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_indi_wml_gprs_add; maskId = EMbmBrowserQgn_indi_wml_gprs_add_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_folder_link_seamless; maskId = EMbmBrowserQgn_prop_wml_folder_link_seamless_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_folder_adap; maskId = EMbmBrowserQgn_prop_wml_folder_adap_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_bm_adap; maskId = EMbmBrowserQgn_prop_wml_bm_adap_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_psln_active; maskId = EMbmBrowserQgn_prop_psln_active_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_folder_rss; maskId = EMbmBrowserQgn_prop_folder_rss_mask; }
+ };
+ }
+ };
+ }
+*/
+RESOURCE TBUF r_browser_option_bookmarks
+ { buf = text_wml_option_bookmarks; }
+
+RESOURCE TBUF r_browser_bookmarks_text_no_bookmarks
+ { buf = text_wml_no_bookmarks; }
+
+RESOURCE TBUF r_browser_bookmarks_text_default_bm_title
+ { buf = qtn_wmlbm_default_bm_title; }
+
+RESOURCE TBUF r_browser_bookmarks_text_bm_not_saved
+ { buf = qtn_wmlbm_bm_not_saved; }
+
+RESOURCE TBUF r_browser_bookmarks_text_bm_saved
+ { buf = text_wml_bm_saved; }
+
+RESOURCE TBUF r_browser_bookmarks_text_query_address
+ { buf = qtn_wmlbm_query_address; }
+
+RESOURCE TBUF r_browser_bookmarks_name_already_used
+ { buf = qtn_wmlbm_name_already_used; }
+
+// RESOURCE TBUF r_browser_bokmarks_text_ap_none
+// { buf = qtn_wmlbm_text_ap_none; }
+
+RESOURCE TBUF r_browser_bokmarks_text_default_wapap
+ { buf = qtn_wmlbm_default_wapap; }
+
+// RESOURCE TBUF r_browser_bokmarks_text_invalid_wapap
+// { buf = qtn_wmlbm_text_ap_invalid; }
+
+// RESOURCE TBUF r_browser_bokmarks_text_info_no_valid_ap
+// { buf = qtn_wmlbm_info_no_valid_ap; }
+
+RESOURCE TBUF r_browser_adaptive_bookmarks_folder
+ {buf= qtn_browserbm_folder_adaptive_bookmarks;}
+
+RESOURCE TBUF r_browser_adaptive_bookmarks_no_adaptive_bookmarks
+ { buf = qtn_browserbm_no_adaptive_bookmarks; }
+
+RESOURCE TBUF r_browser_adaptive_bookmarks_delete_all_adaptive_bookmarks
+ { buf = qtn_browserbm_query_delete_adap_bookmarks;}
+
+RESOURCE TBUF r_browser_adaptive_bookmarks_adaptive_bookmark_copied
+ { buf= qtn_browserbm_note_adaptive_bookmark_copied;}
+
+RESOURCE TBUF r_browser_adaptive_bookmarks_adaptive_bookmarks_copied
+ { buf= qtn_browserbm_note_adaptive_bookmarks_copied;}
+
+RESOURCE TBUF r_browser_apps_feeds_list
+ {buf= qtn_apps_feeds_list;}
+
+RESOURCE TBUF r_browser_adaptive_bookmarks_title
+ { buf = qtn_browserbm_title_adaptive_bookmarks; }
+
+
+// These are SK string resources for dynamic softkey assignment in Bookmarks View
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_qtn_browser_msk_goto
+ { buf = qtn_browser_msk_goto; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_qtn_msk_add
+ { buf = qtn_msk_add; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_qtn_msk_open
+ { buf = qtn_msk_open; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_qtn_wml_softk_go
+ { buf = qtn_wml_softk_go; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_qtn_is_softk_search
+ { buf = qtn_is_softkey_search; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_back
+ { buf = text_softkey_back; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_cancel
+ { buf = text_softkey_cancel; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_empty
+ { buf = text_softkey_empty; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_exit
+ { buf = text_softkey_exit; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_ok
+ { buf = text_softkey_ok; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_open
+ { buf = text_softkey_open; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_option
+ { buf = text_softkey_option; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_stop
+ { buf = text_softkey_stop; }
+
+RESOURCE TBUF r_browser_bookmarks_dyn_sk_text_softkey_select
+ { buf = text_softkey_select; }
+
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserFavourites.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,450 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Common resources for browser views
+*
+*
+*/
+
+
+#ifndef BROWSER_FAVOURITES_RSSI
+#define BROWSER_FAVOURITES_RSSI
+
+#include "Browser.hrh" // Data definitions
+#include <browser.mbg>
+
+// TABS
+
+// tabgroup common to all views.
+RESOURCE TAB_GROUP r_browser_views_tab_group
+ {
+ tabs =
+ {
+ TAB
+ {
+ id = EWmlTabFavouritesBookmarks;
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ bmpid = EMbmBrowserQgn_prop_wml_pages_tab2;
+ bmpmask = EMbmBrowserQgn_prop_wml_pages_tab2_mask;
+ }
+ };
+ }
+
+RESOURCE IMAGE r_browser_icon_prop_folder
+ {
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ bmpid = EMbmBrowserQgn_prop_folder_tab1;
+ bmpmask = EMbmBrowserQgn_prop_folder_tab1_mask;
+ }
+
+// MENU PANES
+
+// OK-Options menu for the favourites views
+RESOURCE MENU_PANE r_browser_favourites_menu_pane_ok
+ {
+ items =
+ {
+ // Dummy menu pane; its resource id is used to refer to the common
+ // menu items in bookmarks view.
+ };
+ }
+
+// Normal Options menu for the favourites views
+RESOURCE MENU_PANE r_browser_favourites_menu_pane
+ {
+ items =
+ {
+ // Dummy menu pane; its resource id is used to refer to the common
+ // menu items in bookmarks view.
+ };
+ }
+
+// sub-menu pane for favourites views
+RESOURCE MENU_PANE r_browser_favourites_menu_pane_mark_unmark
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdMark; txt = qtn_options_list_mark_one; },
+ MENU_ITEM { command = EWmlCmdUnmark; txt = qtn_options_list_unmark_one; },
+ MENU_ITEM { command = EWmlCmdMarkAll; txt = qtn_options_list_mark_all; },
+ MENU_ITEM { command = EWmlCmdUnmarkAll; txt = qtn_options_list_unmark_all; }
+ };
+ }
+
+// sub-menu pane for favourites views
+RESOURCE MENU_PANE r_browser_favourites_menu_pane_info
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdPageInfo; txt = qtn_browser_list_page_info;},
+ MENU_ITEM { command = EWmlCmdInfoSession; txt = qtn_wml_opt_smenu_session; },
+ MENU_ITEM { command = EWmlCmdInfoSecurity; txt = qtn_wml_opt_smenu_security; }
+ };
+ }
+
+// 'Advanced functions' submenu when Small Screen support is available
+RESOURCE MENU_PANE r_browser_favourites_advanced_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdChangeConnection; txt = qtn_wml_list_change_connection; },
+ MENU_ITEM { command = EWmlCmdDisconnect; txt = qtn_wml_list_dconn; }
+ };
+ }
+// CBA-s
+
+RESOURCE CBA r_browser_favourites_cba_options_exit
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyExit; txt = text_softkey_exit; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_exit_open_item
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyExit; txt = text_softkey_exit; },
+ CBA_BUTTON { id = EWmlCmdOpenItem; txt = qtn_msk_open; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_exit_context_menu
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyExit; txt = text_softkey_exit; },
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_back_options
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdFavourites; txt = text_softkey_back; },
+ CBA_BUTTON { id = EWmlNoCmd; txt = text_softkey_empty; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_back_context_menu
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdFavourites; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+
+RESOURCE CBA r_browser_favourites_cba_options_backtopage
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackToPage; txt = text_softkey_back; }
+ };
+ }
+
+
+RESOURCE CBA r_browser_favourites_cba_options_backtopage_open_item
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackToPage; txt = text_softkey_back; },
+ CBA_BUTTON { id = EWmlCmdOpenItem; txt = qtn_msk_open; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_backtopage_context_menu
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackToPage; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_move_okcancel_ok
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EWmlCmdMoveOk; txt = text_softkey_ok; },
+ CBA_BUTTON { id = EWmlCmdMoveCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EWmlCmdMoveOk; txt = text_softkey_ok; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_backfromfolder
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackFromFolder; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyForwardKeyEvent; txt = text_softkey_empty; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_backfromfolder_goto
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackFromFolder; txt = text_softkey_back; },
+ CBA_BUTTON { id = EWmlCmdGoToAddress; txt = qtn_browser_msk_goto; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_backfromfolder_addbm
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackFromFolder; txt = text_softkey_back; },
+ CBA_BUTTON { id = EWmlCmdAddBookmark; txt = qtn_msk_add; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_backfromfolder_options
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackFromFolder; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; }
+ };
+ }
+
+
+RESOURCE CBA r_browser_favourites_cba_options_backfromfolder_open_item
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackFromFolder; txt = text_softkey_back; },
+ CBA_BUTTON { id = EWmlCmdOpenItem; txt = qtn_msk_open; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_options_backfromfolder_context_menu
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdBackFromFolder; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+RESOURCE CBA r_browser_favourites_cba_movetofolder_movecancel_move
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOk; txt = text_softkey_move; },
+ CBA_BUTTON { id = EAknSoftkeyCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EAknSoftkeyOk; txt = text_softkey_move; }
+ };
+ }
+
+// DIALOGS
+
+RESOURCE DIALOG r_wmlbrowser_favourites_note_moving
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EWmlControlIncrementalNote;
+ control = AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_fldr_moving_wait_note;
+ imagefile = AVKON_BITMAP_FILE; // bitmap file
+ imageid = EMbmAvkonQgn_note_move;
+ imagemask = EMbmAvkonQgn_note_move_mask;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_wmlbrowser_favourites_note_deleting
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EWmlControlIncrementalNote;
+ control = AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_fldr_deleting_wait_note;
+ imagefile = AVKON_BITMAP_FILE; // bitmap file
+ imageid = EMbmAvkonQgn_note_erased;
+ imagemask = EMbmAvkonQgn_note_erased_mask;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+// ICONARRAYS
+RESOURCE AKN_ICON_ARRAY_ARRAY r_browser_favourites_folder_listbox_icons
+ {
+ iconarrays =
+ {
+ AKN_ICON_ARRAY
+ {
+ bmpfile = AVKON_BITMAP_FILE;
+ icons =
+ {
+ AKN_ICON { iconId = EMbmAvkonQgn_indi_marked_add; maskId = EMbmAvkonQgn_indi_marked_add_mask; },
+ AKN_ICON { iconId = EMbmAvkonQgn_prop_folder_small; maskId = EMbmAvkonQgn_prop_folder_small_mask; },
+ AKN_ICON { iconId = EMbmAvkonQgn_indi_level_back; maskId = EMbmAvkonQgn_indi_level_back_mask; }
+ };
+ },
+ AKN_ICON_ARRAY
+ {
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ icons =
+ {
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_home; maskId = EMbmBrowserQgn_prop_wml_home_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_bm_last; maskId = EMbmBrowserQgn_prop_wml_bm_last_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_bm; maskId = EMbmBrowserQgn_prop_wml_bm_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_indi_wml_csd_add; maskId = EMbmBrowserQgn_indi_wml_csd_add_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_indi_wml_hscsd_add; maskId = EMbmBrowserQgn_indi_wml_hscsd_add_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_indi_wml_gprs_add; maskId = EMbmBrowserQgn_indi_wml_gprs_add_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_wml_folder_link_seamless; maskId = EMbmBrowserQgn_prop_wml_folder_link_seamless_mask; }
+ };
+ }
+ };
+ }
+
+
+RESOURCE DIALOG r_browser_favourites_name_query_ok_cancel
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EDataLayout;
+ label = "";
+ control = EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling | EEikEdwinAutoSelection | EEikEdwinNoWrap;
+ maxlength = KFavouritesMaxBookmarkNameDefine;
+ width = 6;
+ lines = 1;
+ };
+ };
+ }
+ };
+ }
+
+// STRINGS
+
+RESOURCE TBUF r_browser_favourites_text_cant_delete_item
+ { buf = qtn_fldr_cant_delete_item; }
+
+RESOURCE TBUF r_browser_favourites_text_cant_delete_items
+ { buf = qtn_fldr_cant_delete_items; }
+
+RESOURCE TBUF r_browser_favourites_text_fldr_name_default
+ { buf = qtn_fldr_name_default; }
+
+RESOURCE TBUF r_browser_favourites_text_fldr_name_prmpt
+ { buf = qtn_fldr_name_prmpt; }
+
+RESOURCE TBUF r_browser_favourites_text_fldr_item_name_prmpt
+ { buf = qtn_fldr_item_name_prmpt; }
+RESOURCE TBUF r_browser_favourites_text_fldr_name_already_used
+ { buf = qtn_fldr_name_already_used; }
+
+RESOURCE TBUF r_browser_favourites_text_fldr_names_in_use_rename
+ { buf = qtn_fldr_names_in_use_rename; }
+
+RESOURCE TBUF r_browser_favourites_text_query_common_conf_delete
+ { buf = qtn_query_common_conf_delete; }
+
+RESOURCE TBUF r_browser_favourites_text_del_items_query
+ { buf = qtn_fldr_del_items_query; }
+
+RESOURCE TBUF r_browser_favourites_text_del_full_fldrs_query
+ { buf = qtn_fldr_del_full_fldrs_query; }
+
+RESOURCE TBUF r_browser_favourites_text_item_cannot_be_moved
+ { buf = qtn_fldr_item_cannot_be_moved; }
+
+RESOURCE TBUF r_browser_favourites_text_some_items_cant_move
+ { buf = qtn_fldr_some_items_cant_move; }
+
+// RESOURCE TBUF r_browser_favourites_text_no_folders_exist
+// { buf = qtn_fldr_no_folders_exist; }
+
+RESOURCE TBUF r_browser_favourites_text_cannot_access_db
+ { buf = qtn_wmlbm_err_db_inaccessible; }
+
+RESOURCE TBUF r_browser_favourites_text_fldr_root_level
+ { buf = qtn_fldr_root_level; }
+
+RESOURCE TBUF r_browser_favourites_text_move_to_prmpt
+ { buf = qtn_fldr_move_to_prmpt; }
+
+RESOURCE TBUF r_browser_favourites_text_prmpt_edit_name
+ { buf = qtn_wml_prmpt_edit_name; }
+
+RESOURCE TBUF r_browser_favourites_text_prmpt_illegal_char
+ { buf = qtn_fldr_illegal_characters; }
+
+RESOURCE TBUF r_browser_favourites_text_prmpt_cant_rename
+ { buf = qtn_fldr_cant_rename_item; }
+
+
+RESOURCE TBUF r_browserbm_folder_download_applications { buf = qtn_browserbm_folder_download_applications; }
+RESOURCE TBUF r_browserbm_folder_download_images { buf = qtn_browserbm_folder_download_images; }
+RESOURCE TBUF r_browserbm_folder_download_tones { buf = qtn_browserbm_folder_download_tones; }
+RESOURCE TBUF r_browserbm_folder_download_videos { buf = qtn_browserbm_folder_download_videos; }
+RESOURCE TBUF r_browserbm_folder_download_skins { buf = qtn_browserbm_folder_download_skins; }
+RESOURCE TBUF r_browserbm_folder_download_music { buf = qtn_browserbm_folder_download_music; }
+
+RESOURCE TBUF r_browserbm_folder_title_download_applications { buf = qtn_browserbm_folder_title_download_applications; }
+RESOURCE TBUF r_browserbm_folder_title_download_images { buf = qtn_browserbm_folder_title_download_images; }
+RESOURCE TBUF r_browserbm_folder_title_download_tones { buf = qtn_browserbm_folder_title_download_tones; }
+RESOURCE TBUF r_browserbm_folder_title_download_videos { buf = qtn_browserbm_folder_title_download_videos; }
+RESOURCE TBUF r_browserbm_folder_title_download_skins { buf = qtn_browserbm_folder_title_download_skins; }
+RESOURCE TBUF r_browserbm_folder_title_download_music { buf = qtn_browserbm_folder_title_download_music; }
+
+#endif
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserGenericDialogs.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* browser generic dialog resources
+*
+*
+*/
+
+
+#ifndef WML_BROWSER_GENERIC_DIALOGS_RSSI
+#define WML_BROWSER_GENERIC_DIALOGS_RSSI
+
+#include "browser.hrh" // Data definitions
+#include <wmlbrowser.loc>
+
+RESOURCE DIALOG r_browser_confirm_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = "";
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_browser_clearformpasswddata_query
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = qtn_browser_form_data_delete_all;
+ };
+ }
+ };
+ }
+
+
+RESOURCE DIALOG r_browser_clearpasswddata_query
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = qtn_browser_form_data_delete_password;
+ };
+ }
+ };
+ }
+
+
+RESOURCE DIALOG r_browser_clearprivacydata_query
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = qtn_browser_privacy_delete_all;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_browser_clearhistorydata_query
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = qtn_browser_privacy_query_clear_history;
+ };
+ }
+ };
+ }
+
+// Use this with TbrowserDialogs::InfoNoteL(...); set prompt there.
+RESOURCE DIALOG r_browser_info_note
+ {
+ flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
+ EEikDialogFlagCbaButtons | EEikDialogFlagWait;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralNote;
+ control = AVKON_NOTE
+ {
+ layout = EGeneralLayout;
+ singular_label = "";
+ plural_label = "";
+ animation = R_QGN_NOTE_INFO_ANIM;
+ };
+ }
+ };
+ }
+
+// Use this with TbrowserDialogs::InfoNoteL(...); set prompt there.
+RESOURCE DIALOG r_browser_ok_note
+ {
+ flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
+ EEikDialogFlagCbaButtons | EEikDialogFlagWait;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralNote;
+ control = AVKON_NOTE
+ {
+ layout = EGeneralLayout;
+ singular_label = "";
+ plural_label = "";
+ animation = R_QGN_NOTE_OK_ANIM;
+ };
+ }
+ };
+ }
+
+/*
+//----------------------------------------------------
+//
+// r_wml_wim_dialog_list
+// WIM ListSelect dialog
+//
+//----------------------------------------------------
+
+RESOURCE AVKON_LIST_QUERY r_wml_wim_dialog_list
+ {
+ softkeys = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ AVKON_LIST_QUERY_DLG_LINE
+ {
+ //type = EAknCtListQueryControl;
+ //id = EListControl;
+ control = AVKON_LIST_QUERY_CONTROL
+ {
+ listtype = EAknCtSinglePopupMenuListBox;
+ listbox = AVKON_LIST_QUERY_LIST
+ {
+ array_id=0;
+ };
+ heading = "title";
+
+ };
+ }
+ };
+ }
+*/
+//----------------------------------------------------
+//
+// r_wim_query_with_heading
+// WIM InputPrompt dialog (edwin)
+//
+//----------------------------------------------------
+
+RESOURCE DIALOG r_wim_query_with_heading
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ bmpfile = AVKON_BITMAP_FILE; // bitmap file
+ bmpid = EMbmAvkonQgn_indi_checkbox_on;
+ bmpmask = EMbmAvkonQgn_indi_checkbox_on_mask;
+ };
+ },
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_DATA_QUERY
+ {
+ layout = EDataLayout;
+ control = EDWIN
+ {
+ //allowed_input_modes=EAknEditorTextInputMode | EAknEditorNumericInputMode;
+ default_input_mode=EAknEditorTextInputMode;
+ //avkon_flags = EAknEditorFlagNoT9;
+ //num_letters=4;
+ };
+
+ };
+ }
+
+ };
+ }
+//----------------------------------------------------
+//
+// r_wim_query_with_hidetext
+// WIM InputPrompt dialog (secreteditor)
+//
+//----------------------------------------------------
+
+RESOURCE DIALOG r_wim_query_with_hidetext
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ bmpfile = AVKON_BITMAP_FILE; // bitmap file
+ bmpid = EMbmAvkonQgn_indi_checkbox_on;
+ bmpmask = EMbmAvkonQgn_indi_checkbox_on_mask;
+ };
+ },
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_DATA_QUERY
+ {
+ layout = EPinLayout;
+ control = SECRETED
+ {
+ num_letters=4;
+ };
+
+ };
+ }
+
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_wim_prompt_dialog
+// WIM Prompt dialog
+//
+//----------------------------------------------------
+
+RESOURCE DIALOG r_wim_prompt_dialog
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ //label=qtn_wmlsec_query_hdr_secwarn;
+ //headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE;
+ };
+ },
+
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = "";
+ };
+ }
+ };
+ }
+
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserHp.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser hp resource file
+*
+*
+*/
+
+
+// INCLUDES
+#include <browserhp.loc>
+
+// RESOURCE IDENTIFIER
+RESOURCE TBUF r_lhp_title { buf = qtn_lhp_title; }
+RESOURCE TBUF r_lhp_search_web { buf = qtn_lhp_search_web; }
+RESOURCE TBUF r_lhp_search_images { buf = qtn_lhp_search_images; }
+RESOURCE TBUF r_lhp_my_top { buf = qtn_lhp_my_top; }
+RESOURCE TBUF r_lhp_shortcut_keys { buf = qtn_lhp_shortcut_keys; }
+RESOURCE TBUF r_lhp_selection_key { buf = qtn_lhp_selection_key; }
+RESOURCE TBUF r_lhp_selection_key_label { buf = qtn_lhp_selection_key_label; }
+RESOURCE TBUF r_lhp_c_key_label { buf = qtn_lhp_c_key_label; }
+RESOURCE TBUF r_lhp_1_key_label { buf = qtn_lhp_1_key_label; }
+RESOURCE TBUF r_lhp_2_key_label { buf = qtn_lhp_2_key_label; }
+RESOURCE TBUF r_lhp_3_key_label { buf = qtn_lhp_3_key_label; }
+RESOURCE TBUF r_lhp_4_key_label { buf = qtn_lhp_unused_key_label; }
+RESOURCE TBUF r_lhp_5_key_label { buf = qtn_lhp_5_key_label; }
+RESOURCE TBUF r_lhp_6_key_label { buf = qtn_lhp_unused_key_label; }
+RESOURCE TBUF r_lhp_7_key_label { buf = qtn_lhp_unused_key_label; }
+RESOURCE TBUF r_lhp_8_key_label { buf = qtn_lhp_8_key_label; }
+RESOURCE TBUF r_lhp_9_key_label { buf = qtn_lhp_9_key_label; }
+RESOURCE TBUF r_lhp_0_key_label { buf = qtn_lhp_0_key_label; }
+RESOURCE TBUF r_lhp_star_key_label { buf = qtn_lhp_star_key_label; }
+RESOURCE TBUF r_lhp_hash_key_label { buf = qtn_lhp_hash_key_label; }
+RESOURCE TBUF r_lhp_note { buf = qtn_lhp_note; }
+RESOURCE TBUF r_lhp_shortcut_unavailable { buf = qtn_lhp_shortcut_unavailable; }
+RESOURCE TBUF r_lhp_browser_forum { buf = qtn_lhp_browser_forum; }
+RESOURCE TBUF r_lhp_join_discussion_1 { buf = qtn_lhp_join_discussion_1; }
+RESOURCE TBUF r_lhp_join_discussion_2 { buf = qtn_lhp_join_discussion_2; }
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserInitial.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser Initial view resources
+
+*
+*/
+
+
+#ifndef BROWSER_INITIAL_RSSI
+#define BROWSER_INITIAL_RSSI
+
+// INCLUDES
+
+#include "Browser.hrh"
+#include <wmlbrowser.loc>
+#include <browser.mbg>
+#include <bldvariant.hrh>
+
+// RESOURCE DEFINITIONS
+
+//----------------------------------------------------
+//
+// r_browserinitial_view
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_browserinitial_view
+ {
+ menubar = r_browserinitial_menubar_view;
+ cba = R_AVKON_SOFTKEYS_EMPTY; // CBA commands are set dynamically
+ }
+
+//----------------------------------------------------
+//
+// r_browserinitial_cba_options_exit
+//
+//----------------------------------------------------
+//
+RESOURCE CBA r_browserinitial_cba_options_exit
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdCloseBrowser; txt = text_softkey_exit; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browserinitial_menubar_view
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_browserinitial_menubar_view
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_browserinitial_view_menu; txt = " "; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browserinitial_view_menu
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_browserinitial_view_menu
+ {
+ items =
+ {
+ MENU_ITEM { command = EWmlCmdUserExit; txt = qtn_options_exit; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browserinitial_app_menu
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_browserinitial_app_menu
+ {
+ items =
+ {
+ MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; }
+ };
+ }
+
+RESOURCE TBUF r_browser_initial_view_title { buf = qtn_apps_browserng_grid; }
+
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserNG.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Main browser resource file
+*
+*
+*/
+
+#include "Browser.rss"
+#include "BrowserWindowSelection.rssi"
+#include "BrowserInitial.rssi"
+#include <Avkon.loc>
+#ifdef __RSS_FEEDS
+#include "Feeds.rssi"
+#endif // __RSS_FEEDS
+
+//----------------------------------------------------
+//
+// Find keyword strings
+//
+//----------------------------------------------------
+//
+
+RESOURCE TBUF r_qtn_browser_keyword_find_no_matches { buf = qtn_browser_keyword_find_no_matches; }
+RESOURCE TBUF r_qtn_browser_keyword_find_wraparound { buf = qtn_browser_keyword_find_wraparound; }
+RESOURCE TBUF r_qtn_browser_keyword_find_all_content_searched { buf = qtn_browser_keyword_find_all_content_searched; }
+
+// Misc dialogs
+RESOURCE TBUF r_qtn_browser_dialog_oom { buf=qtn_memlo_ram_out_of_mem; }
+RESOURCE TBUF r_qtn_OK_button { buf= text_softkey_ok; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserNG_reg.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: RSS for registration file for Browser.
+*
+*/
+
+
+#include <appinfo.rh>
+#include <BrowserNG.rsg>
+
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10008D39
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "BrowserNG";
+ localisable_resource_file = APP_RESOURCE_DIR"\\BrowserNG";
+ localisable_resource_id = R_BROWSER_LOCALISABLE_APP_INFO;
+ embeddability = KAppEmbeddable;
+ newfile = KAppDoesNotSupportNewFile;
+
+ // MIME types
+ datatype_list=
+ {
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/html";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/xhtml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.xhtml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlc";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/wml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/vnd.wap.wml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlscriptc";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlscript";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wbxml";
+ },
+ DATATYPE
+ {
+ // ++PK
+ // TSW EAPG-757BHY priority for text/x-opml should be low instead of high. Changed from High to Low
+ priority=EDataTypePriorityLow;
+ // ++PK
+ type="text/x-opml";
+ }
+ };
+
+ }
+
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserScriptDialogs.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Script dialogs resources
+*
+*
+*/
+
+
+// RESOURCE DEFINITIONS
+// ---------------------------------------------------------
+//
+// r_wb_script_prompt_lines
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_wb_script_prompt_url_address
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EDataLayout;
+ control = EDWIN
+ {
+ width = 20;
+ maxlength = 128;
+ default_case = EAknEditorLowerCase;
+ allowed_case_modes = EAknEditorLowerCase | EAknEditorUpperCase;
+ default_input_mode = EAknEditorTextInputMode;
+ allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode;
+ avkon_flags = EAknEditorFlagLatinInputModesOnly;
+ };
+ };
+ }
+ };
+
+ }
+
+
+RESOURCE DIALOG r_wb_script_prompt_lines
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ items =
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_DATA_QUERY
+ {
+ layout=EDataLayout;
+ control = EDWIN
+ {
+ width = 20;
+ maxlength = 128;
+ default_case = EAknEditorLowerCase;
+ allowed_case_modes = EAknEditorAllCaseModes;
+ default_input_mode = EAknEditorTextInputMode;
+ allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode;
+ };
+ };
+ }
+ };
+
+ }
+
+// RESOURCE DEFINITIONS
+// ---------------------------------------------------------
+//
+// r_wb_script_query_lines
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_wb_script_query_lines
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = "dummy";
+ };
+ }
+ };
+ }
+
+
+// RESOURCE DEFINITIONS
+// ---------------------------------------------------------
+//
+// r_wb_script_info_lines
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_wb_script_info_lines
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_OK_EMPTY__OK;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = "dummy";
+ };
+ }
+ };
+ }
+
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserSettings.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,813 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser settings resources
+*
+*/
+
+
+// resources for browser settings
+
+#ifndef BROWSER_SETTINGS_RSSI
+#define BROWSER_SETTINGS_RSSI
+
+#include "Browser.hrh" // Data definitions
+#include <wmlbrowser.loc> // Localization constants
+#include <avkon.loc>
+#include <browser_platform_variant.hrh> //Browser feature flags
+
+//-----------------------------------------------------------------------------
+// CBAs
+
+RESOURCE CBA r_browser_settings_cba_options_back_open
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyBack; txt = text_softkey_back;},
+ CBA_BUTTON {id = EWmlCmdSettingsOpen; txt = qtn_msk_open;}
+ };
+ }
+
+
+RESOURCE CBA r_browser_settings_cba_options_back_change
+ {
+ buttons =
+ {
+ CBA_BUTTON {id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyBack; txt = text_softkey_back;},
+ CBA_BUTTON {id = EWmlCmdSettingsChange; txt = qtn_msk_change;}
+ };
+ }
+
+//-----------------------------------------------------------------------------
+// Views
+
+// ---------------------------------------------------------
+//
+// r_wmlbrowser_settings_settings_view
+// Settings view
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_browser_settings_settings_view
+ {
+ menubar=r_browser_settings_settings_menubar;
+ cba=r_browser_settings_cba_options_back_open;
+ }
+
+//-----------------------------------------------------------------------------
+// Menu bars
+
+// ---------------------------------------------------------
+//
+// r_wmlbrowser_settings_settings_menubar
+// menubar for the settings view
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_browser_settings_settings_menubar
+ {
+ titles=
+ {
+ MENU_TITLE { menu_pane=r_browser_settings_settings_menu; txt="App"; }
+ };
+ }
+
+
+// ---------------------------------------------------------
+//
+// r_wmlbrowser_settings_settings_menu
+// menu pane for browser settings
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_browser_settings_settings_menu
+ {
+ items=
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ MENU_ITEM { command=EWmlCmdSettingsOpen; txt=qtn_options_open; },
+ MENU_ITEM { command=EWmlCmdSettingsChange; txt=qtn_wmls_local_set_opt_change; },
+#endif
+ MENU_ITEM {cascade = r_help_submenu; txt=qtn_options_help;},
+ MENU_ITEM { command=EWmlCmdUserExit; txt=qtn_options_exit; }
+ };
+ }
+
+
+//-----------------------------------------------------------------------------
+// Listboxes
+
+// ---------------------------------------------------------
+//
+// r_browser_setting_categories_listbox
+// List of individual settings
+//
+
+// ---------------------------------------------------------
+//
+RESOURCE LISTBOX r_browser_setting_categories_listbox
+ {
+ flags = EAknListBoxSelectionList;
+ }
+// ---------------------------------------------------------
+//
+// r_browser_settings_listbox
+// List of individual settings
+//
+// ---------------------------------------------------------
+//
+RESOURCE LISTBOX r_browser_settings_settings_listbox
+ {
+ flags = EAknListBoxSelectionList;
+ }
+
+//-----------------------------------------------------------------------------
+// Arrays for listboxes
+
+//-----------------------------------------------------------------------------
+// Dialogs
+
+
+// ---------------------------------------------------------
+//
+// r_radio_button_setting_page
+// Dialog for setting values for items
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_SETTING_PAGE r_radio_button_setting_page
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+#else
+ softkey_resource = R_AVKON_SOFTKEYS_CANCEL;
+#endif
+ type = EAknSetListBox;
+ editor_resource_id= r_setting_app_listbox;
+ }
+
+// ---------------------------------------------------------
+//
+// r_setting_app_listbox
+// Belongs to r_radio_button_setting_page
+//
+// ---------------------------------------------------------
+//
+RESOURCE LISTBOX r_setting_app_listbox
+ {
+ flags = EEikListBoxMultipleSelection;
+ }
+
+
+// RESOURCE DEFINITIONS
+// ---------------------------------------------------------
+//
+// r_setting_query_lines
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_settings_query_lines
+ {
+ flags=EGeneralQueryFlags;
+ buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
+ items=
+ {
+ DLG_LINE
+ {
+ type=EAknCtQuery;
+ id=EGeneralQuery;
+ control= AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = "dummy";
+ };
+ }
+ };
+ }
+
+
+//----------------------------------------------------
+// session info
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_browser_session_info
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_BACK;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+// security info
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_browser_security_info
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_CLOSE;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+// page info
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_browser_page_info
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY__OK;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+// page version
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_browser_page_version
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY__OK;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+// Search Web Setting page
+//----------------------------------------------------
+//
+RESOURCE EDWIN r_setting_app_edwin
+ {
+ lines=2;
+ avkon_flags = EAknEditorFlagLatinInputModesOnly;
+ default_case = EAknEditorLowerCase;
+ allowed_case_modes = EAknEditorLowerCase | EAknEditorUpperCase;
+ }
+RESOURCE EDWIN r_setting_app_edwin_read_only
+ {
+ lines=2;
+ default_case = EAknEditorLowerCase;
+ allowed_case_modes = EAknEditorLowerCase | EAknEditorUpperCase;
+ flags = EEikEdwinReadOnly;
+ }
+
+RESOURCE AVKON_SETTING_PAGE r_url_setting_page
+ {
+ label= qtn_browsers_sett_search;
+ type = EEikCtEdwin;
+ editor_resource_id = r_setting_app_edwin;
+ }
+RESOURCE AVKON_SETTING_PAGE r_url_setting_page_read_only
+ {
+ label= qtn_browsers_sett_search;
+ type = EEikCtEdwin;
+ editor_resource_id = r_setting_app_edwin_read_only;
+ }
+RESOURCE AVKON_SETTING_PAGE r_url_suffix_page
+ {
+ label= qtn_browsers_sett_url_suffix;
+ type = EEikCtEdwin;
+ editor_resource_id = r_setting_app_edwin;
+ }
+//-----------------------------------------------------------------------------
+// Other strings
+
+//----------------------------------------------------------------------------
+//
+// Settings / Settings listbox content TITLES
+//
+//----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_settings_category_general { buf = qtn_browsers_fldr_general; }
+RESOURCE TBUF r_settings_category_page { buf = qtn_browsers_fldr_page; }
+RESOURCE TBUF r_settings_category_privacy { buf = qtn_browsers_fldr_privacy; }
+RESOURCE TBUF r_settings_category_webfeeds { buf = qtn_browsers_fldr_feeds; }
+RESOURCE TBUF r_settings_category_toolbar { buf = qtn_browser_setting_group_toolbar; }
+RESOURCE TBUF r_settings_category_shortcuts { buf = qtn_browser_setting_group_shortcuts; }
+
+
+// Default Access Point
+RESOURCE TBUF r_wmlbrowser_settings_default_ap { buf = qtn_wmls_local_set_default_ap; }
+
+// Autoload Images and Objects
+RESOURCE TBUF r_wmlbrowser_settings_image_autoload { buf = qtn_browsers_sett_autoload_objects; }
+
+// Autoload Content
+RESOURCE TBUF r_wmlbrowser_settings_autoload_content { buf = qtn_browser_sett_autoload_objects; }
+
+// Page overview
+RESOURCE TBUF r_wmlbrowser_settings_pageoverview { buf = qtn_wmls_local_set_pageoverview; }
+
+RESOURCE TBUF r_wmlbrowser_settings_pageoverview_on { buf = qtn_browsers_sett_pageoverview_on; }
+RESOURCE TBUF r_wmlbrowser_settings_pageoverview_off { buf = qtn_browsers_sett_pageoverview_off; }
+
+// Back list
+RESOURCE TBUF r_wmlbrowser_settings_back_list { buf = qtn_browsers_sett_back_list; }
+
+RESOURCE TBUF r_wmlbrowser_settings_back_list_on { buf = qtn_browsers_sett_val_back_list_on; }
+RESOURCE TBUF r_wmlbrowser_settings_back_list_off { buf = qtn_browsers_sett_val_back_list_off; }
+
+// Autorefresh
+RESOURCE TBUF r_wmlbrowser_settings_auto_refresh { buf = qtn_browsers_sett_auto_refresh; }
+
+RESOURCE TBUF r_wmlbrowser_settings_auto_refresh_on { buf = qtn_browsers_sett_val_auto_refresh_on; }
+RESOURCE TBUF r_wmlbrowser_settings_auto_refresh_off { buf = qtn_browsers_sett_val_auto_refresh_off; }
+
+// Font Size
+RESOURCE TBUF r_wmlbrowser_settings_font_size { buf = qtn_wmls_pref_fontsize; }
+
+// Adaptive Bookmarks
+RESOURCE TBUF r_wmlbrowser_settings_adaptive_bookmarks { buf = qtn_browsers_sett_adaptive_bookmarks;}
+
+// Full Screen
+RESOURCE TBUF r_wmlbrowser_settings_fullscreen { buf = qtn_browsers_sett_full_screen; }
+
+// Search Web
+RESOURCE TBUF r_wmlbrowser_settings_search_web { buf = qtn_browsers_sett_search; }
+
+// Url Suffix
+RESOURCE TBUF r_wmlbrowser_settings_url_suffix { buf = qtn_browsers_sett_url_suffix; }
+
+// Cookies
+RESOURCE TBUF r_wmlbrowser_settings_cookies { buf = qtn_wmls_sett_cookies; }
+
+// ECMA Script
+RESOURCE TBUF r_wmlbrowser_settings_ecma { buf = qtn_browsers_sett_scripting; }
+
+// HTTP Security Warnings
+RESOURCE TBUF r_wmlbrowser_settings_http_sec_wrns { buf = qtn_browser_sett_security; }
+
+// Open downloads
+RESOURCE TBUF r_wmlbrowser_settings_download_open { buf = qtn_browsers_sett_open_loading; }
+
+// IMEI
+RESOURCE TBUF r_wmlbrowser_settings_imei { buf = qtn_wmls_local_set_imei_notif; }
+
+// Wallet
+RESOURCE TBUF r_wmlbrowser_settings_ewallet_auto { buf = qtn_wmls_set_wallet_auto; }
+
+// Save Receipt
+RESOURCE TBUF r_wmlbrowser_settings_save_receipt { buf = qtn_wmls_save_receipt; }
+
+// Default Encoding
+RESOURCE TBUF r_wmlbrowser_settings_encoding { buf = qtn_brow_sett_defenc; }
+
+// Query Exit
+RESOURCE TBUF r_wmlbrowser_settings_query_exit { buf = qtn_wml_setting_exit_confirm; }
+
+// Send Referrer header
+RESOURCE TBUF r_wmlbrowser_settings_send_referrer { buf = qtn_wml_setting_referrer; }
+
+// Media Volume
+RESOURCE TBUF r_wmlbrowser_settings_media_volume { buf = qtn_browsers_sett_media_volume; }
+
+// Homepage
+RESOURCE TBUF r_wmlbrowser_settings_homepage { buf = qtn_browsers_sett_homepage; }
+
+// Startpage
+RESOURCE TBUF r_wmlbrowser_settings_startpage { buf = qtn_browsers_sett_startpage; }
+
+// Enable Popup Blocking (Multiple Windows)
+RESOURCE TBUF r_wmlbrowser_settings_popup_blocking { buf = qtn_brow_sett_pop_up_blocking; }
+
+// Enable Form Data Saving
+RESOURCE TBUF r_wmlbrowser_settings_form_data_saving { buf = qtn_browsers_sett_form_data_saving; }
+
+// Automatic updating
+RESOURCE TBUF r_wmlbrowser_settings_autoupdating { buf = qtn_browsers_sett_autoupdating; }
+
+// Automatic updating
+RESOURCE TBUF r_wmlbrowser_settings_autoupdating_ap { buf = qtn_browsers_sett_autoupdating_ap; }
+
+// Automatic updating
+RESOURCE TBUF r_wmlbrowser_settings_autoupdating_roaming { buf = qtn_browsers_sett_autoupdating_roaming; }
+
+RESOURCE TBUF r_wmlbrowser_settings_autoupdating_roaming_on { buf = qtn_browsers_sett_val_autoupdating_roaming_on; }
+RESOURCE TBUF r_wmlbrowser_settings_autoupdating_roaming_off { buf = qtn_browsers_sett_val_autoupdating_roaming_off; }
+
+
+// Automatic updating info note ( if AP = Always Ask and automatic updating is off.)
+RESOURCE TBUF r_wmlbrowser_settings_dataquery_autoupdate_ap { buf = qtn_browsers_sett_dataquery_autoupdate_ap; }
+
+// Automatic updating info note ( phone bill will be increased )
+RESOURCE TBUF r_wmlbrowser_settings_dataquery_autoupdatewarn { buf = qtn_browsers_sett_dataquery_autoupdatewarn; }
+
+//----------------------------------------------------------------------------
+//
+// Settings / Settings listbox content VALUES
+//
+//----------------------------------------------------------------------------
+//
+
+// Autoload Images and Objects
+RESOURCE TBUF r_wmlbrowser_settings_ai_value_on { buf = qtn_wmls_local_var_image_on; }
+RESOURCE TBUF r_wmlbrowser_settings_ai_value_off { buf = qtn_wmls_local_var_image_off; }
+
+// Autoload Content
+
+RESOURCE TBUF r_wmlbrowser_settings_autoload_text { buf = qtn_browser_sett_autoload_text; }
+RESOURCE TBUF r_wmlbrowser_settings_autoload_images_no_flash { buf = qtn_browser_sett_autoload_images_no_flash; }
+RESOURCE TBUF r_wmlbrowser_settings_autoload_all { buf = qtn_browser_sett_autoload_all; }
+
+
+
+// Expanded View (Text Wrapping)
+RESOURCE TBUF r_wmlbrowser_settings_ev_value_on { buf = qtn_wmls_local_var_expand_on; }
+RESOURCE TBUF r_wmlbrowser_settings_ev_value_off { buf = qtn_wmls_local_var_expand_off; }
+
+// Default Encoding
+RESOURCE TBUF r_wmlbrowser_settings_encoding_gb2312 { buf = qtn_brow_sett_defenc_gb2312; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_1 { buf = qtn_brow_sett_defenc_latin1; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_big5 { buf = qtn_brow_sett_defenc_big5; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_utf8 { buf = qtn_brow_sett_defenc_utf8; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_2 { buf = qtn_brow_sett_charenc_iso_8859_2; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_4 { buf = qtn_brow_sett_charenc_iso_8859_4; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_5 { buf = qtn_brow_sett_charenc_iso_8859_5; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_7 { buf = qtn_brow_sett_charenc_iso_8859_7; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_9 { buf = qtn_brow_sett_charenc_iso_8859_9; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_6 { buf = qtn_wmls_sett_defenc_iso_88596; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_8 { buf = qtn_wmls_sett_defenc_iso_88598; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso8859_8i { buf = qtn_wmls_sett_defenc_iso_88598_i; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1256 { buf = qtn_wmls_sett_defenc_windows_1256; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1255 { buf = qtn_wmls_sett_defenc_windows_1255; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1250 { buf = qtn_wmls_sett_defenc_windows_1250; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1251 { buf = qtn_wmls_sett_defenc_windows_1251; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1253 { buf = qtn_wmls_sett_defenc_windows_1253; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1254 { buf = qtn_wmls_sett_defenc_windows_1254; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1257 { buf = qtn_wmls_sett_defenc_windows_1257; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_1258 { buf = qtn_wmls_sett_defenc_windows_1258; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_tis_620 { buf = qtn_wmls_sett_defenc_tis_620; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_windows_874 { buf = qtn_wmls_sett_defenc_windows_874;}
+RESOURCE TBUF r_wmlbrowser_settings_encoding_shift_jis { buf = qtn_wmls_sett_defenc_shift_jis; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_euc_jp { buf = qtn_wmls_sett_defenc_euc_jp; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iso_2022_jp { buf = qtn_wmls_sett_defenc_iso_2022_jp; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_ucs_2 { buf = qtn_wmls_sett_defenc_ucs_2; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_koi8_r { buf = qtn_wmls_sett_defenc_shift_koi8_r; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_koi8_u { buf = qtn_wmls_sett_defenc_shift_koi8_u; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_iscii { buf = qtn_wmls_sett_defenc_iscii; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_euc_kr { buf = qtn_wmls_sett_defenc_euc_kr; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_ksc_5601 { buf = "Korean (Euc-Kr)"; }
+RESOURCE TBUF r_wmlbrowser_settings_encoding_automatic { buf = qtn_wmls_sett_defenc_automatic; }
+
+// Media Volume
+RESOURCE TBUF r_wmlbrowser_settings_media_volume_muted { buf = qtn_browsers_sett_volume_muted; }
+RESOURCE TBUF r_wmlbrowser_settings_media_volume_1 { buf = qtn_browsers_sett_volume_1; }
+RESOURCE TBUF r_wmlbrowser_settings_media_volume_2 { buf = qtn_browsers_sett_volume_2; }
+RESOURCE TBUF r_wmlbrowser_settings_media_volume_3 { buf = qtn_browsers_sett_volume_3; }
+RESOURCE TBUF r_wmlbrowser_settings_media_volume_4 { buf = qtn_browsers_sett_volume_4; }
+
+// Font Size
+RESOURCE TBUF r_wmlbrowser_settings_fs_value_all_small { buf = qtn_xhtml_settings_all_small; }
+RESOURCE TBUF r_wmlbrowser_settings_fs_value_smaller { buf = qtn_xhtml_settings_smaller; }
+RESOURCE TBUF r_wmlbrowser_settings_fs_value_normal { buf = qtn_xhtml_settings_normal; }
+RESOURCE TBUF r_wmlbrowser_settings_fs_value_larger { buf = qtn_xhtml_settings_larger; }
+RESOURCE TBUF r_wmlbrowser_settings_fs_value_all_large { buf = qtn_xhtml_settings_all_large; }
+
+// Adaptive Bookmarks
+RESOURCE TBUF r_wmlbrowser_settings_adaptive_bookmarks_value_on {buf =qtn_browsers_sett_adaptive_bookmarks_on;}
+RESOURCE TBUF r_wmlbrowser_settings_adaptive_bookmarks_value_hide_folder {buf =qtn_browsers_sett_adaptive_bookmarks_hide_folder;}
+RESOURCE TBUF r_wmlbrowser_settings_adaptive_bookmarks_value_off {buf =qtn_browsers_sett_adaptive_bookmarks_off;}
+
+// Full Screen
+RESOURCE TBUF r_wmlbrowser_settings_fullscreen_value_normal { buf = qtn_browsers_sett_full_screen_normal; }
+RESOURCE TBUF r_wmlbrowser_settings_fullscreen_value_softkeysonly { buf = qtn_browsers_sett_full_screen_normal; }
+RESOURCE TBUF r_wmlbrowser_settings_fullscreen_value_fullscreen { buf = qtn_browsers_sett_full_screen_full_screen;}
+
+// Display Softkeys
+RESOURCE TBUF r_wmlbrowser_settings_softkeys { buf = qtn_browsers_sett_softkeys; }
+RESOURCE TBUF r_wmlbrowser_settings_softkeys_on { buf = qtn_browsers_sett_softkeys_on; }
+RESOURCE TBUF r_wmlbrowser_settings_softkeys_off { buf = qtn_browsers_sett_softkeys_off; }
+
+// Cookies
+RESOURCE TBUF r_wmlbrowser_settings_c_value_allow { buf = qtn_wmls_sett_cookie_allow; }
+RESOURCE TBUF r_wmlbrowser_settings_c_value_reject { buf = qtn_wmls_sett_cookie_reject; }
+
+// ECMA
+RESOURCE TBUF r_wmlbrowser_settings_ecma_value_enable { buf = qtn_browsers_sett_scripting_enable; }
+RESOURCE TBUF r_wmlbrowser_settings_ecma_value_disable { buf = qtn_browsers_sett_scripting_disable; }
+
+// HTTP Security Warnings
+RESOURCE TBUF r_wmlbrowser_settings_wrn_value_show { buf = qtn_browser_sett_item_show_all; }
+RESOURCE TBUF r_wmlbrowser_settings_wrn_value_hide { buf = qtn_browser_sett_item_hide_all; }
+
+// Download Open Selection
+RESOURCE TBUF r_wmlbrowser_settings_download_open_yes { buf = qtn_brow_sett_open_downloads_yes; }
+RESOURCE TBUF r_wmlbrowser_settings_download_open_no { buf = qtn_brow_sett_open_downloads_no; }
+
+// IMEI
+RESOURCE TBUF r_wmlbrowser_settings_imei_value_enabled { buf = qtn_wmls_local_set_imei_notif_enabled; }
+RESOURCE TBUF r_wmlbrowser_settings_imei_value_disabled { buf = qtn_wmls_local_set_imei_notif_disabled; }
+
+// DTMF
+RESOURCE TBUF r_wmlbrowser_settings_sdtmf_value_always_confirm { buf = qtn_wmls_wtai_dtmf_alcon; }
+RESOURCE TBUF r_wmlbrowser_settings_sdtmf_value_confirm_once { buf = qtn_wmls_wtai_dtmf_one; }
+
+// Save Receipt
+RESOURCE TBUF r_wmlbrowser_settings_sr_value_to_notepad { buf = qtn_wmls_save_to_notepad; }
+RESOURCE TBUF r_wmlbrowser_settings_sr_value_never { buf = qtn_wmls_save_not; }
+
+// Wallet
+RESOURCE TBUF r_wmlbrowser_settings_wallet_auto_on { buf = qtn_wmls_wall_auto_on; }
+RESOURCE TBUF r_wmlbrowser_settings_wallet_auto_off { buf = qtn_wmls_wall_auto_off; }
+
+// Query Exit
+RESOURCE TBUF r_wmlbrowser_settings_query_exit_on { buf = qtn_wml_setting_exit_on; }
+RESOURCE TBUF r_wmlbrowser_settings_query_exit_off { buf = qtn_wml_setting_exit_off; }
+
+// Send Referrer header
+RESOURCE TBUF r_wmlbrowser_settings_send_referrer_on { buf = qtn_wml_setting_refer_on; }
+RESOURCE TBUF r_wmlbrowser_settings_send_referrer_off { buf = qtn_wml_setting_refer_off; }
+
+// Home Page
+RESOURCE TBUF r_wmlbrowser_settings_homepage_access_point { buf = qtn_browsers_sett_ap_home_page; }
+RESOURCE TBUF r_wmlbrowser_settings_homepage_new_address { buf = qtn_browsers_sett_own_home_page; }
+RESOURCE TBUF r_wmlbrowser_settings_homepage_use_current { buf = qtn_browsers_sett_use_current_home_page; }
+RESOURCE TBUF r_wmlbrowser_settings_homepage_bookmarks { buf = qtn_browsers_homepage_bookmarks; }
+
+// Search Page
+RESOURCE TBUF r_wmlbrowser_settings_searchpage_new_address { buf = qtn_browsers_sett_search; }
+
+// Enable Popup Blocking (Multiple Windows)
+RESOURCE TBUF r_wmlbrowser_settings_popup_blocking_on { buf = qtn_brow_sett_pop_up_blocking_on; }
+RESOURCE TBUF r_wmlbrowser_settings_popup_blocking_off { buf = qtn_brow_sett_pop_up_blocking_off; }
+
+// Form Data Saving
+RESOURCE TBUF r_wmlbrowser_settings_form_data_saving_on { buf = qtn_brow_sett_form_data_saving_on; }
+RESOURCE TBUF r_wmlbrowser_settings_form_data_saving_off { buf = qtn_brow_sett_form_data_saving_off; }
+RESOURCE TBUF r_wmlbrowser_settings_form_data_saving_only { buf = qtn_brow_sett_form_data_saving_only; }
+
+// Form Data Query text
+RESOURCE TBUF r_wmlbrowser_settings_form_data_delete_all { buf = qtn_browser_form_data_delete_all; }
+RESOURCE TBUF r_wmlbrowser_settings_form_data_delete_password { buf = qtn_browser_form_data_delete_password; }
+
+// SCRIPT LOG
+RESOURCE TBUF r_wmlbrowser_settings_scriptlog { buf = qtn_browsers_sett_scriptlog; }
+RESOURCE TBUF r_wmlbrowser_settings_scriptlog_value_disable { buf = qtn_browsers_sett_scriptlog_disable; }
+RESOURCE TBUF r_wmlbrowser_settings_scriptlog_value_to_file { buf = qtn_browsers_sett_scriptlog_to_file; }
+RESOURCE TBUF r_wmlbrowser_settings_scriptlog_value_to_console { buf = qtn_browsers_sett_scriptlog_to_console; }
+RESOURCE TBUF r_wmlbrowser_settings_scriptlog_value_to_console_file { buf = qtn_browsers_sett_scriptlog_to_console_file; }
+
+// Toolbar buttons / Shortcut Keys Commands
+// Settings Values
+// please present these in this order!
+RESOURCE TBUF r_browser_setting_none { buf = qtn_browser_setting_none; }
+RESOURCE TBUF r_browser_setting_show_keymap { buf = qtn_browser_setting_show_keymap; }
+RESOURCE TBUF r_browser_setting_go_to_web_address { buf = qtn_browser_setting_go_to_web_address; }
+RESOURCE TBUF r_browser_setting_list_bookmarks { buf = qtn_browser_setting_list_bookmarks; } // toolbar only
+RESOURCE TBUF r_browser_setting_save_as_bookmark { buf = qtn_browser_setting_save_as_bookmark; }
+RESOURCE TBUF r_browser_setting_recent_urls { buf = qtn_browser_setting_recent_urls; }
+RESOURCE TBUF r_browser_setting_find_keyword { buf = qtn_browser_setting_find_keyword; }
+RESOURCE TBUF r_browser_setting_reload { buf = qtn_browser_setting_reload; }
+RESOURCE TBUF r_browser_setting_miniature_show { buf = qtn_browser_setting_miniature_show; }
+RESOURCE TBUF r_browser_setting_previous_page { buf = qtn_browser_setting_previous_page; }
+RESOURCE TBUF r_browser_setting_go_to_hompage { buf = qtn_browser_setting_go_to_hompage; }
+RESOURCE TBUF r_browser_setting_zoom_in { buf = qtn_browser_setting_zoom_in; }
+RESOURCE TBUF r_browser_setting_zoom_out { buf = qtn_browser_setting_zoom_out; }
+RESOURCE TBUF r_browser_setting_settings { buf = qtn_browser_setting_settings; }
+RESOURCE TBUF r_browser_setting_rotate_screen { buf = qtn_browser_setting_rotate_screen; }
+RESOURCE TBUF r_browser_setting_subscribe_to_feeds { buf = qtn_browser_setting_subscribe_to_feeds; }
+RESOURCE TBUF r_browser_setting_manage_bookmarks { buf = qtn_browser_setting_manage_bookmarks; }
+RESOURCE TBUF r_browser_setting_visual_history { buf = qtn_browser_setting_visual_history; }
+RESOURCE TBUF r_browser_setting_view_images { buf = qtn_browser_setting_view_images; }
+RESOURCE TBUF r_browser_setting_save_page { buf = qtn_browser_setting_save_page; }
+RESOURCE TBUF r_browser_setting_send { buf = qtn_browser_setting_send; }
+RESOURCE TBUF r_browser_setting_switch_window { buf = qtn_browser_setting_switch_window; }
+RESOURCE TBUF r_browser_setting_show_toolbar { buf = qtn_browser_setting_show_toolbar; } // (keymap only)
+RESOURCE TBUF r_browser_setting_show_help { buf = qtn_browser_setting_show_help; }
+RESOURCE TBUF r_browser_setting_full_screen { buf = qtn_browser_setting_full_screen; }
+RESOURCE TBUF r_browser_setting_zoom_mode { buf = qtn_browser_setting_zoom_mode; }
+
+// Settings Items for Toolbar Buttons
+RESOURCE TBUF r_browser_setting_toolbar_button1 { buf = qtn_browser_setting_toolbar_button1; }
+RESOURCE TBUF r_browser_setting_toolbar_button2 { buf = qtn_browser_setting_toolbar_button2; }
+RESOURCE TBUF r_browser_setting_toolbar_button3 { buf = qtn_browser_setting_toolbar_button3; }
+RESOURCE TBUF r_browser_setting_toolbar_button4 { buf = qtn_browser_setting_toolbar_button4; }
+RESOURCE TBUF r_browser_setting_toolbar_button5 { buf = qtn_browser_setting_toolbar_button5; }
+RESOURCE TBUF r_browser_setting_toolbar_button6 { buf = qtn_browser_setting_toolbar_button6; }
+RESOURCE TBUF r_browser_setting_toolbar_button7 { buf = qtn_browser_setting_toolbar_button7; }
+
+// Error text when all toolbar buttons' command set to None
+RESOURCE TBUF r_browser_setting_toolbar_save_dialog { buf = qtn_browser_setting_toolbar_save_dialog; }
+
+// Settings for enabling/disable toolbar in content view
+RESOURCE TBUF r_browser_setting_toolbar_on_off { buf = qtn_browser_setting_toolbar_on_off; }
+RESOURCE TBUF r_browser_setting_toolbar_on { buf = qtn_browser_setting_toolbar_on; }
+RESOURCE TBUF r_browser_setting_toolbar_off { buf = qtn_browser_setting_toolbar_off; }
+
+// Settings Items for Shortcut Keys
+RESOURCE TBUF r_browser_setting_shortcut_key1 { buf = qtn_browser_setting_shortcuts_key1; }
+RESOURCE TBUF r_browser_setting_shortcut_key2 { buf = qtn_browser_setting_shortcuts_key2; }
+RESOURCE TBUF r_browser_setting_shortcut_key3 { buf = qtn_browser_setting_shortcuts_key3; }
+RESOURCE TBUF r_browser_setting_shortcut_key4 { buf = qtn_browser_setting_shortcuts_key4; }
+RESOURCE TBUF r_browser_setting_shortcut_key5 { buf = qtn_browser_setting_shortcuts_key5; }
+RESOURCE TBUF r_browser_setting_shortcut_key6 { buf = qtn_browser_setting_shortcuts_key6; }
+RESOURCE TBUF r_browser_setting_shortcut_key7 { buf = qtn_browser_setting_shortcuts_key7; }
+RESOURCE TBUF r_browser_setting_shortcut_key8 { buf = qtn_browser_setting_shortcuts_key8; }
+RESOURCE TBUF r_browser_setting_shortcut_key9 { buf = qtn_browser_setting_shortcuts_key9; }
+RESOURCE TBUF r_browser_setting_shortcut_key0 { buf = qtn_browser_setting_shortcuts_key0; }
+RESOURCE TBUF r_browser_setting_shortcut_keystar { buf = qtn_browser_setting_shortcuts_starkey; }
+RESOURCE TBUF r_browser_setting_shortcut_keyhash { buf = qtn_browser_setting_shortcuts_hashkey; }
+
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Settings listbox content titles
+//
+// ---------------------------------------------------------
+//
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Session titles
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_wml_session_view_title { buf=qtn_wmls_session_info; }
+RESOURCE TBUF r_wml_session_view_ap { buf = qtn_wmls_ses_view_ap; }
+RESOURCE TBUF r_wml_session_view_bt { buf = qtn_wmls_ses_view_bearer_type; }
+RESOURCE TBUF r_wml_session_view_cs { buf = qtn_wmls_ses_view_max_speed; }
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Security titles
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_wml_security_view_title { buf=qtn_wmlsec_security_info; }
+RESOURCE TBUF r_wml_certificate_details { buf = qtn_wmlsec_cert_details; }
+RESOURCE TBUF r_wml_security_conn_type { buf = qtn_wmlsec_ses_info_contype; }
+RESOURCE TBUF r_wml_security_server_aut { buf = qtn_wmlsec_ses_info_server; }
+RESOURCE TBUF r_wml_security_info_issuer { buf = qtn_wmlsec_ses_info_issuer; }
+RESOURCE TBUF r_wml_security_cert_owner { buf = qtn_wmlsec_ses_info_cert_owner; }
+RESOURCE TBUF r_wml_security_valid_from { buf = qtn_wmlsec_ses_info_valid_from; }
+RESOURCE TBUF r_wml_security_valid_to { buf = qtn_wmlsec_ses_info_valid_to; }
+RESOURCE TBUF r_wml_security_fingerprint { buf = qtn_wmlsec_ses_info_fingerprint; }
+RESOURCE TBUF r_wml_security_serialno { buf = qtn_wmlsec_ses_info_serialno; }
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Security info data texts
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_wml_security_conn_secure { buf=qtn_wmlsec_ses_info_con_secur; }
+RESOURCE TBUF r_wml_security_conn_unsecure { buf=qtn_wmlsec_ses_info_con_unsec; }
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Session info data texts
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE TBUF r_wml_bearer_data_call { buf=qtn_set_bearer_data_call; }
+RESOURCE TBUF r_wml_bearer_packet_data { buf=qtn_set_bearer_packet_data; }
+RESOURCE TBUF r_wml_bearer_hscsd { buf=qtn_browser_set_bearer_hscsd; }
+
+RESOURCE TBUF r_wml_conn_speed_ad { buf=qtn_set_auto_detect; }
+
+// ---------------------------------------------------------
+//
+//
+// Main title for Settings
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_wmlbrowser_settings_title { buf = qtn_wmls_browser_opt_sett; }
+
+RESOURCE TBUF r_wmlbrowser_settings_title_general { buf = qtn_browsers_title_general; }
+RESOURCE TBUF r_wmlbrowser_settings_title_page { buf = qtn_browsers_title_page; }
+RESOURCE TBUF r_wmlbrowser_settings_title_privacy { buf = qtn_browsers_title_privacy; }
+RESOURCE TBUF r_wmlbrowser_settings_title_webfeeds { buf = qtn_browsers_fldr_feeds; }
+
+// ---------------------------------------------------------
+//
+//
+// Value "None" for Default access point
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_wml_settings_default_access_point_none { buf = qtn_selec_sett_val_field_none; }
+
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Page info texts
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE TBUF r_browser_query_current_page { buf = qtn_browser_query_current_page; }
+RESOURCE TBUF r_browser_query_current_page_url { buf = qtn_browser_query_current_page_url; }
+
+// ---------------------------------------------------------
+//
+//
+// Settings / Always ask/User defined for access point texts
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE TBUF r_wml_settings_access_point_user_defined { buf = qtn_wml_settings_access_point_user_defined; }
+#if !defined(BRDO_BROWSER_50_FF)
+ RESOURCE TBUF r_wml_settings_access_point_always_ask { buf = qtn_wml_settings_access_point_always_ask; }
+#else
+ RESOURCE TBUF r_wml_settings_access_point_ask_when_needed { buf = qtn_wml_settings_access_point_ask_when_needed; }
+#endif // BRDO_BROWSER_50_FF
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserToolbar.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,386 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* header file for browser toolbars' AVKON_BUTTON_STATE_EXTENSION
+*
+*
+*/
+
+
+#ifndef BROWSERTOOLBAR_HRH
+#define BROWSERTOOLBAR_HRH
+
+#include <browser_platform_variant.hrh>
+#include <AknsConstants.hrh>
+
+
+//----------------------------------------------------
+//
+// Button state extensions for toolbar and toolbar extension buttons.
+// These is required to support skinned graphics for the buttons.
+//
+//----------------------------------------------------
+//
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_blank
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbBlank;
+ //skin KAknsIIDQgnIndiBrowserTbBlank
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_bm
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbBm;
+ //skin KAknsIIDQgnIndiBrowserTbBm
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_feeds
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbFeeds;
+ //skin KAknsIIDQgnIndiBrowserTbFeeds
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_findkw
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbFindKw;
+ //skin KAknsIIDQgnIndiBrowserTbFindKw
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_goto
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbGoto;
+ //skin KAknsIIDQgnIndiBrowserTbGoto
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_help
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbHelp;
+ //skin KAknsIIDQgnIndiBrowserTbHelp
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_images
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbImages;
+ //skin KAknsIIDQgnIndiBrowserTbImages
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_keymap
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbKeyMap;
+ //skin KAknsIIDQgnIndiBrowserTbKeyMap
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_pages
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbPages;
+ //skin KAknsIIDQgnIndiBrowserTbPages
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_rotate
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbRotate;
+ //skin KAknsIIDQgnIndiBrowserTbRotate
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_rss
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbRss;
+ //skin KAknsIIDQgnIndiBrowserTbRss
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_savebm
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSaveBm;
+ //skin KAknsIIDQgnIndiBrowserTbSaveBm
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_savepage
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSavePage;
+ //skin KAknsIIDQgnIndiBrowserTbSavePage
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_sendurl
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSendUrl;
+ //skin KAknsIIDQgnIndiBrowserTbSendUrl
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_settings
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSettings;
+ //skin KAknsIIDQgnIndiBrowserTbSettings
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_switchwin
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSwitchWin;
+ //skin KAknsIIDQgnIndiBrowserTbSwitchWin
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_tb
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbTb;
+ //skin KAknsIIDQgnIndiBrowserTbTb
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_urls
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbUrls;
+ //skin KAknsIIDQgnIndiBrowserTbUrls
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_zoomin
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbZoomIn;
+ //skin KAknsIIDQgnIndiBrowserTbZoomIn
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_zoomout
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbZoomOut;
+ //skin KAknsIIDQgnIndiBrowserTbZoomOut
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_back
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbBack;
+ //skin KAknsIIDQgnIndiBrowserTbBack
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_forward
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbForward;
+ //skin KAknsIIDQgnIndiBrowserTbForward
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_forwardinact
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbForwardInact;
+ //skin KAknsIIDQgnIndiBrowserTbForwardInact
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_go
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbGo;
+ //skin KAknsIIDQgnIndiBrowserTbGo
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_home
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbHome;
+ //skin KAknsIIDQgnIndiBrowserTbHome
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_reload
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbReload;
+ //skin KAknsIIDQgnIndiBrowserTbReload
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_stop
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbStop;
+ //skin KAknsIIDQgnIndiBrowserTbStop
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_viewimages
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbViewImages;
+ //skin KAknsIIDQgnIndiBrowserTbViewImages
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_viewpages
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbViewPages;
+ //skin KAknsIIDQgnIndiBrowserTbViewPages
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_websearch
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbWebsearch;
+ //skin KAknsIIDQgnIndiBrowserTbWebsearch
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_findkw_next
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbFindKwNext;
+ //skin KAknsIIDQgnIndiBrowserTbFindKwNext
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_findkw_prev
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbFindKwPrev;
+ //skin KAknsIIDQgnIndiBrowserTbFindKwPrev
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_send_url
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSendUrl;
+ //skin KAknsIIDQgnIndiBrowserTbSendUrl
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_history_back
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbHistoryBack;
+ //skin KAknsIIDQgnIndiBrowserTbHistoryBack
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_history_fw
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbHistoryFw;
+ //skin KAknsIIDQgnIndiBrowserTbHistoryFw
+ }
+
+// BOOKMARKS
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_bm_tb_new
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserBmTbNew;
+ //skin KAknsIIDQgnIndiBrowserBmTbNew
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_delete
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbDelete;
+ //skin KAknsIIDQgnIndiBrowserTbDelete
+ }
+
+// FEEDS
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_toweb
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbBackToWeb;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbBackToWeb
+ }
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_next
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbNext;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbNext
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_opendetail
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbOpenDetail;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbOpenDetail
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_openfull
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbOpenFull;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbOpenFull
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_opentopic
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbOpenTopic;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbOpenTopic
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_openprev
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbPrevious;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbPrevious
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_update
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbUpdate;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbUpdate
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_feeds_tb_updateall
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserFeedsTbUpdateAll;
+ //skin KAknsIIDQgnIndiBrowserFeedsTbUpdateAll
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_switch_win
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbSwitchWin;
+ //skin KAknsIIDQgnIndiBrowserTbSwitchWin
+ }
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_goto_and_search
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbGotoAndSearch;
+ //skin KAknsIIDQgnIndiBrowserTbGotoAndSearch
+ }
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_exit
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbExit;
+ //skin KAknsIIDQgnIndiBrowserTbGotoAndSearch
+ }
+#endif
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+
+RESOURCE AVKON_BUTTON_STATE_EXTENSION r_browser_ext_qgn_indi_browser_tb_downloads
+ {
+ bmbSkinIdMajor = EAknsMajorGeneric;
+ bmbSkinIdMinor = EAknsMinorGenericQgnIndiBrowserTbDownloads;
+ //skin KAknsIIDQgnIndiBrowserTbDownloads
+ }
+
+#endif
+#endif // BROWSERTOOLBAR_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/BrowserWindowSelection.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Browser Window Selection resources
+*
+*
+*/
+
+
+#ifndef BROWSER_WINDOWSELECTION_RSSI
+#define BROWSER_WINDOWSELECTION_RSSI
+
+// INCLUDES
+
+#include "Browser.hrh"
+#include <wmlbrowser.loc>
+#include <browser.mbg>
+#include <bldvariant.hrh>
+
+// RESOURCE DEFINITIONS
+
+//----------------------------------------------------
+//
+// r_browserwindowselection_view
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_browserwindowselection_view
+ {
+ menubar = r_browserwindowselection_menubar_view;
+ cba = r_browserwindowselection_cba_options_close_select;
+ }
+
+//----------------------------------------------------
+//
+// r_browserwindowselection_cba_options_exit
+//
+//----------------------------------------------------
+//
+RESOURCE CBA r_browserwindowselection_cba_options_close_select
+ {
+ flags = EAknCBAFlagRespondWhenInvisible;
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EWmlCmdWindowSelectionCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EAknCmdOpen; txt = qtn_msk_select; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browserwindowselection_menubar_view
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_browserwindowselection_menubar_view
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_browserwindowselection_view_menu; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_browserwindowselection_view_menu
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_browserwindowselection_view_menu
+ {
+ items =
+ {
+ MENU_ITEM { command = EAknCmdOpen; txt = qtn_browser_list_select_window; },
+ MENU_ITEM { command = EWmlCmdCloseWindow; txt = qtn_browser_list_close_window; },
+ MENU_ITEM { command = EWmlCmdCloseAllWindowButThis; txt = qtn_browser_list_close_all_but_this; }
+ };
+ }
+
+RESOURCE TBUF r_browser_windowselection_view_title { buf = qtn_browser_view_title_windowselection; }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/Browser_caption.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This file contains all the resources for the module.
+
+*
+*/
+
+
+// INCLUDES
+
+#include <apcaptionfile.rh>
+#include <wmlbrowser.loc>
+
+//----------------------------------------------------
+//
+// CAPTION_DATA
+// ?description
+//
+//----------------------------------------------------
+//
+RESOURCE CAPTION_DATA
+ {
+ caption = qtn_apps_browserng_list;
+ shortcaption = qtn_apps_browserng_grid;
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/Browser_reg.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: RSS for registration file for DRMRightsManager.
+*
+*/
+
+
+#include <appinfo.rh>
+#include <BrowserNG.rsg>
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0x10008D39
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "Browser";
+ localisable_resource_file = APP_RESOURCE_DIR"\\Browser";
+ localisable_resource_id = R_BROWSER_LOCALISABLE_APP_INFO;
+ embeddability = KAppEmbeddable;
+ newfile = KAppDoesNotSupportNewFile;
+
+ // MIME types
+ datatype_list=
+ {
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/html";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlc";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/wml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/xhtml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.xhtml+xml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="text/vnd.wap.wml";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlscriptc";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wmlscript";
+ },
+ DATATYPE
+ {
+ priority=EDataTypePriorityHigh;
+ type="application/vnd.wap.wbxml";
+ }
+ };
+
+ }
+
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/Feeds.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2004-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Defines the Feeds commands.
+*
+*/
+
+
+
+#ifndef FEEDS_HRH
+#define FEEDS_HRH
+
+// Feeds enumerate command codes
+enum TFeedsCommandIds
+ {
+ // Softkeys
+ EFeedsSoftkeyOk = EWmlCmdFeedsViewCommandIdBase,
+ EFeedsSoftkeyCancel,
+ EFeedsSoftkeyBack,
+
+ // Option menu commands
+ EFeedsOpen,
+ EFeedsActivate,
+ EFeedsSeeFullStory,
+ EFeedsUpdate,
+ EFeedsUpdateAll,
+ EFeedsBackToPage,
+ EFeedsWebMenu,
+ EFeedsManage,
+ EFeedsMarkUnMark,
+ EFeedsNavigation,
+ EFeedsTools,
+ EFeedsAdvanced,
+ EFeedsSend,
+ EFeedsInfo,
+ EFeedsSettings,
+ EFeedsBack,
+
+ // NEW Option menu commands
+ EFeedsOptionsGoto,
+ EFeedsOptionsFeedsActions,
+ EFeedsOptionsEdit,
+ EFeedsOptionsMarkUnmark,
+ EFeedsOptionsClear,
+ EFeedsOptionsPreferences,
+ EFeedsOptionsExit,
+
+ // Manage sub-menu commands
+ EFeedsMove,
+ EFeedsMoveToFolder,
+ EFeedsNewFolder,
+ EFeedsNewFeed,
+ EFeedsRename,
+ EFeedsEdit,
+ EFeedsDelete,
+ EFeedsImport,
+ EFeedsExport,
+
+ // Navigation sub-menu commands
+ EFeedsGotoAddress,
+ EFeedsHome,
+ EFeedsSearch,
+
+ // Tools sub-menu commands
+ EFeedsFindFeed,
+ EFeedsDownloads,
+
+ // Advanced sub-menu commands
+ EFeedsChangeConnection,
+ EFeedsDisconnect,
+
+ // Send sub-menu commands
+
+ // Info sub-menu commands
+ EFeedsSession,
+ EFeedsAbout,
+
+ // Debug sub-menu commands
+ EFeedsDebug,
+ EFeedsStartTestHarnessCanned,
+ EFeedsStartTestHarnessCannedShort,
+ EFeedsStartTestHarnessLive,
+
+ // Feeds Item navigation commands
+ EFeedsShowNextItem,
+ EFeedsShowPrevItem
+ };
+
+
+enum TFeedsResourceIds
+ {
+ EFeedsWaitNoteDlgId = 1,
+ EFeedsProgressDlgId,
+ EFeedsEditFeedDialogId,
+ EFeedsEditDialogNameId,
+ EFeedsEditDialogUrlId,
+ EFeedsEditAutomaticUpdatingId
+ };
+
+// Automatic updating
+enum TFeedsAutomaticUpdating
+ {
+ EFeedsEditAutomaticUpdatingOff,
+ EFeedsEditAutomaticUpdating15min,
+ EFeedsEditAutomaticUpdatingHourly,
+ EFeedsEditAutomaticUpdating4hours,
+ EFeedsEditAutomaticUpdatingDaily,
+ EFeedsEditAutomaticUpdatingWeekly
+ };
+
+// CRichTextEditor
+#define KNumberOfLinesInRichTextEditor 7
+
+
+// CEditFeedDialog
+#define KMaxFeedNameLength 50
+#define KMaxFeedUrlLength 1000
+
+#endif // FEEDS_VIEW_MGR_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/Feeds.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,777 @@
+/*
+* Copyright (c) 2003-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Resource definitions
+*
+*/
+
+
+#ifndef FEEDS_RSSI
+#define FEEDS_RSSI
+
+// INCLUDES
+
+#include <browser.mbg>
+
+#include "Browser.hrh"
+#include "Feeds.hrh"
+#include <feeds.loc>
+#include "feeds_toolbar.rssi"
+
+
+// *****************************************************************************
+// CFeedsFolderView
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_folder_view
+// Define view 1
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE CBA r_feeds_folder_view_cba_movetofolder_movecancel
+ {
+ buttons =
+ {
+ CBA_BUTTON {id = EAknSoftkeyOk; txt = qtn_fldr_move_item;},
+ CBA_BUTTON {id = EAknSoftkeyCancel; txt = text_softkey_cancel;}
+ };
+ }
+
+
+RESOURCE CBA r_feeds_folder_view_cba_options_back_open
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyBack; txt = text_softkey_back;},
+ CBA_BUTTON {id = EFeedsOpen; txt = qtn_msk_open;}
+ };
+ }
+
+RESOURCE CBA r_feeds_folder_view_cba_options_back_addfeed
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyBack; txt = text_softkey_back;},
+ CBA_BUTTON {id = EFeedsNewFeed; txt = qtn_msk_add;}
+ };
+ }
+
+RESOURCE CBA r_feeds_folder_view_cba_options_back_context_menu
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyBack; txt = text_softkey_back;},
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+RESOURCE CBA r_feeds_folder_view_cba_options_exit_open
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EWmlCmdUserExit; txt = text_softkey_exit;},
+ CBA_BUTTON {id = EFeedsOpen; txt = qtn_msk_open;}
+ };
+ }
+
+RESOURCE CBA r_feeds_folder_view_cba_options_exit_addfeed
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyExit; txt = text_softkey_exit;},
+ CBA_BUTTON {id = EFeedsNewFeed; txt = qtn_msk_add;}
+ };
+ }
+
+RESOURCE CBA r_feeds_folder_view_cba_options_exit_context_menu
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON {id = EAknSoftkeyExit; txt = text_softkey_exit;},
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_folder_view
+// Define view 1
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_feeds_folder_view
+ {
+ menubar = r_feeds_folder_view_menubar;
+ cba = r_feeds_folder_view_cba_options_back_addfeed;
+ toolbar = r_feeds_folder_view_toolbar;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_folder_view_menubar
+// Menu title definition
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_feeds_folder_view_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_feeds_folder_view_menu;
+ }
+ };
+ }
+
+
+RESOURCE MENU_BAR r_feeds_folder_menu_bar_context_menu
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_feeds_folder_menu_pane_context_menu; }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_folder_view_menu
+// Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_folder_view_menu
+ {
+ }
+
+
+
+// NEW OPTIONS MENU ITEMS
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_options_goto_submenu
+// Menu for Feeds' go to submenu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_options_goto_submenu {}
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_options_feedsactions_submenu
+// Menu for Feeds' feeds actions submenu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_options_feedsactions_submenu {}
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_options_edit_submenu
+// Menu for Feeds' edit submenu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_options_edit_submenu {}
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_options_markunmark_submenu
+// Menu for Feeds' markunmark submenu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_options_markunmark_submenu {}
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_options_clear_submenu
+// Menu for Feeds' clear submenu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_options_clear_submenu {}
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_folder_view_manage_menu
+// Manage sub-menu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_folder_view_manage_menu
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_folder_view_mark_unmark_menu
+// Mark/Unmark sub-menu
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_folder_view_mark_unmark_menu
+ {
+ }
+
+
+RESOURCE MENU_PANE r_feeds_folder_menu_pane_context_menu
+ {
+ items =
+ {
+ MENU_ITEM { command = EFeedsUpdate; txt = qtn_feeds_update; },
+ MENU_ITEM { command = EFeedsUpdateAll; txt = qtn_feeds_update_all; },
+ MENU_ITEM { command = EFeedsDelete; txt = qtn_fldr_delete; },
+ MENU_ITEM { command = EFeedsMove; txt = qtn_options_org_move; },
+ MENU_ITEM { command = EFeedsMoveToFolder; txt = qtn_options_org_move_to_folder; },
+ MENU_ITEM { command = EFeedsExport; txt = qtn_options_export_feeds; },
+ MENU_ITEM { cascade = r_feeds_folder_view_mark_unmark_menu; command = EWmlCmdMarkUnmark; txt = qtn_options_list; },
+ MENU_ITEM { cascade = r_feeds_help_submenu; command = EWmlCmdHelpMenu; txt = qtn_browser_options_help; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_feeds_help_submenu
+// Cascading menu for help menu items
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_help_submenu
+ {
+ items =
+ {
+ MENU_ITEM { command = EAknCmdHelp; txt = qtn_browser_list_browser_help; },
+ MENU_ITEM { command = EWmlCmdAboutProduct; txt=qtn_browser_list_browser_version;}
+ };
+ }
+
+// *****************************************************************************
+// CFeedsTopicView
+// -----------------------------------------------------------------------------
+//
+// r_feeds_topic_view
+// Define view 1
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_feeds_topic_view
+ {
+ menubar = r_feeds_topic_view_menubar;
+ cba = r_feeds_folder_view_cba_options_back_open;
+ toolbar = r_feeds_topic_view_toolbar;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_topic_view_menubar
+// Menu title definition
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_feeds_topic_view_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_feeds_topic_view_menu;
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_topic_view_menu
+// Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_topic_view_menu
+ {
+ }
+
+
+// *****************************************************************************
+// CFeedsFeedView
+// -----------------------------------------------------------------------------
+//
+// r_feeds_feed_view
+// Define view 1
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_feeds_feed_view
+ {
+ menubar = r_feeds_feed_view_menubar;
+ cba = r_feeds_softkeys_options_next_open;
+ toolbar = r_feeds_feed_view_toolbar;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_feed_view_menubar
+// Menu title definition
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_feeds_feed_view_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_feeds_feed_view_menu;
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_feed_view_menu
+// Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_feed_view_menu
+ {
+ }
+
+
+RESOURCE CBA r_feeds_softkeys_options_next_open
+ {
+ buttons =
+ {
+ CBA_BUTTON {id=EAknSoftkeyOptions; txt = text_softkey_option;},
+ CBA_BUTTON {id=EAknSoftkeyBack; txt = text_softkey_back; },
+ CBA_BUTTON {id=EFeedsSeeFullStory; txt = qtn_msk_open; }
+ };
+ }
+
+
+// *****************************************************************************
+// CFeedsWaitDialog
+// -----------------------------------------------------------------------------
+//
+// r_feeds_wait_note_dialog
+// General wait-note dialog.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_feeds_wait_note_dialog
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EFeedsWaitNoteDlgId;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_progress_note_dialog
+// General progress-note dialog.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_feeds_progress_note_dialog
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EFeedsProgressDlgId;
+ control = AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ };
+ }
+ };
+ }
+
+
+// *****************************************************************************
+// CFeedsEditFeedDialog
+// ---------------------------------------------------------
+// r_feeds_edit_feed_dialog
+// The edit feed dialog
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_feeds_edit_feed_dialog
+ {
+ flags = EEikDialogFlagNoDrag |
+ EEikDialogFlagFillAppClientRect |
+ EEikDialogFlagNoTitleBar |
+ EEikDialogFlagWait |
+ EEikDialogFlagCbaButtons;
+ buttons = r_browser_cba_options_back_change;
+ form = r_feeds_edit_feed_form;
+ }
+
+//----------------------------------------------------
+// r_feeds_edit_autoupdate_information_note_dialog
+// Note used alert the user while setting auto
+// updating.
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_feeds_edit_autoupdate_information_note_dialog
+ {
+ flags = EEikDialogFlagNoDrag |
+ EEikDialogFlagNoTitleBar |
+ EEikDialogFlagCbaButtons |
+ EEikDialogFlagWait;
+ buttons=R_AVKON_SOFTKEYS_OK_EMPTY__OK;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralNote;
+ control = AVERELL_NOTE
+ {
+ layout = EGeneralLayout;
+ singular_label = "";
+ plural_label = "";
+ animation = R_QGN_NOTE_INFO_ANIM;
+ };
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_edit_feed_form
+// The form for the edit feed dialog.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE FORM r_feeds_edit_feed_form
+ {
+ flags = EEikFormEditModeOnly | EEikFormUseDoubleSpacedFormat;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ prompt = qtn_feeds_name_dialog_text;
+ id = EFeedsEditDialogNameId;
+ control=EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
+ width = KMaxFeedNameLength;
+ maxlength = KMaxFeedNameLength;
+ };
+ },
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ prompt = qtn_feeds_url_dialog_text;
+ id = EFeedsEditDialogUrlId;
+ control = EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
+ maxlength = KMaxFeedUrlLength;
+ max_view_height_in_lines = 6;
+ // if you have the line above, you must have this.
+ // It's calculable from LAF
+ base_line_delta = 21;
+ default_case = EAknEditorLowerCase;
+ allowed_case_modes = EAknEditorUpperCase | EAknEditorLowerCase;
+ numeric_keymap = EAknEditorPlainNumberModeKeymap;
+ allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode;
+ default_input_mode = EAknEditorTextInputMode;
+ special_character_table = R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtPopupField;
+ prompt = qtn_feeds_autoupdating_text;
+ id = EFeedsEditAutomaticUpdatingId;
+ itemflags = EEikDlgItemTakesEnterKey
+ | EEikDlgItemOfferAllHotKeys;
+ control = POPUP_FIELD
+ {
+ };
+ }
+ };
+ }
+
+
+// *****************************************************************************
+// CFeedsEditFolderDialog
+// ---------------------------------------------------------
+// r_feeds_edit_folder_dialog
+// The edit folder dialog
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_feeds_edit_folder_dialog
+ {
+ flags = EEikDialogFlagNoDrag |
+ EEikDialogFlagFillAppClientRect |
+ EEikDialogFlagNoTitleBar |
+ EEikDialogFlagWait |
+ EEikDialogFlagCbaButtons;
+ buttons = r_browser_cba_options_back_options;
+ form = r_feeds_edit_folder_form;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_edit_folder_form
+// The form for the edit folder dialog.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE FORM r_feeds_edit_folder_form
+ {
+ flags = EEikFormEditModeOnly | EEikFormUseDoubleSpacedFormat;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ prompt = qtn_feeds_name_dialog_text;
+ id = EFeedsEditDialogNameId;
+ itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
+ control=EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
+ width = KMaxFeedNameLength;
+ maxlength = KMaxFeedNameLength;
+ };
+ }
+ };
+ }
+
+
+// *****************************************************************************
+// MiscDialogs::DeleteDialogL
+// -----------------------------------------------------------------------------
+//
+// r_feeds_delete_dialog
+// General delete-note dialog.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_feeds_delete_dialog
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ };
+ }
+ };
+ }
+
+
+// *****************************************************************************
+// Other menus
+
+// -----------------------------------------------------------------------------
+//
+// r_feeds_help_exit_feed_menu
+// Options menu for the edit/add feed/folder dialogs.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_feeds_help_exit_feed_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ cascade = r_feeds_help_submenu;
+ command = EWmlCmdHelpMenu;
+ txt = qtn_browser_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EAknCmdExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+// *****************************************************************************
+// Icons
+RESOURCE AKN_ICON_ARRAY_ARRAY r_feeds_icons
+ {
+ iconarrays =
+ {
+ AKN_ICON_ARRAY
+ {
+ bmpfile = "Z:"APP_RESOURCE_DIR"\\browser.mbm"; // bitmap file
+ icons =
+ {
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_file_rss; maskId = EMbmBrowserQgn_prop_file_rss_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_folder_rss; maskId = EMbmBrowserQgn_prop_folder_rss_mask; },
+
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_file_rss_unread; maskId = EMbmBrowserQgn_prop_file_rss_unread_mask; },
+ AKN_ICON { iconId = EMbmBrowserQgn_prop_file_rss_read; maskId = EMbmBrowserQgn_prop_file_rss_read_mask; }
+ };
+ }
+ };
+ }
+
+
+// *****************************************************************************
+// Resource based strings
+
+// new options menu
+RESOURCE TBUF r_feeds_options_goto { buf = qtn_browser_options_goto; }
+RESOURCE TBUF r_feeds_options_feedsactions { buf = qtn_browser_options_feedsactions; }
+RESOURCE TBUF r_feeds_options_edit { buf = qtn_browser_options_edit; }
+RESOURCE TBUF r_feeds_options_markunmark { buf = qtn_browser_options_markunmark; }
+RESOURCE TBUF r_feeds_options_clear { buf = qtn_browser_options_clear; }
+RESOURCE TBUF r_feeds_options_preferences { buf = qtn_wmls_browser_opt_sett; }
+RESOURCE TBUF r_feeds_options_exit { buf = qtn_options_exit; }
+
+RESOURCE TBUF r_feeds_options_go_downloads { buf = qtn_browser_list_downloads; }
+
+// Menu strings
+RESOURCE TBUF r_fldr_open { buf = qtn_fldr_open; }
+RESOURCE TBUF r_feeds_update { buf = qtn_feeds_update; }
+RESOURCE TBUF r_feeds_update_all { buf = qtn_feeds_update_all; }
+RESOURCE TBUF r_feeds_manage { buf = qtn_feeds_manage; }
+
+RESOURCE TBUF r_options_list_mark_unmark { buf = qtn_options_list; }
+RESOURCE TBUF r_options_list_mark_one { buf = qtn_options_list_mark_one; }
+RESOURCE TBUF r_options_list_unmark_one { buf = qtn_options_list_unmark_one; }
+RESOURCE TBUF r_options_list_mark_all { buf = qtn_options_list_mark_all; }
+RESOURCE TBUF r_options_list_unmark_all { buf = qtn_options_list_unmark_all; }
+
+RESOURCE TBUF r_options_org_move { buf = qtn_options_org_move; }
+RESOURCE TBUF r_options_org_move_to_folder { buf = qtn_options_org_move_to_folder; }
+RESOURCE TBUF r_options_org_new_folder { buf = qtn_options_org_new_folder; }
+RESOURCE TBUF r_feeds_edit { buf = qtn_feeds_edit; }
+RESOURCE TBUF r_fldr_rename { buf = qtn_fldr_rename; }
+RESOURCE TBUF r_feeds_new_feed { buf = qtn_feeds_new_feed; }
+RESOURCE TBUF r_feeds_delete { buf = qtn_fldr_delete; }
+RESOURCE TBUF r_options_import_feeds { buf = qtn_options_import_feeds; }
+RESOURCE TBUF r_options_export_feeds { buf = qtn_options_export_feeds; }
+
+
+RESOURCE TBUF r_feeds_open_full_story { buf = qtn_feeds_open_full_story; }
+
+// CFolderView
+RESOURCE TBUF r_feeds_folder_view_title { buf = qtn_feeds_folder_view_title; }
+RESOURCE TBUF r_feeds_no_feeds { buf = qtn_feeds_no_feeds; }
+RESOURCE TBUF r_feeds_folder_view_move_to_prmpt { buf = qtn_fldr_move_to_prmpt; }
+RESOURCE TBUF r_feeds_text_fldr_root_level { buf = qtn_fldr_root_level; }
+
+
+// CFeedView
+RESOURCE TBUF r_feeds_Enclosure { buf = qtn_feeds_feeds_view_enclosure; }
+
+// CWaitDialog
+RESOURCE TBUF r_feeds_opening_folders { buf = qtn_feeds_updating_wait_dialog_text; }
+RESOURCE TBUF r_feeds_opening_feed { buf = qtn_feeds_opening_wait_dialog_text; }
+RESOURCE TBUF r_feeds_updating_all_wait_dialog { buf = qtn_feeds_updating_all_wait_dialog; }
+RESOURCE TBUF r_feeds_updating_feed { buf = qtn_feeds_updating_wait_dialog_text; }
+
+// MiscDialogs
+RESOURCE TBUF r_feeds_delete_feed { buf = qtn_feeds_delete_dialog_text; }
+RESOURCE TBUF r_feeds_delete_multiple_feed { buf = qtn_feeds_delete_multiple_dialog_text; }
+RESOURCE TBUF r_feeds_title_needed { buf = qtn_feeds_title_needed; }
+RESOURCE TBUF r_feeds_address_needed { buf = qtn_feeds_address_needed; }
+RESOURCE TBUF r_feeds_title_single_quote_not_allowed { buf = qtn_feeds_title_single_quote_not_allowed; }
+
+// Edit/Add Dialogs
+RESOURCE TBUF r_feeds_new_feed_item { buf = qtn_feeds_new_feed_item; }
+RESOURCE TBUF r_feeds_new_feed_url_item { buf = "http://"; }
+RESOURCE TBUF r_feeds_new_folder_item { buf = qtn_fldr_name_default; }
+RESOURCE TBUF r_feeds_autoupdating_feed { buf = qtn_feeds_autoupdating_text; }
+
+// Import/Export Dialogs
+RESOURCE TBUF r_feeds_wait_searching_for_feeds { buf = qtn_wait_searching_for_feeds; }
+RESOURCE TBUF r_feeds_popup_title_feeds_files_found { buf = qtn_popup_title_feeds_files_found; }
+RESOURCE TBUF r_feeds_no_feeds_found_on_device { buf = qtn_feeds_no_feeds_found_on_device; }
+RESOURCE TBUF r_feeds_wait_importing_feeds { buf = qtn_wait_importing_feeds; }
+RESOURCE TBUF r_feeds_name_exported_file { buf = qtn_feeds_name_exported_file; }
+RESOURCE TBUF r_feeds_export_opml_title_needed { buf = qtn_feeds_export_opml_tilte_needed; }
+RESOURCE TBUF r_feeds_wait_processing { buf = qtn_wait_processing; }
+RESOURCE TBUF r_feeds_query_import_now { buf = qtn_feeds_query_import_now; }
+RESOURCE TBUF r_feeds_import_now_yes { buf = text_softkey_yes; }
+RESOURCE TBUF r_feeds_import_now_no { buf = text_softkey_no; }
+
+
+// Misc. Strings
+RESOURCE TBUF r_feeds_unnamed_item { buf = qtn_feeds_unnamed_item; }
+RESOURCE TBUF r_feeds_default_folder_path { buf = ""; }
+RESOURCE TBUF r_feeds_default_folder_temp { buf = "\\private\\102072ef\\default_feeds_temp.xml"; }
+RESOURCE TBUF r_feeds_default_folder_url { buf = "file://c:/private/102072ef/default_feeds.xml"; }
+RESOURCE TBUF r_feeds_http_unsupported_winscw { buf = "Http based feeds aren't supported on the emulator"; }
+
+// Errors
+RESOURCE TBUF r_feeds_out_of_memory { buf = qtn_err_eikon_mem; }
+RESOURCE TBUF r_feeds_malformed_feed { buf = qtn_feeds_malformed_main_pane_text; }
+RESOURCE TBUF r_feeds_malformed_feed_error { buf = qtn_feeds_malformed_dialog_text; }
+RESOURCE TBUF r_feeds_unsupported_feed { buf = qtn_feeds_unsupported_main_pane_text; }
+RESOURCE TBUF r_feeds_network_error { buf = qtn_feeds_network_error_main_pane_text; }
+RESOURCE TBUF r_feeds_general_error { buf = qtn_feeds_general_error_dialog_text; }
+RESOURCE TBUF r_feeds_general_error_main_pane { buf = qtn_feeds_general_error_main_pane_text; }
+RESOURCE TBUF r_feeds_name_already_in_use { buf = qtn_feeds_duplicate_title_error_dialog_text; }
+RESOURCE TBUF r_feeds_invalid_url { buf = qtn_feeds_invalid_url_main_pane_text; }
+RESOURCE TBUF r_feeds_opening_wait { buf = qtn_feeds_opening_wait_dialog_text; }
+RESOURCE TBUF r_feeds_file_not_found_error { buf = qtn_feeds_file_not_found_dialog_text; }
+
+// Automatic updating
+RESOURCE TBUF r_feeds_autoupdating_feeds_off { buf = qtn_feeds_autoupdating_off; }
+RESOURCE TBUF r_feeds_updating_interval_15min { buf = qtn_feeds_val_updating_interval_15min; }
+RESOURCE TBUF r_feeds_updating_interval_hourly { buf = qtn_feeds_val_updating_interval_hourly; }
+RESOURCE TBUF r_feeds_updating_interval_4hours { buf = qtn_feeds_val_updating_interval_4hours; }
+RESOURCE TBUF r_feeds_updating_interval_daily { buf = qtn_feeds_val_updating_interval_daily; }
+RESOURCE TBUF r_feeds_updating_interval_weekly { buf = qtn_feeds_val_updating_interval_weekly; }
+
+// Automatic updating info note ( phone bill will be increased )
+RESOURCE TBUF r_feeds_dataquery_autoupdatewarn { buf = qtn_feeds_new_feed_dataquery_autoupdatewarn; }
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/backup_registration.xml Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration version="1.0">
+ <proxy_data_manager sid = "0x10202BE9" />
+ <restore requires_reboot = "no"/>
+</backup_registration>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/bookmark_toolbar.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Resource file for the bookmark view's toolbar
+*
+*
+*/
+
+
+#include <browser_platform_variant.hrh>
+
+#ifdef BRDO_AVKON_EXT_TB_FF
+
+// RESOURCE IDENTIFIER
+
+#include <eikon.hrh>
+#include "BrowserToolbar.hrh"
+
+//
+// Bookmark View toolbar
+//
+// Common toolbar resource
+
+RESOURCE AVKON_TOOLBAR r_bookmark_view_toolbar
+ {
+ flags = KAknToolbarFixed | KAknToolbarWithoutCba;
+ items =
+ {
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdAddBookmark;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_add_bookmark_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_bm_tb_new;
+ bmpmask = EMbmBrowserQgn_indi_browser_bm_tb_new_mask;
+ extension = r_browser_ext_qgn_indi_browser_bm_tb_new;
+ }
+ };
+ };
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdGoToAddress;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_gotoaddress_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_goto;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_goto_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_goto;
+ }
+ };
+ };
+ },
+
+ TBAR_CTRL //Search Goto
+ {
+ type = EAknCtButton;
+ id = EWmlCmdGoToAddressAndSearch;
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_is_tooltip_goto_search;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_goto_and_search;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_goto_and_search_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_goto_and_search;
+ }
+ };
+ };
+ },
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdPreferences;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_setting_settings;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_settings;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_settings_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_settings;
+ }
+ };
+ };
+ }
+#else
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdDelete;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_del_bookmark_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_delete;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_delete_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_delete;
+ }
+ };
+ };
+ }
+ #endif
+ };
+ }
+
+#else
+//
+// Bookmark View toolbar
+//
+// Common toolbar resource
+
+RESOURCE AVKON_TOOLBAR r_bookmark_view_toolbar
+ {
+ }
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/browser_menu.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: resource for aiw ecom
+*
+*/
+
+// RESOURCE IDENTIFIER
+
+//----------------------------------------------------
+//
+// Empty space stylus popup menu.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_empty_space_stylus_popup_menu
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_wmlbm_fav_saveas_bm; command = EWmlCmdSaveAsBookmark; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_wml_list_save_pgs; command = EWmlCmdSavePage; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_list_miniature_show_mini; command = EWmlCmdShowMiniature; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_wml_list_reload; command = EWmlCmdReload; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Anchor stylus popup menu.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_anchor_stylus_popup_menu
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_wmlbm_fav_saveas_bm; command = EWmlCmdSaveUrlAsBookmark; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_list_show_address; command = EWmlCmdShowAnchorHref; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Image stylus popup menu.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_image_stylus_popup_menu
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_save_image_to_gallery; command = EWmlCmdSaveToGallery; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_list_open_to_viewer; command = EWmlCmdOpenToViewer; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Imagemap stylus popup menu.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_imagemap_stylus_popup_menu
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_wmlbm_fav_saveas_bm; command = EWmlCmdSaveUrlAsBookmark; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_list_show_address; command = EWmlCmdShowAnchorHref; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_save_image_to_gallery; command = EWmlCmdSaveToGallery; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_list_open_to_viewer; command = EWmlCmdOpenToViewer; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Image placeholder stylus popup menu, no Flash.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_image_placeholder_stylus_popup_menu_no_flash
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_load_image; command = EWmlCmdLoadFocusedImage; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_load_all_images; command = EWmlCmdLoadImages; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_enable_autoload_images; command = EWmlCmdLoadImagesOnly; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Image placeholder stylus popup menu, with Flash
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_image_placeholder_stylus_popup_menu_with_flash
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_load_image; command = EWmlCmdLoadFocusedImage; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_load_all_images; command = EWmlCmdLoadImages; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_enable_autoload_images; command = EWmlCmdLoadImagesOnly; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_enable_autoload_all; command = EWmlCmdLoadImagesAndFlash; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// Phone number stylus popup menu.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_phone_number_stylus_popup_menu
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_options_call; command = EWmlCmdSmartLinkMakeCall; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_create_sms; command = EWmlCmdSmartLinkSendSms; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_options_contacts; command = EWmlCmdSmartLinkAddToContacts; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// E-mail address stylus popup menu.
+//----------------------------------------------------
+//
+RESOURCE STYLUS_POPUP_MENU r_browser_email_address_stylus_popup_menu
+ {
+ items =
+ {
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_browser_create_email; command = EWmlCmdSmartLinkSendEmail; },
+ STYLUS_POPUP_MENU_ITEM { txt = qtn_options_contacts; command = EWmlCmdSmartLinkAddToContacts; }
+ };
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/browser_toolbar.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,580 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Resource file for the content view's toolbar
+*
+*
+*/
+
+
+#include <browser_platform_variant.hrh>
+
+#ifdef BRDO_AVKON_EXT_TB_FF
+
+// RESOURCE IDENTIFIER
+
+#include <eikon.hrh>
+#include "BrowserToolbar.hrh"
+
+// Common toolbar resource
+RESOURCE AVKON_TOOLBAR r_content_view_toolbar
+ {
+ flags = KAknToolbarFixed | KAknToolbarWithoutCba;
+ items =
+ {
+ TBAR_CTRL
+ {
+ type=EAknCtToolbarExtension;
+ id= EWmlCmdToolbarExtensionContentView;
+
+ control = AVKON_TOOLBAR_EXTENSION
+ {
+ helptxt = qtn_browser_ext_tb_tt;
+ items =
+ {
+#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdFavourites;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_bm;
+ helptxt = qtn_browser_ext_tb_bm_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_bm;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_bm_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_bm;
+ }
+ };
+ };
+ },
+#endif
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdLaunchHomePage;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_home;
+ helptxt = qtn_browser_ext_tb_home_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_home;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_home_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_home;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdSaveAsBookmark;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_save_bookmark;
+ helptxt = qtn_browser_ext_tb_save_bookmark_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_save_bm;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_save_bm_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_savebm;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdFindKeyword;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_find_keyword;
+ helptxt = qtn_browser_ext_tb_find_keyword_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_find_kw;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_find_kw_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_findkw;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdReload;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_reload;
+ helptxt = qtn_browser_ext_tb_reload_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_reload;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_reload_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_reload;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EAknCmdHelp;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_help;
+ helptxt = qtn_browser_ext_tb_help_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_help;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_help_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_help;
+ }
+ };
+ };
+ },
+#ifndef BRDO_MULTITOUCH_ENABLED_FF
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdShowMiniature;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_miniature_show;
+ helptxt = qtn_browser_ext_tb_miniature_show_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_page;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_page_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_pages;
+ }
+ };
+ };
+ },
+#else
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdDownloads;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_list_downloads;
+ helptxt = qtn_browser_list_downloads;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_downloads;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_downloads_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_downloads;
+ }
+ };
+ };
+ },
+#endif
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdPreferences;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_settings;
+ helptxt = qtn_browser_ext_tb_settings_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_settings;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_settings_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_settings;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdOpenFeedsFolder;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_view_feeds;
+ helptxt = qtn_browser_ext_tb_view_feeds_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_feeds;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_feeds_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_feeds;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdShowSubscribeList;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_subscribe_list;
+ helptxt = qtn_browser_ext_tb_subscribe_list_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_rss;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_rss_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_rss;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdSwitchWindow;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_switch_win;
+ helptxt = qtn_browser_ext_tb_switch_win_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_switch_win;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_switch_win_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_switch_win;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdSendAddressViaUnifiedMessage;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_browser_ext_tb_send_url;
+ helptxt = qtn_browser_ext_tb_send_url_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_send_url;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_send_url_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_send_url;
+ }
+ };
+ };
+ #ifndef BRDO_SINGLE_CLICK_ENABLED_FF
+ }
+ #else
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdUserExit;
+
+ control = AVKON_BUTTON
+ {
+ flags = KAknButtonRequestExitOnButtonUpEvent;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = qtn_options_exit; //qtn_browser_list_close_window;
+ helptxt = qtn_options_exit; //qtn_browser_list_close_window;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_exit;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_exit_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_exit;
+ }
+ };
+ };
+ }
+ #endif
+
+ };
+ };
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdGoToAddress;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_gotoaddress_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_goto;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_goto_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_goto;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdGoToAddressAndSearch;
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_is_tooltip_goto_search;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_goto_and_search;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_goto_and_search_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_goto_and_search;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdHistoryBack;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_history_back_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_history_back;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_history_back_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_history_back;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdFindPrevious;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_findprevious_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_find_kw_prev;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_find_kw_prev_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_findkw_prev;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlNoCmd;
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = "";
+ // bmpfile = ;
+ // bmpid = ;
+ // bmpmask = ;
+ extension = r_browser_ext_qgn_indi_browser_tb_blank;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdFindNext;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_findnext_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_find_kw_next;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_find_kw_next_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_findkw_next;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdHistoryForward;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_history_forward_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_history_fw;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_history_fw_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_history_fw;
+ }
+ };
+ };
+ },
+
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdFavourites;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = "";
+ helptxt = qtn_browser_ext_tb_bm_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_bm;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_bm_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_bm;
+ }
+ };
+ };
+ }
+#else
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdZoomSliderShow;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_tb_zoomshow_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_zoom_in;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_zoom_in_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_zoomin;
+ }
+ };
+ };
+ }
+#endif
+ };
+ }
+
+#else
+
+// Common toolbar resource
+RESOURCE AVKON_TOOLBAR r_content_view_toolbar
+ {
+ }
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/feeds_toolbar.rssi Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,350 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Resource file for the content view's toolbar
+*
+*
+*/
+
+
+#include <browser_platform_variant.hrh>
+
+#ifdef BRDO_AVKON_EXT_TB_FF
+
+// RESOURCE IDENTIFIER
+
+#include <eikon.hrh>
+#include "BrowserToolbar.hrh"
+
+//
+// Feeds Views toolbars
+//
+// Common toolbar resource
+
+RESOURCE AVKON_TOOLBAR r_feeds_folder_view_toolbar
+ {
+ flags = KAknToolbarFixed | KAknToolbarWithoutCba;
+ items =
+ {
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsNewFeed;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_new_feed;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_prop_file_rss_new;
+ bmpmask = EMbmBrowserQgn_prop_file_rss_new_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_feeds;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsUpdateAll;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_folder_update_all_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_update_all;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_update_all_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_updateall;
+ }
+ };
+ };
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EWmlCmdPreferences;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_browser_setting_settings;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_tb_settings;
+ bmpmask = EMbmBrowserQgn_indi_browser_tb_settings_mask;
+ extension = r_browser_ext_qgn_indi_browser_tb_settings;
+ }
+ };
+ };
+ }
+#else
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsUpdate;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_folder_update_selected_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_update;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_update_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_update;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsUpdateAll;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_folder_update_all_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_update_all;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_update_all_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_updateall;
+ }
+ };
+ };
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsOpen;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_folder_open_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_open_topic;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_open_topic_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_opentopic;
+ }
+ };
+ };
+ }
+#endif
+ };
+ }
+
+RESOURCE AVKON_TOOLBAR r_feeds_topic_view_toolbar
+ {
+ flags = KAknToolbarFixed | KAknToolbarWithoutCba;
+ items =
+ {
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsUpdate;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_topic_update_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_update;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_update_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_update;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsBackToPage;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_topic_back_to_page_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_back_to_web;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_back_to_web_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_toweb;
+ }
+ };
+ };
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsOpen;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_topic_open_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_open_detail;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_open_detail_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_opendetail;
+ }
+ };
+ };
+ }
+ };
+ }
+
+
+RESOURCE AVKON_TOOLBAR r_feeds_feed_view_toolbar
+ {
+ flags = KAknToolbarFixed | KAknToolbarWithoutCba;
+ items =
+ {
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsShowPrevItem;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_feed_previous_article_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_previous;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_previous_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_openprev;
+ }
+ };
+ };
+ },
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsSeeFullStory;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_feed_show_full_story_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_open_full;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_open_full_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_openfull;
+ }
+ };
+ };
+ },
+
+ TBAR_CTRL
+ {
+ type = EAknCtButton;
+ id = EFeedsShowNextItem;
+
+ control = AVKON_BUTTON
+ {
+ flags = 0;
+ states =
+ {
+ AVKON_BUTTON_STATE
+ {
+ txt = ""; //Icon should always be visible instead of this
+ helptxt = qtn_feeds_feed_next_article_tt;
+ bmpfile = "\\Resource\\apps\\browser.mif";
+ bmpid = EMbmBrowserQgn_indi_browser_feeds_tb_next;
+ bmpmask = EMbmBrowserQgn_indi_browser_feeds_tb_next_mask;
+ extension = r_browser_ext_qgn_indi_browser_feeds_tb_next;
+ }
+ };
+ };
+ }
+ };
+ }
+#else
+
+//
+// Feeds Views toolbars
+//
+// Common toolbar resource
+
+RESOURCE AVKON_TOOLBAR r_feeds_folder_view_toolbar
+ {
+ }
+
+RESOURCE AVKON_TOOLBAR r_feeds_topic_view_toolbar
+ {
+ }
+
+RESOURCE AVKON_TOOLBAR r_feeds_feed_view_toolbar
+ {
+ }
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/SrcData/feeds_view_template.html Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<html>
+<head>
+ <base href="file:///c:/" />
+
+ <style>
+ body {font-family:serif; font-size:10pt; line-height:11pt;}
+ .header {}
+ .nav {font-size:13pt; font-weight:700; line-height:13pt; margin-top:1pt; margin-bottom:1pt;}
+ .title {font-size:14pt; font-weight:700; line-height:14pt; margin-top:1pt; margin-bottom:1pt;}
+ .weburl {font-size:14pt; font-weight:700; line-height:14pt; margin-top:1pt; margin-bottom:1pt;}
+ .date {font-size:8pt; font-weight:700; line-height:8pt; margin-top:1pt; margin-bottom:1pt;}
+ .description {font-size:12pt; line-height:12pt; margin-top:1pt; margin-bottom:1pt;}
+ </style>
+
+<title>#Title#</title>
+</head>
+
+<body dir=#dir#>
+<table width="100%">
+ <tr><td class="header"><div class="title"><a class="weburl" href="#WebUrl#">#Title#</a></div><div class="date">#Date#</div></td></tr>
+ <tr><td class="description">#Description#</td></tr>
+ <tr><td class="description">#Enclosure#</td></tr>
+</table>
+</body>
+
+<script language="JavaScript" type="text/javascript">
+ // Add the "feeds" schema to all anchors. This allows the FeedsView to correctly dispatch
+ // them to the client application.
+ var anchorTags = document.getElementsByTagName("a");
+
+ for (var i = 0; i < anchorTags.length ; i++)
+ {
+ anchorTags[i].href = "feeds:" + anchorTags[i].href;
+ }
+
+ // If need be hide the show full story link.
+ var webUrl = "#WebUrl#";
+ if (webUrl.length == 0)
+ {
+ var e = document.getElementById("showFullStory");
+ e.style.display = "none";
+ }
+</script>
+</html>
Binary file browserui/browser/cenrep/keys_browserui.xls has changed
Binary file browserui/browser/conf/Feeds.confml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/conf/Feeds_OPML.gcfml Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,26 @@
+<file xmlns="http://www.s60.com/xml/genconfml/1" name="default_feeds.xml" target="private\1020728E\">
+ <setting ref="Header/*"/>
+ <setting ref="OutLines/OutLine"/>
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict">
+ <xsl:output method="xml" encoding="UTF-16" indent="yes"/>
+ <xsl:template match="configuration/data">
+ <opml version="1.1">
+ <head>
+ <title><xsl:value-of select="Header/Title"/></title>
+ <dateCreated><xsl:value-of select="Header/DateCreated"/></dateCreated>
+ <ownerName><xsl:value-of select="Header/OwnerName"/></ownerName>
+ </head>
+ <body>
+ <xsl:for-each select="OutLines/OutLine">
+ <outline>
+ <xsl:attribute name="title"><xsl:value-of select="Title"/></xsl:attribute>
+ <xsl:attribute name="text"><xsl:value-of select="Text"/></xsl:attribute>
+ <xsl:attribute name="type"><xsl:value-of select="Type"/></xsl:attribute>
+ <xsl:attribute name="xmlUrl"><xsl:value-of select="XmlUrl"/></xsl:attribute>
+ </outline>
+ </xsl:for-each>
+ </body>
+ </opml>
+ </xsl:template>
+ </xsl:stylesheet>
+</file>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/conf/bookmarkitems.gcfml Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,11 @@
+<file xmlns="http://www.s60.com/xml/genconfml/1" name="BookmarkImportSample.txt" target="data\">
+ <setting ref="BookmarkItems/BookmarkItem"/>
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict">
+ <xsl:output method="text" encoding="UTF-16"/>
+ <xsl:template match="configuration/data">
+ <xsl:for-each select="BookmarkItems/BookmarkItem">
+ <xsl:value-of select="Type"/>,<xsl:value-of select="Name"/>,<xsl:value-of select="ParentFolderName"/>,<xsl:value-of select="URL"/>,<xsl:value-of select="AccessPoint"/>,<xsl:value-of select="UserName"/>,<xsl:value-of select="Password"/>,<xsl:value-of select="ReadOnly"/>,<xsl:value-of select="FactoryItem"/>,<xsl:value-of select="ContextId"/>,<xsl:value-of select="Hidden"/>,<xsl:value-of select="Preferred"/><xsl:text>
</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+ </xsl:stylesheet>
+</file>
Binary file browserui/browser/conf/browserbookmarks.confml has changed
Binary file browserui/browser/conf/browserui.confml has changed
Binary file browserui/browser/conf/browserui_10008D39.crml has changed
Binary file browserui/browser/conf/browserui_101F861B.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_bm_tb_new.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="54px" version="1.1" viewBox="-8.072 -1.617 54 54" width="54px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<path d="M37.857,48.113h-3.192H3.191H0v-3.191V7.151V3.959h3.191H4.88 c0.899-0.822,2.092-1.306,3.379-1.306h8.181c1.291,0,2.483,0.483,3.383,1.306h3.092c4.788,0,7.808,2.373,10.132,4.691 c2.436,2.443,4.812,5.209,4.812,9.828v26.442V48.113L37.857,48.113z" fill="#FFFFFF" fill-opacity="0.6" stroke-opacity="0.6"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="18.9282" x2="18.9282" y1="-11.1362" y2="32.3015">
+<stop offset="0" style="stop-color:#CCCCCC"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M35.648,45.902h-0.981H3.19H2.209v-0.983V7.152V6.17H3.19h2.701 c0.512-0.795,1.402-1.309,2.367-1.309h8.184c0.981,0,1.863,0.503,2.37,1.309h4.104c3.974,0,6.466,1.943,8.566,4.045 c2.279,2.281,4.165,4.478,4.165,8.264v26.439V45.902L35.648,45.902z" fill="url(#SVGID_1_)" fill-opacity="0.7" stroke-opacity="0.7"/>
+<path d="M34.634,16.172c0-4.957-4.033-8.99-8.99-8.99c-0.646,0-1.273,0.071-1.88,0.201l10.679,10.635 C34.567,17.421,34.634,16.805,34.634,16.172z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M34.464,16.172c0-4.863-3.957-8.82-8.82-8.82c-0.595,0-1.176,0.06-1.738,0.172l10.391,10.349 C34.404,17.323,34.464,16.755,34.464,16.172z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M34.299,16.172c0-4.77-3.886-8.652-8.655-8.652c-0.543,0-1.073,0.057-1.59,0.152l10.098,10.057 C34.243,17.223,34.299,16.706,34.299,16.172z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M34.131,16.172c0-4.681-3.809-8.484-8.487-8.484c-0.493,0-0.973,0.05-1.442,0.131l9.803,9.764 C34.081,17.122,34.131,16.655,34.131,16.172z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M33.963,16.172c0-4.588-3.734-8.317-8.319-8.317c-0.441,0-0.872,0.044-1.295,0.11l9.508,9.471 C33.92,17.022,33.963,16.604,33.963,16.172z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M33.795,16.17c0-4.492-3.657-8.147-8.151-8.147c-0.39,0-0.771,0.038-1.146,0.091l9.212,9.174 C33.761,16.923,33.795,16.551,33.795,16.17z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M33.628,16.17c0-4.4-3.582-7.979-7.984-7.979c-0.34,0-0.672,0.026-1,0.069l8.919,8.881 C33.602,16.823,33.628,16.501,33.628,16.17z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M33.46,16.17c0-4.308-3.507-7.813-7.816-7.813c-0.288,0-0.572,0.02-0.852,0.049l8.623,8.588 C33.444,16.724,33.46,16.451,33.46,16.17z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M33.294,16.17c0-4.214-3.435-7.645-7.65-7.645c-0.235,0-0.467,0.015-0.697,0.036l8.314,8.279 C33.28,16.622,33.294,16.398,33.294,16.17z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M33.124,16.17c0-4.121-3.355-7.479-7.48-7.479c-0.183,0-0.36,0.014-0.539,0.028l7.993,7.961 C33.109,16.51,33.124,16.343,33.124,16.17z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<path d="M32.956,16.17c0-4.031-3.281-7.311-7.313-7.311c-0.128,0-0.252,0.012-0.379,0.019l7.674,7.642 C32.944,16.405,32.956,16.291,32.956,16.17z" fill-opacity="0.02" stroke-opacity="0.02"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="31.5879" x2="32.6234" y1="13.376" y2="12.3405">
+<stop offset="0" style="stop-color:#F2F2F2"/>
+<stop offset="0.1924" style="stop-color:#EDEDED"/>
+<stop offset="0.416" style="stop-color:#DFDFDF"/>
+<stop offset="0.6553" style="stop-color:#C8C8C8"/>
+<stop offset="0.9038" style="stop-color:#A8A8A8"/>
+<stop offset="1" style="stop-color:#999999"/>
+</linearGradient>
+<path d="M34.665,18.479c0,3.09,0,26.441,0,26.441H3.191V7.151c0,0,17.648,0,19.724,0 c3.411,0,5.609,1.493,7.874,3.758C33.05,13.172,34.665,15.124,34.665,18.479z" fill="url(#SVGID_2_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="24.0313" x2="32.5352" y1="20.9336" y2="12.4294">
+<stop offset="0" style="stop-color:#F2F2F2"/>
+<stop offset="0.1924" style="stop-color:#EDEDED"/>
+<stop offset="0.416" style="stop-color:#DFDFDF"/>
+<stop offset="0.6553" style="stop-color:#C8C8C8"/>
+<stop offset="0.9038" style="stop-color:#A8A8A8"/>
+<stop offset="1" style="stop-color:#999999"/>
+</linearGradient>
+<path d="M34.665,18.479c0,3.09,0,26.441,0,26.441H3.191V7.151c0,0,17.648,0,19.724,0 c4.2,0,5.701,2.799,6.092,5.539C31.874,13.081,34.665,14.385,34.665,18.479z" fill="url(#SVGID_3_)"/>
+<polygon fill="url(#SVGID_4_)" fill-opacity="0.85" points="34.665,35.268 34.665,44.92 3.191,44.92 3.191,17.642 " stroke-opacity="0.85"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="21.4453" x2="21.4453" y1="10.2275" y2="51.9582">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_5_)" height="2.244" width="17.059" x="12.916" y="22.326"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_6_" x1="21.4453" x2="21.4453" y1="10.2285" y2="51.9592">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_6_)" height="2.244" width="17.059" x="12.916" y="17.131"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_7_" x1="21.4453" x2="21.4453" y1="10.2354" y2="51.9479">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_7_)" height="2.243" width="17.059" x="12.916" y="32.696"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_8_" x1="21.4453" x2="21.4453" y1="10.2256" y2="51.9563">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_8_)" height="2.244" width="17.059" x="12.916" y="27.5"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="17.059" x="12.916" y="22.326"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="17.059" x="12.916" y="17.131"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="17.059" x="12.916" y="32.696"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="17.059" x="12.916" y="27.5"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_9_" x1="9.418" x2="9.418" y1="10.2275" y2="51.9582">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_9_)" height="2.244" width="2.822" x="8.007" y="22.326"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_10_" x1="9.418" x2="9.418" y1="10.2285" y2="51.9592">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_10_)" height="2.244" width="2.822" x="8.007" y="17.131"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_11_" x1="9.418" x2="9.418" y1="10.2354" y2="51.9479">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_11_)" height="2.243" width="2.822" x="8.007" y="32.696"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_12_" x1="9.418" x2="9.418" y1="10.2256" y2="51.9563">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#SVGID_12_)" height="2.244" width="2.822" x="8.007" y="27.5"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="2.822" x="8.007" y="22.326"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="2.822" x="8.007" y="17.131"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="2.822" x="8.007" y="32.696"/>
+<rect fill="#E6E9EE" fill-opacity="0.5" height="0.77" stroke-opacity="0.5" width="2.822" x="8.007" y="27.5"/>
+<polygon fill="url(#SVGID_4_)" fill-opacity="0.3" points="34.665,35.268 34.665,44.92 3.191,44.92 3.191,17.642 " stroke-opacity="0.3"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_14_" x1="18.9282" x2="18.9282" y1="40.4624" y2="11.1759">
+<stop offset="0" style="stop-color:#808080"/>
+<stop offset="0.2099" style="stop-color:#7B7B7B"/>
+<stop offset="0.4539" style="stop-color:#6D6D6D"/>
+<stop offset="0.7148" style="stop-color:#555555"/>
+<stop offset="0.9861" style="stop-color:#353535"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<path d="M28.981,12.713c-0.392-2.739-1.866-5.563-6.066-5.563c-2.075,0-19.724,0-19.724,0 v37.77h31.474c0,0,0-23.352,0-26.441C34.665,14.385,31.848,13.104,28.981,12.713z M33.826,44.082H4.033V7.989h18.882 c3.284,0,5.445,0.837,6.054,4.739c3.773,0.662,4.857,1.717,4.857,5.751V44.082z" fill="url(#SVGID_14_)" fill-opacity="0.4" stroke-opacity="0.4"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_15_" x1="12.3506" x2="12.3506" y1="31.188" y2="-2.4765">
+<stop offset="0" style="stop-color:#E3F4FC"/>
+<stop offset="0.3352" style="stop-color:#4BA1D8"/>
+<stop offset="0.4725" style="stop-color:#4898D3"/>
+<stop offset="0.8956" style="stop-color:#2451A3"/>
+<stop offset="1" style="stop-color:#2451A3"/>
+</linearGradient>
+<path d="M18.282,26.585c0,1.013-0.633,1.307-1.407,0.654l-3.004-2.534c-0.774-0.654-2.051-0.666-2.835-0.027 l-3.188,2.588c-0.785,0.639-1.429,0.332-1.429-0.681v-18.9c0-1.013,0.828-1.841,1.841-1.841h8.181c1.014,0,1.842,0.828,1.842,1.841 V26.585z" fill="url(#SVGID_15_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_16_" x1="12.2788" x2="12.2788" y1="5.2363" y2="13.5377">
+<stop offset="0" style="stop-color:#E3F4FC"/>
+<stop offset="1" style="stop-color:#4BA1D8"/>
+</linearGradient>
+<rect fill="url(#SVGID_16_)" height="7.116" width="9.349" x="7.604" y="7.225"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_17_" x1="39.9922" x2="34.8139" y1="30.0142" y2="-16.2484">
+<stop offset="0" style="stop-color:#EAEEAC"/>
+<stop offset="0.4945" style="stop-color:#86B940"/>
+<stop offset="1" style="stop-color:#176433"/>
+</linearGradient>
+<path d="M42.309,6.057l-5.943,2.625l1.516,3.419l5.938-2.625L42.309,6.057z M33.65,0l-2.47,6.021 l3.459,1.422l2.472-6.023L33.65,0z" fill="url(#SVGID_17_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_18_" x1="40.8115" x2="39.4775" y1="10.7944" y2="7.5444">
+<stop offset="0" style="stop-color:#61A143"/>
+<stop offset="0.9121" style="stop-color:#E1EBB4"/>
+<stop offset="1" style="stop-color:#E1EBB4"/>
+</linearGradient>
+<polygon fill="url(#SVGID_18_)" points="41.992,6.833 37.186,8.955 37.908,10.549 42.711,8.426 "/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_19_" x1="33.915" x2="35.415" y1="4.3701" y2="0.7036">
+<stop offset="0" style="stop-color:#61A143"/>
+<stop offset="0.9121" style="stop-color:#E1EBB4"/>
+<stop offset="1" style="stop-color:#E1EBB4"/>
+</linearGradient>
+<polygon fill="url(#SVGID_19_)" points="33.934,0.657 33.117,2.739 35.648,3.801 36.467,1.718 "/>
+<defs>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="18.9282" x2="18.9282" y1="44.9204" y2="17.7562">
+<stop offset="0" style="stop-color:#F2F2F2"/>
+<stop offset="1" style="stop-color:#FFFFFF"/>
+</linearGradient>
+</defs>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_back_to_web.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M48.203,53.669c-1.535-0.043-2.701-1.312-2.786-2.78l0,0 c-0.08-1.814-0.749-3.943-1.862-5.894l0,0v1.573h-1.5h-0.981H9.597H7.116v-1.5l-0.002-0.979L7.116,6.313V3.832h1.5l0.981-0.003 l19.725,0.003c2.289-0.007,4.219,0.599,5.809,1.486l0,0c3.225,0.994,5.783,3.486,6.861,6.677l0,0c0.938,1.535,1.568,3.4,1.563,5.648 l0,0v11.688c4.901,4.188,7.813,10.804,7.832,17.421l0,0c0,1.568-0.169,3.137-0.51,4.623l0,0c-0.23,1.188-1.159,2.254-2.65,2.295l0,0 L48.203,53.669L48.203,53.669z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_965" gradientUnits="userSpaceOnUse" x1="25.33" y1="-10.16" x2="25.33" y2="31.9">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M42.053,45.068h-0.98H9.597H8.615v-0.982V6.312V5.33h0.982H29.32 c3.972,0,6.467,1.945,8.568,4.047c2.276,2.28,4.164,4.476,4.164,8.266v26.443V45.068L42.053,45.068z" fill="url(#_965)" fill-opacity="0.7"/>
+<path d="M41.04,15.338c0-4.959-4.034-8.991-8.991-8.991c-0.645,0-1.271,0.069-1.879,0.202l10.68,10.633 C40.973,16.587,41.04,15.969,41.04,15.338z" fill-opacity="0.02"/>
+<path d="M40.87,15.338c0-4.865-3.958-8.823-8.821-8.823c-0.595,0-1.176,0.063-1.736,0.175l10.391,10.348 C40.811,16.486,40.87,15.918,40.87,15.338z" fill-opacity="0.02"/>
+<path d="M40.705,15.338c0-4.772-3.887-8.653-8.656-8.653c-0.543,0-1.072,0.056-1.589,0.151l10.097,10.055 C40.648,16.388,40.705,15.867,40.705,15.338z" fill-opacity="0.02"/>
+<path d="M40.537,15.338c0-4.682-3.811-8.488-8.488-8.488c-0.492,0-0.972,0.051-1.441,0.133l9.804,9.763 C40.486,16.287,40.537,15.817,40.537,15.338z" fill-opacity="0.02"/>
+<path d="M40.369,15.338c0-4.588-3.734-8.32-8.32-8.32c-0.441,0-0.871,0.046-1.294,0.113l9.509,9.468 C40.326,16.186,40.369,15.767,40.369,15.338z" fill-opacity="0.02"/>
+<path d="M40.201,15.336c0-4.494-3.658-8.148-8.152-8.148c-0.39,0-0.771,0.037-1.146,0.09l9.213,9.176 C40.166,16.086,40.201,15.715,40.201,15.336z" fill-opacity="0.02"/>
+<path d="M40.033,15.336c0-4.401-3.581-7.982-7.984-7.982c-0.339,0-0.671,0.029-0.999,0.069l8.919,8.884 C40.007,15.988,40.033,15.664,40.033,15.336z" fill-opacity="0.02"/>
+<path d="M39.865,15.336c0-4.311-3.508-7.813-7.816-7.813c-0.287,0-0.57,0.018-0.851,0.049l8.622,8.588 C39.85,15.889,39.865,15.613,39.865,15.336z" fill-opacity="0.02"/>
+<path d="M39.7,15.336c0-4.217-3.435-7.645-7.651-7.645c-0.234,0-0.466,0.015-0.695,0.033l8.313,8.279 C39.686,15.783,39.7,15.56,39.7,15.336z" fill-opacity="0.02"/>
+<path d="M39.529,15.336c0-4.123-3.355-7.479-7.48-7.479c-0.182,0-0.359,0.014-0.537,0.025l7.992,7.961 C39.516,15.676,39.529,15.508,39.529,15.336z" fill-opacity="0.02"/>
+<path d="M39.361,15.336c0-4.032-3.28-7.313-7.313-7.313c-0.127,0-0.252,0.015-0.379,0.019l7.674,7.645 C39.35,15.568,39.361,15.453,39.361,15.336z" fill-opacity="0.02"/>
+<linearGradient id="_966" gradientUnits="userSpaceOnUse" x1="38.05" y1="12.6" x2="39.09" y2="11.57">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.597V6.313c0,0,17.647,0,19.723,0 c3.412,0,5.609,1.495,7.875,3.759C39.456,12.334,41.07,14.288,41.07,17.644z" fill="url(#_966)"/>
+<linearGradient id="_967" gradientUnits="userSpaceOnUse" x1="30.43" y1="20.1" x2="38.94" y2="11.59">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.597V6.313c0,0,17.647,0,19.723,0 c4.199,0,5.701,2.8,6.093,5.539C38.279,12.244,41.07,13.547,41.07,17.644z" fill="url(#_967)"/>
+<linearGradient id="_968" gradientUnits="userSpaceOnUse" x1="25.33" y1="44.09" x2="25.33" y2="16.92">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#FFFFFF" offset="1"/>
+</linearGradient>
+<polygon fill="url(#_968)" fill-opacity="0.85" points="41.07,34.434 41.07,44.086 9.597,44.086 9.597,16.805 "/>
+<linearGradient id="_969" gradientUnits="userSpaceOnUse" x1="30.99" y1="9.4" x2="30.99" y2="51.11">
+<stop stop-color="#666666" offset="0"/>
+<stop stop-color="#CCCCCC" offset="1"/>
+</linearGradient>
+<rect fill="url(#_969)" height="2.243" width="8.809" x="26.59" y="21.49"/>
+<rect fill="url(#_969)" height="2.242" width="8.809" x="26.59" y="16.295"/>
+<linearGradient id="_971" gradientUnits="userSpaceOnUse" x1="20.06" y1="13.19" x2="20.06" y2="33.29">
+<stop stop-color="#666666" offset="0"/>
+<stop stop-color="#CCCCCC" offset="1"/>
+</linearGradient>
+<rect fill="url(#_971)" height="7.438" width="9.5" x="15.312" y="16.295"/>
+<rect fill="url(#_969)" height="2.244" width="20.125" x="15.271" y="31.859"/>
+<rect fill="url(#_969)" height="2.243" width="20.125" x="15.271" y="26.665"/>
+<polygon fill="url(#_968)" fill-opacity="0.3" points="41.07,34.434 41.07,44.086 9.597,44.086 9.597,16.805 "/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.771" width="8.809" x="26.59" y="21.49"/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.77" width="8.809" x="26.59" y="16.295"/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.77" width="20.125" x="15.271" y="31.859"/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.77" width="20.125" x="15.271" y="26.665"/>
+<linearGradient id="_975" gradientUnits="userSpaceOnUse" x1="25.33" y1="39.63" x2="25.33" y2="10.34">
+<stop stop-color="#808080" offset="0"/>
+<stop stop-color="#7B7B7B" offset="0.21"/>
+<stop stop-color="#6D6D6D" offset="0.45"/>
+<stop stop-color="#555555" offset="0.71"/>
+<stop stop-color="#353535" offset="0.99"/>
+<stop stop-color="#333333" offset="1"/>
+</linearGradient>
+<path d="M35.387,11.879c-0.392-2.74-1.867-5.565-6.066-5.565 c-2.075,0-19.723,0-19.723,0v37.772H41.07c0,0,0-23.352,0-26.441C41.07,13.547,38.254,12.269,35.387,11.879z M40.232,43.248H10.438 V7.152H29.32c3.285,0,5.445,0.836,6.055,4.738c3.771,0.662,4.857,1.719,4.857,5.754V43.248z" fill="url(#_975)" fill-opacity="0.4"/>
+<linearGradient id="_976" gradientUnits="userSpaceOnUse" x1="35.78" y1="15.15" x2="36.78" y2="45.31">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M48.249,52.169c-0.717-0.022-1.278-0.601-1.335-1.358l0,0c-0.291-5.804-5.34-13.433-12.441-13.596 l0,0l-0.095,3.803c-0.013,0.428-0.265,0.823-0.675,1.014l0,0c-0.139,0.06-0.295,0.096-0.454,0.096l0,0 c-0.269,0.002-0.532-0.098-0.763-0.303l0,0L23.581,32.9l-0.002-0.004c-0.185-0.197-0.3-0.467-0.302-0.744l0,0 c-0.001-0.021,0-0.034,0-0.034l0,0c0.002-0.332,0.146-0.628,0.363-0.818l0,0l9.203-8.785c0.212-0.199,0.483-0.295,0.75-0.293l0,0 c0.166,0,0.325,0.037,0.448,0.096l0,0c0.131,0.054,0.223,0.127,0.299,0.188l0,0c0.227,0.204,0.374,0.492,0.376,0.822l0,0 c0,0.009,0,0.017,0,0.036l0,0l-0.048,3.424c9.03,1.323,15.208,10.733,15.216,19.963l0,0c0,1.462-0.155,2.919-0.481,4.347l0,0 c-0.115,0.613-0.596,1.073-1.125,1.073l0,0C48.268,52.17,48.258,52.17,48.249,52.169L48.249,52.169z" fill="url(#_976)"/>
+<linearGradient id="_977" gradientUnits="userSpaceOnUse" x1="36.58" y1="64.2" x2="36.58" y2="8.95">
+<stop stop-color="#EBF7AB" offset="0"/>
+<stop stop-color="#87B938" offset="0.49"/>
+<stop stop-color="#006300" offset="1"/>
+</linearGradient>
+<path d="M33.85,22.777c0.063,0.025,0.105,0.059,0.158,0.1c0.135,0.121,0.217,0.297,0.208,0.478 l-0.054,3.869c10.33,1.168,17.107,13.458,14.754,23.756c-0.273,1.187-1.461,0.656-1.506-0.197 c-0.322-6.151-5.684-14.201-13.428-14.065L33.877,41c-0.008,0.246-0.148,0.468-0.374,0.57c-0.222,0.104-0.478,0.064-0.664-0.1 l-8.848-8.865c0-0.002,0-0.006-0.004-0.008c-0.138-0.121-0.212-0.283-0.211-0.468c-0.004-0.183,0.077-0.356,0.208-0.47l9.198-8.782 C33.367,22.712,33.633,22.676,33.85,22.777z" fill="url(#_977)"/>
+<linearGradient id="_978" gradientUnits="userSpaceOnUse" x1="39.27" y1="55.93" x2="34.27" y2="16.43">
+<stop stop-color="#61A10D" offset="0"/>
+<stop stop-color="#E3F0B5" offset="0.91"/>
+</linearGradient>
+<path d="M43.359,33.688c3.992,4.611,6.037,12.09,5.301,10.877c-6.678-11.016-11.794-13.649-23.37-12.406 l7.675-7.145c0,0,0.102,3.771,0.068,3.786C36.881,28.773,40.787,30.73,43.359,33.688z" fill="url(#_978)"/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_next.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M41.04,15.338c0-4.959-4.034-8.992-8.991-8.992c-0.645,0-1.271,0.07-1.879,0.203l10.678,10.633 C40.973,16.586,41.04,15.969,41.04,15.338z" fill-opacity="0.02"/>
+<path d="M40.87,15.338c0-4.865-3.958-8.824-8.821-8.824c-0.595,0-1.176,0.063-1.736,0.176l10.391,10.348 C40.811,16.486,40.87,15.918,40.87,15.338z" fill-opacity="0.02"/>
+<path d="M40.705,15.338c0-4.773-3.887-8.654-8.656-8.654c-0.543,0-1.072,0.057-1.589,0.152l10.097,10.055 C40.648,16.387,40.705,15.867,40.705,15.338z" fill-opacity="0.02"/>
+<path d="M40.537,15.338c0-4.682-3.811-8.488-8.488-8.488c-0.492,0-0.972,0.051-1.441,0.133l9.804,9.762 C40.486,16.287,40.537,15.816,40.537,15.338z" fill-opacity="0.02"/>
+<path d="M40.369,15.338c0-4.588-3.734-8.32-8.32-8.32c-0.441,0-0.871,0.045-1.294,0.113l9.509,9.467 C40.326,16.185,40.369,15.768,40.369,15.338z" fill-opacity="0.02"/>
+<path d="M40.201,15.336c0-4.494-3.658-8.148-8.152-8.148c-0.39,0-0.771,0.037-1.146,0.09l9.213,9.176 C40.166,16.086,40.201,15.715,40.201,15.336z" fill-opacity="0.02"/>
+<path d="M40.033,15.336c0-4.402-3.581-7.982-7.984-7.982c-0.339,0-0.671,0.029-0.999,0.068l8.919,8.885 C40.006,15.988,40.033,15.664,40.033,15.336z" fill-opacity="0.02"/>
+<path d="M39.865,15.336c0-4.311-3.508-7.813-7.816-7.813c-0.287,0-0.57,0.018-0.851,0.049l8.622,8.588 C39.85,15.889,39.865,15.613,39.865,15.336z" fill-opacity="0.02"/>
+<path d="M39.7,15.336c0-4.217-3.435-7.645-7.651-7.645c-0.234,0-0.466,0.014-0.695,0.033l8.313,8.279 C39.686,15.783,39.7,15.56,39.7,15.336z" fill-opacity="0.02"/>
+<path d="M39.529,15.336c0-4.123-3.355-7.479-7.48-7.479c-0.182,0-0.359,0.014-0.537,0.025l7.992,7.961 C39.516,15.676,39.529,15.508,39.529,15.336z" fill-opacity="0.02"/>
+<path d="M39.361,15.336c0-4.033-3.28-7.314-7.313-7.314c-0.127,0-0.252,0.016-0.379,0.02l7.674,7.645 C39.35,15.568,39.361,15.453,39.361,15.336z" fill-opacity="0.02"/>
+<path d="M39.512,49.111c-0.398,0-0.796-0.098-1.138-0.273l0,0 c-0.915-0.449-1.463-1.381-1.491-2.408l0,0v-0.152H7.378V6.521V4.539h21.707c2.22-0.004,5.599,1.443,5.599,1.443 c3.116,0.939,6.613,6.43,6.613,6.43c0.916,1.482,1.526,3.254,1.52,5.439l0,0v7.428l8.133,9.151c0.49,0.498,0.725,1.146,0.744,1.864 l0,0v0.072v0.004c-0.01,0.707-0.286,1.379-0.769,1.881l0,0l-9.577,10.078c-0.481,0.479-1.14,0.78-1.828,0.78l0,0 C39.518,49.111,39.516,49.111,39.512,49.111L39.512,49.111z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_992" gradientUnits="userSpaceOnUse" x1="25.33" y1="-10.16" x2="25.33" y2="31.9">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M42.053,45.068h-0.98H9.597H8.615v-0.982V6.312V5.33h0.982H29.32 c3.972,0,6.467,1.945,8.568,4.047c2.276,2.279,4.164,4.475,4.164,8.266v26.443V45.068L42.053,45.068z" fill="url(#_992)" fill-opacity="0.7"/>
+<linearGradient id="_993" gradientUnits="userSpaceOnUse" x1="38" y1="12.54" x2="39.03" y2="11.51">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.597V6.312c0,0,17.647,0,19.723,0 c3.412,0,5.609,1.496,7.875,3.76C39.456,12.334,41.07,14.287,41.07,17.644z" fill="url(#_993)"/>
+<linearGradient id="_994" gradientUnits="userSpaceOnUse" x1="30.43" y1="20.09" x2="38.93" y2="11.58">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.597V6.312c0,0,17.647,0,19.723,0 c4.199,0,5.701,2.801,6.093,5.539C38.279,12.244,41.07,13.547,41.07,17.644z" fill="url(#_994)"/>
+<linearGradient id="_995" gradientUnits="userSpaceOnUse" x1="25.33" y1="44.09" x2="25.33" y2="16.92">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#FFFFFF" offset="1"/>
+</linearGradient>
+<polygon fill="url(#_995)" fill-opacity="0.85" points="41.07,34.434 41.07,44.086 9.597,44.086 9.597,16.805 "/>
+<linearGradient id="_996" gradientUnits="userSpaceOnUse" x1="25.33" y1="39.63" x2="25.33" y2="10.34">
+<stop stop-color="#808080" offset="0"/>
+<stop stop-color="#7B7B7B" offset="0.21"/>
+<stop stop-color="#6D6D6D" offset="0.45"/>
+<stop stop-color="#555555" offset="0.71"/>
+<stop stop-color="#353535" offset="0.99"/>
+<stop stop-color="#333333" offset="1"/>
+</linearGradient>
+<path d="M35.387,11.879c-0.392-2.74-1.867-5.566-6.066-5.566 c-2.075,0-19.723,0-19.723,0v37.773H41.07c0,0,0-23.352,0-26.441C41.07,13.547,38.253,12.269,35.387,11.879z M40.232,43.248H10.438 V7.152H29.32c3.285,0,5.445,0.836,6.055,4.738c3.771,0.662,4.857,1.719,4.857,5.754V43.248z" fill="url(#_996)" fill-opacity="0.4"/>
+<linearGradient id="_997" gradientUnits="userSpaceOnUse" x1="24.77" y1="14.17" x2="24.77" y2="55.87">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_997)" height="2.242" width="20.083" x="14.734" y="26.258"/>
+<linearGradient id="_998" gradientUnits="userSpaceOnUse" x1="24.75" y1="8.01" x2="24.75" y2="37.13">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_998)" height="10.779" width="20.042" x="14.734" y="12.508"/>
+<rect fill="url(#_997)" height="2.244" width="20.125" x="14.691" y="36.627"/>
+<rect fill="url(#_997)" height="2.244" width="20.125" x="14.691" y="31.432"/>
+<path d="M20.491,18.31l1.992,3.961h-1.846l-1.693-3.709h-0.768v3.709h-1.611v-8.736h2.836 c1.083,0,2.189,0.338,2.519,1.484C22.301,16.348,21.854,17.814,20.491,18.31 M18.176,17.578h0.861c1.267,0,1.712-1.475,1.185-2.494 c-0.373-0.723-1.328-0.564-2.003-0.564C18.133,14.519,18.176,17.246,18.176,17.578" fill="#FFFFFF"/>
+<path d="M24.932,22.365c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.359-1.281c-0.237-1.418-2.516-1.603-3.119-2.898c-0.642-1.383,0.032-2.896,1.48-3.313 c0.812-0.232,1.721-0.178,2.544-0.035c0.52,0.09,0.317,0.613,0.317,1.082c-0.859-0.195-2.678-0.543-2.929,0.707 c-0.263,1.307,1.492,1.779,2.292,2.385c0.989,0.746,1.325,1.988,0.864,3.154C27.392,22.066,26.082,22.365,24.932,22.365" fill="#FFFFFF"/>
+<path d="M30.715,22.365c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.359-1.281c-0.237-1.418-2.517-1.603-3.119-2.898c-0.643-1.383,0.031-2.896,1.48-3.313 c0.812-0.232,1.721-0.178,2.543-0.035c0.521,0.09,0.317,0.613,0.317,1.082c-0.858-0.195-2.679-0.543-2.929,0.707 c-0.264,1.307,1.492,1.779,2.291,2.385c0.99,0.746,1.326,1.988,0.865,3.154C33.175,22.066,31.865,22.365,30.715,22.365" fill="#FFFFFF"/>
+<polygon fill="url(#_995)" fill-opacity="0.3" points="41.07,34.434 41.07,44.086 9.597,44.086 9.597,16.805 "/>
+<linearGradient id="_1002" gradientUnits="userSpaceOnUse" x1="37.91" y1="14.28" x2="37.91" y2="39.88">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M39.747,47.9c-0.24,0-0.476-0.057-0.696-0.17c-0.555-0.271-0.912-0.854-0.932-1.512v-5.035 c-2.611-0.318-10.32-1.263-11.07-1.357c-1.126-0.141-2.163-0.537-2.163-2.453v-2.945c0-1.896,1.031-2.301,2.152-2.457 c0.892-0.123,8.491-1.051,11.104-1.371l-0.023-5.152c-0.016-0.463,0.169-0.93,0.5-1.262c0.102-0.109,0.242-0.215,0.396-0.295 c0.215-0.117,0.476-0.18,0.737-0.18c0.437,0,0.86,0.17,1.169,0.465l9.535,10.732c0.273,0.254,0.467,0.707,0.473,1.188 c0.008,0.471-0.175,0.928-0.494,1.256l-9.558,10.057C40.553,47.73,40.159,47.9,39.747,47.9L39.747,47.9z" fill="url(#_1002)"/>
+<linearGradient id="_1003" gradientUnits="userSpaceOnUse" x1="42.3" y1="47.73" x2="33.72" y2="26.64">
+<stop stop-color="#EBF7AB" offset="0"/>
+<stop stop-color="#87B938" offset="0.49"/>
+<stop stop-color="#006300" offset="1"/>
+</linearGradient>
+<path d="M49.723,35.561l-9.481-10.679c-0.197-0.189-0.535-0.248-0.769-0.123 c-0.059,0.031-0.109,0.07-0.16,0.119c-0.14,0.139-0.219,0.346-0.211,0.564l0.025,6.025c0,0-10.896,1.33-11.956,1.475 c-0.906,0.127-1.307,0.306-1.307,1.484c0,1.176,0,1.768,0,2.945c0,1.176,0.397,1.363,1.307,1.479 c0.908,0.115,11.931,1.465,11.931,1.465v5.875c0.008,0.287,0.155,0.547,0.393,0.664c0.23,0.117,0.48,0.066,0.672-0.123l9.563-10.063 c0.002-0.002,0.002-0.004,0.006-0.006c0.141-0.143,0.22-0.344,0.216-0.555C49.945,35.898,49.863,35.695,49.723,35.561z" fill="url(#_1003)"/>
+<linearGradient id="_1004" gradientUnits="userSpaceOnUse" x1="28.29" y1="33.98" x2="52.23" y2="29.69">
+<stop stop-color="#61A10D" offset="0"/>
+<stop stop-color="#E3F0B5" offset="0.91"/>
+</linearGradient>
+<polygon fill="url(#_1004)" points="48.779,35.984 40.111,26.182 40.105,32.164 26.615,33.736 26.615,35.971 "/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_open_detail.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M45.258,19.581h0.021l-0.02-1.019c0-0.004,0-0.021,0-0.058 c0.008-4.251-2.308-7.015-4.615-9.271c-2.363-2.421-5.359-4.496-9.545-4.488c-0.053,0.003-0.094,0.003-0.123,0.005 c-2.045-0.002-19.671-0.002-19.691-0.002l-2.5,0.002v42.773h1h35.477v-2.59l-0.003-0.014C45.256,43.678,45.258,24.803,45.258,19.581 z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_11" gradientUnits="userSpaceOnUse" x1="26.84" y1="-9.16" x2="26.84" y2="32.9">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M43.555,46.068h-0.981H11.098h-0.982v-0.981V7.312V6.33h0.982h19.724 c3.971,0,6.466,1.945,8.568,4.047c2.275,2.279,4.164,4.475,4.164,8.266v26.444V46.068L43.555,46.068z" fill="url(#_11)" fill-opacity="0.7"/>
+<path d="M42.54,16.338c0-4.959-4.034-8.992-8.991-8.992c-0.645,0-1.271,0.07-1.879,0.203l10.68,10.633 C42.473,17.586,42.54,16.969,42.54,16.338z" fill-opacity="0.02"/>
+<path d="M42.37,16.338c0-4.865-3.958-8.824-8.821-8.824c-0.595,0-1.176,0.063-1.736,0.176l10.391,10.348 C42.311,17.486,42.37,16.918,42.37,16.338z" fill-opacity="0.02"/>
+<path d="M42.205,16.338c0-4.773-3.887-8.654-8.656-8.654c-0.543,0-1.072,0.057-1.589,0.152l10.097,10.055 C42.15,17.387,42.205,16.867,42.205,16.338z" fill-opacity="0.02"/>
+<path d="M42.037,16.338c0-4.682-3.811-8.488-8.488-8.488c-0.492,0-0.972,0.051-1.441,0.133l9.804,9.762 C41.986,17.287,42.037,16.816,42.037,16.338z" fill-opacity="0.02"/>
+<path d="M41.869,16.338c0-4.588-3.734-8.32-8.32-8.32c-0.441,0-0.871,0.045-1.294,0.113l9.509,9.467 C41.827,17.185,41.869,16.767,41.869,16.338z" fill-opacity="0.02"/>
+<path d="M41.702,16.336c0-4.494-3.658-8.148-8.152-8.148c-0.39,0-0.771,0.037-1.146,0.09l9.212,9.176 C41.666,17.086,41.702,16.715,41.702,16.336z" fill-opacity="0.02"/>
+<path d="M41.534,16.336c0-4.402-3.581-7.982-7.984-7.982c-0.339,0-0.671,0.029-0.999,0.068l8.92,8.885 C41.507,16.988,41.534,16.664,41.534,16.336z" fill-opacity="0.02"/>
+<path d="M41.366,16.336c0-4.311-3.507-7.813-7.816-7.813c-0.286,0-0.571,0.018-0.851,0.049l8.623,8.588 C41.35,16.889,41.366,16.613,41.366,16.336z" fill-opacity="0.02"/>
+<path d="M41.201,16.336c0-4.217-3.436-7.645-7.651-7.645c-0.233,0-0.466,0.014-0.696,0.033l8.314,8.279 C41.186,16.783,41.201,16.56,41.201,16.336z" fill-opacity="0.02"/>
+<path d="M41.031,16.336c0-4.123-3.356-7.479-7.481-7.479c-0.182,0-0.358,0.014-0.538,0.025l7.993,7.961 C41.016,16.676,41.031,16.508,41.031,16.336z" fill-opacity="0.02"/>
+<path d="M40.863,16.336c0-4.033-3.281-7.314-7.313-7.314c-0.127,0-0.252,0.016-0.379,0.02l7.675,7.645 C40.852,16.568,40.863,16.453,40.863,16.336z" fill-opacity="0.02"/>
+<linearGradient id="_12" gradientUnits="userSpaceOnUse" x1="39.56" y1="13.6" x2="40.6" y2="12.57">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M42.572,18.644c0,3.09,0,26.442,0,26.442H11.098V7.312c0,0,17.647,0,19.724,0 c3.41,0,5.607,1.496,7.873,3.76C40.956,13.334,42.572,15.287,42.572,18.644z" fill="url(#_12)"/>
+<linearGradient id="_13" gradientUnits="userSpaceOnUse" x1="31.94" y1="21.1" x2="40.45" y2="12.6">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M42.572,18.644c0,3.09,0,26.442,0,26.442H11.098V7.312c0,0,17.647,0,19.724,0 c4.199,0,5.701,2.801,6.092,5.539C39.781,13.244,42.572,14.547,42.572,18.644z" fill="url(#_13)"/>
+<linearGradient id="_14" gradientUnits="userSpaceOnUse" x1="26.84" y1="45.09" x2="26.84" y2="17.92">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#FFFFFF" offset="1"/>
+</linearGradient>
+<polygon fill="url(#_14)" fill-opacity="0.85" points="42.572,35.434 42.572,45.086 11.098,45.086 11.098,17.805 "/>
+<linearGradient id="_15" gradientUnits="userSpaceOnUse" x1="26.84" y1="40.63" x2="26.84" y2="11.34">
+<stop stop-color="#808080" offset="0"/>
+<stop stop-color="#7B7B7B" offset="0.21"/>
+<stop stop-color="#6D6D6D" offset="0.45"/>
+<stop stop-color="#555555" offset="0.71"/>
+<stop stop-color="#353535" offset="0.99"/>
+<stop stop-color="#333333" offset="1"/>
+</linearGradient>
+<path d="M36.887,12.879c-0.391-2.74-1.865-5.566-6.064-5.566c-2.076,0-19.724,0-19.724,0 v37.774h31.474c0,0,0-23.352,0-26.442C42.572,14.547,39.754,13.269,36.887,12.879z M41.732,44.248H11.939V8.152h18.883 c3.283,0,5.443,0.836,6.054,4.738c3.772,0.662,4.856,1.719,4.856,5.754V44.248z" fill="url(#_15)" fill-opacity="0.4"/>
+<linearGradient id="_16" gradientUnits="userSpaceOnUse" x1="26.32" y1="15.43" x2="26.32" y2="57.12">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_16)" height="2.241" width="20.083" x="16.277" y="27.514"/>
+<linearGradient id="_17" gradientUnits="userSpaceOnUse" x1="26.3" y1="9.26" x2="26.3" y2="38.39">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_17)" height="10.779" width="20.042" x="16.277" y="13.763"/>
+<rect fill="url(#_16)" height="2.244" width="20.126" x="16.233" y="37.881"/>
+<rect fill="url(#_16)" height="2.244" width="20.126" x="16.233" y="32.686"/>
+<path d="M22.033,19.565l1.992,3.961h-1.846l-1.693-3.709h-0.768v3.709h-1.611V14.79h2.836 c1.083,0,2.189,0.337,2.519,1.484C23.843,17.601,23.396,19.069,22.033,19.565 M19.719,18.833h0.861c1.267,0,1.712-1.475,1.185-2.495 c-0.373-0.722-1.328-0.563-2.003-0.563C19.675,15.774,19.719,18.5,19.719,18.833" fill="#FFFFFF"/>
+<path d="M26.474,23.62c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.359-1.281c-0.237-1.418-2.516-1.602-3.119-2.898c-0.642-1.383,0.032-2.896,1.48-3.313 c0.812-0.232,1.721-0.179,2.544-0.036c0.52,0.091,0.316,0.613,0.316,1.083c-0.859-0.195-2.678-0.543-2.929,0.706 c-0.263,1.307,1.491,1.779,2.292,2.385c0.988,0.747,1.324,1.989,0.863,3.155C28.934,23.321,27.624,23.62,26.474,23.62" fill="#FFFFFF"/>
+<path d="M32.258,23.62c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.359-1.281c-0.237-1.418-2.516-1.602-3.119-2.898c-0.643-1.383,0.031-2.896,1.48-3.313 c0.812-0.232,1.721-0.179,2.543-0.036c0.521,0.091,0.317,0.613,0.317,1.083c-0.858-0.195-2.679-0.543-2.929,0.706 c-0.264,1.307,1.492,1.779,2.291,2.385c0.99,0.747,1.326,1.989,0.865,3.155C34.717,23.321,33.407,23.62,32.258,23.62" fill="#FFFFFF"/>
+<polygon fill="url(#_14)" fill-opacity="0.3" points="42.572,35.434 42.572,45.086 11.098,45.086 11.098,17.805 "/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_open_full.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M26.687,46.193L7.614,46.191V6.437v-1.98L29.32,4.453 c2.221-0.002,5.598,1.445,5.598,1.445c4.295,2.115,6.619,6.436,6.619,6.436c0.912,1.48,1.521,3.252,1.516,5.434l0,0v13.619 c3.997,1.926,6.762,6.016,6.764,10.744l0,0c-0.002,6.578-5.346,11.922-11.924,11.924l0,0C32.741,54.051,28.354,50.773,26.687,46.193 L26.687,46.193z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_36" gradientUnits="userSpaceOnUse" x1="25.33" y1="-10.16" x2="25.33" y2="31.9">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M42.053,45.068h-0.98H9.597H8.615v-0.982V6.312V5.33h0.982H29.32 c3.972,0,6.467,1.945,8.568,4.047c2.276,2.279,4.164,4.475,4.164,8.266v26.443V45.068L42.053,45.068z" fill="url(#_36)" fill-opacity="0.7"/>
+<path d="M41.04,15.338c0-4.959-4.034-8.992-8.991-8.992c-0.645,0-1.271,0.07-1.879,0.203l10.68,10.633 C40.973,16.586,41.04,15.969,41.04,15.338z" fill-opacity="0.02"/>
+<path d="M40.87,15.338c0-4.865-3.958-8.824-8.821-8.824c-0.595,0-1.176,0.063-1.736,0.176l10.391,10.348 C40.811,16.486,40.87,15.918,40.87,15.338z" fill-opacity="0.02"/>
+<path d="M40.705,15.338c0-4.773-3.887-8.654-8.656-8.654c-0.543,0-1.072,0.057-1.589,0.152l10.097,10.055 C40.648,16.387,40.705,15.867,40.705,15.338z" fill-opacity="0.02"/>
+<path d="M40.537,15.338c0-4.682-3.811-8.488-8.488-8.488c-0.492,0-0.972,0.051-1.441,0.133l9.804,9.762 C40.486,16.287,40.537,15.816,40.537,15.338z" fill-opacity="0.02"/>
+<path d="M40.369,15.338c0-4.588-3.734-8.32-8.32-8.32c-0.441,0-0.871,0.045-1.294,0.113l9.509,9.467 C40.326,16.185,40.369,15.767,40.369,15.338z" fill-opacity="0.02"/>
+<path d="M40.201,15.336c0-4.494-3.658-8.148-8.152-8.148c-0.39,0-0.771,0.037-1.146,0.09l9.213,9.175 C40.166,16.086,40.201,15.715,40.201,15.336z" fill-opacity="0.02"/>
+<path d="M40.033,15.336c0-4.402-3.581-7.982-7.984-7.982c-0.339,0-0.671,0.029-0.999,0.068l8.919,8.885 C40.007,15.988,40.033,15.664,40.033,15.336z" fill-opacity="0.02"/>
+<path d="M39.865,15.336c0-4.311-3.508-7.813-7.816-7.813c-0.287,0-0.57,0.018-0.851,0.049l8.622,8.588 C39.85,15.889,39.865,15.613,39.865,15.336z" fill-opacity="0.02"/>
+<path d="M39.7,15.336c0-4.217-3.435-7.645-7.651-7.645c-0.234,0-0.466,0.014-0.695,0.033l8.313,8.279 C39.686,15.783,39.7,15.56,39.7,15.336z" fill-opacity="0.02"/>
+<path d="M39.529,15.336c0-4.123-3.355-7.479-7.48-7.479c-0.182,0-0.359,0.014-0.537,0.025l7.992,7.961 C39.516,15.676,39.529,15.508,39.529,15.336z" fill-opacity="0.02"/>
+<path d="M39.361,15.336c0-4.033-3.28-7.314-7.313-7.314c-0.127,0-0.252,0.016-0.379,0.02l7.674,7.645 C39.35,15.568,39.361,15.453,39.361,15.336z" fill-opacity="0.02"/>
+<linearGradient id="_37" gradientUnits="userSpaceOnUse" x1="37.99" y1="12.54" x2="39.03" y2="11.5">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.597V6.312c0,0,17.647,0,19.723,0 c3.412,0,5.609,1.496,7.875,3.76C39.456,12.334,41.07,14.287,41.07,17.644z" fill="url(#_37)"/>
+<linearGradient id="_38" gradientUnits="userSpaceOnUse" x1="30.44" y1="20.1" x2="38.95" y2="11.6">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.597V6.312c0,0,17.647,0,19.723,0 c4.199,0,5.701,2.801,6.093,5.539C38.279,12.244,41.07,13.547,41.07,17.644z" fill="url(#_38)"/>
+<linearGradient id="_39" gradientUnits="userSpaceOnUse" x1="25.33" y1="44.09" x2="25.33" y2="16.93">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#FFFFFF" offset="1"/>
+</linearGradient>
+<polygon fill="url(#_39)" fill-opacity="0.85" points="41.07,34.434 41.07,44.086 9.597,44.086 9.597,16.805 "/>
+<linearGradient id="_40" gradientUnits="userSpaceOnUse" x1="25.33" y1="39.62" x2="25.33" y2="10.33">
+<stop stop-color="#808080" offset="0"/>
+<stop stop-color="#7B7B7B" offset="0.21"/>
+<stop stop-color="#6D6D6D" offset="0.45"/>
+<stop stop-color="#555555" offset="0.71"/>
+<stop stop-color="#353535" offset="0.99"/>
+<stop stop-color="#333333" offset="1"/>
+</linearGradient>
+<path d="M35.387,11.879c-0.392-2.74-1.867-5.566-6.066-5.566c-2.075,0-19.723,0-19.723,0 v37.773H41.07c0,0,0-23.352,0-26.441C41.07,13.547,38.254,12.269,35.387,11.879z M40.232,43.248H10.438V7.152H29.32 c3.285,0,5.445,0.836,6.055,4.738c3.771,0.662,4.857,1.719,4.857,5.754V43.248z" fill="url(#_40)" fill-opacity="0.4"/>
+<linearGradient id="_41" gradientUnits="userSpaceOnUse" x1="25.03" y1="14.18" x2="25.03" y2="55.89">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_41)" height="2.243" width="20.082" x="14.985" y="26.267"/>
+<linearGradient id="_42" gradientUnits="userSpaceOnUse" x1="25" y1="8.02" x2="25" y2="37.15">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_42)" height="10.779" width="20.041" x="14.985" y="12.517"/>
+<rect fill="url(#_41)" height="2.244" width="20.125" x="14.941" y="36.637"/>
+<rect fill="url(#_41)" height="2.244" width="20.125" x="14.941" y="31.441"/>
+<path d="M20.741,18.32l1.992,3.961h-1.846l-1.693-3.709h-0.768v3.709h-1.611v-8.736h2.836 c1.083,0,2.189,0.336,2.519,1.484C22.551,16.355,22.104,17.824,20.741,18.32 M18.427,17.588h0.861c1.267,0,1.712-1.475,1.185-2.496 c-0.373-0.721-1.328-0.563-2.003-0.563C18.383,14.529,18.427,17.254,18.427,17.588" fill="#FFFFFF"/>
+<path d="M25.182,22.375c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.359-1.281c-0.237-1.418-2.516-1.602-3.119-2.898c-0.642-1.383,0.032-2.896,1.48-3.313 c0.812-0.232,1.721-0.18,2.543-0.037c0.521,0.092,0.317,0.613,0.317,1.084c-0.859-0.195-2.678-0.543-2.929,0.705 c-0.263,1.307,1.492,1.779,2.292,2.385c0.989,0.748,1.325,1.99,0.864,3.156C27.643,22.076,26.332,22.375,25.182,22.375" fill="#FFFFFF"/>
+<path d="M30.966,22.375c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.358-1.281c-0.236-1.418-2.516-1.602-3.118-2.898c-0.642-1.383,0.032-2.896,1.479-3.313 c0.813-0.232,1.721-0.18,2.545-0.037c0.52,0.092,0.316,0.613,0.316,1.084c-0.859-0.195-2.678-0.543-2.93,0.705 c-0.262,1.307,1.492,1.779,2.293,2.385c0.988,0.748,1.324,1.99,0.863,3.156C33.425,22.076,32.115,22.375,30.966,22.375" fill="#FFFFFF"/>
+<polygon fill="url(#_39)" fill-opacity="0.3" points="41.07,34.434 41.07,44.086 9.597,44.086 9.597,16.805 "/>
+<linearGradient id="_46" gradientUnits="userSpaceOnUse" x1="37.89" y1="22.56" x2="37.89" y2="45.69">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M37.893,52.93c-6.023,0-10.926-4.898-10.926-10.924 c0-6.023,4.902-10.924,10.926-10.924s10.924,4.9,10.924,10.924C48.816,48.031,43.917,52.93,37.893,52.93L37.893,52.93z" fill="url(#_46)" fill-opacity="0.7"/>
+<radialGradient id="_47" gradientUnits="userSpaceOnUse" cx="37.85" cy="37.9" r="14.46">
+<stop stop-color="#E3F5FF" offset="0"/>
+<stop stop-color="#13A9FF" offset="0.34"/>
+<stop stop-color="#00A2FF" offset="0.47"/>
+<stop stop-color="#004BB5" offset="0.9"/>
+</radialGradient>
+<circle cx="37.893" cy="42.006" fill="url(#_47)" r="10.357"/>
+<linearGradient id="_48" gradientUnits="userSpaceOnUse" x1="38.02" y1="31.96" x2="38.02" y2="56.99">
+<stop stop-color="#E3F5FF" offset="0.07"/>
+<stop stop-color="#74CCFF" offset="0.23"/>
+<stop stop-color="#00A2FF" offset="0.47"/>
+<stop stop-color="#004BB5" offset="0.9"/>
+</linearGradient>
+<path d="M45.602,38.242c0,3.055-3.394,4.82-7.576,4.82c-4.185,0-7.577-1.767-7.577-4.82 c0-3.053,3.393-6.238,7.577-6.238C42.208,32.004,45.602,35.189,45.602,38.242z" fill="url(#_48)"/>
+<radialGradient id="_49" gradientUnits="userSpaceOnUse" cx="37.9" cy="34.14" r="16.21">
+<stop stop-color="#FFFFFF" offset="0.15"/>
+<stop stop-color="#A7C1E5" offset="1"/>
+</radialGradient>
+<path d="M34.943,32.076c0.936-0.277,1.925-0.428,2.949-0.428c0.795,0,1.57,0.09,2.314,0.26 c-0.999,0.213-2.092-0.043-2.092-0.043c-0.098,0.16-0.551,0.078-0.672,0.078c-0.12,0-0.738,0.512-1.319,0.459 c-0.278,0.182-0.526,0.381-0.829,0.281c-0.3-0.101-0.875,0.397-1.096,0.42c-0.299,0.094-0.439,0.071-0.481-0.017 C34.402,32.668,34.682,32.328,34.943,32.076z M46.197,45.299l-0.338,0.537c0,0-0.508,0.158-0.526,0.318 c-0.01,0.068-0.392,0.916-0.392,0.916s-0.149,0.471,0.279,0.332C46.111,47.109,46.695,45.199,46.197,45.299z M30.068,46.354 c0.146,0,0.523,0.045,0.57-0.092c0.004-0.06,0.057-1.478,0.057-1.478l0.563-0.748v-0.599l-1.468-0.949l-0.638-0.69 c0,0.002-0.245-0.745-0.478-0.957c-0.192-0.178-0.18-0.563-0.384-0.85c-0.188-0.259-0.338-0.404-0.457-0.462 c-0.947,3.834,0.521,7.093,1.895,8.851c0.197-0.282,0.354-0.594,0.474-0.873C30.326,47.221,29.579,46.818,30.068,46.354z M31.198,34.482c0-0.188,0.306-0.279,0.306-0.279l0.04,0.146l0.278,0.119c0,0,0.332-0.359,0.4-0.453 c0.064-0.093,0.185-0.449,0.185-0.449l0.579-0.685c-1.301,0.701-2.435,1.675-3.327,2.843C30.016,35.439,31.198,34.668,31.198,34.482 z M36.677,32.844c0.13-0.025,0.429-0.166,0.429-0.166s-0.148-0.063-0.316-0.039c-0.169,0.025-0.411-0.1-0.542-0.037 C36.359,32.74,36.546,32.869,36.677,32.844z M47.896,39.318c-0.035,0-0.055-0.006-0.055-0.006s-0.06-0.037-0.148-0.097l-0.314-0.625 l-0.499-0.038l-1.014-0.854c0,0,0.269,0.688,0.715,1.012c0.289,0.021,0.485-0.02,0.5-0.004c0.317,0.838-0.36,1.865-1.149,2.057 c-0.1-0.43-0.186-0.598-0.313-0.963l-1.38-1.879l-0.08,0.199l0.638,0.971c0,0,0.451,0.756,0.636,1.193 c0.36,0.318,0.43,0.451,0.465,0.777c0.127,0.039,0.227,0.045,0.625-0.103c0.603-0.22,0.258,0.711,0.16,0.972 c-0.361,0.881-0.441,0.811-1.011,1.389c-0.88,0.619-0.407,1.703-0.446,2.58c0,0-0.888,0.596-1.216,0.727 c-0.306,0.434-0.007,0.846-0.159,0.855c-0.468,0.154-1.174,0.877-1.295,0.977c-0.421,0.541-0.678,0.619-1.172,0.576 c-1.376-0.389-0.963-1.818-1.021-1.979c-0.17-0.55-0.704-0.627-0.008-1.675c0.293-0.346,0.025-1.11-0.504-1.854 c-0.246-0.342,0.17-1.139,0.137-1.146c-0.889-0.166-1.072-0.565-1.113-0.668c0,0-1.814,0.363-2.439,0.312 c-0.479-0.037-1.516-1.279-1.717-1.74s0.377-2.012,0.398-2.131c0.019-0.121,1.367-1.057,1.367-1.057l0.916-0.894l-0.547-0.271 c0,0,0.113-1.121,0.616-0.838c0.054,0.03,0.339,0.09,0.66,0.061c0.343-0.213-0.374-0.496-0.296-0.783 c0.021-0.07,0.281-0.102,0.018-0.342c-0.425-0.385-0.119-0.664,0.147-0.73c0.291,0.107,0.476,0.369,0.476,0.73 s0.952-0.166,1.008-0.227c-0.422-0.306-0.635-0.789-0.476-0.81c0.161-0.021,0.865-0.205,1.044-0.388 c0.18-0.178,1.518,0.168,1.678,0.188c0.16,0.019,0.111,0.173,0.291,0.173c0.062,0,0.323-0.068,0.643-0.158 C45.21,34.135,47.137,36.486,47.896,39.318z M40.471,33.748c0.104,0.094,0.45,0.283,0.502-0.027 c0.051-0.314-0.275-0.791-0.275-0.791s-0.33,0.08-0.247,0.293C40.535,33.436,40.366,33.656,40.471,33.748z M44.061,36.76 c-0.223-0.186-1.435-0.105-1.777-0.9l-0.174,0.023c0,0,0.115,0.561-0.023,0.551c-0.33-0.024-0.67-0.611-0.67-0.611l-0.063-0.247 L40.5,35.091c0,0-0.004,0.144,0.66,0.728c0,0-0.225,0.383-0.521,0.404c0.074-0.099,0.131-0.398,0.131-0.398l-0.819-0.656 c0,0-0.718-0.092-0.897,0.061c-0.211,0.181-0.801,0.732-0.801,0.732l-0.818,0.291l0.738,0.119l0.76-0.227l1.188,0.08l0.192,0.561 c0,0,1.304,0.645,1.429,0.514c0.194-0.201,0.298-0.486,0.588-0.285c0.29,0.199,0.763,0.199,1.104,0.199 C43.574,37.252,44.073,37.584,44.061,36.76z M43.844,35.426c-0.146-0.078-0.355-0.193-0.244-0.34 c-0.095-0.154-0.306-0.047-0.453,0.117c-0.147,0.162-0.47-0.074-0.567,0.225c-0.099,0.299,0.394,0.439,0.462,0.303 c0,0,0.313-0.059,0.618,0.062C44.525,35.967,44.254,35.648,43.844,35.426z M45.63,36.363c-0.278-0.375-0.573-0.668-0.638-0.76 c-0.123-0.174,0.07-0.539-0.256-0.383c-0.19,0.342-0.008,0.475,0.326,0.784c0.231,0.22,0.133,0.382,0.285,0.519 C45.503,36.662,45.861,36.676,45.63,36.363z" fill="url(#_49)"/>
+<linearGradient id="_50" gradientUnits="userSpaceOnUse" x1="38.67" y1="35.27" x2="38.67" y2="48.49">
+<stop stop-color="#FFFFFF" offset="0.15"/>
+<stop stop-color="#A7C1E5" offset="1"/>
+</linearGradient>
+<path d="M35.295,32.684c0.303,0.1,0.549-0.101,0.829-0.281c0.425,0.039,0.871-0.228,1.125-0.369 c-1.116,0.082-2.155,0.346-3.074,0.744c-0.13,0.098-0.278,0.201-0.458,0.311c0.042,0.088,0.184,0.109,0.481,0.016 C34.421,33.082,34.995,32.584,35.295,32.684z M31.822,34.469c0,0,0.332-0.359,0.4-0.453c0.008-0.012,0.021-0.037,0.031-0.061 c-0.18,0.156-0.352,0.314-0.506,0.482L31.822,34.469z M45.273,35.926c-0.092-0.221-0.207-0.436-0.334-0.645 c0.011,0.092-0.01,0.232,0.054,0.322C45.027,35.652,45.137,35.771,45.273,35.926z M45.219,39.258 c0.245-0.543,0.381-1.121,0.381-1.725c0-0.318-0.045-0.631-0.117-0.936c-0.049-0.017-0.098-0.041-0.135-0.074 c-0.154-0.137-0.055-0.299-0.287-0.519c-0.332-0.312-0.516-0.442-0.326-0.784c0.07-0.031,0.113-0.037,0.144-0.031 c-0.59-0.918-1.512-1.701-2.661-2.26c-0.097,0.022-0.17,0.039-0.197,0.039c-0.181,0-0.131-0.154-0.293-0.173 c-0.16-0.021-1.498-0.364-1.677-0.188c-0.18,0.183-0.884,0.365-1.044,0.388c-0.158,0.021,0.053,0.504,0.477,0.81 c-0.057,0.061-1.008,0.588-1.008,0.227s-0.187-0.623-0.477-0.73c-0.268,0.066-0.572,0.346-0.146,0.73 c0.264,0.24,0.002,0.271-0.019,0.342c-0.077,0.287,0.638,0.57,0.296,0.783c-0.32,0.029-0.605-0.029-0.66-0.061 c-0.503-0.283-0.617,0.838-0.617,0.838l0.549,0.271l-0.916,0.894c0,0-1.35,0.936-1.368,1.057c-0.021,0.119-0.599,1.67-0.398,2.131 c0.201,0.461,1.237,1.703,1.718,1.74c0.625,0.053,2.438-0.312,2.438-0.312c0.041,0.103,0.226,0.502,1.114,0.668 c0.018,0.002-0.098,0.246-0.166,0.519c2.4-0.426,4.351-1.687,5.246-3.336c-0.146-0.265-0.271-0.474-0.271-0.474l-0.638-0.971 l0.081-0.199L45.219,39.258z M40.45,33.223c-0.083-0.213,0.247-0.293,0.247-0.293s0.326,0.477,0.275,0.791 c-0.052,0.311-0.399,0.121-0.502,0.027C40.366,33.656,40.535,33.436,40.45,33.223z M43.432,37.211c-0.341,0-0.813,0-1.104-0.199 c-0.29-0.201-0.395,0.084-0.588,0.285c-0.125,0.131-1.428-0.514-1.428-0.514l-0.193-0.561l-1.189-0.08l-0.759,0.227l-0.739-0.119 l0.819-0.291c0,0,0.59-0.553,0.801-0.732c0.181-0.151,0.897-0.061,0.897-0.061l0.818,0.656c0,0-0.056,0.301-0.131,0.398 c0.299-0.021,0.522-0.404,0.522-0.404c-0.664-0.584-0.66-0.728-0.66-0.728l0.854,0.483l0.062,0.248c0,0,0.34,0.586,0.67,0.611 c0.14,0.01,0.022-0.551,0.022-0.551l0.175-0.023c0.343,0.795,1.555,0.715,1.776,0.9C44.073,37.584,43.574,37.252,43.432,37.211z M43.66,35.791c-0.307-0.119-0.618-0.061-0.618-0.061c-0.069,0.137-0.562-0.004-0.462-0.303c0.098-0.3,0.42-0.064,0.566-0.226 c0.148-0.164,0.358-0.271,0.455-0.117c-0.113,0.146,0.098,0.263,0.244,0.34C44.254,35.648,44.525,35.967,43.66,35.791z M36.247,32.602c0.112,0.139,0.299,0.268,0.43,0.242c0.13-0.025,0.429-0.166,0.429-0.166s-0.148-0.064-0.316-0.039 C36.62,32.664,36.379,32.539,36.247,32.602z" fill="url(#_50)"/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_open_topic.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M11.741,46.102c-1.027-0.031-2.072-0.272-3.011-0.855l0,0 c-0.933-0.571-1.76-1.572-2.067-2.898l0,0l-0.011-0.043L3.919,26.928c-0.061-0.309-0.103-0.637-0.108-0.988l0,0 c-0.007-0.09-0.007-0.159-0.007-0.196l0,0c0.075-1.764,1.06-2.959,2.359-3.384l0,0v-0.002c0.339-0.113,0.665-0.18,0.973-0.22l0,0 v-3.225c0.035-2.968,2.303-5.126,4.841-5.121l0,0l0.948-0.003c0.037-0.144,0.078-0.29,0.124-0.438l0,0 c0.227-0.768,0.615-1.663,1.311-2.446l0,0c0.684-0.783,1.754-1.417,3.039-1.413l0,0c2.429,0,4.021-0.002,6.322-0.002l0,0 c0.029-0.001,0.046-0.001,0.056,0l0,0c0.012,0,0.015,0,0.015,0l0,0c1.272,0.006,2.325,0.65,2.999,1.484l0,0 c0.652,0.791,0.988,1.667,1.205,2.403l0,0c0.04,0.137,0.074,0.272,0.107,0.404l0,0l1.849,0.001l0.556-1.422 c0.737-1.884,2.403-3.013,4.152-3.011l0,0c0.001,0,0.002,0,0.004,0l0,0l0,0c0.602,0,1.209,0.134,1.786,0.407l0,0 c0,0,10.795,5.397,11.626,6.016c0.832,0.619,1.191,2.13,1.189,3.379l0,0h-0.002c0,0.652-0.113,1.325-0.365,1.969l0,0l-1.176,3.005 c0.275,0.529,0.447,1.147,0.452,1.836l0,0c0,0.047,0,0.099-0.002,0.156l0,0c0,0.187-0.012,0.362-0.028,0.565l0,0l-0.01,0.088 l-2.56,15.492l-0.011,0.051c-0.291,1.336-1.114,2.352-2.047,2.928l0,0c-0.938,0.588-1.985,0.83-3.05,0.863l0,0L11.741,46.102 L11.741,46.102z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_58" gradientUnits="userSpaceOnUse" x1="28.33" y1="-11.86" x2="28.2" y2="33.88">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M12.028,40.57c-1.87-0.002-3.474-1.564-3.489-3.633l0,0V19.019 c0.015-2.066,1.619-3.628,3.486-3.632l0,0l2.038-0.007c0.059-0.419,0.158-0.937,0.324-1.474l0,0 c0.348-1.193,1.257-2.808,3.055-2.818l0,0c2.444,0,4.042-0.001,6.365-0.001l0,0c0.842-0.01,1.569,0.429,2.023,0.996l0,0 c0.466,0.563,0.731,1.223,0.913,1.845l0,0c0.151,0.527,0.241,1.036,0.294,1.45l0,0l3.852,0.002l0.91-2.329 c0.518-1.32,1.686-2.109,2.909-2.107l0,0c0.417,0,0.845,0.094,1.246,0.285l0,0l10.091,4.807l0,0 c1.193,0.571,1.906,1.857,1.906,3.209l0,0c0,0.457-0.081,0.929-0.256,1.375l0,0l-3.485,8.903v7.412 c-0.013,2.066-1.614,3.631-3.489,3.635l0,0H12.028L12.028,40.57z" fill="url(#_58)" fill-opacity="0.7"/>
+<linearGradient id="_59" gradientUnits="userSpaceOnUse" x1="26.25" y1="37.25" x2="26.58" y2="12.3">
+<stop stop-color="#FFFFD6" offset="0"/>
+<stop stop-color="#FFB700" offset="1"/>
+</linearGradient>
+<path d="M43.305,36.938c0,1.449-1.16,2.633-2.584,2.633H12.029c-1.419,0-2.582-1.184-2.582-2.633V19.02 c0-1.447,1.163-2.633,2.582-2.633l2.85-0.011c0,0,0.12-4.288,2.563-4.288s4.041-0.001,6.364-0.001c2.324,0,2.404,4.288,2.404,4.288 l14.511,0.012c1.424,0,2.584,1.186,2.584,2.633V36.938z" fill="url(#_59)"/>
+<linearGradient id="_60" gradientUnits="userSpaceOnUse" x1="26.18" y1="13.5" x2="26.18" y2="24">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#FFBB0F" offset="1"/>
+</linearGradient>
+<path d="M42.076,25.882l-31.799,0.085l0.011-6.173c0-1.247,1.002-2.268,2.227-2.268l3.501-0.051 c0,0-0.107-4.267,1.999-4.267c2.107,0,3.349,0.002,5.352,0.002c2.003,0,1.956,4.264,1.956,4.264l14.538-0.033 c1.228,0,2.227,1.021,2.227,2.268L42.076,25.882z" fill="url(#_60)"/>
+<path d="M45.686,16.954c1.138,0.542,1.668,2.013,1.176,3.271l-4.354,11.13c-0.492,1.258-1.826,1.84-2.963,1.299 l-10.089-4.807c-1.14-0.543-1.669-2.014-1.177-3.271l4.354-11.131c0.492-1.257,1.825-1.841,2.965-1.298L45.686,16.954" fill="#E07029"/>
+<linearGradient id="_61" gradientUnits="userSpaceOnUse" x1="34.27" y1="30.05" x2="40.87" y2="14.75">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<path d="M45.463,17.524l-10.089-4.807c-0.856-0.408-1.854,0.029-2.226,0.975l-4.354,11.131 c-0.369,0.945,0.026,2.045,0.884,2.454l10.09,4.807c0.854,0.407,1.854-0.029,2.224-0.975l4.354-11.13 C46.715,19.033,46.318,17.932,45.463,17.524z" fill="url(#_61)"/>
+<linearGradient id="_62" gradientUnits="userSpaceOnUse" x1="40.56" y1="14.95" x2="37.13" y2="22.91">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#FF9F61" offset="1"/>
+</linearGradient>
+<path d="M46.346,19.978l-15.707,0.129l2.512-6.416c0.369-0.943,1.369-1.381,2.223-0.974l10.09,4.807 C46.316,17.931,46.715,19.035,46.346,19.978L46.346,19.978z" fill="url(#_62)"/>
+<path d="M34.096,25.057c-0.303,0.774-1.117,1.13-1.818,0.796c-0.702-0.334-1.024-1.232-0.721-2.006 c0.303-0.777,1.115-1.133,1.817-0.798C34.075,23.383,34.4,24.28,34.096,25.057z" fill="#FFFFFF"/>
+<path d="M32.941,20.313c1.188,0.566,2.107,1.612,2.582,2.944c0.477,1.336,0.455,2.801-0.063,4.125l1.833,0.874 c1.503-3.843-0.095-8.314-3.562-9.966L32.941,20.313z" fill="#FFFFFF"/>
+<path d="M34.346,16.726c4.241,2.021,6.194,7.496,4.354,12.204l1.833,0.873c2.278-5.825-0.142-12.597-5.396-15.1 L34.346,16.726z" fill="#FFFFFF"/>
+<path d="M11.82,44.697c-1.7-0.049-3.37-0.834-3.798-2.637l0,0L5.291,26.709 c-0.05-0.256-0.08-0.504-0.08-0.75l0,0c-0.064-1.008,0.696-1.908,1.392-2.072l0,0c0.687-0.231,1.381-0.215,2.097-0.221l0,0 c0.085,0,0.162,0.002,0.23,0.002l0,0h34.227c0.808,0.008,1.559-0.014,2.299,0.264l0,0c0.769,0.226,1.467,1.217,1.401,2.263l0,0 c0,0.134-0.008,0.266-0.019,0.396l0,0l-0.006,0.051l-2.546,15.407c-0.405,1.811-2.075,2.604-3.775,2.651l0,0L11.82,44.697 L11.82,44.697z" fill="url(#_58)" fill-opacity="0.7"/>
+<linearGradient id="_64" gradientUnits="userSpaceOnUse" x1="23.43" y1="10.52" x2="29.53" y2="46.89">
+<stop stop-color="#FFFFD6" offset="0"/>
+<stop stop-color="#FFB700" offset="1"/>
+</linearGradient>
+<path d="M43.396,41.869c-0.166,1.007-1.461,1.83-2.885,1.83H11.82c-1.419,0-2.729-0.823-2.908-1.83 L6.177,26.497c-0.367-1.875,1.061-1.83,2.754-1.83h34.227c1.697,0,2.945,0.047,2.779,1.83L43.396,41.869z" fill="url(#_64)"/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_previous.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M34.264,48.18l-1.972-2.074H9.793H7.81v-1v-0.982V6.349V4.367h0.999l0.984-0.002h19.725 c2.221-0.002,3.353,0.186,6.362,1.709c3.009,1.523,5.849,6.166,5.849,6.166l0,0c0.914,1.482,1.524,3.254,1.521,5.439l0,0v12.654 c2.629,0.323,5.181,0.64,5.696,0.709l0,0l-0.135,0.991l0.138-0.99c0.625,0.092,1.375,0.25,2.024,0.822l0,0 c0.658,0.578,1.004,1.51,0.991,2.625l0,0v2.945c0.013,1.123-0.334,2.059-0.997,2.639l0,0c-0.656,0.574-1.415,0.725-2.042,0.807l0,0 c-0.429,0.055-3.015,0.371-5.676,0.697l0,0v2.545v1.982h-1.001h-0.98l-2.541-0.002v0.176c-0.022,1.02-0.58,1.959-1.488,2.412l0,0 c-0.35,0.176-0.743,0.271-1.139,0.271l0,0c-0.002,0-0.004,0-0.007,0l0,0C35.409,48.963,34.758,48.678,34.264,48.18L34.264,48.18z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_78" gradientUnits="userSpaceOnUse" x1="25.34" y1="-10.17" x2="25.34" y2="31.89">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M42.055,45.068h-0.981H9.598H8.615v-0.982V6.312V5.33h0.982H29.32 c3.972,0,6.467,1.945,8.568,4.047c2.276,2.279,4.164,4.475,4.164,8.266v26.443v0.982H42.055z" fill="url(#_78)" fill-opacity="0.7"/>
+<path d="M41.04,15.338c0-4.959-4.034-8.992-8.991-8.992c-0.645,0-1.271,0.07-1.879,0.203l10.68,10.633 C40.973,16.586,41.04,15.969,41.04,15.338z" fill-opacity="0.02"/>
+<path d="M40.87,15.338c0-4.865-3.958-8.824-8.821-8.824c-0.595,0-1.176,0.063-1.736,0.176l10.391,10.348 C40.811,16.486,40.87,15.918,40.87,15.338z" fill-opacity="0.02"/>
+<path d="M40.705,15.338c0-4.773-3.887-8.654-8.656-8.654c-0.543,0-1.072,0.057-1.589,0.152l10.097,10.055 C40.648,16.386,40.705,15.867,40.705,15.338z" fill-opacity="0.02"/>
+<path d="M40.537,15.338c0-4.682-3.811-8.488-8.488-8.488c-0.492,0-0.972,0.051-1.441,0.133l9.804,9.762 C40.486,16.287,40.537,15.816,40.537,15.338z" fill-opacity="0.02"/>
+<path d="M40.369,15.338c0-4.588-3.734-8.32-8.32-8.32c-0.441,0-0.871,0.045-1.294,0.113l9.509,9.467 C40.326,16.185,40.369,15.767,40.369,15.338z" fill-opacity="0.02"/>
+<path d="M40.201,15.336c0-4.494-3.658-8.148-8.152-8.148c-0.39,0-0.771,0.037-1.146,0.09l9.213,9.176 C40.166,16.086,40.201,15.715,40.201,15.336z" fill-opacity="0.02"/>
+<path d="M40.033,15.336c0-4.402-3.581-7.982-7.984-7.982c-0.339,0-0.671,0.029-0.999,0.068l8.919,8.885 C40.007,15.988,40.033,15.664,40.033,15.336z" fill-opacity="0.02"/>
+<path d="M39.865,15.336c0-4.311-3.508-7.813-7.816-7.813c-0.287,0-0.57,0.018-0.851,0.049l8.622,8.588 C39.85,15.888,39.865,15.613,39.865,15.336z" fill-opacity="0.02"/>
+<path d="M39.7,15.336c0-4.217-3.435-7.645-7.651-7.645c-0.234,0-0.466,0.014-0.695,0.033l8.313,8.279 C39.686,15.783,39.7,15.56,39.7,15.336z" fill-opacity="0.02"/>
+<path d="M39.529,15.336c0-4.123-3.355-7.479-7.48-7.479c-0.182,0-0.359,0.014-0.537,0.025l7.992,7.961 C39.516,15.676,39.529,15.508,39.529,15.336z" fill-opacity="0.02"/>
+<path d="M39.361,15.336c0-4.033-3.28-7.314-7.313-7.314c-0.127,0-0.252,0.016-0.379,0.02l7.674,7.645 C39.352,15.568,39.361,15.453,39.361,15.336z" fill-opacity="0.02"/>
+<linearGradient id="_79" gradientUnits="userSpaceOnUse" x1="38.05" y1="12.6" x2="39.09" y2="11.57">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.598V6.312c0,0,17.647,0,19.724,0 c3.41,0,5.607,1.496,7.873,3.76C39.456,12.334,41.07,14.287,41.07,17.644z" fill="url(#_79)"/>
+<linearGradient id="_80" gradientUnits="userSpaceOnUse" x1="30.44" y1="20.09" x2="38.94" y2="11.59">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#EDEDED" offset="0.19"/>
+<stop stop-color="#DFDFDF" offset="0.42"/>
+<stop stop-color="#C8C8C8" offset="0.66"/>
+<stop stop-color="#A8A8A8" offset="0.9"/>
+<stop stop-color="#999999" offset="1"/>
+</linearGradient>
+<path d="M41.07,17.644c0,3.09,0,26.441,0,26.441H9.598V6.312c0,0,17.647,0,19.724,0 c4.199,0,5.701,2.801,6.092,5.539C38.279,12.244,41.07,13.547,41.07,17.644z" fill="url(#_80)"/>
+<linearGradient id="_81" gradientUnits="userSpaceOnUse" x1="25.33" y1="44.09" x2="25.33" y2="16.92">
+<stop stop-color="#F2F2F2" offset="0"/>
+<stop stop-color="#FFFFFF" offset="1"/>
+</linearGradient>
+<polygon fill="url(#_81)" fill-opacity="0.85" points="41.07,34.434 41.07,44.086 9.598,44.086 9.598,16.804 "/>
+<linearGradient id="_82" gradientUnits="userSpaceOnUse" x1="25.34" y1="39.62" x2="25.34" y2="10.33">
+<stop stop-color="#808080" offset="0"/>
+<stop stop-color="#7B7B7B" offset="0.21"/>
+<stop stop-color="#6D6D6D" offset="0.45"/>
+<stop stop-color="#555555" offset="0.71"/>
+<stop stop-color="#353535" offset="0.99"/>
+<stop stop-color="#333333" offset="1"/>
+</linearGradient>
+<path d="M35.387,11.879c-0.391-2.74-1.865-5.566-6.064-5.566c-2.076,0-19.724,0-19.724,0 v37.773h31.474c0,0,0-23.352,0-26.441C41.07,13.547,38.254,12.269,35.387,11.879z M40.232,43.248H10.438V7.152H29.32 c3.285,0,5.445,0.836,6.055,4.738c3.771,0.662,4.857,1.719,4.857,5.754V43.248z" fill="url(#_82)" fill-opacity="0.4"/>
+<linearGradient id="_83" gradientUnits="userSpaceOnUse" x1="25.13" y1="14.31" x2="25.13" y2="56.02">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_83)" height="2.243" width="20.082" x="15.084" y="26.398"/>
+<linearGradient id="_84" gradientUnits="userSpaceOnUse" x1="25.1" y1="8.14" x2="25.1" y2="37.27">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<rect fill="url(#_84)" height="10.779" width="20.041" x="15.084" y="12.648"/>
+<rect fill="url(#_83)" height="2.244" width="20.126" x="15.04" y="36.768"/>
+<rect fill="url(#_83)" height="2.244" width="20.126" x="15.04" y="31.572"/>
+<path d="M20.841,18.451l1.992,3.961h-1.846l-1.693-3.709h-0.768v3.709h-1.611v-8.736h2.836 c1.083,0,2.189,0.338,2.519,1.484C22.651,16.488,22.204,17.955,20.841,18.451 M18.526,17.719h0.861c1.267,0,1.712-1.475,1.185-2.494 c-0.373-0.723-1.328-0.564-2.003-0.564C18.483,14.66,18.526,17.386,18.526,17.719" fill="#FFFFFF"/>
+<path d="M25.282,22.506c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.126,0.307,3.688,0.688,3.359-1.281c-0.237-1.418-2.516-1.602-3.119-2.898c-0.642-1.383,0.032-2.896,1.48-3.313 c0.812-0.232,1.721-0.178,2.544-0.035c0.521,0.09,0.317,0.613,0.317,1.082c-0.859-0.195-2.678-0.543-2.929,0.707 c-0.263,1.307,1.492,1.779,2.292,2.385c0.989,0.746,1.325,1.988,0.864,3.154C27.742,22.207,26.432,22.506,25.282,22.506" fill="#FFFFFF"/>
+<path d="M31.064,22.506c-0.222,0-1.881-0.057-1.881-0.285c0-0.332,0-0.664,0-0.998 c1.127,0.307,3.688,0.688,3.359-1.281c-0.236-1.418-2.516-1.602-3.119-2.898c-0.642-1.383,0.032-2.896,1.48-3.313 c0.812-0.232,1.721-0.178,2.544-0.035c0.52,0.09,0.317,0.613,0.317,1.082c-0.859-0.195-2.679-0.543-2.93,0.707 c-0.264,1.307,1.492,1.779,2.292,2.385c0.989,0.746,1.325,1.988,0.864,3.154C33.525,22.207,32.215,22.506,31.064,22.506" fill="#FFFFFF"/>
+<polygon fill="url(#_81)" fill-opacity="0.3" points="41.07,34.434 41.07,44.086 9.598,44.086 9.598,16.804 "/>
+<linearGradient id="_88" gradientUnits="userSpaceOnUse" x1="37.75" y1="14.3" x2="37.75" y2="39.91">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M35.904,47.928c-0.41,0-0.807-0.168-1.111-0.473l-9.579-10.082 c-0.313-0.309-0.499-0.768-0.491-1.248c0.006-0.477,0.198-0.93,0.525-1.244l9.43-10.623c0.359-0.352,0.785-0.52,1.219-0.52 c0.269,0,0.525,0.063,0.75,0.186c0.136,0.07,0.271,0.168,0.389,0.287c0.335,0.334,0.517,0.807,0.497,1.295l-0.021,5.123 c2.618,0.318,10.213,1.246,11.104,1.369c1.12,0.158,2.153,0.561,2.153,2.455V37.4c0,1.914-1.041,2.311-2.164,2.453 c-0.754,0.096-8.453,1.037-11.071,1.354v5.011c-0.019,0.684-0.378,1.262-0.937,1.543C36.376,47.871,36.145,47.928,35.904,47.928 L35.904,47.928z" fill="url(#_88)"/>
+<linearGradient id="_89" gradientUnits="userSpaceOnUse" x1="33.35" y1="47.76" x2="41.93" y2="26.68">
+<stop stop-color="#EBF7AB" offset="0"/>
+<stop stop-color="#87B938" offset="0.49"/>
+<stop stop-color="#006300" offset="1"/>
+</linearGradient>
+<path d="M25.929,35.588l9.481-10.68c0.197-0.188,0.535-0.246,0.77-0.121 c0.059,0.031,0.109,0.068,0.158,0.119c0.141,0.139,0.221,0.346,0.212,0.563l-0.026,6.027c0,0,10.896,1.33,11.957,1.473 c0.906,0.129,1.307,0.305,1.307,1.484c0,1.178,0,1.77,0,2.945c0,1.178-0.396,1.365-1.307,1.479 c-0.908,0.115-11.931,1.466-11.931,1.466v5.875c-0.007,0.286-0.155,0.545-0.392,0.663c-0.231,0.117-0.481,0.065-0.674-0.123 l-9.562-10.063c-0.002-0.002-0.002-0.006-0.006-0.008c-0.141-0.141-0.22-0.342-0.216-0.553 C25.705,35.924,25.788,35.721,25.929,35.588z" fill="url(#_89)"/>
+<linearGradient id="_90" gradientUnits="userSpaceOnUse" x1="47.36" y1="34" x2="23.43" y2="29.71">
+<stop stop-color="#61A10D" offset="0"/>
+<stop stop-color="#E3F0B5" offset="0.91"/>
+</linearGradient>
+<polygon fill="url(#_90)" points="26.872,36.012 35.539,26.207 35.546,32.191 49.037,33.764 49.037,35.998 "/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_update.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M49.436,39.799c-0.016-2.808-1.479-5.285-3.494-6.467l-0.168,0.292V33.62l0.164-0.29 c-0.053-0.029-0.106-0.059-0.164-0.085V15.018c-0.002-3.803-3.09-6.887-6.894-6.889H14.951c-3.803,0.002-6.891,3.086-6.893,6.889 v23.927c0.004,3.801,3.09,6.888,6.893,6.89h15.951c0.344,0.323,0.717,0.604,1.113,0.835c0.25,0.139,0.526,0.242,0.854,0.244 c0.346,0.008,0.746-0.154,0.986-0.436c0.174-0.199,0.27-0.426,0.311-0.645h1.307l-0.365,0.768l-0.069,0.143l-0.005,0.046 c-0.045,0.133-0.067,0.274-0.067,0.423c-0.002,0.159,0.028,0.346,0.104,0.523c0.144,0.354,0.429,0.621,0.791,0.764l7.69,2.664 c0.175,0.053,0.308,0.07,0.435,0.07c0.402-0.002,0.771-0.172,1.035-0.465c0.088-0.109,0.164-0.224,0.224-0.354 c0.083-0.188,0.116-0.375,0.116-0.558c0-0.209-0.047-0.414-0.141-0.604l-0.779-1.843C47.975,45.4,49.458,42.482,49.436,39.799z" fill="#FFFFFF"/>
+<linearGradient id="_98" gradientUnits="userSpaceOnUse" x1="27" y1="-4.77" x2="27" y2="33.02">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M38.964,44.855H15.035c-3.248,0-5.892-2.646-5.892-5.894V15.037 c0-3.248,2.644-5.889,5.892-5.889h23.929c3.251,0,5.894,2.641,5.894,5.889v23.925C44.857,42.211,42.215,44.855,38.964,44.855 L38.964,44.855z" fill="url(#_98)" fill-opacity="0.7"/>
+<path d="M38.965,10.129c2.699,0,4.91,2.208,4.91,4.909v23.924c0,2.701-2.211,4.91-4.91,4.91h-23.93 c-2.701,0-4.909-2.209-4.909-4.91V15.038c0-2.701,2.208-4.909,4.909-4.909H38.965" fill="#E07029"/>
+<linearGradient id="_99" gradientUnits="userSpaceOnUse" x1="27" y1="43.26" x2="27" y2="10.74">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<path d="M38.965,11.354h-23.93c-2.03,0-3.685,1.654-3.685,3.685v23.924c0,2.031,1.654,3.684,3.685,3.684 h23.93c2.03,0,3.686-1.651,3.686-3.684V15.038C42.648,13.008,40.995,11.354,38.965,11.354z" fill="url(#_99)"/>
+<linearGradient id="_100" gradientUnits="userSpaceOnUse" x1="27" y1="11.35" x2="27" y2="23.6">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#FF9F61" offset="1"/>
+</linearGradient>
+<path d="M42.648,23.601H11.353v-8.565c0-2.026,1.656-3.683,3.682-3.683h23.932 c2.024,0,3.684,1.656,3.684,3.683v8.565H42.648z" fill="url(#_100)"/>
+<path d="M22.131,34.813c0,1.662-1.35,3.012-3.013,3.012c-1.666,0-3.012-1.35-3.012-3.012 c0-1.67,1.346-3.017,3.012-3.017C20.782,31.796,22.131,33.143,22.131,34.813z" fill="#FFFFFF"/>
+<path d="M16.112,27.214c2.819,0,5.476,1.103,7.47,3.104c1.996,2.009,3.099,4.681,3.099,7.525h4.348 c0-8.26-6.691-14.98-14.917-14.98L16.112,27.214L16.112,27.214z" fill="#FFFFFF"/>
+<path d="M16.115,19.502c10.061,0,18.246,8.234,18.246,18.352h4.35c0-12.52-10.136-22.701-22.596-22.701V19.502z" fill="#FFFFFF"/>
+<linearGradient id="_101" gradientUnits="userSpaceOnUse" x1="34.26" y1="40.94" x2="41.7" y2="17.85">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M33.77,29.916c-0.022,0.029-0.043,0.059-0.059,0.094c-0.044,0.1-0.044,0.215,0.006,0.313 l1.163,2.744c-7.671,3.773-5.642,10.824-2.282,12.756c0.635,0.363,0.861-0.237,0.51-0.61c-2.422-2.549-0.698-6.588,3.893-7.914 l1.121,2.457c0.056,0.138,0.184,0.229,0.331,0.238c0.146,0.008,0.282-0.07,0.353-0.201l3.229-6.801c0-0.005,0.001-0.005,0.001-0.009 c0.051-0.096,0.058-0.207,0.019-0.307c-0.039-0.102-0.123-0.182-0.223-0.219l-7.665-2.656C34.021,29.757,33.866,29.805,33.77,29.916 z" fill="url(#_101)"/>
+<linearGradient id="_102" gradientUnits="userSpaceOnUse" x1="36.12" y1="19.73" x2="35.35" y2="41.02">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#004A6E" offset="1"/>
+</linearGradient>
+<path d="M35.896,33.464l-1.088-2.595l6.066,2.027c-4.064,1.629-4.343,1.473-6.799,2.801 c-3.354,1.813-4.031,5.477-3.479,7.125C28.952,37.908,32.004,34.846,35.896,33.464z" fill="url(#_102)"/>
+<linearGradient id="_103" gradientUnits="userSpaceOnUse" x1="43.87" y1="39.11" x2="36.43" y2="62.19">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M44.355,50.124c0.022-0.028,0.043-0.06,0.059-0.095c0.044-0.1,0.044-0.215-0.006-0.313 l-1.163-2.744c7.671-3.772,5.642-10.822,2.282-12.754c-0.635-0.363-0.861,0.237-0.51,0.61c2.422,2.549,0.698,6.587-3.893,7.913 l-1.121-2.457c-0.056-0.137-0.184-0.23-0.331-0.238c-0.146-0.008-0.282,0.07-0.353,0.201l-3.229,6.801 c0,0.004-0.001,0.004-0.001,0.008c-0.051,0.096-0.058,0.207-0.019,0.307c0.039,0.103,0.123,0.183,0.223,0.22l7.665,2.655 C44.104,50.282,44.26,50.234,44.355,50.124z" fill="url(#_103)"/>
+<linearGradient id="_104" gradientUnits="userSpaceOnUse" x1="36.71" y1="37.1" x2="43.7" y2="43.49">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#004A6E" offset="1"/>
+</linearGradient>
+<path d="M46.607,36.434c-0.393-0.58,0.979,1.75-1.168,4.5c-0.848,1.086-2.403,1.924-4.692,2.896 l-1.087-2.597l-2.811,5.746c4.012-1.756,4.145-1.68,6.674-2.858C48.439,41.83,47.083,37.139,46.607,36.434z" fill="url(#_104)"/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_feeds_tb_update_all.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M43.327,53.161l-7.688-2.665c-0.365-0.141-0.65-0.41-0.791-0.764l0,0 c-0.078-0.178-0.109-0.364-0.105-0.524l0,0c0-0.147,0.023-0.289,0.066-0.421l0,0l0.006-0.045l2.795-5.887 c-0.326-0.144-0.584-0.403-0.705-0.707l0,0l-0.745-1.633c-0.556,0.223-1.043,0.492-1.466,0.791l0,0v2.455 c0,1.137-0.35,2.191-0.924,3.07l0,0c0.125,0.225,0.194,0.477,0.195,0.744l0,0c0,0.29-0.089,0.621-0.333,0.898l0,0 c-0.239,0.281-0.641,0.443-0.987,0.436l0,0c-0.315,0-0.584-0.098-0.828-0.23l0,0c-0.818,0.473-1.772,0.756-2.795,0.754l0,0H11.04 c-3.131,0-5.67-2.541-5.672-5.672l0,0V25.783c0.002-3.131,2.541-5.67,5.672-5.673l0,0h3.17V9.27 c0.003-2.531,2.053-4.586,4.586-4.588l0,0h12.701c2.532,0.002,4.585,2.057,4.587,4.588l0,0v3.038h7.575 c2.86,0.002,5.18,2.322,5.182,5.182l0,0v15.588c0,1.417-0.575,2.695-1.495,3.625l0,0c1.127,1.313,1.86,3.119,1.868,5.094l0,0 c0.021,2.682-1.461,5.6-4.998,7.609l0,0l0.78,1.844c0.095,0.193,0.143,0.396,0.143,0.604l0,0c0,0.184-0.037,0.369-0.119,0.559l0,0 c-0.057,0.132-0.133,0.244-0.225,0.354l0,0c-0.264,0.293-0.63,0.463-1.033,0.465l0,0C43.637,53.232,43.504,53.214,43.327,53.161 L43.327,53.161z M40.607,41.85l0.744,1.631c2.33-0.936,3.461-2.64,3.445-4.021l0,0c-0.003-0.439-0.102-0.861-0.32-1.271l0,0 c-0.26,0.047-0.533,0.074-0.817,0.074l0,0h-2.392L39.9,41.139C40.227,41.283,40.486,41.544,40.607,41.85L40.607,41.85z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_118" gradientUnits="userSpaceOnUse" x1="25.04" y1="-2.12" x2="25.04" y2="18.91">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M31.393,25.495H18.69c-1.977,0-3.584-1.609-3.584-3.584v-12.7 c0-1.979,1.607-3.588,3.584-3.588h12.703c1.979,0,3.586,1.609,3.586,3.588V21.91C34.979,23.885,33.371,25.495,31.393,25.495 L31.393,25.495z" fill="url(#_118)" fill-opacity="0.7"/>
+<path d="M31.393,6.606c1.433,0,2.604,1.172,2.604,2.605V21.91c0,1.434-1.173,2.604-2.604,2.604H18.692 c-1.434,0-2.604-1.17-2.604-2.604V9.211c0-1.434,1.171-2.605,2.604-2.605H31.393" fill="#E07029"/>
+<linearGradient id="_119" gradientUnits="userSpaceOnUse" x1="25.04" y1="24.19" x2="25.04" y2="6.93">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<path d="M31.393,7.256H18.692c-1.078,0-1.955,0.877-1.955,1.955V21.91c0,1.076,0.877,1.953,1.955,1.953 h12.701c1.076,0,1.955-0.877,1.955-1.953V9.211C33.348,8.133,32.471,7.256,31.393,7.256z" fill="url(#_119)"/>
+<linearGradient id="_120" gradientUnits="userSpaceOnUse" x1="25.04" y1="7.26" x2="25.04" y2="13.76">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#FF9F61" offset="1"/>
+</linearGradient>
+<path d="M33.348,13.756h-16.61V9.209c0-1.074,0.879-1.953,1.954-1.953h12.703 c1.073,0,1.953,0.879,1.953,1.953V13.756z" fill="url(#_120)"/>
+<path d="M22.459,19.707c0,0.881-0.717,1.6-1.599,1.6c-0.886,0-1.6-0.719-1.6-1.6c0-0.887,0.714-1.604,1.6-1.604 C21.742,18.104,22.459,18.821,22.459,19.707z" fill="#FFFFFF"/>
+<path d="M19.264,15.674c1.497,0,2.905,0.584,3.964,1.648c1.06,1.066,1.646,2.484,1.646,3.992h2.309 c0-4.381-3.553-7.949-7.918-7.949L19.264,15.674L19.264,15.674z" fill="#FFFFFF"/>
+<path d="M19.264,11.58c5.341,0,9.686,4.371,9.686,9.74h2.307c0-6.645-5.379-12.049-11.992-12.049L19.264,11.58 L19.264,11.58z" fill="#FFFFFF"/>
+<linearGradient id="_121" gradientUnits="userSpaceOnUse" x1="35.76" y1="3.91" x2="35.76" y2="29.26">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M43.555,37.203H27.962c-2.306,0-4.184-1.875-4.184-4.184v-15.59 c0-2.305,1.878-4.182,4.184-4.182h15.593c2.305,0,4.184,1.877,4.184,4.182v15.59C47.736,35.328,45.859,37.203,43.555,37.203 L43.555,37.203z" fill="url(#_121)" fill-opacity="0.7"/>
+<path d="M43.555,14.233c1.758,0,3.199,1.438,3.199,3.197v15.591c0,1.76-1.441,3.199-3.199,3.199H27.961 c-1.761,0-3.198-1.439-3.198-3.199V17.43c0-1.76,1.438-3.197,3.198-3.197H43.555" fill="#E07029"/>
+<linearGradient id="_122" gradientUnits="userSpaceOnUse" x1="35.76" y1="35.82" x2="35.76" y2="14.63">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<path d="M43.555,15.032H27.961c-1.323,0-2.4,1.078-2.4,2.398v15.591c0,1.32,1.077,2.398,2.4,2.398h15.594 c1.322,0,2.399-1.078,2.399-2.398V17.43C45.954,16.11,44.877,15.032,43.555,15.032z" fill="url(#_122)"/>
+<linearGradient id="_123" gradientUnits="userSpaceOnUse" x1="35.76" y1="15.03" x2="35.76" y2="23.01">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#FF9F61" offset="1"/>
+</linearGradient>
+<path d="M45.954,23.01H25.56v-5.58c0-1.318,1.08-2.398,2.4-2.398h15.595c1.318,0,2.398,1.08,2.398,2.398 L45.954,23.01L45.954,23.01z" fill="url(#_123)"/>
+<path d="M32.584,30.314c0,1.086-0.879,1.965-1.962,1.965c-1.086,0-1.963-0.879-1.963-1.965s0.877-1.965,1.963-1.965 C31.705,28.35,32.584,29.229,32.584,30.314z" fill="#FFFFFF"/>
+<path d="M28.663,25.366c1.838,0,3.567,0.715,4.866,2.023c1.302,1.306,2.021,3.048,2.021,4.904h2.832 c0-5.383-4.358-9.762-9.719-9.762V25.366z" fill="#FFFFFF"/>
+<path d="M28.665,20.338c6.556,0,11.892,5.367,11.892,11.959h2.832c0-8.158-6.604-14.791-14.724-14.791V20.338z" fill="#FFFFFF"/>
+<linearGradient id="_124" gradientUnits="userSpaceOnUse" x1="19.93" y1="10.4" x2="19.93" y2="39.32">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M28.916,48.375H10.935c-2.577,0-4.672-2.096-4.672-4.674V25.723 c0-2.576,2.095-4.672,4.672-4.672h17.98c2.578,0,4.672,2.096,4.672,4.672v17.979C33.588,46.279,31.494,48.375,28.916,48.375 L28.916,48.375z" fill="url(#_124)" fill-opacity="0.7"/>
+<path d="M28.916,22.034c2.029,0,3.689,1.658,3.689,3.689v17.98c0,2.029-1.66,3.688-3.689,3.688H10.935 c-2.032,0-3.69-1.658-3.69-3.688v-17.98c0-2.031,1.658-3.689,3.69-3.689H28.916" fill="#E07029"/>
+<linearGradient id="_125" gradientUnits="userSpaceOnUse" x1="19.92" y1="46.93" x2="19.92" y2="22.49">
+<stop stop-color="#FB9E3A" offset="0.06"/>
+<stop stop-color="#E6742B" offset="1"/>
+</linearGradient>
+<path d="M28.916,22.957H10.935c-1.526,0-2.771,1.24-2.771,2.766v17.98c0,1.525,1.244,2.768,2.771,2.768 h17.98c1.526,0,2.769-1.242,2.769-2.768v-17.98C31.684,24.198,30.441,22.957,28.916,22.957z" fill="url(#_125)"/>
+<linearGradient id="_126" gradientUnits="userSpaceOnUse" x1="19.93" y1="22.96" x2="19.93" y2="32.16">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#FF9F61" offset="1"/>
+</linearGradient>
+<path d="M31.684,32.161H8.168v-6.439c0-1.52,1.244-2.764,2.768-2.764h17.983 c1.521,0,2.767,1.244,2.767,2.764v6.439H31.684z" fill="url(#_126)"/>
+<path d="M16.267,40.582c0,1.252-1.016,2.266-2.265,2.266c-1.252,0-2.263-1.014-2.263-2.266 c0-1.254,1.011-2.266,2.263-2.266S16.267,39.328,16.267,40.582z" fill="#FFFFFF"/>
+<path d="M11.744,34.875c2.119,0,4.113,0.824,5.612,2.332c1.502,1.508,2.33,3.518,2.33,5.654h3.268 c0-6.205-5.03-11.254-11.21-11.254V34.875z" fill="#FFFFFF"/>
+<path d="M11.747,29.08c7.56,0,13.712,6.186,13.712,13.789h3.266c0-9.41-7.615-17.059-16.978-17.059V29.08z" fill="#FFFFFF"/>
+<linearGradient id="_127" gradientUnits="userSpaceOnUse" x1="33.84" y1="42.85" x2="41.28" y2="19.77">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M33.357,31.835c-0.022,0.028-0.043,0.06-0.059,0.095c-0.044,0.1-0.044,0.215,0.006,0.313 l1.163,2.744c-7.671,3.773-5.642,10.822-2.282,12.755c0.635,0.362,0.861-0.238,0.51-0.611c-2.422-2.549-0.698-6.587,3.893-7.913 l1.121,2.457c0.057,0.137,0.184,0.23,0.331,0.238c0.146,0.008,0.283-0.07,0.353-0.201l3.229-6.801c0-0.004,0.001-0.004,0.001-0.008 c0.051-0.096,0.058-0.207,0.019-0.307c-0.039-0.103-0.123-0.183-0.223-0.22l-7.665-2.655C33.609,31.678,33.454,31.725,33.357,31.835 z" fill="url(#_127)"/>
+<linearGradient id="_128" gradientUnits="userSpaceOnUse" x1="35.71" y1="21.64" x2="34.93" y2="42.94">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#004A6E" offset="1"/>
+</linearGradient>
+<path d="M35.484,35.385l-1.088-2.597l6.066,2.026c-4.064,1.629-4.343,1.474-6.798,2.801 c-3.354,1.813-4.032,5.477-3.479,7.125C28.54,39.827,31.592,36.766,35.484,35.385z" fill="url(#_128)"/>
+<linearGradient id="_129" gradientUnits="userSpaceOnUse" x1="43.46" y1="41.02" x2="36.01" y2="64.11">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M43.943,52.042c0.022-0.028,0.043-0.06,0.059-0.095c0.044-0.1,0.044-0.215-0.006-0.313 l-1.163-2.744c7.671-3.772,5.642-10.822,2.282-12.754c-0.635-0.363-0.861,0.237-0.51,0.61c2.422,2.549,0.699,6.587-3.893,7.913 l-1.121-2.457c-0.056-0.137-0.183-0.23-0.33-0.238c-0.146-0.008-0.283,0.07-0.354,0.201l-3.229,6.801c0,0.004,0,0.004,0,0.008 c-0.052,0.096-0.059,0.207-0.02,0.307c0.04,0.104,0.124,0.183,0.223,0.22l7.665,2.655C43.691,52.201,43.848,52.154,43.943,52.042z" fill="url(#_129)"/>
+<linearGradient id="_130" gradientUnits="userSpaceOnUse" x1="36.3" y1="39.02" x2="43.28" y2="45.41">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#004A6E" offset="1"/>
+</linearGradient>
+<path d="M46.195,38.354c-0.393-0.582,0.979,1.75-1.168,4.5c-0.846,1.084-2.404,1.922-4.692,2.896 l-1.087-2.597l-2.811,5.746c4.012-1.756,4.145-1.68,6.674-2.858C48.029,43.748,46.671,39.057,46.195,38.354z" fill="url(#_130)"/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_delete.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="54px" version="1.1" viewBox="-5.878 -5.63 54 54" width="54px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<path d="M10.021,43.435c-2.381-0.014-4.317-1.861-4.409-4.223l0,0l-2.63-27.042L0,12.163l0.863-9.495 l9.615,0.033V0l20.318,0.019v2v0.73l9.783-0.017l0.748,9.479l-2.166-0.002l-0.756-0.002l-2.848,26.949 c-0.074,2.377-2.018,4.275-4.414,4.281l0,0L10.021,43.435L10.021,43.435z" fill="#FFFFFF" fill-opacity="0.6" stroke-opacity="0.6"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="20.6094" x2="20.8594" y1="-13.853" y2="16.897">
+<stop offset="0" style="stop-color:#CCCCCC"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M10.15,41.437c-1.334-0.002-2.416-1.083-2.416-2.368l0,0L4.924,10.174L2.316,10.17 l0.5-5.496l9.788,0.034V2.003l16.321,0.016v2.735l9.935-0.016l0.432,5.472l-2.558-0.004l-3.045,28.817 c-0.002,1.332-1.084,2.413-2.418,2.415l0,0H10.15L10.15,41.437z" fill="url(#SVGID_1_)" fill-opacity="0.7" stroke-opacity="0.7"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="-5.4053" x2="29.3447" y1="-2.5654" y2="6.768">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.1545" style="stop-color:#FAFAFA"/>
+<stop offset="0.3388" style="stop-color:#EBEBEB"/>
+<stop offset="0.5383" style="stop-color:#D3D3D3"/>
+<stop offset="0.7486" style="stop-color:#B2B2B2"/>
+<stop offset="0.9653" style="stop-color:#878787"/>
+<stop offset="1" style="stop-color:#808080"/>
+</linearGradient>
+<rect fill="url(#SVGID_2_)" height="2.722" width="14.153" x="13.714" y="3.11"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="18.3877" x2="20.4971" y1="4.0596" y2="4.813">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.2074" style="stop-color:#FAFAFA"/>
+<stop offset="0.4547" style="stop-color:#EBEBEB"/>
+<stop offset="0.7224" style="stop-color:#D3D3D3"/>
+<stop offset="1" style="stop-color:#B2B2B2"/>
+</linearGradient>
+<rect fill="url(#SVGID_3_)" height="2.278" width="11.843" x="14.869" y="3.779"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="20.8135" x2="20.8135" y1="23.7764" y2="41.4014">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<path d="M32.782,38.473c0,1.012-0.828,1.84-1.842,1.84H10.487c-1.013,0-1.841-0.828-1.841-1.84L5.854,9.068 l29.917,0.042L32.782,38.473z" fill="url(#SVGID_4_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="16.3174" x2="2.2334" y1="21.5361" y2="12.3276">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<path d="M8.563,31.276c-0.375-2.333-2.215-21.56-2.215-21.56h14.544C20.892,9.716,10.479,16.359,8.563,31.276 z" fill="url(#SVGID_5_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_6_" x1="20.7251" x2="20.7251" y1="15.2358" y2="40.4018">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<path d="M23.037,35.833c0,1.105-0.896,2-2,2h-0.623c-1.104,0-2-0.895-2-2V14.14c0-1.104,0.896-2,2-2h0.623 c1.104,0,2,0.896,2,2V35.833z" fill="url(#SVGID_6_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_7_" x1="20.3198" x2="20.7358" y1="46.1465" y2="24.313">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.2074" style="stop-color:#FAFAFA"/>
+<stop offset="0.4547" style="stop-color:#EBEBEB"/>
+<stop offset="0.7224" style="stop-color:#D3D3D3"/>
+<stop offset="1" style="stop-color:#B2B2B2"/>
+</linearGradient>
+<path d="M22.369,34.823c0,1.012-0.637,1.829-1.422,1.829h-0.443c-0.785,0-1.424-0.817-1.424-1.829V14.979 c0-1.009,0.639-1.828,1.424-1.828h0.443c0.785,0,1.422,0.819,1.422,1.828V34.823z" fill="url(#SVGID_7_)"/>
+<linearGradient gradientTransform="matrix(0.9963 -0.0863 0.0863 0.9963 -1.9118 11.6291)" gradientUnits="userSpaceOnUse" id="SVGID_8_" x1="12.9937" x2="12.9937" y1="4.7817" y2="29.9468">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<path d="M15.527,35.593c0.096,1.102-0.72,2.07-1.819,2.165l-0.621,0.054c-1.1,0.096-2.069-0.718-2.165-1.819 L9.05,14.38c-0.095-1.101,0.721-2.07,1.82-2.165l0.621-0.054c1.1-0.095,2.069,0.72,2.165,1.819L15.527,35.593z" fill="url(#SVGID_8_)"/>
+<linearGradient gradientTransform="matrix(0.9963 -0.0863 0.0863 0.9963 -1.9118 11.6291)" gradientUnits="userSpaceOnUse" id="SVGID_9_" x1="12.5889" x2="13.0049" y1="35.6924" y2="13.8598">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.2074" style="stop-color:#FAFAFA"/>
+<stop offset="0.4547" style="stop-color:#EBEBEB"/>
+<stop offset="0.7224" style="stop-color:#D3D3D3"/>
+<stop offset="1" style="stop-color:#B2B2B2"/>
+</linearGradient>
+<path d="M14.776,34.645c0.087,1.008-0.478,1.877-1.26,1.945l-0.441,0.038 c-0.783,0.067-1.488-0.691-1.576-1.699L9.787,15.158c-0.087-1.005,0.478-1.875,1.26-1.943l0.442-0.038 c0.782-0.067,1.488,0.693,1.575,1.698L14.776,34.645z" fill="url(#SVGID_9_)"/>
+<linearGradient gradientTransform="matrix(-0.9963 -0.0863 -0.0863 0.9963 265.488 11.6291)" gradientUnits="userSpaceOnUse" id="SVGID_10_" x1="234.2842" x2="234.2842" y1="23.9492" y2="49.1138">
+<stop offset="0" style="stop-color:#666666"/>
+<stop offset="1" style="stop-color:#CCCCCC"/>
+</linearGradient>
+<path d="M25.924,35.593c-0.096,1.102,0.72,2.07,1.819,2.165l0.621,0.054c1.1,0.096,2.069-0.718,2.165-1.819 l1.872-21.612c0.095-1.101-0.721-2.07-1.82-2.165l-0.621-0.054c-1.1-0.095-2.069,0.72-2.165,1.819L25.924,35.593z" fill="url(#SVGID_10_)"/>
+<linearGradient gradientTransform="matrix(-0.9963 -0.0863 -0.0863 0.9963 265.488 11.6291)" gradientUnits="userSpaceOnUse" id="SVGID_11_" x1="233.8789" x2="234.2949" y1="54.8604" y2="33.0278">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.2074" style="stop-color:#FAFAFA"/>
+<stop offset="0.4547" style="stop-color:#EBEBEB"/>
+<stop offset="0.7224" style="stop-color:#D3D3D3"/>
+<stop offset="1" style="stop-color:#B2B2B2"/>
+</linearGradient>
+<path d="M26.675,34.645c-0.087,1.008,0.478,1.877,1.26,1.945l0.441,0.038 c0.783,0.067,1.488-0.691,1.576-1.699l1.712-19.771c0.087-1.005-0.478-1.875-1.26-1.943l-0.442-0.038 c-0.782-0.067-1.488,0.693-1.575,1.698L26.675,34.645z" fill="url(#SVGID_11_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_12_" x1="-6.1689" x2="28.5812" y1="0.2783" y2="9.6118">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.1545" style="stop-color:#FAFAFA"/>
+<stop offset="0.3388" style="stop-color:#EBEBEB"/>
+<stop offset="0.5383" style="stop-color:#D3D3D3"/>
+<stop offset="0.7486" style="stop-color:#B2B2B2"/>
+<stop offset="0.9653" style="stop-color:#878787"/>
+<stop offset="1" style="stop-color:#808080"/>
+</linearGradient>
+<polygon fill="url(#SVGID_12_)" points="3.833,5.714 37.833,5.776 38.143,9.215 3.445,9.181 "/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_13_" x1="12.4063" x2="21.8252" y1="7.2168" y2="7.292">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.2074" style="stop-color:#FAFAFA"/>
+<stop offset="0.4547" style="stop-color:#EBEBEB"/>
+<stop offset="0.7224" style="stop-color:#D3D3D3"/>
+<stop offset="1" style="stop-color:#B2B2B2"/>
+</linearGradient>
+<polygon fill="url(#SVGID_13_)" points="5.374,6.396 36.012,6.392 36.28,8.151 5.037,8.17 "/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_exit.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44px" version="1.1" viewBox="0 0 44 44" width="44px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<rect fill="none" height="44" width="44"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="20.0625" x2="20.0625" y1="4.48" y2="38.2715">
+<stop offset="0" style="stop-color:#B2B2B2"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M15.037,29.541c1.279,2.375,4.204,1.645,5.85,2.193c0.592,0.197,0.987,0.75,1.259,1.373l3.406-3.406 l-5.51-5.51l-1.136-1.135c-0.715,0.07-1.387,0.213-1.705,0.451C15.34,24.904,13.758,27.164,15.037,29.541z" fill="url(#SVGID_1_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="35.7461" x2="35.7461" y1="4.4795" y2="38.271">
+<stop offset="0" style="stop-color:#B2B2B2"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M35.319,30.984c0.954-1.422,1.674-3.01,2.137-4.703l-3.42,3.42L35.319,30.984z" fill="url(#SVGID_2_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="28.6484" x2="28.6484" y1="4.4878" y2="38.2701">
+<stop offset="0" style="stop-color:#B2B2B2"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M26.188,37.547c1.781-0.486,3.44-1.264,4.92-2.291l-1.313-1.313L26.188,37.547z" fill="url(#SVGID_3_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="21.856" x2="21.856" y1="4.478" y2="38.2716">
+<stop offset="0" style="stop-color:#B2B2B2"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M20.042,35.211l0.138-0.139c-6.419-0.871-11.387-6.373-11.387-13.027 c0-2.002,0.463-3.896,1.269-5.598c2.53-0.617,8.003-2.928,9.7-4.455c1.406-1.268,0.866-2.418,0.375-2.967 c0.596-0.082,1.199-0.141,1.818-0.141c0.939,0,1.855,0.104,2.742,0.291c0.156,1.131,1.673,2.754,1.673,3.547 c0,0.914-1.358-0.068-2.925,0.549c-1.856,0.73-3.502,2.01-4.598,4.021c-0.206,0.381-0.021,1.859-0.184,2.559 c-0.146,0.627-0.914,0.549-1.097,0.732c-0.366,0.365-0.731,1.096-0.548,1.461c0.115,0.232,0.365,0.732,1.279,0.732 c0.773,0,1.159-1.299,2.032-1.701l1.127-1.127l1.414-1.414l1.414,1.414l1.377,1.377c0.19-0.051,0.403-0.072,0.679-0.012 c0.799,0.178,1.279,1.014,1.279,1.463c0,0.158-0.035,0.295-0.084,0.424l2.258,2.256l2.271-2.271 c-0.06-0.547,0.073-0.887,0.796-0.795l2.441-2.441l1.414-1.416l1.126,1.125C36.685,11.92,30.011,5.959,21.955,5.959 c-8.869,0-16.086,7.217-16.086,16.086c0,8.209,6.185,14.99,14.136,15.957l-1.376-1.377L20.042,35.211z" fill="url(#SVGID_4_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="29.7939" x2="29.7939" y1="4.3135" y2="38.106">
+<stop offset="0" style="stop-color:#B2B2B2"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<polygon fill="url(#SVGID_5_)" points="38.132,22.777 36.717,21.363 29.794,28.287 22.871,21.363 21.456,22.777 28.38,29.701 21.456,36.625 22.87,38.039 29.794,31.115 36.718,38.039 38.132,36.625 31.208,29.701 "/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_find_kw_next.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M51.781,35.134c-0.035-0.92-0.285-1.72-0.963-2.459l0,0l-6.078-6.841 c-0.027-1.217-0.254-2.444-0.701-3.624c-0.412-4.481-3.848-8.048-8.314-9.324c-1.387-1.75-3.52-2.811-5.811-2.804 c-2.992,0.003-5.574,1.77-6.753,4.322c-1.18-2.552-3.761-4.318-6.755-4.322c-2.277-0.005-4.396,1.042-5.784,2.777 c-4.271,1.184-7.628,4.44-8.321,8.667c-0.681,1.476-1.016,3.053-1.016,4.616c-0.002,2.854,1.119,5.672,3.244,7.793 c2.07,2.078,4.873,3.236,7.806,3.232c2.929,0.004,5.731-1.154,7.802-3.234c0.842-0.838,1.535-1.805,2.062-2.856 c0.326-0.253,0.638-0.521,0.932-0.804c0.198,0.189,0.405,0.373,0.618,0.549c0.541,1.16,1.276,2.212,2.178,3.111 c0.156,0.156,0.314,0.305,0.475,0.447v1.797c-0.025,1.141,0.375,2.434,1.303,3.238c0.912,0.79,1.846,0.93,2.447,1.016 c0.473,0.062,4.149,0.51,6.791,0.832v2.008l0.002,0.021c0.035,1.315,0.763,2.59,2.041,3.22c0.445,0.23,1.015,0.372,1.572,0.37 c0.008,0,0.017,0,0.024,0c0.967,0,1.888-0.438,2.506-1.063l7.662-8.06c0.604-0.633,0.961-1.442,1.021-2.323l0.013-0.06 L51.781,35.134z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_15" gradientUnits="userSpaceOnUse" x1="23.26" y1="3.42" x2="23.26" y2="27.18">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M33.971,34.625c-2.33,0-4.521-0.904-6.166-2.555 c-0.835-0.836-1.484-1.821-1.926-2.934c-0.998-0.736-1.797-1.615-2.378-2.616c-0.055-0.063-0.11-0.127-0.161-0.19 c-0.633,1.16-1.574,2.19-2.753,3c-0.437,1.024-1.057,1.946-1.852,2.739c-1.646,1.648-3.837,2.555-6.163,2.555 c-2.33,0-4.521-0.904-6.166-2.555c-2.683-2.68-3.322-6.714-1.625-10.087c0.408-3.548,3.434-6.491,7.476-7.301 c0.921-1.558,2.566-2.508,4.386-2.508c2.759,0,5.014,2.187,5.118,4.917c0.485-0.286,1.04-0.44,1.604-0.44 c0.592,0,1.17,0.171,1.67,0.481c0.086-2.751,2.349-4.959,5.117-4.959c1.83,0,3.479,0.958,4.402,2.524 c4.203,0.876,7.278,4.091,7.437,7.809c1.372,3.245,0.639,7.072-1.858,9.564C38.488,33.721,36.297,34.625,33.971,34.625 L33.971,34.625z" fill="url(#_15)" fill-opacity="0.7"/>
+<circle cx="16.646" cy="17.292" fill="#0D0D0D" r="4.295"/>
+<circle cx="30.154" cy="17.292" r="4.295"/>
+<linearGradient id="_16" gradientUnits="userSpaceOnUse" x1="23.37" y1="16.21" x2="23.37" y2="21.11">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M32.236,15.286c-2.906,0-5.484,1.171-7.115,2.982c-0.435-0.481-1.057-0.792-1.756-0.792 c-0.699,0-1.32,0.309-1.755,0.792c-1.63-1.811-4.209-2.982-7.117-2.982c-4.937,0-8.94,3.368-8.94,7.522 c0,4.155,4.004,7.524,8.94,7.524c4.578,0,8.347-2.898,8.872-6.631c0.525,3.733,4.296,6.631,8.871,6.631 c4.938,0,8.94-3.369,8.94-7.524C41.178,18.654,37.175,15.286,32.236,15.286z" fill="url(#_16)"/>
+<linearGradient id="_17" gradientUnits="userSpaceOnUse" x1="22.84" y1="20.86" x2="23.1" y2="29.12">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M30.984,16.909c-2.647,0-4.994,0.918-6.479,2.338c-0.396-0.377-0.964-0.621-1.6-0.621 c-0.638,0-1.203,0.243-1.598,0.621c-1.484-1.42-3.834-2.338-6.481-2.338c-4.495,0-8.142,2.642-8.142,5.9 c0,3.26,3.646,5.901,8.142,5.901c4.169,0,7.601-2.272,8.079-5.201c0.479,2.928,3.912,5.201,8.078,5.201 c4.496,0,8.143-2.642,8.143-5.901C39.126,19.55,35.48,16.909,30.984,16.909z" fill="url(#_17)"/>
+<radialGradient id="_18" gradientUnits="userSpaceOnUse" cx="12.57" cy="25.91" r="6.02">
+<stop stop-color="#D4F1FF" offset="0.3"/>
+<stop stop-color="#D2EFFD" offset="0.56"/>
+<stop stop-color="#CDE9F6" offset="0.66"/>
+<stop stop-color="#C3DEEB" offset="0.72"/>
+<stop stop-color="#B5CEDA" offset="0.78"/>
+<stop stop-color="#A3B9C4" offset="0.82"/>
+<stop stop-color="#8C9FA8" offset="0.86"/>
+<stop stop-color="#718088" offset="0.9"/>
+<stop stop-color="#525D62" offset="0.94"/>
+<stop stop-color="#2E3437" offset="0.97"/>
+<stop stop-color="#080909" offset="0.99"/>
+<stop stop-color="#000000" offset="1"/>
+</radialGradient>
+<path d="M16.828,30.162c-2.352,2.352-6.164,2.352-8.515,0c-2.35-2.35-2.351-6.162,0-8.514 c2.351-2.35,6.163-2.348,8.513,0C19.176,23.999,19.178,27.813,16.828,30.162z" fill="url(#_18)"/>
+<ellipse cx="12.525" cy="22.869" fill="#FFFFFF" rx="3.404" ry="2.463"/>
+<linearGradient id="_19" gradientUnits="userSpaceOnUse" x1="12.57" y1="31.08" x2="12.57" y2="15.7">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M6.99,20.325c-3.082,3.083-3.082,8.079,0,11.163c3.082,3.082,8.08,3.082,11.16,0 c3.083-3.084,3.083-8.079,0-11.163C15.07,17.243,10.072,17.243,6.99,20.325z M16.703,30.038c-2.283,2.282-5.982,2.282-8.266,0.002 c-2.281-2.283-2.283-5.982,0-8.267c2.283-2.281,5.982-2.281,8.266,0C18.984,24.056,18.985,27.755,16.703,30.038z" fill="url(#_19)"/>
+<linearGradient id="_20" gradientUnits="userSpaceOnUse" x1="12.6" y1="15.35" x2="12.6" y2="22.56">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#004A6E" offset="1"/>
+</linearGradient>
+<path d="M17.783,21.902c0.377,0.406,0.705,0.848,0.982,1.314c0.215,0.465,0.427-0.039,0.272-0.433 c-0.275-0.709-0.724-1.355-1.255-1.929c-2.862-3.081-7.498-3.081-10.357,0C6.883,21.44,6.5,22.086,6.167,22.783 C5.994,23.22,6.186,23.6,6.414,23.265c0.314-0.46,0.621-0.941,1.012-1.363C10.285,18.82,14.921,18.82,17.783,21.902z" fill="url(#_20)"/>
+<linearGradient id="_21" gradientUnits="userSpaceOnUse" x1="12.55" y1="30.35" x2="12.55" y2="32.33">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M17.049,29.979c-2.506,2.451-6.424,2.404-8.973,0.002c-1.006-0.949-1.328-0.623,0,0.707 c2.479,2.478,6.494,2.478,8.973-0.004C18.375,29.357,17.993,29.057,17.049,29.979z" fill="url(#_21)"/>
+<radialGradient id="_22" gradientUnits="userSpaceOnUse" cx="33.97" cy="25.91" r="6.02">
+<stop stop-color="#D4F1FF" offset="0.3"/>
+<stop stop-color="#D2EFFD" offset="0.56"/>
+<stop stop-color="#CDE9F6" offset="0.66"/>
+<stop stop-color="#C3DEEB" offset="0.72"/>
+<stop stop-color="#B5CEDA" offset="0.78"/>
+<stop stop-color="#A3B9C4" offset="0.82"/>
+<stop stop-color="#8C9FA8" offset="0.86"/>
+<stop stop-color="#718088" offset="0.9"/>
+<stop stop-color="#525D62" offset="0.94"/>
+<stop stop-color="#2E3437" offset="0.97"/>
+<stop stop-color="#080909" offset="0.99"/>
+<stop stop-color="#000000" offset="1"/>
+</radialGradient>
+<path d="M38.227,30.162c-2.352,2.352-6.162,2.352-8.514,0c-2.35-2.35-2.352-6.162,0-8.514 c2.352-2.35,6.162-2.348,8.514,0C40.576,23.999,40.577,27.813,38.227,30.162z" fill="url(#_22)"/>
+<ellipse cx="33.924" cy="22.869" fill="#FFFFFF" rx="3.405" ry="2.463"/>
+<path d="M28.391,20.325c-3.083,3.083-3.083,8.079,0,11.163c3.08,3.082,8.078,3.082,11.16,0 c3.082-3.084,3.082-8.079,0-11.163C36.469,17.243,31.471,17.243,28.391,20.325z M38.104,30.038 c-2.283,2.282-5.982,2.282-8.266,0.002c-2.281-2.283-2.283-5.982,0-8.267c2.282-2.281,5.982-2.281,8.264,0 C40.385,24.056,40.387,27.755,38.104,30.038z" fill="url(#_19)"/>
+<path d="M39.184,21.902c0.377,0.406,0.705,0.848,0.982,1.314c0.215,0.465,0.426-0.039,0.271-0.433 c-0.275-0.709-0.725-1.355-1.254-1.929c-2.861-3.081-7.498-3.081-10.359,0c-0.541,0.585-0.924,1.232-1.258,1.929 c-0.174,0.437,0.02,0.816,0.246,0.482c0.315-0.46,0.621-0.941,1.012-1.363C31.686,18.82,36.322,18.82,39.184,21.902z" fill="url(#_20)"/>
+<path d="M38.447,29.979c-2.506,2.451-6.422,2.404-8.971,0.002c-1.006-0.949-1.328-0.623,0,0.707 c2.477,2.478,6.494,2.478,8.971-0.004C39.773,29.357,39.393,29.057,38.447,29.979z" fill="url(#_21)"/>
+<circle cx="22.926" cy="20.865" r="1.738"/>
+<linearGradient id="_26" gradientUnits="userSpaceOnUse" x1="39.33" y1="17.56" x2="39.33" y2="37.95">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M40.794,44.339c-0.19,0-0.378-0.045-0.554-0.135 c-0.441-0.218-0.727-0.681-0.742-1.205v-4.011c-2.08-0.256-8.221-1.006-8.816-1.08c-0.897-0.114-1.725-0.43-1.725-1.955v-2.348 c0-1.51,0.82-1.832,1.715-1.955c0.709-0.1,6.764-0.838,8.846-1.092l-0.02-4.104c-0.014-0.369,0.134-0.742,0.398-1.005 c0.078-0.087,0.191-0.171,0.313-0.234c0.172-0.093,0.379-0.143,0.588-0.143c0.349,0,0.687,0.135,0.933,0.37l7.594,8.548 c0.219,0.201,0.373,0.563,0.377,0.947c0.006,0.373-0.141,0.737-0.395,1l-7.611,8.01C41.438,44.204,41.122,44.339,40.794,44.339 L40.794,44.339z" fill="url(#_26)" fill-opacity="0.7"/>
+<linearGradient id="_27" gradientUnits="userSpaceOnUse" x1="42.83" y1="44.21" x2="35.99" y2="27.41">
+<stop stop-color="#EBF7AB" offset="0"/>
+<stop stop-color="#87B938" offset="0.49"/>
+<stop stop-color="#006300" offset="1"/>
+</linearGradient>
+<path d="M48.738,34.51l-7.551-8.505c-0.158-0.151-0.426-0.197-0.611-0.098 c-0.047,0.025-0.09,0.055-0.127,0.095c-0.113,0.11-0.176,0.275-0.17,0.449l0.021,4.8c0,0-8.678,1.06-9.522,1.174 c-0.723,0.103-1.041,0.242-1.041,1.183c0,0.938,0,1.408,0,2.347c0,0.937,0.316,1.086,1.041,1.179 c0.724,0.092,9.502,1.166,9.502,1.166v4.68c0.006,0.229,0.125,0.437,0.313,0.529c0.186,0.094,0.385,0.053,0.535-0.098l7.616-8.016 c0.002-0.002,0.002-0.004,0.005-0.006c0.111-0.113,0.174-0.273,0.171-0.441C48.917,34.777,48.852,34.616,48.738,34.51z" fill="url(#_27)"/>
+<linearGradient id="_28" gradientUnits="userSpaceOnUse" x1="31.67" y1="33.25" x2="50.73" y2="29.83">
+<stop stop-color="#61A10D" offset="0"/>
+<stop stop-color="#E3F0B5" offset="0.91"/>
+</linearGradient>
+<polygon fill="url(#_28)" points="47.988,34.848 41.084,27.038 41.08,31.805 30.336,33.057 30.336,34.837 "/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_find_kw_prev.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54" viewBox="0 0 54 54">
+<rect fill="none" height="54" width="54"/>
+<path d="M51.564,21.896c-0.435-4.54-3.896-8.137-8.392-9.44 c-1.422-1.766-3.588-2.831-5.914-2.826c-2.936,0.004-5.479,1.66-6.752,4.092c-1.272-2.432-3.822-4.088-6.758-4.092 c-2.311-0.005-4.465,1.049-5.887,2.799c-4.295,1.21-7.68,4.494-8.393,8.775c-0.438,0.962-0.713,1.951-0.861,2.932l-6.146,6.92 c-0.678,0.713-1.031,1.614-1.07,2.549c-0.004,0.031-0.006,0.084-0.006,0.158c0.008,1.03,0.383,1.995,1.135,2.754l7.633,8.035 c0.721,0.725,1.678,1.157,2.689,1.157c0.006,0,0.01,0,0.016,0c0.592,0.002,1.172-0.149,1.654-0.39 c1.342-0.668,2.125-2.034,2.15-3.411l0.002-0.056v-1.822c2.65-0.321,6.227-0.762,6.697-0.817c0.617-0.09,1.588-0.235,2.549-1.063 c0.979-0.842,1.4-2.207,1.373-3.387v-0.658c0.109-0.1,0.219-0.205,0.325-0.313c0.847-0.844,1.545-1.813,2.078-2.869 c0.273-0.213,0.535-0.436,0.785-0.668c0.154,0.141,0.312,0.279,0.473,0.412c0.548,1.162,1.291,2.219,2.195,3.125 c2.105,2.111,4.957,3.291,7.938,3.287c2.976,0.004,5.825-1.174,7.93-3.287c2.146-2.146,3.271-5.031,3.271-7.948 C52.281,24.516,52.047,23.177,51.564,21.896z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient id="_15" gradientUnits="userSpaceOnUse" x1="30.26" y1="3.42" x2="30.26" y2="27.18">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M40.971,34.625c-2.33,0-4.52-0.906-6.166-2.553 c-0.836-0.838-1.484-1.824-1.926-2.936c-0.998-0.734-1.797-1.615-2.377-2.616c-0.055-0.063-0.111-0.127-0.162-0.189 c-0.633,1.16-1.574,2.189-2.752,2.998c-0.438,1.025-1.057,1.947-1.852,2.742c-1.646,1.646-3.836,2.553-6.164,2.553 c-2.33,0-4.52-0.906-6.166-2.553c-2.682-2.68-3.322-6.716-1.623-10.089c0.408-3.548,3.434-6.491,7.475-7.302 c0.92-1.557,2.566-2.508,4.385-2.508c2.76,0,5.014,2.188,5.119,4.918c0.484-0.286,1.039-0.44,1.604-0.44 c0.592,0,1.17,0.171,1.67,0.481c0.086-2.751,2.351-4.959,5.116-4.959c1.83,0,3.48,0.958,4.402,2.524 c4.205,0.876,7.279,4.091,7.438,7.809c1.37,3.245,0.639,7.071-1.859,9.564C45.488,33.719,43.297,34.625,40.971,34.625L40.971,34.625 z" fill="url(#_15)" fill-opacity="0.7"/>
+<path d="M27.941,17.293c0,2.373-1.922,4.297-4.297,4.297c-2.369,0-4.293-1.924-4.293-4.297 c0-2.371,1.924-4.295,4.293-4.295C26.02,12.998,27.941,14.922,27.941,17.293z" fill="#0D0D0D"/>
+<path d="M41.449,17.293c0,2.373-1.922,4.297-4.297,4.297c-2.369,0-4.293-1.924-4.293-4.297c0-2.371,1.924-4.295,4.293-4.295 C39.527,12.998,41.449,14.922,41.449,17.293z"/>
+<linearGradient id="_16" gradientUnits="userSpaceOnUse" x1="30.37" y1="16.21" x2="30.37" y2="21.11">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M39.238,15.286c-2.908,0-5.486,1.171-7.117,2.982c-0.434-0.481-1.057-0.792-1.756-0.792 s-1.32,0.31-1.754,0.792c-1.631-1.812-4.209-2.982-7.117-2.982c-4.938,0-8.939,3.368-8.939,7.522c0,4.156,4.002,7.523,8.939,7.523 c4.578,0,8.346-2.898,8.871-6.631c0.525,3.732,4.297,6.631,8.873,6.631c4.938,0,8.938-3.367,8.938-7.523 C48.178,18.654,44.176,15.286,39.238,15.286z" fill="url(#_16)"/>
+<linearGradient id="_17" gradientUnits="userSpaceOnUse" x1="29.85" y1="20.86" x2="30.1" y2="29.12">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M37.984,16.908c-2.646,0-4.994,0.919-6.479,2.339c-0.396-0.378-0.963-0.62-1.601-0.62 c-0.637,0-1.202,0.242-1.598,0.62c-1.483-1.42-3.833-2.339-6.479-2.339c-4.496,0-8.141,2.643-8.141,5.9c0,3.26,3.645,5.9,8.141,5.9 c4.168,0,7.6-2.271,8.077-5.199c0.479,2.928,3.912,5.199,8.078,5.199c4.496,0,8.144-2.641,8.144-5.9 C46.127,19.551,42.48,16.908,37.984,16.908z" fill="url(#_17)"/>
+<radialGradient id="_18" gradientUnits="userSpaceOnUse" cx="19.57" cy="25.91" r="6.02">
+<stop stop-color="#D4F1FF" offset="0.3"/>
+<stop stop-color="#D2EFFD" offset="0.56"/>
+<stop stop-color="#CDE9F6" offset="0.66"/>
+<stop stop-color="#C3DEEB" offset="0.72"/>
+<stop stop-color="#B5CEDA" offset="0.78"/>
+<stop stop-color="#A3B9C4" offset="0.82"/>
+<stop stop-color="#8C9FA8" offset="0.86"/>
+<stop stop-color="#718088" offset="0.9"/>
+<stop stop-color="#525D62" offset="0.94"/>
+<stop stop-color="#2E3437" offset="0.97"/>
+<stop stop-color="#080909" offset="0.99"/>
+<stop stop-color="#000000" offset="1"/>
+</radialGradient>
+<path d="M23.828,30.162c-2.352,2.35-6.162,2.35-8.514,0c-2.35-2.35-2.352-6.162,0-8.514 c2.352-2.35,6.162-2.348,8.512,0C26.176,23.999,26.178,27.813,23.828,30.162z" fill="url(#_18)"/>
+<ellipse cx="19.525" cy="22.869" fill="#FFFFFF" rx="3.404" ry="2.463"/>
+<linearGradient id="_19" gradientUnits="userSpaceOnUse" x1="19.57" y1="31.08" x2="19.57" y2="15.7">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M13.99,20.324c-3.082,3.084-3.082,8.081,0,11.165c3.082,3.082,8.08,3.082,11.16,0 c3.084-3.084,3.084-8.08,0-11.165C22.07,17.243,17.072,17.243,13.99,20.324z M23.703,30.039c-2.283,2.281-5.982,2.281-8.266,0 c-2.279-2.281-2.281-5.981,0-8.266c2.283-2.281,5.982-2.281,8.266,0C25.984,24.056,25.986,27.756,23.703,30.039z" fill="url(#_19)"/>
+<linearGradient id="_20" gradientUnits="userSpaceOnUse" x1="19.6" y1="15.35" x2="19.6" y2="22.56">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#004A6E" offset="1"/>
+</linearGradient>
+<path d="M24.783,21.902c0.377,0.406,0.705,0.848,0.982,1.313c0.215,0.466,0.428-0.038,0.273-0.433 c-0.275-0.709-0.725-1.354-1.256-1.929c-2.861-3.081-7.498-3.081-10.357,0c-0.543,0.585-0.924,1.231-1.258,1.929 c-0.174,0.438,0.02,0.816,0.246,0.482c0.316-0.461,0.623-0.941,1.012-1.363C17.285,18.82,21.922,18.82,24.783,21.902z" fill="url(#_20)"/>
+<linearGradient id="_21" gradientUnits="userSpaceOnUse" x1="19.55" y1="30.35" x2="19.55" y2="32.33">
+<stop stop-color="#004A6E" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M24.049,29.979c-2.506,2.451-6.422,2.404-8.971,0.002c-1.006-0.946-1.328-0.623,0,0.707 c2.477,2.478,6.492,2.478,8.971-0.002C25.375,29.357,24.994,29.055,24.049,29.979z" fill="url(#_21)"/>
+<radialGradient id="_22" gradientUnits="userSpaceOnUse" cx="40.97" cy="25.91" r="6.02">
+<stop stop-color="#D4F1FF" offset="0.3"/>
+<stop stop-color="#D2EFFD" offset="0.56"/>
+<stop stop-color="#CDE9F6" offset="0.66"/>
+<stop stop-color="#C3DEEB" offset="0.72"/>
+<stop stop-color="#B5CEDA" offset="0.78"/>
+<stop stop-color="#A3B9C4" offset="0.82"/>
+<stop stop-color="#8C9FA8" offset="0.86"/>
+<stop stop-color="#718088" offset="0.9"/>
+<stop stop-color="#525D62" offset="0.94"/>
+<stop stop-color="#2E3437" offset="0.97"/>
+<stop stop-color="#080909" offset="0.99"/>
+<stop stop-color="#000000" offset="1"/>
+</radialGradient>
+<path d="M45.227,30.162c-2.352,2.35-6.162,2.35-8.514,0c-2.35-2.35-2.352-6.162,0-8.514 c2.352-2.35,6.162-2.348,8.514,0C47.576,23.999,47.578,27.813,45.227,30.162z" fill="url(#_22)"/>
+<ellipse cx="40.925" cy="22.869" fill="#FFFFFF" rx="3.405" ry="2.463"/>
+<path d="M35.391,20.324c-3.082,3.084-3.082,8.081,0,11.165c3.08,3.082,8.078,3.082,11.16,0 c3.082-3.084,3.082-8.08,0-11.165C43.469,17.243,38.471,17.243,35.391,20.324z M45.104,30.039c-2.283,2.281-5.981,2.281-8.266,0 c-2.281-2.281-2.283-5.981,0-8.266c2.283-2.281,5.982-2.281,8.264,0C47.385,24.056,47.387,27.756,45.104,30.039z" fill="url(#_19)"/>
+<path d="M46.184,21.902c0.377,0.406,0.705,0.848,0.982,1.313c0.215,0.466,0.426-0.038,0.273-0.433 c-0.277-0.709-0.726-1.354-1.256-1.929c-2.861-3.081-7.498-3.081-10.359,0c-0.541,0.585-0.924,1.231-1.258,1.929 c-0.174,0.438,0.02,0.816,0.246,0.482c0.315-0.461,0.621-0.941,1.012-1.363C38.686,18.82,43.322,18.82,46.184,21.902z" fill="url(#_20)"/>
+<path d="M45.447,29.979c-2.504,2.451-6.422,2.404-8.971,0.002c-1.006-0.946-1.328-0.623,0,0.707 c2.477,2.478,6.494,2.478,8.971-0.002C46.775,29.357,46.393,29.055,45.447,29.979z" fill="url(#_21)"/>
+<circle cx="29.926" cy="20.865" r="1.738"/>
+<linearGradient id="_26" gradientUnits="userSpaceOnUse" x1="14.23" y1="16.28" x2="14.23" y2="36.82">
+<stop stop-color="#CCCCCC" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<path d="M12.752,43.254c-0.33,0-0.646-0.135-0.893-0.381l-7.684-8.086 c-0.252-0.248-0.4-0.617-0.395-1.002c0.006-0.383,0.158-0.746,0.42-0.998l7.566-8.521c0.287-0.282,0.629-0.417,0.977-0.417 c0.217,0,0.422,0.05,0.604,0.148c0.107,0.058,0.217,0.136,0.309,0.231c0.271,0.268,0.416,0.646,0.4,1.038l-0.018,4.11 c2.102,0.254,8.193,0.998,8.908,1.099c0.9,0.127,1.73,0.448,1.73,1.969v2.365c0,1.535-0.838,1.854-1.738,1.967 c-0.604,0.078-6.781,0.832-8.881,1.088v4.02c-0.016,0.547-0.303,1.012-0.75,1.236C13.129,43.207,12.943,43.254,12.752,43.254 L12.752,43.254z" fill="url(#_26)" fill-opacity="0.7"/>
+<linearGradient id="_27" gradientUnits="userSpaceOnUse" x1="10.7" y1="43.12" x2="17.59" y2="26.2">
+<stop stop-color="#EBF7AB" offset="0"/>
+<stop stop-color="#87B938" offset="0.49"/>
+<stop stop-color="#006300" offset="1"/>
+</linearGradient>
+<path d="M4.75,33.354l7.607-8.565c0.158-0.152,0.428-0.197,0.615-0.098c0.045,0.025,0.088,0.056,0.129,0.096 c0.111,0.111,0.174,0.277,0.168,0.451l-0.021,4.835c0,0,8.742,1.066,9.592,1.183c0.727,0.104,1.047,0.244,1.047,1.188 c0,0.945,0,1.42,0,2.363c0,0.945-0.316,1.096-1.047,1.188c-0.727,0.092-9.57,1.176-9.57,1.176v4.713 c-0.004,0.229-0.123,0.438-0.313,0.531c-0.186,0.097-0.387,0.056-0.541-0.099l-7.67-8.071c0-0.002,0-0.005-0.004-0.007 c-0.113-0.112-0.178-0.272-0.174-0.442C4.57,33.625,4.637,33.461,4.75,33.354z" fill="url(#_27)"/>
+<linearGradient id="_28" gradientUnits="userSpaceOnUse" x1="21.94" y1="32.09" x2="2.74" y2="28.64">
+<stop stop-color="#61A10D" offset="0"/>
+<stop stop-color="#E3F0B5" offset="0.91"/>
+</linearGradient>
+<polygon fill="url(#_28)" points="5.506,33.695 12.459,25.829 12.465,30.629 23.287,31.891 23.287,33.684 "/>
+</svg>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_history_back.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44px" version="1.1" viewBox="-8.464 -8.101 44 44" width="44px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<path d="M0.002,13.867c0.025-0.824,0.276-1.559,0.853-2.17L10.43,0.92l0.042-0.04 C11.07,0.311,11.853,0.002,12.677,0c0.501,0.002,0.991,0.111,1.455,0.361c0.273,0.146,0.53,0.325,0.784,0.597 c0.562,0.565,0.894,1.369,0.897,2.227c-0.003,0,0.006,0.043-0.002,0.148l-0.019,3.729c3.245,0.397,9,1.101,9.806,1.211 c0.659,0.101,1.517,0.265,2.293,0.948c0.785,0.69,1.171,1.801,1.152,2.997v2.946c0.019,1.202-0.367,2.319-1.16,3.011 c-0.785,0.686-1.65,0.842-2.316,0.93c-0.656,0.084-6.494,0.799-9.756,1.197v3.709c-0.033,1.212-0.679,2.318-1.771,2.858 c-0.401,0.204-0.881,0.323-1.356,0.321c-0.007,0-0.015,0-0.021,0c-0.822,0-1.609-0.365-2.166-0.926l-9.589-10.09 c-0.544-0.564-0.862-1.309-0.901-2.104L0,14.042L0.002,13.867z" fill="#FFFFFF" fill-opacity="0.6" stroke-opacity="0.6"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="14.4932" x2="14.4932" y1="-8.0498" y2="17.5531">
+<stop offset="0" style="stop-color:#CCCCCC"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M12.652,25.569c-0.411,0-0.807-0.168-1.112-0.473L1.961,15.014c-0.313-0.309-0.499-0.768-0.491-1.248 c0.006-0.477,0.198-0.93,0.525-1.244l9.43-10.623c0.359-0.352,0.785-0.52,1.219-0.52c0.268,0,0.525,0.063,0.75,0.186 c0.135,0.07,0.27,0.168,0.388,0.287c0.335,0.334,0.517,0.807,0.497,1.295L14.257,8.27c2.619,0.318,10.213,1.246,11.105,1.369 c1.12,0.158,2.154,0.561,2.154,2.455v2.947c0,1.914-1.042,2.311-2.165,2.453c-0.753,0.096-8.453,1.037-11.071,1.355v5.01 c-0.019,0.684-0.378,1.262-0.936,1.543C13.124,25.512,12.892,25.569,12.652,25.569L12.652,25.569z" fill="url(#SVGID_1_)"/>
+<linearGradient gradientTransform="matrix(-1 0 0 1 -124.0674 0)" gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="-134.1665" x2="-142.7491" y1="25.4009" y2="4.3115">
+<stop offset="0" style="stop-color:#EBEFAD"/>
+<stop offset="0.4945" style="stop-color:#88BA40"/>
+<stop offset="1" style="stop-color:#196432"/>
+</linearGradient>
+<path d="M2.677,13.229l9.481-10.68c0.198-0.189,0.536-0.246,0.769-0.121c0.059,0.031,0.11,0.068,0.159,0.119 c0.14,0.139,0.22,0.346,0.212,0.563l-0.026,6.027c0,0,10.896,1.33,11.956,1.473c0.906,0.129,1.307,0.305,1.307,1.484 c0,1.178,0,1.77,0,2.945c0,1.178-0.396,1.365-1.307,1.48c-0.908,0.115-11.93,1.465-11.93,1.465v5.875 c-0.007,0.287-0.155,0.545-0.392,0.664c-0.231,0.117-0.481,0.066-0.673-0.123L2.672,14.338c-0.002-0.002-0.002-0.006-0.006-0.008 c-0.141-0.141-0.22-0.342-0.216-0.553S2.535,13.362,2.677,13.229z" fill="url(#SVGID_2_)"/>
+<linearGradient gradientTransform="matrix(-1 0 0 1 -124.0674 0)" gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="-148.1743" x2="-124.242" y1="11.6504" y2="7.3549">
+<stop offset="0" style="stop-color:#62A243"/>
+<stop offset="0.9121" style="stop-color:#E2ECB5"/>
+<stop offset="1" style="stop-color:#E2ECB5"/>
+</linearGradient>
+<polygon fill="url(#SVGID_3_)" points="3.619,13.653 12.286,3.848 12.294,9.833 25.784,11.405 25.784,13.639 "/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_history_fw.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44px" version="1.1" viewBox="-7.107 -8.102 44 44" width="44px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<path d="M29.042,13.867c-0.025-0.824-0.276-1.559-0.853-2.17L18.615,0.92l-0.042-0.04 C17.974,0.311,17.192,0.002,16.368,0c-0.501,0.002-0.991,0.111-1.455,0.361c-0.273,0.146-0.53,0.325-0.784,0.597 c-0.562,0.565-0.894,1.369-0.897,2.227c0.003,0-0.006,0.043,0.002,0.148l0.019,3.729c-3.245,0.397-9,1.101-9.806,1.211 C2.787,8.373,1.929,8.537,1.153,9.22C0.368,9.91-0.018,11.021,0,12.216v2.946c-0.019,1.203,0.367,2.319,1.16,3.012 c0.785,0.685,1.65,0.842,2.316,0.929c0.656,0.085,6.494,0.799,9.756,1.198v3.708c0.033,1.212,0.679,2.318,1.771,2.858 c0.401,0.205,0.881,0.324,1.356,0.322c0.007,0,0.015,0,0.021,0c0.822,0,1.609-0.366,2.166-0.927l9.589-10.09 c0.544-0.563,0.862-1.309,0.901-2.104l0.006-0.027L29.042,13.867z" fill="#FFFFFF" fill-opacity="0.6" stroke-opacity="0.6"/>
+<linearGradient gradientTransform="matrix(1 0 0 1 63.5 0)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="-49.1035" x2="-49.1035" y1="-7.9707" y2="17.6322">
+<stop offset="0" style="stop-color:#CCCCCC"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M16.236,25.648c-0.24,0-0.475-0.057-0.696-0.17c-0.555-0.271-0.912-0.854-0.932-1.512v-5.035 c-2.611-0.318-10.32-1.262-11.07-1.357c-1.126-0.141-2.163-0.537-2.163-2.453v-2.945c0-1.896,1.031-2.301,2.152-2.457 c0.891-0.123,8.491-1.051,11.105-1.371l-0.024-5.152c-0.015-0.463,0.169-0.93,0.5-1.262c0.101-0.109,0.243-0.215,0.396-0.295 c0.216-0.117,0.476-0.18,0.738-0.18c0.437,0,0.86,0.17,1.169,0.465l9.535,10.732c0.273,0.254,0.467,0.707,0.473,1.188 c0.008,0.471-0.175,0.928-0.494,1.256l-9.558,10.057C17.042,25.479,16.648,25.648,16.236,25.648L16.236,25.648z" fill="url(#SVGID_1_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="18.7876" x2="10.205" y1="25.4805" y2="4.391">
+<stop offset="0" style="stop-color:#EBEFAD"/>
+<stop offset="0.4945" style="stop-color:#88BA40"/>
+<stop offset="1" style="stop-color:#196432"/>
+</linearGradient>
+<path d="M26.21,13.309L16.729,2.631c-0.197-0.189-0.535-0.248-0.768-0.123c-0.059,0.031-0.11,0.07-0.16,0.119 c-0.14,0.139-0.219,0.346-0.212,0.564l0.026,6.025c0,0-10.896,1.33-11.956,1.475c-0.906,0.127-1.307,0.305-1.307,1.484 c0,1.176,0,1.768,0,2.945c0,1.176,0.397,1.363,1.307,1.479c0.908,0.115,11.93,1.465,11.93,1.465v5.875 c0.008,0.287,0.156,0.547,0.393,0.664c0.231,0.117,0.481,0.066,0.672-0.123l9.562-10.063c0.003-0.002,0.003-0.004,0.006-0.006 c0.141-0.143,0.22-0.344,0.216-0.555C26.434,13.646,26.352,13.443,26.21,13.309z" fill="url(#SVGID_2_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="4.7813" x2="28.7135" y1="11.7305" y2="7.4349">
+<stop offset="0" style="stop-color:#62A243"/>
+<stop offset="0.9121" style="stop-color:#E2ECB5"/>
+<stop offset="1" style="stop-color:#E2ECB5"/>
+</linearGradient>
+<polygon fill="url(#SVGID_3_)" points="25.269,13.732 16.601,3.93 16.594,9.912 3.104,11.484 3.104,13.719 "/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_view_images.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44" viewBox="-4.283 -2.41 44 44" width="44" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<path d="M31.336,39.167H14.67c-1.943,0-3.578-1.36-3.998-3.179H0V0.013 h18.672c5.51-0.348,12.51,6.508,12.174,11.83v6.524c1.073-0.246,4.612,0.619,4.59,4.1v12.602 C35.436,37.329,33.598,39.167,31.336,39.167L31.336,39.167z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_105" x1="15.44" x2="15.44" y1="-10.83" y2="23.45">
+<stop offset="0" stop-color="#CCCCCC"/>
+<stop offset="1" stop-color="#000000"/>
+</linearGradient>
+<path d="M29.045,34.188H1.801V1.813h16.871 C23.645,1.468,29.5,8.012,29.045,11.845V34.188L29.045,34.188z" fill="url(#_105)" fill-opacity="0.7"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_106" x1="25.74" x2="26.58" y1="7.69" y2="6.84">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="0.19" stop-color="#EDEDED"/>
+<stop offset="0.42" stop-color="#DFDFDF"/>
+<stop offset="0.66" stop-color="#C8C8C8"/>
+<stop offset="0.9" stop-color="#A8A8A8"/>
+<stop offset="1" stop-color="#999999"/>
+</linearGradient>
+<path d="M28.246,11.844c0,2.518,0,21.546,0,21.546H2.6V2.612c0,0,14.381,0,16.072,0 c2.779,0,4.57,1.219,6.416,3.063C26.93,7.518,28.246,9.109,28.246,11.844z" fill="url(#_106)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_107" x1="19.58" x2="26.51" y1="13.84" y2="6.91">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="0.19" stop-color="#EDEDED"/>
+<stop offset="0.42" stop-color="#DFDFDF"/>
+<stop offset="0.66" stop-color="#C8C8C8"/>
+<stop offset="0.9" stop-color="#A8A8A8"/>
+<stop offset="1" stop-color="#999999"/>
+</linearGradient>
+<path d="M28.246,11.844c0,2.518,0,21.546,0,21.546H2.6V2.612c0,0,14.381,0,16.072,0 c3.422,0,4.645,2.28,4.963,4.513C25.971,7.443,28.246,8.506,28.246,11.844z" fill="url(#_107)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_108" x1="15.42" x2="15.42" y1="33.39" y2="11.25">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="1" stop-color="#FFFFFF"/>
+</linearGradient>
+<polygon fill="url(#_108)" fill-opacity="0.85" points="28.246,25.524 28.246,33.391 2.6,33.391 2.6,11.161 "/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_109" x1="20.03" x2="20.03" y1="5.12" y2="39.12">
+<stop offset="0" stop-color="#666666"/>
+<stop offset="1" stop-color="#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#_109)" height="1.828" width="7.176" x="16.447" y="14.978"/>
+<rect fill="url(#_109)" height="1.828" width="7.176" x="16.447" y="10.745"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_111" x1="11.13" x2="11.13" y1="8.22" y2="24.59">
+<stop offset="0" stop-color="#666666"/>
+<stop offset="1" stop-color="#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#_111)" height="6.061" width="7.74" x="7.258" y="10.745"/>
+<rect fill="url(#_109)" height="1.827" width="16.4" x="7.223" y="23.428"/>
+<rect fill="url(#_109)" height="1.828" width="16.4" x="7.223" y="19.194"/>
+<polygon fill="url(#_108)" fill-opacity="0.3" points="28.246,25.524 28.246,33.391 2.6,33.391 2.6,11.161 "/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.627" width="7.176" x="16.447" y="14.978"/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.627" width="7.176" x="16.447" y="10.745"/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.627" width="16.4" x="7.223" y="23.428"/>
+<rect fill="#E6EAEF" fill-opacity="0.5" height="0.627" width="16.4" x="7.223" y="19.194"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_115" x1="15.42" x2="15.42" y1="29.76" y2="5.89">
+<stop offset="0" stop-color="#808080"/>
+<stop offset="0.21" stop-color="#7B7B7B"/>
+<stop offset="0.45" stop-color="#6D6D6D"/>
+<stop offset="0.71" stop-color="#555555"/>
+<stop offset="0.99" stop-color="#353535"/>
+<stop offset="1" stop-color="#333333"/>
+</linearGradient>
+<path d="M23.613,7.146c-0.318-2.232-1.521-4.534-4.941-4.534 c-1.691,0-16.072,0-16.072,0v30.779h25.646c0,0,0-19.029,0-21.546C28.246,8.506,25.949,7.466,23.613,7.146z M27.563,32.705H3.287 V3.296h15.385c2.676,0,4.436,0.682,4.932,3.861c3.074,0.538,3.959,1.4,3.959,4.688V32.705z" fill="url(#_115)" fill-opacity="0.4"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_116" x1="23" x2="23" y1="13.46" y2="31.67">
+<stop offset="0" stop-color="#CCCCCC"/>
+<stop offset="1" stop-color="#000000"/>
+</linearGradient>
+<path d="M31.334,37.368H14.67c-1.27,0-2.301-1.031-2.301-2.302V22.465 c0-1.27,1.031-2.3,2.301-2.3h16.664c1.27,0,2.301,1.03,2.301,2.3v12.602C33.635,36.337,32.604,37.368,31.334,37.368L31.334,37.368z" fill="url(#_116)" fill-opacity="0.7"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_117" x1="23" x2="23" y1="35.41" y2="26.29">
+<stop offset="0" stop-color="#00A2FF"/>
+<stop offset="1" stop-color="#004BB5"/>
+</linearGradient>
+<path d="M32.836,35.067c0,0.826-0.676,1.5-1.5,1.5H14.67c-0.826,0-1.5-0.674-1.5-1.5v-12.6 c0-0.826,0.674-1.501,1.5-1.501h16.666c0.824,0,1.5,0.675,1.5,1.501V35.067z" fill="url(#_117)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_118" x1="22.95" x2="22.95" y1="21.33" y2="26.28">
+<stop offset="0" stop-color="#FFFFFF"/>
+<stop offset="1" stop-color="#1475FF"/>
+</linearGradient>
+<rect fill="url(#_118)" height="4.378" width="17.617" x="14.137" y="22.091"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_119" x1="23.06" x2="23.06" y1="33.93" y2="36.18">
+<stop offset="0" stop-color="#FFFFFF"/>
+<stop offset="1" stop-color="#00A2FF"/>
+</linearGradient>
+<path d="M30.545,34.381h-1.646l-4.944,1.525v0.508h-1.647 v-0.508l-4.937-1.525h-1.803l3.348-1.021v0.004h8.336L30.545,34.381z M22.305,34.381h-3.299l3.299,1.018V34.381z M23.953,35.397 l3.297-1.017h-3.297V35.397z" fill="url(#_119)" fill-opacity="0.6"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_120" x1="22.95" x2="22.95" y1="30.93" y2="36.43">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="0.97" stop-color="#00A2FF"/>
+<stop offset="1" stop-color="#666666"/>
+</linearGradient>
+<path d="M30.44,29.733h-1.646l-4.946-4.945v-1.648h-1.646v1.648 l-4.938,4.945h-1.801l3.349,3.31v-0.013h8.336L30.44,29.733z M22.201,29.733h-3.299l3.299-3.299V29.733z M23.848,26.436l3.299,3.299 h-3.299V26.436z" fill="url(#_120)" fill-opacity="0.9"/>
+<rect fill="none" height="44" width="44" x="-4.283" y="-2.41"/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_browser_tb_view_pages.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44" viewBox="0 0 44 44" width="44" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<path d="M38.961,42.381H8.114v-2.398H5.716v-2.4H3.314V1.605h18.67 c3.903,0,6.363,1.932,8.255,3.822c0.373,0.375,4.438,4.442,4.802,4.804c1.983,1.986,3.92,4.239,3.92,8.007V42.381L38.961,42.381z" fill="#FFFFFF" fill-opacity="0.6"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_9" x1="21.14" x2="21.14" y1="-11.09" y2="28.26">
+<stop offset="0" stop-color="#CCCCCC"/>
+<stop offset="1" stop-color="#000000"/>
+</linearGradient>
+<path d="M37.162,40.582H9.916v-2.398h-2.4v-2.402H5.114V3.405 h16.87c3.24,0,5.27,1.585,6.982,3.297c0.549,0.546,4.433,4.433,4.802,4.799c1.858,1.859,3.394,3.648,3.394,6.738V40.582 L37.162,40.582z" fill="url(#_9)" fill-opacity="0.7"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_10" x1="29.84" x2="30.89" y1="10.55" y2="9.49">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="0.19" stop-color="#EDEDED"/>
+<stop offset="0.42" stop-color="#DFDFDF"/>
+<stop offset="0.66" stop-color="#C8C8C8"/>
+<stop offset="0.9" stop-color="#A8A8A8"/>
+<stop offset="1" stop-color="#999999"/>
+</linearGradient>
+<path d="M33.201,12.067c-0.369-0.368-4.332-4.331-4.802-4.801c-1.847-1.844-3.636-3.063-6.417-3.063 l14.376,14.034C36.358,15.502,35.043,13.912,33.201,12.067z" fill="url(#_10)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_11" x1="25.29" x2="32.22" y1="17.84" y2="10.91">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="0.19" stop-color="#EDEDED"/>
+<stop offset="0.42" stop-color="#DFDFDF"/>
+<stop offset="0.66" stop-color="#C8C8C8"/>
+<stop offset="0.9" stop-color="#A8A8A8"/>
+<stop offset="1" stop-color="#999999"/>
+</linearGradient>
+<path d="M31.75,13.52c-0.242-1.7-1.019-3.421-2.881-4.149c-0.441-1.036-1.189-1.928-2.4-2.401 c-0.654-1.535-1.977-2.765-4.485-2.765c-1.69,0-16.069,0-16.069,0v30.778h2.4v2.398h2.4v2.4h25.645c0,0,0-19.027,0-21.544 C36.358,14.899,34.086,13.836,31.75,13.52z" fill="url(#_11)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_12" x1="21.14" x2="21.14" y1="39.78" y2="12.83">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="1" stop-color="#FFFFFF"/>
+</linearGradient>
+<polygon fill="url(#_12)" fill-opacity="0.85" points="36.358,31.918 36.358,39.783 10.714,39.783 10.714,37.381 8.315,37.381 8.314,34.982 5.914,34.982 5.914,12.722 8.314,14.097 8.314,15.179 10.714,16.514 10.714,17.554 "/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_13" x1="19.24" x2="19.24" y1="14.61" y2="30.98">
+<stop offset="0" stop-color="#666666"/>
+<stop offset="1" stop-color="#CCCCCC"/>
+</linearGradient>
+<rect fill="url(#_13)" height="6.06" width="7.74" x="15.371" y="17.137"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_14" x1="23.54" x2="23.54" y1="17.18" y2="42.56">
+<stop offset="0" stop-color="#666666"/>
+<stop offset="1" stop-color="#CCCCCC"/>
+</linearGradient>
+<path d="M24.561,21.372h7.175v1.826h-7.175V21.372z M24.561,18.966h7.175v-1.829h-7.175V18.966z M15.337,31.65h16.397v-1.828H15.337V31.65z M15.337,25.588v1.828h16.397v-1.828H15.337z" fill="url(#_14)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_15" x1="23.54" x2="23.54" y1="39.78" y2="17.65">
+<stop offset="0" stop-color="#F2F2F2"/>
+<stop offset="1" stop-color="#FFFFFF"/>
+</linearGradient>
+<polygon fill="url(#_15)" fill-opacity="0.3" points="36.358,31.918 36.358,39.783 10.714,39.783 10.714,17.554 "/>
+<path d="M24.561,21.372h7.175v0.627h-7.175V21.372z M24.561,17.765 h7.175v-0.627h-7.175V17.765z M15.337,30.451h16.397v-0.629H15.337V30.451z M15.337,25.588v0.627h16.397v-0.627H15.337z" fill="#E6EAEF" fill-opacity="0.5"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="_16" x1="21.14" x2="21.14" y1="35.58" y2="8">
+<stop offset="0" stop-color="#808080"/>
+<stop offset="0.21" stop-color="#7B7B7B"/>
+<stop offset="0.45" stop-color="#6D6D6D"/>
+<stop offset="0.71" stop-color="#555555"/>
+<stop offset="0.99" stop-color="#353535"/>
+<stop offset="1" stop-color="#333333"/>
+</linearGradient>
+<path d="M31.729,13.54c-0.244-1.706-1.014-3.445-2.887-4.173 c-0.441-1.038-1.188-1.93-2.4-2.401c-0.652-1.53-1.961-2.761-4.458-2.761c-1.69,0-16.069,0-16.069,0v30.778h2.4v2.398h2.4v2.4 h25.645c0,0,0-19.027,0-21.544C36.358,14.899,34.064,13.858,31.729,13.54z M28.782,9.349c-0.415-0.155-1.817-0.344-1.997-0.344 c-1.693,0-16.071,0-16.071,0v27.693H9V7.289h15.385C25.793,7.289,27.818,7.394,28.782,9.349z M6.599,34.299V4.887h15.384 c2.066,0,3.585,0.412,4.398,2.06c-0.565-0.211-1.217-0.343-1.998-0.343c-1.69,0-16.069,0-16.069,0v27.694H6.599L6.599,34.299z M31.719,13.549c3.074,0.539,3.957,1.401,3.957,4.688V39.1H11.4V9.688h15.385C29.32,9.688,31.232,10.292,31.719,13.549z" fill="url(#_16)" fill-opacity="0.4"/>
+<rect fill="none" height="44" width="44"/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_indi_button_exit_fs.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44" version="1.1" viewBox="0 0 44 44" width="44" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<rect fill="none" height="44" width="44"/>
+<path d="M17.175,43.092H2.697C1.76,43.092,1,42.332,1,41.396V29.516c0-0.687,0.412-1.303,1.047-1.565 c0.209-0.087,0.431-0.13,0.649-0.13c0.44,0,0.873,0.172,1.199,0.498l2.769,2.771l12.808-20.261L12.45,3.803 c-0.486-0.485-0.631-1.215-0.368-1.848c0.263-0.635,0.879-1.047,1.567-1.047h27.656C42.24,0.908,43,1.668,43,2.604v25.429 c0,0.688-0.412,1.303-1.047,1.566c-0.209,0.088-0.43,0.129-0.648,0.129c-0.441,0-0.875-0.17-1.199-0.496l-7.941-7.942L15.166,36.991 l3.208,3.206c0.485,0.486,0.63,1.215,0.367,1.848C18.478,42.68,17.86,43.092,17.175,43.092L17.175,43.092z"/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_prop_file_rss_error.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="16px" version="1.1" viewBox="-2.316 -1.685 16 16" width="16px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<polygon fill="#CB5F28" points="8.746,2.49 8.754,13.261 8.754,13.267 8.758,13.265 8.771,13.253 9.854,12.529 9.971,1.596 "/>
+<polygon fill="#E8893F" points="8.754,2.454 10.01,1.558 1.318,0 0,0.712 0,0.712 "/>
+<polygon fill="#F39C53" points="8.758,13.238 8.756,2.442 0.072,0.611 0.299,11.038 "/>
+<polygon fill="#E8893F" points="1.002,10.238 0.814,1.691 8.139,3.241 8.178,12.104 "/>
+<path d="M2.922,9.3c0,0.569-0.402,0.941-0.896,0.828c-0.494-0.111-0.893-0.664-0.893-1.233 s0.402-0.939,0.896-0.828C2.523,8.179,2.924,8.73,2.922,9.3z" fill="#FFFFFF"/>
+<path d="M1.137,6.296c0.838,0.189,1.625,0.746,2.217,1.565c0.594,0.821,0.918,1.81,0.918,2.782l1.291,0.293 C5.566,8.11,3.58,5.36,1.139,4.807L1.137,6.296z" fill="#FFFFFF"/>
+<path d="M1.141,3.657C4.129,4.333,6.557,7.7,6.553,11.162l1.293,0.293C7.85,7.172,4.844,3.006,1.143,2.168 L1.141,3.657z" fill="#FFFFFF"/>
+<polygon fill="#4A6EA3" points="12.258,7.864 11.197,6.804 8.883,9.117 6.57,6.804 5.51,7.864 7.822,10.177 5.51,12.491 6.57,13.552 8.883,11.238 11.197,13.552 12.258,12.491 9.943,10.177 "/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/data/qgn_prop_folder_rss_error.svg Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="16px" version="1.1" viewBox="-0.202 -1.5 16 16" width="16px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<polygon fill="#CEE1EF" points="14.298,3.496 8.599,2.373 6.382,3.42 12.056,4.513 "/>
+<polygon fill="#4A6EA3" points="12.108,12.897 14.14,11.682 14.298,3.496 12.065,4.513 "/>
+<polygon fill="#CEE1EF" points="7.712,0.543 3.759,0 1.882,0.729 5.749,1.405 "/>
+<polygon fill="#4A6EA3" points="5.659,1.414 6.597,3.34 8.604,2.377 7.712,0.543 "/>
+<polygon fill="#A2C2DD" points="12.101,12.856 2.394,10.065 1.882,0.729 5.706,1.375 6.659,3.33 12.12,4.496 "/>
+<path d="M5.59,9.227c0,0.473-0.335,0.781-0.744,0.688C4.435,9.823,4.103,9.364,4.103,8.889 c0-0.472,0.335-0.779,0.746-0.686C5.257,8.295,5.59,8.754,5.59,9.227z" fill="#FFFFFF"/>
+<path d="M4.105,6.731C4.803,6.889,5.456,7.35,5.949,8.032c0.493,0.683,0.763,1.504,0.759,2.313l1.077,0.242 c0-2.348-1.647-4.632-3.677-5.092L4.105,6.731z" fill="#FFFFFF"/>
+<path d="M4.111,4.539c2.48,0.562,4.499,3.359,4.495,6.235l1.073,0.244c0.002-3.561-2.494-7.02-5.568-7.715V4.539z" fill="#FFFFFF"/>
+<polygon fill="#4A6EA3" points="5.748,7.03 4.844,6.126 2.873,8.097 0.902,6.126 0,7.03 1.969,9 0,10.971 0.902,11.875 2.873,9.904 4.844,11.875 5.748,10.971 3.775,9 "/>
+</svg>
Binary file browserui/browser/help/data/xhtml.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/help/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+*
+* Description:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+#if !defined(__PLATFORM_VERSION_32__) && !defined(__PLATFORM_VERSION_5250__) && !defined(__PLATFORM_VERSION_S60_50__)
+
+PRJ_EXPORTS
+:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite
+
+../inc/browser.hlp.hrh APP_LAYER_PLATFORM_EXPORT_PATH(csxhelp/browser.hlp.hrh)
+../rom/browseruihelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(browseruihelps_variant.iby)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/help/inc/browser.hlp.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+//
+// browser.hlp.hrh generated by CSXHelp Utilities.
+//
+
+#ifndef __BROWSER_HLP_HRH__
+#define __BROWSER_HLP_HRH__
+
+_LIT(KOSS_HLP_BM_ADDBM, "OSS_HLP_BM_ADDBM"); //
+_LIT(KOSS_HLP_RSS_ADD, "OSS_HLP_RSS_ADD"); //
+_LIT(KOSS_HLP_PAGEVIEW, "OSS_HLP_PAGEVIEW"); //
+_LIT(KOSS_HLP_BM_MAIN, "OSS_HLP_BM_MAIN"); //
+_LIT(KOSS_HLP_BM_EDIT, "OSS_HLP_BM_EDIT"); //
+_LIT(KOSS_HLP_RSS_EDIT, "OSS_HLP_RSS_EDIT"); //
+_LIT(KOSS_HLP_SETTINGS_GENERAL, "OSS_HLP_SETTINGS_GENERAL"); //
+_LIT(KOSS_HLP_SETTINGS_PAGE, "OSS_HLP_SETTINGS_PAGE"); //
+_LIT(KOSS_HLP_SETTINGS_PRIVACY, "OSS_HLP_SETTINGS_PRIVACY"); //
+_LIT(KOSS_HLP_RSS_ARTICLE, "OSS_HLP_RSS_ARTICLE"); //
+_LIT(KOSS_HLP_SETTINGS_RSS, "OSS_HLP_SETTINGS_RSS"); //
+_LIT(KOSS_HLP_RSS_ARTICLELST, "OSS_HLP_RSS_ARTICLELST"); //
+_LIT(KOSS_HLP_PAGEVIEW_EMBED, "OSS_HLP_PAGEVIEW_EMBED"); //
+_LIT(KOSS_HLP_SETTINGS_FOLDERS, "OSS_HLP_SETTINGS_FOLDERS"); //
+_LIT(KOSS_HLP_RSS_MAIN, "OSS_HLP_RSS_MAIN"); //
+_LIT(KOSS_HLP_SHORTCUTS, "OSS_HLP_SHORTCUTS"); //
+_LIT(KOSS_HLP_KEYPAD, "OSS_HLP_KEYPAD"); //
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/help/rom/browseruihelps_variant.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for Browser Help
+*
+*/
+
+#ifndef __BROWSERUIHELPS_VARIANT_IBY__
+#define __BROWSERUIHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE) /* && defined(__BROWSERUI_USED) */
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008d39\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x10008d39\contents.zip)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008d39\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008d39\index.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008d39\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008d39\keywords.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008d39\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008d39\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/BrowserHp.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//d: Local home page title
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_title "Web Browser for S60"
+
+
+
+//d: Local home search web
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_search_web "Web"
+
+//d: Local home search images
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_search_images "Images"
+
+
+
+
+//d: Local home my top links
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_my_top "My Top Links"
+
+
+//d: Local home Shortcut Keys
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_shortcut_keys "Shortcut Keys"
+
+
+//d: Local home alt text selection key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_selection_key "Selection key"
+
+
+//d: Local home selection key label
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_selection_key_label "Open link, or start entering text in a form input field"
+
+
+//d: Local home label c key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_c_key_label "If more than one window is open, closes the current window"
+
+
+
+//d: Local home label 1 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_1_key_label "Show bookmarks"
+
+
+//d: Local home label 2 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_2_key_label "Text search in current page"
+
+
+
+//d: Local home label 3 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_3_key_label "Back one page"
+
+
+//d: Local home label 5 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_5_key_label "List windows"
+
+
+//d: Local home label 8 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_8_key_label "Show Page Overview"
+
+
+
+//d: Local home label 9 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_9_key_label "Go to address"
+
+
+
+//d: Local home label star key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_star_key_label "Zoom images out"
+
+//d: Local home label hash key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_hash_key_label "Zoom images in"
+
+//d: Local home shortcut keys note
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_note "Note"
+
+//d: Local home shortcut keys unavailable
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_shortcut_unavailable "Shortcut keys not available while entering text"
+
+//d: Local home browser forum title
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_browser_forum "Browser Forum"
+
+//d: Local home join discussion label 1
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_join_discussion_1 "Join the discussion at"
+
+//d: Local home join discussion label 2
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_join_discussion_2 "the S60 user community forum!"
+
+//d: Local home unused key label
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_unused_key_label "Not used"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/Feeds.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,552 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Localized strings.
+*
+*/
+
+
+// APPLICATION INFORMATION
+
+/* Application related */
+/* -------------------------------------------------------------------- */
+//d:application name
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+#define qtn_apps_feeds_list "Web Feeds"
+//d:application name
+//l:cell_app_pane_t1
+//w:
+//r:3.0
+#define qtn_apps_feeds_grid "Web Feeds"
+
+
+/* Options Menu */
+/* -------------------------------------------------------------------- */
+//d: Menu text to update the selected feed.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_update "Update"
+
+//d: Menu text to update all feed.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_update_all "Update All"
+
+//d: Menu text for the manage sub-menu
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+#define qtn_feeds_manage "Manage"
+
+//d: Menu text to open the associated web page in the browser.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_open_full_story "Open Full Story"
+
+
+/* Manage Sub-Menu */
+/* -------------------------------------------------------------------- */
+//d: Menu text to create a new feed.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_new_feed "Add feed"
+
+//d: Menu text to edit the current feed.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_edit "Edit feed"
+
+/* Info Sub-Menu */
+/* -------------------------------------------------------------------- */
+//d: Menu text to view the about info.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_about "About"
+
+
+/* Folder View */
+/* -------------------------------------------------------------------- */
+//d: The title of the folder-view when the top-level folder is showing.
+//l:title_pane_t2/opt9
+//w:
+//r:3.0
+#define qtn_feeds_folder_view_title "Web Feeds"
+
+/* -------------------------------------------------------------------- */
+//d: The text displayed in the folder view when there are no feeds or folders.
+//l:main_list_empty_pane
+//w:
+//r:3.1
+#define qtn_feeds_no_feeds "No Web Feeds"
+
+/* Feeds View */
+/* -------------------------------------------------------------------- */
+//d: The text string at the end of a feed that's associated with the
+//d: item's full story -- the browser is launched when this text is selected.
+//l:None
+//w:
+//r:3.0
+#define qtn_feeds_feeds_view_see_full_story "See full story"
+
+/* -------------------------------------------------------------------- */
+//d: The default title of enclosures. The title is used to display the
+//d: the enclosure in content area of the Feeds View.
+//l:None
+//w:
+//r:3.1
+#define qtn_feeds_feeds_view_enclosure "Podcast"
+
+
+// -----------------------------------------------------------------
+// Touch Toolbar Button strings
+// -----------------------------------------------------------------
+
+//---------------------------------
+// Feeds Folder View Toolbar Strings
+//---------------------------------
+// Update Selected Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_update_selected_tt "Update Selected Feed"
+
+// Update All Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_update_all_tt "Update All Feeds"
+
+// Open into article listing view
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_open_tt "Open into article listing view"
+
+
+//---------------------------------
+// Feeds Topic View Toolbar Strings
+//---------------------------------
+// Update Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_update_tt "Update Feed"
+
+// Back to Page
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_back_to_page_tt "Back to Page"
+
+// Open into detail view
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_open_tt "Open into detail view"
+
+//---------------------------------
+// Feeds Feed View Toolbar Strings
+//---------------------------------
+// Previous Article
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_previous_article_tt "Previous Article"
+
+// Show Full Story
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_show_full_story_tt "Show Full Story"
+
+// Next Article
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_next_article_tt "Next Article"
+
+
+/* Wait Dialog */
+/* -------------------------------------------------------------------- */
+//d: Information text when a feed is updating.
+//l:popup_note_wait_window
+//w:
+//r:3.0
+#define qtn_feeds_updating_wait_dialog_text "Updating"
+
+//d: Information text when a feed is opening.
+//l:popup_note_wait_window
+//w:
+//r:5.0
+#define qtn_feeds_opening_wait_dialog_text "Opening"
+/* -------------------------------------------------------------------- */
+//d: Information text when all feeds are updating.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+#define qtn_feeds_updating_all_wait_dialog "Updating all feeds"
+
+
+/* Delete Dialog */
+/* -------------------------------------------------------------------- */
+//d: Information text when the user chooses to delete a feed.
+//d: The text follows this form, "Delete %U?", where %U is
+//d: the name of the feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_delete_dialog_text "Delete %U?"
+
+//d: Information text when the user chooses to delete multiple feeds.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_delete_multiple_dialog_text "Delete selected feeds?"
+
+
+/* Edit/Add Feed/Folder Dialog */
+/* -------------------------------------------------------------------- */
+//d: Header test for the feed's name.
+//l:list_double_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_name_dialog_text "Title"
+
+//d: Header test for the feed's url.
+//l:list_double_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_url_dialog_text "Address"
+
+//d: Text displayed in the New feed dialog.
+//l:list_single_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_new_feed_item "New feed"
+
+//d:Header text for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_autoupdating_text "Automatic updating"
+
+//d: Selectable text for the Automatic updating setting
+//d: If Off is selected, automatic updating does not occur
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_autoupdating_off "Off"
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 15 minutes
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_15min "Every 15 minutes"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every hour
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_hourly "Every hour"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 4 hours
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_4hours "Every 4 hours"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done daily
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_daily "Every day"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done weekly
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_weekly "Every week"
+
+
+//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
+//d: noting that turning the feature on may cost them money
+//l: popup_note_window
+//w:
+//r:7.1
+//
+#define qtn_feeds_new_feed_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
+
+
+/* Import/Export Feed Strings */
+/* -------------------------------------------------------------------- */
+
+
+
+//d: Menu text to import selected or marked feeds from a file
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 3.2
+#define qtn_options_import_feeds "Import Feeds"
+
+//d: Popup waiting note when searching for feed files
+//d: stored on the phone
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_searching_for_feeds "Searching for feeds..."
+
+//d: When the search for feeds has completed, a header
+//d: over the list of results
+//l: heading_pane_t1
+//w:
+//r: 3.2
+#define qtn_popup_title_feeds_files_found "Feeds Files Found:"
+
+//d: When the search for feeds has completed, if no
+//d: feeds are found on the device, this error is shown
+//l: popup_note_window/opt1
+//w:
+//r: 3.2
+#define qtn_feeds_no_feeds_found_on_device "No feeds found on device"
+
+//d: A wait screen for when the phone is importing a feed file
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_importing_feeds "Importing Feeds..."
+
+//d: Menu text to export selected or marked feeds to a file
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 3.2
+#define qtn_options_export_feeds "Send"
+
+//d: When exporting some feeds to a file, header on a popup
+//d: asking the user to name the file
+//l: popup_query_data_window/opt1
+//w:
+//r: 3.2
+#define qtn_feeds_name_exported_file "Name the file to be sent:"
+
+//d: When exporting some feeds to a file, if the
+//l: popup_note_window
+//w:
+//r: 3.2
+#define qtn_feeds_export_opml_title_needed "You must enter a name for the file."
+
+//d: Wait window as feeds are exported into a file
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_processing "Processing..."
+
+//d: Confirmation to import feeds from an OPML file
+//d: that has been downloaded or received from another application
+//d: The %U referes to the filename of the OPML file
+//l: popup_note_window
+//w:
+//r: 3.2
+#define qtn_feeds_query_import_now "Import feeds from %U now?"
+
+
+/* Error Strings */
+/* -------------------------------------------------------------------- */
+//d: Information text for the error dialog. Displayed when the user
+//d: doesn't include a title when editing or adding a feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_title_needed "Title needed"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: doesn't include a url when editing or adding a feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_address_needed "Address needed"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: enters a single quote character anywhere in the feed title.
+//l:popup_note_window
+//w:
+//r:7.0
+#define qtn_feeds_title_single_quote_not_allowed "Single quote character (’) is not allowed in the title"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: tries to add the same feed a second time.
+//d: %U is the name of the feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_duplicate_feed_error_dialog_text "%U already subscribed"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: tries to add/edit a feed that has a non-unique title.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_duplicate_title_error_dialog_text "Title must be unique"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed is malformed(corrupted/empty).
+//l:popup_note_window
+//w:
+//r:5.0
+#define qtn_feeds_malformed_dialog_text "Feed cannot be processed"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed couldn't be fetched from the network.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_network_error_main_pane_text "Couldn't update feed"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed is malformed.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_malformed_main_pane_text "Can't process feed"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed is in an unsupported format.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_unsupported_main_pane_text "Feed format is not supported"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed has invalid URL.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_invalid_url_main_pane_text "Invalid web address"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed fails for some other reason.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_general_error_main_pane_text "An unkown error occurred"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed fails for some other reason.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_general_error_dialog_text "An unkown error occurred"
+
+//d: Information text for the error dialog. Displayed when an OPML file
+//d: somehow gets deleted after it is found and displayed in the list, and the
+#define qtn_feeds_malformed_dialog_text "Can't process feed"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed is in an unsupported format.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_unsupported_dialog_text "Feed format is not supported"
+//d: user then tries to select and import it.
+//l:popup_note_window
+//w:
+//r:7.1
+#define qtn_feeds_file_not_found_dialog_text "File Not Found"
+
+/* Misc Strings */
+/* -------------------------------------------------------------------- */
+//d: Text displayed in the Topic-View when an item's name isn't available.
+//l:list_single_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_unnamed_item "Unnamed item"
+
+
+/* Strings copied from wmlbrowser.loc */
+/* -------------------------------------------------------------------- */
+//d:DO element menu item
+//l:list_single_popup_submenu_pane_t1
+//
+#define text_wml_option_back "Back"
+
+//d:Menu item in Bookmarks View: activate highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_load_bm "Activate"
+
+// WmlBrowser Settings/Session listbox items
+
+//d:Browser settings session list item texts
+//l:heading_pane_t1
+//
+#define qtn_wmls_session_info "Session info"
+
+//d:Format title text in session view.
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_ap "Access point name:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_bearer_type "Bearer type:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_max_speed "Max. connection speed:"
+
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+#define qtn_browsers_title_about "Name and Version"
+
+//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
+//l:popup_info_list_pane_t1
+#define qtn_browsers_about_version_label "Version: %0U (%1U)"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_browser_set_bearer_hscsd "HSCSD"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed couldn't be fetched from the network.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_network_error_dialog_text "Couldn't update feed"
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/WmlBrowser.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,3229 @@
+/*
+* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This is a localisation file.
+* A .loc file is the one and only place where the logical strings
+* to be localised are defined.
+*
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+//d:Information note text
+//l:popup_note_window
+//
+#define qtn_wml_informationnote_unable_to_retrieve "Unable to retrieve"
+
+//d:Move - cancel softkey, Softkey used when moving the bookmark to folder
+//l:control_pane_t1/opt7
+//
+#define text_softkey_move "Move"
+
+//d:application name
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_browserng_list "BrowserNG"
+
+//d: application name
+//l: cell_app_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_browserng_grid "BrowserNG"
+
+
+//d:Confirmation query text on exiting Browser
+//l:popup_note_window
+//
+#define text_wml_exit_confirm "Quit browsing?"
+
+// strings for main menu for multipurpose browser display
+
+//d:Open selected deck
+//d:Open focused anchor node.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_open "Open"
+
+
+//d:Menu item for DO elements' parent menu text
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_list_history "History"
+
+
+//d:Menu item for DO elements' parent menu text
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_srv_opts "Service options"
+
+//d:Menu item to get access to the bookmarks
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_wml_faves "Bookmarks"
+
+//d:Menu item to
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browser_list_close "Close browser"
+
+//d: main menu item to rotate the display orientation
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_rotate_display "Rotate display"
+
+
+//d:Menu access to navigation submenu
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_list_navigation "Navigation functions"
+
+
+//d:Menu item to change connection
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_change_connection "Change connection"
+
+//d:Menu item brings up input field for custom URL address
+//d:Menu item in bookmark favorites view
+//l:list_single_pane_t1_cp2
+//
+#define text_wml_option_goto "Go to address"
+
+//d:Text in middle soft key (goto address function)
+//l:control_pane_t3/opt7
+//w:
+//r:3.2
+#define qtn_browser_msk_goto "Go to"
+
+//d:Menu item to create a bookmark
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_wmlbm_fav_saveas_bm "Add bookmark"
+
+//d:SubMenu item to create a bookmark
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:5.0 & 3.2.3
+//
+#define qtn_wmlbm_fav_saveas_bm_sm "Add bookmark"
+
+//d:Menu item to show the zoom slider
+//l:list_single_pane_t1_cp2
+//r:5.0
+//
+#define qtn_wml_list_zoom_slider_show "Show Zoom Slider"
+
+//d:Menu item to hide the zoom slider
+//l:list_single_pane_t1_cp2
+//r:5.0
+//
+#define qtn_wml_list_zoom_slider_hide "Hide Zoom Slider"
+
+//d:Menu item to reload currently showed card
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_reload "Reload"
+
+//d:Menu item the user can get different kind of information
+//d:about service in use
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_option_infoview "Info"
+
+//d:Menu item to terminate network connection
+//d:about service in use
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_dconn "Disconnect"
+
+//d:Menu item to load and show unloaded image
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_fetch_img "Show Images"
+
+//d:Menu item to entirely clear the cache
+//l:list_single_popup_submenu_pane_t1
+//
+#define text_wml_option_empty_cache "Clear cache"
+
+//d:Menu item to save current card
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_save_pgs "Save"
+
+//d:Menu item to view/change browsing settings
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmls_browser_opt_sett "Preferences"
+
+//d:Browser main menu
+//l:list_single_pane_t1_cp2
+//
+#define text_wml_option_help "Help"
+
+//d:Browser main menu
+//l: list_single_pane_t1_cp2/opt3
+//
+#define qtn_browser_options_help "Help"
+
+//d:Options menu item to open Downloads List.
+//l:list_single_pane_t1_cp2
+//w:
+//
+#define qtn_browser_list_downloads "Downloads"
+
+//d:Browser main menu
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_view_images "View Images"
+
+//d:Menu access to tools submenu
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_browser_list_folder_tools "Tools"
+
+//d:Strings for page info submenu
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browser_list_page_info "Page info"
+
+//d:Strings for Info submenu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_opt_smenu_session "Session"
+
+//d:Strings for Info submenu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_opt_smenu_security "Security"
+
+//d:open new page query
+//l:popup_note_window
+//
+#define qtn_wml_query_dwnl "Downloading ongoing. Cancel previous downloading?"
+
+//d:External app started browser with an invalid bookmark id
+//l:popup_note_window
+//
+#define qtn_wml_bookmark_not_found "Bookmark does not exist!"
+
+//d:Information note text
+//l:popup_note_window
+//
+#define text_wml_cache_emptied_note "Cache cleared"
+
+//d:Text to display if the current access point is invalid while editing bookmark
+//l:list_single_heading_pane_t1
+#define qtn_wmlbm_text_ap_invalid "Invalid"
+
+
+//d:Error note message: Invalid accesspoint is defined in a bookmark
+//l:popup_note_window
+#define qtn_wml_info_invalid_ap "Invalid access point. Edit bookmark."
+
+//d:Error note message: Invalid accesspoint is defined in a saved deck
+//l:popup_note_window
+#define qtn_wml_confquery_invalid_ap "Invalid access point. Use default?"
+
+//d:Command text associated to a softkey in the control pane.
+//d:Go to root level (folder).
+//l:control_pane_t1/opt7
+//
+#define text_softkey_root_level "Root level"
+
+// Authentication Dialog
+
+//d:label for bookmark name query
+//l:popup_query_data_window
+#define qtn_wml_query_bookmark_title "Enter bookmark name"
+//d:label for saved deck name query
+//l:popup_query_data_window
+#define qtn_wml_query_savedpage_title "Enter name for saved page"
+
+//d:title of bookmark favorites view
+//l:title_pane_t2/opt9
+//
+#define text_wml_option_bookmarks "Bookmarks"
+
+
+//d:Empty list text in Bookmarks View (displayed if no bookmarks exist)
+//l:main_list_empty_pane
+//
+#define text_wml_no_bookmarks "No bookmarks"
+
+//d:Prompt for renaming a saved deck in Saved Decks View.
+//l:popup_query_data_window
+//
+#define qtn_wml_prmpt_edit_name "Edit name:"
+
+//d:Information note text in Bookmarks View: could not move items due to name collision
+//d:Information note text in Saved Decks View: could not move items due to name collision
+//l:popup_note_window
+//
+#define qtn_fldr_names_in_use_rename "Some of the names are already in use. Please rename those items"
+
+//d:Menu item in Bookmarks View: create new bookmark
+//l:list_single_pane_t1_cp2
+//
+#define text_wmlbm_option_enter_new "Add bookmark"
+
+//d:Menu item in Bookmarks View: activate highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_load_bm "Activate"
+
+//d:Menu item in Bookmarks View: edit highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_edit_bm "Edit bookmark"
+
+
+//d:Menu item in Bookmarks View: set prefered bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_list_set_as_preferred "Set as preferred"
+
+//d:Menu item in Bookmarks View: set un prefered bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_list_unset_from_preferred "Unset from preferred"
+
+//d:Menu access to bookmark management submenu (Bookmarks view)
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wmlbm_manage_bm "Edit"
+
+//d:Bookmark Edit Form title editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_bmtitle "Title"
+
+//d:Bookmark Edit Form URL editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_bmadrs "Address"
+
+//d:Bookmark Edit Form Access Point selector label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_wapap "Access point"
+
+//d:Name for "Default" Access Point
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmlbm_default_wapap "Default"
+
+//d:Text to display if there are no Access Points
+//l:list_single_heading_pane_t1
+//
+#define qtn_wmlbm_text_ap_none "None"
+
+//d:Bookmark Edit Form user name editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_username "User name"
+
+//d:Bookmark Edit Form password editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_passwd "Password"
+
+//d:Error note message: attempt to select AP when no such exist.
+//l:popup_note_window
+//
+#define qtn_wmlbm_info_no_valid_ap "No valid access point available. Please add one to preferences."
+
+//d:Error note message: database is inaccessible.
+//l:popup_note_window
+//
+#define qtn_wmlbm_err_db_inaccessible "Cannot access\ndatabase.\nTry again later."
+
+//d:Info note message: bookmark was saved.
+//l:popup_note_window
+//
+#define text_wml_bm_saved "Bookmark saved"
+
+//d:Error note message: bookmark was not saved.
+//l:popup_note_window
+//
+#define qtn_wmlbm_bm_not_saved "Bookmark not saved"
+
+//d:Default name for new bookmark.
+//l:list_single_heading_pane_t1
+//
+#define qtn_wmlbm_default_bm_title "New bookmark"
+
+//d:Left softkey: (accept typing and activate typed URL address)
+//l:control_pane_t1/opt7
+//
+#define qtn_wml_softk_go "Go to"
+
+//d:Confirmation query prompt if no URL specified for a bookmark.
+//l:popup_note_window
+//
+#define qtn_wmlbm_query_address "Address needed.\nAdd an address?"
+
+//d:Information note text in Bookmarks View: name is conflicting with existing name.
+//d:Information note text in Saved Decks View: name is conflicting with existing name.
+//l:popup_note_window
+//
+#define qtn_wmlbm_name_already_used "Name already in use"
+
+//Saved Pages.
+
+//d:Confirmation query text in Bookmarks View
+//d:Confirmation query text in Saved Decks View
+//l:popup_note_window
+//
+#define qtn_wml_quest_overwrite "Page already exists\Overwrite?"
+
+//d:Menu item in Saved Decks View
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_refresh "Refresh"
+
+//d:Menu access to saved page management submenu (Saved Pages view)
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_list_manage_sp "Manage saved pages"
+
+//d:Title for Saved Decks View
+//l:title_pane_t2/opt9
+//
+#define qtn_wml_title_svd_pgs "Saved pages"
+
+//d:Empty list text for Saved Decks View: displayed if there are no saved pages.
+//l:main_list_empty_pane
+//
+#define qtn_wml_no_svd_pgs "No saved pages"
+
+//d:Information note text in Saved Decks View: page saved
+//l:popup_note_window
+//
+#define qtn_wml_conf_pages_saved "Page saved"
+
+//d:Information note text in Saved Decks View
+//l:popup_note_window
+//
+#define qtn_wml_conf_pages_refreshed "Page refreshed"
+
+//d: Wait note while refreshing a saved deck
+//l: popup_note_wait_window
+//
+#define qtn_wml_page_refreshing "Refreshing page"
+
+//d:Menu item in Bookmarks View: go back to Browser View
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_list_ret_page "Back to page"
+
+//
+// Settings texts
+//
+
+
+//d:Browser page info title text
+//l:heading_pane_t1
+#define qtn_browser_query_current_page "Current page"
+
+
+//d: Browser page info item text
+//l:popup_info_list_pane_t1
+#define qtn_browser_query_current_page_url "URL"
+
+
+// WmlBrowser Settings/Session listbox items
+
+//d:Browser settings session list item texts
+//l:heading_pane_t1
+//
+#define qtn_wmls_session_info "Session info"
+
+//d:Format title text in session view.
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_ap "Access point name:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_bearer_type "Bearer type:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_max_speed "Max. connection speed:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_bearer_data_call "Data call"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_bearer_packet_data "Packet data"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_browser_set_bearer_hscsd "HSCSD"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_auto_detect "Auto detect"
+
+//d:Browser security item texts
+//l:heading_pane_t1
+//
+#define qtn_wmlsec_security_info "Security info"
+
+//d:Browser security item texts
+//l:heading_pane_t1
+//
+#define qtn_wmlsec_cert_details "Certificate details"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_serialno "Serial number:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_contype "Connection:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_issuer "Issuer:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_cert_owner "Owner:\n%U"
+
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_valid_from "Valid from:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_valid_to "Valid to:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_fingerprint "Fingerprint:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_server "Server authentication:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_con_secur "Secure"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_con_unsec "Unsecure"
+
+//d: A list box item referring to settings categorised as Page
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_general "General"
+
+//d: A list box item referring to settings categorised as General
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_page "Page"
+
+//d: A list box item referring to settings categorised as Privacy
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_privacy "Privacy"
+
+//d: When the General Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_general "General Settings"
+
+//d: When the PageSettings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_page "Page settings"
+
+//d: When the Privacy Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_privacy "Privacy settings"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_local_set_default_ap "Default access point"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:2.8
+//
+#define qtn_browsers_sett_autoload_objects "Autoload images and objects"
+
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_wmls_local_set_pageoverview "Mini map"
+
+//d: Selectable text for the Page Overview setting
+//d: Page Overview is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_pageoverview_on "On"
+
+//d: Selectable text for the Page Overview setting
+//d: Page Overview is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_pageoverview_off "Off"
+
+//d:Browser settings main list item texts
+//d:Back list is the History list
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_back_list "Back list"
+
+//d: Selectable text for the Back list setting
+//d: If On is selected, back list is shown when SK2 Back
+//d: is pressed in page view.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_back_list_on "On"
+
+//d: Selectable text for the Back list setting
+//d: If Off is selected, back list is not shown when SK2 Back
+//d: is pressed in page view.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_back_list_off "Off"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_auto_refresh "Automatic page refresh"
+
+//d: Selectable text for the Automatic page refresh setting
+//d: Automatic page refresh is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_auto_refresh_on "On"
+
+//d: Selectable text for the Automatic page refresh setting
+//d: Automatic page refresh is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_auto_refresh_off "Off"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_all_small "Smallest"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_smaller "Small"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_normal "Normal"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+
+#define qtn_xhtml_settings_larger "Large"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_all_large "Largest"
+
+//d: Browser character encoding in browser settings: ISO 8859-2
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_2 "ISO 8859-2"
+
+//d: Browser character encoding in browser settings: ISO 8859-4
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_4 "ISO 8859-4"
+
+//d: Browser character encoding in browser settings: ISO 8859-5
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_5 "ISO 8859-5"
+
+//d: Browser character encoding in browser settings: ISO 8859-7
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_7 "ISO 8859-7"
+
+//d: Browser character encoding in browser settings: ISO 8859-9
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_9 "ISO 8859-9"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-6 (Arabic)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88596 "Arabic (ISO)"
+
+
+//d: Browser default character encoding in browser settings: Windows-1256 (Arabic)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1256 "Arabic (Windows)"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-8 (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88598 "Hebrew (ISO-Visual)"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-8-i (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88598_i "Hebrew (ISO-Logical)"
+
+//d: Browser default character encoding in browser settings: Windows-1255 (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1255 "Hebrew (Windows)"
+
+//d: Browser default character encoding in browser settings: Windows-1250
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1250 "Windows-1250"
+
+//d: Browser default character encoding in browser settings: Windows-1251
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1251 "Windows-1251"
+
+//d: Browser default character encoding in browser settings: Windows-1253
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1253 "Windows-1253"
+
+//d: Browser default character encoding in browser settings: Windows-1254
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1254 "Windows-1254"
+
+//d: Browser default character encoding in browser settings: Windows-1257
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1257 "Windows-1257"
+
+//d: Browser default character encoding in browser settings: Windows-1258
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1258 "Windows-1258"
+
+//d: Browser default character encoding in browser settings: Automatic
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_automatic "Automatic"
+
+//d: Browser default character encoding in browser settings: Tis-620
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_tis_620 "Thai"
+
+
+//d: Browser default character encoding in browser settings: Windows-874
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_874 "Thai (Windows-874)"
+
+
+//d: Browser default character encoding in browser settings: Shift_JIS
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_jis "shift_jis"
+
+//d: Browser default character encoding in browser settings: euc-jp
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_euc_jp "euc-jp"
+
+//d: Browser default character encoding in browser settings: iso-2022-jp
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_2022_jp "iso-2022-jp"
+
+//d: Browser default character encoding in browser settings: Ucs-2
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_ucs_2 "Unicode (ucs-2)"
+
+//d: Browser default character encoding in browser settings: KOI8-R
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_koi8_r "KOI8-R"
+
+//d: Browser default character encoding in browser settings: KOI8-U
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_koi8_u "KOI8-U"
+
+//d: Browser default character encoding in browser settings: ISCII
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iscii "ISCII"
+
+//d: Browser default character encoding in browser settings: Korean (Euc-Kr)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_euc_kr "Korean (Euc-Kr)"
+
+//d: Browser default character encoding in browser settings: Korean (KSC5601)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_ksc_5601 "Korean (KSC5601)"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_save_receipt "Save receipt"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_set_wallet_auto "Automatic eWallet use"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_cookie_allow "Allow"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_cookie_reject "Reject"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wtai_dtmf_alcon "Always confirm"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wtai_dtmf_one "Confirm once"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_save_to_notepad "To notepad"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_save_not "Never"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wall_auto_on "On"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wall_auto_off "Off"
+
+
+// Settings Menu texts
+
+//d:Browser settings main menu
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmls_local_set_opt_change "Change"
+
+//d:Invalid certificate indicator dialog's message body
+//l:popup_query_wml_sign_window_2
+//
+// #define qtn_wmlsec_invalid_cert "Server could not be authenticated\nReason:\n%U"
+
+//d:Certificate error: Server certificate not valid yet
+//l:popup_query_wml_sign_window_2
+//
+// #define text_wml_certificate_sc_not_val "Server certificate not valid yet"
+
+//d:Authentication of the WML card failed.
+//l:popup_note_window
+#define text_wml_auth_fail_retry_query "Authorisation failed. Try again?"
+
+//d:if the secured connection established.
+//l:popup_note_window
+#define qtn_wmlsec_conn_secured "Connection secured to %U"
+
+//d:when anonymous connection established to server
+//l:popup_note_window
+#define qtn_wmlsec_conn_sec_unk_serv "Connection secured to unknown server"
+
+//d:Confirmation note text about the closure of the active connection
+//l:popup_note_window
+//
+#define qtn_ics_cnote_disconn_from_service "Connection to service is closed"
+
+//d:Browser settings font size
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_pref_fontsize "Font size"
+
+//d:Browser settings cookies
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_sett_cookies "Cookies"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_image_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_image_off "Off"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_expand_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_expand_off "Off"
+
+//d:Confirmation query shown if the Search Menu item is selected, and the Search Web Setting value is empty
+//d: Accepting this query opens the search page setting for editing
+//l: popup_note_window
+#define qtn_browser_query_search_url "Search page address is missing. Define now?"
+
+//d: Prompt dialog shown to enter a url for the Search Page setting
+//l: popup_query_data_window
+#define qtn_wml_prompt_search_url "Search page address"
+
+//d: Browser default character encoding in browser settings
+//l: list_setting_pane_t1
+//
+#define qtn_brow_sett_defenc "Default encoding"
+
+// Text used by Progress bar
+
+//d: Percent mark ("%") to be used in the progress bar to indicate the percentage of the data loaded at the moment.
+//d: %N is replaced by the actual percentage number.
+//l: none
+#define qtn_wml_unit_percent "%N %"
+
+
+//d: Size of data in kilo bytes
+//d: text used by progress bar
+//l: none
+#define qtn_wml_unit_kb "%N kB"
+
+//d: Size of data in mega bytes
+//d: text used by progress bar
+//l: none
+#define qtn_wml_unit_mb "%U MB"
+
+//d: Browser default character encoding in browser settings: ISO 8859-1 (Latin 1)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_latin1 "Latin"
+
+//d: Browser default character encoding in browser settings: GB 2312 (Simplified Chinese)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_gb2312 "Simplified Chinese"
+
+//d: Browser default character encoding in browser settings: Big5 (Traditional Chinese)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_big5 "Traditional Chinese"
+
+//d: Browser default character encoding in browser settings: UTF-8 (Unicode)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_utf8 "Unicode (UTF-8)"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_full_screen "Full screen"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_full_screen_normal "Normal"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_full_screen_full_screen "Full screen"
+
+//d:Browser settings to display softkeys
+//l:list_setting_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys "Display softkeys"
+
+//d: Selectable text for the softkey setting
+//d: Will display the softkeys if on
+//l: set_value_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys_on "On"
+
+//d: Selectable text for the softkey setting
+//d: Will not display the softkeys if off
+//l: set_value_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys_off "Off"
+
+//d:Browser settings main list item texts
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_search "Search page address"
+
+//d:Browser settings main list item texts
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_url_suffix "URL Suffix"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_media_volume "Media volume"
+
+//d:Browser settings selectable item texts volume muted
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_muted "Muted"
+
+//d:Browser settings selectable item texts volume level 1
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_1 "Level 1"
+
+//d:Browser settings selectable item texts volume level 2
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_2 "Level 2"
+
+//d:Browser settings selectable item texts volume level 3
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_3 "Level 3"
+
+//d:Browser settings selectable item texts volume level 4
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_4 "Level 4"
+
+//d: Setting for showing or hiding security related warnings
+//l: list_setting_pane_t1
+#define qtn_browser_sett_security "Security notifications"
+
+//d: Show security related warnings
+//l: list_set_graphic_pane_t1
+#define qtn_browser_sett_item_show_all "Show"
+
+//d: Hide security related warnings
+//l: list_set_graphic_pane_t1
+#define qtn_browser_sett_item_hide_all "Hide"
+
+//d: Setting for open downloading files progressively
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_open_loading "Open while loading"
+
+//d: Automatically open downloaded files progressively
+//l: list_set_graphic_pane_t1
+#define qtn_brow_sett_open_downloads_yes "Yes"
+//
+#define qtn_browser_list_check_for_updates "Update Browser"
+
+//d:Browser main menu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_browser_version "Browser Version"
+
+//d:Browser main menu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_browser_help "Browser Help"
+//
+#define qtn_brow_sett_product_update_manual "Manual"
+#define qtn_brow_sett_product_update_auto "Automatic"
+
+//d: Not automatically open downloaded files progressively
+//l: list_set_graphic_pane_t1
+#define qtn_brow_sett_open_downloads_no "No"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+ //
+#define qtn_wmls_local_set_imei_notif "IMEI notification"
+
+//d:Enables IMEI sending
+//d:Browser settings selectable item text
+//l:list_set_graphic_pane_t1
+#define qtn_wmls_local_set_imei_notif_enabled "Enabled"
+
+
+//d:Disables IMEI sending
+//d:Browser settings selectable item text
+//l:list_set_graphic_pane_t1
+#define qtn_wmls_local_set_imei_notif_disabled "Disabled"
+
+
+//d: Boomark folder "Download applications"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_applications "Download applications"
+
+//d: Boomark folder "Download images"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_images "Download images"
+
+//d: Boomark folder "Download tones"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_tones "Download tones"
+
+//d: Boomark folder "Download videos"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_videos "Download videos"
+
+//d: Boomark folder "Download skins"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_skins "Download skins"
+
+//d: Boomark folder "Download Music"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_music "Download music"
+
+//d: Boomark folder title "Download applications"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_applications "Download applications"
+
+//d: Boomark folder title "Download images"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_images "Download images"
+
+//d: Boomark folder title "Download tones"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_tones "Download tones"
+
+//d: Boomark folder title "Download videos"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_videos "Download videos"
+
+//d: Boomark folder title "Download skins"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_skins "Download skins"
+
+//d: Boomark folder title "Download music"
+//l: title_pane_t2/opt9
+//w:
+//r:3.0
+//
+#define qtn_browserbm_folder_title_download_music "Download music"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_adaptive_bookmarks "Recent URLs"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_hide_folder "Hide folder"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_off "Off"
+
+
+//d:Empty list text for Recent URLs Folder: displayed if there are no Recent URLs.
+//l:main_list_empty_pane
+//
+#define qtn_browserbm_no_adaptive_bookmarks "No recent URLs"
+
+//d:Text for Recent URLs Folder in Bookmarks view.
+//l:list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_adaptive_bookmarks "Recent URLs"
+
+//d: Title of Recent URLs view
+//l: title_pane_t2/opt9
+//w:
+//r:3.2
+//
+#define qtn_browserbm_title_adaptive_bookmarks "Recent URLs"
+
+//d: Confirmation query shown before deleting all Recent URLs.
+//l:popup_note_window
+//
+#define qtn_browserbm_query_delete_adap_bookmarks "Delete all recent URLs?"
+
+//d: Options menu item for copying Recent URLs to Bookmarks Folder.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_options_copy_to_bookmarks "Copy to bookmarks"
+
+//d: Options submenu item for copying Recent URLs to Bookmarks Folder.
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browserbm_options_copy_to_bookmarks_sm "Copy to bookmarks"
+//d: Options menu item for deleting all Recent URLs.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_options_clear_adaptive_bookmarks "Clear Recent URLs"
+
+//d: Confirmation note shown when 1 Adaptive Bookmark has been copied to root level of Bookmarks View.
+//l:popup_note_window
+//
+#define qtn_browserbm_note_adaptive_bookmark_copied "Copied to bookmarks"
+
+//d: Confirmation note shown when more than one Recent URLs (%N is the number of Recent URLs) has been copied to root level of Bookmarks View.
+//l:popup_note_window
+//
+#define qtn_browserbm_note_adaptive_bookmarks_copied "%N items copied to bookmarks"
+
+//d: Options menu item for restarting the browser
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_opt_restart "Restart"
+
+//d:Exit confirmation in browser settings
+//l:list_setting_pane_t1
+//
+#define qtn_wml_setting_exit_confirm "Exit confirmation"
+
+//d:Selectable item texts for Exit confirmation setting
+//d:Activate the exit confirmation prompt.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_exit_on "On"
+
+//d:Selectable item texts for Exit confirmation setting
+//d:Deactivate the exit confirmation prompt.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_exit_off "Off"
+
+//d:Send referrer heading in browser settings
+//l:list_setting_pane_t1
+#define qtn_wml_setting_referrer "Send referrer heading"
+
+//d:Selectable item texts for Send referrer setting.
+//d:Activate the sending of the referrer header.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_refer_on "On"
+
+//d:Selectable item texts for Send referrer setting.
+//d:Deactivate the sending of the referrer header.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_refer_off "Off"
+
+//d: This is a setting item which controls
+//d: whether external style sheets are fetched
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_external_css "Rendering quality"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_scripting "Java/Ecma Script"
+
+//d: Enables Java and ECMA scripts to be executed in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_scripting_enable "Enable"
+
+//d: Disables Java and ECMA scripts to be executed in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_scripting_disable "Disable"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//r: 3.2
+//
+#define qtn_browsers_sett_scriptlog "Javascript notifications"
+
+//d: Disables Java and ECMA script logging output in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_disable "No notification"
+
+//d: Enables Java and ECMA script log to be output to a log file
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_file "Log to file"
+
+//d: Enables Java and ECMA script log to be output to GUI console
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_console "Pop-up notes"
+
+//d: Enables Java and ECMA script log to be output to both GUI console and file
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_console_file "Log to file and as pop-up notes"
+
+
+//d:Menu item to clear all window(s) page script logging
+//l: list_single_popup_submenu_pane_t1
+//r: 3.2
+//
+#define qtn_browser_list_clear_scriptlog "Clear Javascript Log"
+
+//d: Browser Privacy main menu
+//l: list_single_pane_t1_cp2/opt3
+// will contain 5 submenu options
+#define qtn_browser_list_privacy "Privacy"
+
+
+//d:Menu item to clear all privacy related data (cache, cookies, history, form & password data)
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_privacy_clear_all "Clear all privacy data"
+
+
+//d:Menu item to clear all the stored cookies
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_delete_cookies "Clear cookies"
+
+//d:Menu item to clear all window(s) page load history data
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_clear_history "Clear history"
+
+
+//d:Menu item to clear all form and password data
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_privacy_clear_form_data "Clear form data"
+
+
+//d:Information note text after clearing history
+//l: popup_note_window
+//
+#define qtn_browser_note_history_cleared "History and recent URLs cleared"
+
+
+//d:Information note text after clearing form data
+//l: popup_note_window
+//
+#define qtn_browser_note_form_and_passwd_data_cleared "Form and password data cleared"
+
+
+//d:Information note text after deleting cookies
+//l:popup_note_window
+//
+#define qtn_browser_note_cookies_deleted "Cookies deleted"
+
+//d:Information note text after clearing all privacy data
+//l: popup_note_window
+//
+#define qtn_browser_note_clear_all_privacy_done "All privacy data cleared"
+
+
+//d:Menu item in Preferences->Options->Info menu
+//l:list_single_pane_t1_cp2
+#define qtn_wml_opt_about_product "Name and version"
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+#define qtn_browsers_title_about "Name and Version"
+
+//d:Menu item in Preferences->Options->Info menu
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_wml_opt_about_product_oss "About product"
+
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_about_oss "About product"
+
+//d:Text in About Product information note, shown in the first line
+//l:popup_info_list_pane_t1
+#define qtn_browsers_browser_name "Series 60 Mobile Browser"
+
+//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
+//l: heading_pane_t1
+#define qtn_browsers_about_version_label "Version: %0U (%1U)"
+
+//d:Browser main menu
+//l:heading_pane_t1
+#define qtn_browser_query_browser_version "Browser Version"
+
+//d:Text in About Product information note, the list of installed plugins comes after this
+//l:popup_info_list_pane_t1
+#define qtn_browsers_plugins_label "Plug-Ins:"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+#define qtn_browsers_sett_homepage "Home page"
+
+//d:Browser settings main list item texts for OSS browser
+//l:list_setting_pane_t1
+//w:
+//r: 3.0
+//
+#define qtn_browsers_sett_startpage "Startpage"
+
+//d:Browser settings selectable item texts access point home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_ap_home_page "Access point home page"
+
+//d:Browser settings selectable item texts user-defined home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_own_home_page "New address"
+
+//d:Browser settings selectable item texts for selecting bookmark view
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_homepage_bookmarks "Bookmarks"
+
+//d:Browser submenu item for Set as Home page
+//l:list_single_pane_t1_cp2
+#define qtn_browserbm_list_set_as_home_page "Set as Home Page"
+
+//d:Browser submenu item for Set as Home page
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browserbm_list_set_as_home_page_sm "Set as Home Page"
+
+//d:Browser menu item for Home page launch
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browser_list_home "Home"
+
+//d: Prompt dialog shown to enter a url for the Home Page setting
+//l: popup_query_data_window
+#define qtn_wml_prompt_homepage_url "New address"
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+#define qtn_browserbm_query_set_as_home_page "Do you want to use this bookmark as home page?"
+
+//d:Browser settings selectable item texts user-defined home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_use_current_home_page "Use current page"
+
+
+//d:Text in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_uploaded "Uploaded:\n%0U / %1U "
+
+//d:Unit in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_unit_kbyte "kB"
+
+//d:Unit in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_unit_mb "MB"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_user_defined "User defined"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_always_ask "Always ask"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_ask_when_needed "Ask when needed"
+
+//d:Browser gotopane default text
+//l:query_popup_data_pane_t1/opt4
+#define qtn_browser_goto_text_enter_address "Enter address"
+
+//d:Download already in progress info note.
+//l:popup_note_window
+//w:
+//r:2.8
+//
+#define qtn_browser_note_object_downloading "Downloading"
+
+//=============================================================================
+// OSS Browser Support
+//=============================================================================
+
+// ==========================================================
+// Finding
+// ==========================================================
+//d: Browser Find main menu
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+// #define qtn_options_find "Find item"
+
+//d: Menu item for searching for a keyword
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword "Keyword"
+
+//d: Menu item for searching for a keyword
+//l: list_single_pane_t1_cp2
+//w:
+//r: 5.0
+//
+#define qtn_browser_find_keyword_mm "Find Keyword"
+
+//d: Menu item for searching the next matching string in the page
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword_search_for_next "Search for next"
+
+//d: Menu item for searching the previous matching string in the page
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword_search_for_previous "Search for previous"
+
+//d: Tooltip shown when there were no matches of the search
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_no_matches "No matches"
+
+//d: Tooltip shownwhen the search has reached the end of the page
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_wraparound "Wraparound"
+
+//d: Tooltip shownwhen the search has reached the starting point
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_all_content_searched "All the content searched"
+
+// ==========================================================
+// Zooming
+// ==========================================================
+
+//d: Browser zooming main menu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_wml_option_zoom "Zoom"
+
+//d: Options menu list item for the new Zoom Mode. Options>View>Zoom
+//l: list_single_popup_submenu_pane_t1
+//r: Browser 7.x
+//
+#define qtn_browser_list_zoom_mode "Zoom"
+
+//d: When zoom level of images change, new level is shown in title pane
+//l: navi_navi_text_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_zoom_level "Zoom level: %U%"
+
+//d: Zoom levels displayed as zoom menu subitems
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_image_zoom_level "%U%"
+
+
+//d: When zoom level of text change, new level is shown in title pane
+//l: navi_navi_text_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_text_size "Text size: %U%"
+
+//d: When zoom level of text changes, new level is shown in tooltip
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_text_size_tooltip "Text size: %U%"
+
+//d: When zoom level of images change, new level is shown in tooltip
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_zoom_level_tooltip "Zoom level: %U%"
+
+//d: Tooltip that displays when the maximum zoom level has been reached
+//l: popup_preview_text_window/opt3
+//r: 3.2.3, 5.0+, browser 7.x
+//
+#define qtn_browser_zoom_level_tooltip_maximum "Maximum zoom level"
+
+//d: Tooltip that displays when the minimum zoom level has been reached
+//l: popup_preview_text_window/opt3
+//r: 3.2.3, 5.0+, browser 7.x
+//
+#define qtn_browser_zoom_level_tooltip_minimum "Minimum zoom level"
+
+//=============================================================================
+// Multiple Windows Support
+//=============================================================================
+
+
+//d: menu item. Selecting this will open the current url link
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_open_link_main "Open link"
+
+
+//d: Submenu item. Selecting this will open the current url link in
+//d: a new window
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_open_in_new_window "Open link in new window"
+
+//d: Download main menu, contains download page menuitems.
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_submenu_download "Download"
+
+//d: Selecting this will open the current url link.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_download_page "Download page"
+
+//d: Selecting this will open the current url link in a new window.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_download_in_new_window "Download page in new window"
+
+//d: Menu access to pop-ups submenu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows "Windows"
+
+//d: Opens a selection dialog which will allow the
+//d: the user to switch between all open windows.
+//d: Only shown if more than one window is opened.
+//l: list_single_popup_submenu_pane_t1
+//r:3.0
+//
+#define qtn_browser_list_switch_window "Windows"
+
+//d: Closes the current window.
+//l: list_single_pane_t1_cp2
+//r:3.0
+//
+#define qtn_browser_list_close_window "Close"
+
+//d: Submenu item. Selecting this item allows pop-up windows to be opened from
+//d: the current webpage's domain. This applies to non-user initiated pop-ups.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows_allow "Allow pop-ups"
+
+//d: Submenu item. Selecting this item blocks pop-up windows being opened from
+//d: the current webpage's domain. This applies to non-user initiated pop-ups.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows_block "Block pop-ups"
+
+//d: The header for an option list dialog. The list contains
+//d: all open windows, selection will make that window active.
+//l: heading_pane_t1
+//r:3.0
+//
+#define qtn_browser_query_switch_window_header "Switch to:"
+
+//d: A confirmation dialog responding to a user
+//d: request to close the current window
+//l: popup_note_window
+//r:3.0
+//
+#define qtn_browser_query_close_window "Close current window?"
+
+//d: A pop-up note to indicate to the user that the maximum number
+//d: of popup windows allowed has been reached, no more may be opened
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_browser_note_pop_up_max_reached "Cannot open pop-up, maximum number reached."
+
+//d: An information note, indicating that a new window is being opened
+//d: will be added to the whitelist
+//l: popup_preview_text_window/opt3
+//r:3.0
+//
+#define qtn_browser_note_pop_up_window_opened "Opening new window"
+
+//-----------------------------------------------------------------------------
+// Settings for Multiple Windows
+//
+//d: Browser setting for enabling popup blocking
+//l: list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking "Pop-up blocking"
+
+//d: Selectable text for the Popup blocking setting
+//d: Popup blocking is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking_on "Enabled"
+
+//d: Selectable text for the Popup blocking setting
+//d: Popup blocking is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking_off "Disabled"
+
+// ==========================================================
+// Subscribe to
+// ==========================================================
+
+//d: Browser Subscribe to main menu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_list_subscribe_to "Subscribe to feeds"
+
+//-----------------------------------------------------------------------------
+// Popup dialog - stored preference data
+//
+
+//d: Tooltip note notifying the user that pop-ups have been disabled
+//d: and indicating to the user that they must use the options menu
+//d: to allow pop-ups for the current page
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_multiple_windows_tooltip "Pop-up window was blocked. Pop-ups can be enabled from Options"
+
+//d:Text for RSS Folder in Bookmarks view.
+//l:list_single_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_feeds_list "Web feeds"
+
+//----------------------------------------------------------------------------
+// Show Miniature
+//
+
+//d:Menu item to show Thumbnail view of the currently visited page.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_list_miniature_show_mini "Page overview"
+
+//--------------------------------------------------------------------------------
+// Smart Text recognition
+//
+
+//d:Browser setting for smart link detection
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_smartlink "Smart text recognition"
+
+//d: Enables automatic detection of phone numbers and email addresses when scrolling
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_brow_sett_smartlink_on "On"
+
+//d: Disables Jutomatic detection of phone numbers and email addresses when scrolling
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_brow_sett_smartlink_off "Off"
+
+
+//----------------------------------------------------------------------------
+// Page overview
+//
+
+//d:Tooltip when the Page Overview is switched on by Shortcut key 7.
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.0
+//
+#define qtn_browser_tooltip_page_overview_on "Mini map on"
+
+//d:Tooltip when the Page Overview is switched off by Shortcut key 7.
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.0
+//
+#define qtn_browser_tooltip_page_overview_off "Mini map off"
+
+//-----------------------------------------------------------------------------
+// Form Data Saving
+//
+
+//d: Browser setting for Form data saving
+//l: list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_form_data_saving "Form data saving"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_on "Form and password data"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_off "Off"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_only "Form data only"
+
+//d:Clear history and Recent URLs query string
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_privacy_query_clear_history "Clear history and recent URLs?"
+
+
+//d:Delete Form Data and Password query string
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_form_data_delete_all "Clear form and password data?"
+
+//d:Delete all privacy data query string
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_privacy_delete_all "Clear all privacy data?"
+
+
+//d:Delete Form Password Data query string
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_form_data_delete_password "Clear password data?"
+//----------------------------------------------------------------------------
+// Window selection
+//
+
+//d:Menu item to selects the focused window.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_select_window "Select"
+
+//d:Menu item to close all windows except the current one.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_close_all_but_this "Close all but this window"
+
+//----------------------------------------------------------------------------
+// Web feeds settings
+//
+
+//d: A list box item referring to settings categorised as Web Feeds
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_feeds "Web feeds"
+
+//d: When the Web feeds Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_feeds "Web feeds settings"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating "Automatic updating"
+
+//d: Selectable text for the Automatic updating setting
+//d: If Off is selected, automatic updating does not occur
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating_off "Off"
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 15 minutes
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_15min "Every 15 minutes"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every hour
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_hourly "Every hour"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 4 hours
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_4hours "Every 4 hours"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done daily
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_daily "Every day"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done weekly
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_weekly "Every week"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating_ap "Update via access point"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds while roaming
+//l: list_setting_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_autoupdating_roaming "Update while roaming"
+
+//d: Selectable text for the Automatic update setting while roaming
+//d: If On is selected, automatic update happens even if the user is roaming
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_val_autoupdating_roaming_on "On"
+
+//d: Selectable text for the Automatic update setting while roaming
+//d: If Off is selected, automatic update does not occur while roaming
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_val_autoupdating_roaming_off "Off"
+
+//d:Browser settings main list item texts
+//l:popup_note_window
+//
+
+#define qtn_browsers_sett_dataquery_autoupdate_ap "The access point has to be defined to enable automatic updating."
+
+//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
+//d: noting that turning the feature on may cost them money
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
+//d: Query user to close existing WML page when activating a link to a WML page
+//d: from another window. Only one WML page can be opened at once.
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_multiple_windows_wml "WML page in another window needs to be closed to proceed, close it?"
+
+//----------------------------------------------------------------------------
+// ToolBar Strings
+//
+//d: view sub menu item to show the toolbar
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_list_toolbar "Toolbar"
+//d: Tooltip that is showns when the toolbar is activated via the Options menu
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_tooltip_toolbar "Click an empty area of the page to show the toolbar"
+
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_objects "Load content"
+
+
+//d: Selectable text for the Load Content setting
+//d: Only text is loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_text "Text only"
+
+
+//d: Selectable text for the Load Content setting
+//d: Images are loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_images_no_flash "Images no flash"
+
+
+//d: Selectable text for the Load Content setting
+//d: All content is loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_all "All"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an anchor
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_list_show_address "Show address"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_save_image_to_gallery "Save to gallery"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_list_open_to_viewer "Open to viewer"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_options_call "Call"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_create_sms "Create text message"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number or e-mail
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_options_contacts "Add to contacts"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an e-mail
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_create_email "Create e-mail message"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_load_image "Load image"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_load_all_images "Load all images"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_enable_autoload_images "Enable images"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_enable_autoload_all "Enable images and flash"
+
+
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+#define qtn_browser_query_set_as_home_page "Set as home page?"
+
+
+
+// -----------------------------------------------------------------
+// Toolbar related strings
+// -----------------------------------------------------------------
+
+//d: Tooltip that is showns when the toolbar is activated via the Options menu
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_tooltip_toolbar "Click an empty area of the page to show the toolbar"
+
+
+
+// -----------------------------------------------------------------
+// Toolbar Button Command Settings Labels
+// -----------------------------------------------------------------
+
+//d: Toolbar Button 1 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button1 "Button 1"
+
+//d: Toolbar Button 2 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button2 "Button 2"
+
+//d: Toolbar Button 3 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button3 "Button 3"
+
+//d: Toolbar Button 4 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button4 "Button 4"
+
+//d: Toolbar Button 5 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button5 "Button 5"
+
+//d: Toolbar Button 6 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button6 "Button 6"
+
+//d: Toolbar Button 7 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button7 "Button 7"
+
+
+// -----------------------------------------------------------------
+// Toolbar Button Command Values
+// -----------------------------------------------------------------
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_keymap "Display key map"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_go_to_web_address "Go to web address"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_list_bookmarks "Bookmarks" //(toolbar only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_save_as_bookmark "Save as bookmark"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_recent_urls "Recent URLs" //(toolbar only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_find_keyword "Find keyword"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_reload "Reload"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_miniature_show "Page overview"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_previous_page "Back one page"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_go_to_hompage "Go to homepage"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_zoom_in "Zoom in"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_zoom_out "Zoom out"
+
+//d: Preferences for Zoom Mode: Options>Preferences>Shortcut keys><N>Key > Zoom Mode
+//l: list_set_graphic_pane_t1
+//r: Browser 7.x
+//
+#define qtn_browser_setting_zoom_mode "Zoom Mode"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_settings "Settings"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_rotate_screen "Rotate screen"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_subscribe_to_feeds "Subscribe to feeds"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_manage_bookmarks "Manage bookmarks"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_visual_history "History"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_view_images "View images"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_save_page "Save page"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_send "Send"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_switch_window "Switch window"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_toolbar "Display toolbar" // (keymap only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_help "Help"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_none "None"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_full_screen "Full screen"
+
+// -----------------------------------------------------------------
+// Toolbar Error Message
+// -----------------------------------------------------------------
+
+//d: Pop Up note if all toolbar buttons are set to "None"
+//l: popup_note_window
+//r: 5.0
+#define qtn_browser_setting_toolbar_save_dialog "You must assign a function to at least one of the toolbar buttons!"
+
+
+// -----------------------------------------------------------------
+// Toolbar On/Off Setting Values
+// -----------------------------------------------------------------
+
+//d:Setting for Enabling or Disabling the Toolbar
+//l: list_setting_pane_t1
+//r: 5.0
+#define qtn_browser_setting_toolbar_on_off "Toolbar On/Off"
+
+//d: Selectable text for the Toolbar On/Off setting
+//l: set_value_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_toolbar_on "On"
+
+//d: Selectable text for the Toolbar On/Off setting
+//l: set_value_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_toolbar_off "Off"
+
+
+// -----------------------------------------------------------------
+// Toolbar Settings group label and title strings
+// -----------------------------------------------------------------
+//d: Toolbar Settings group label
+//l:list_single_graphic_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_group_toolbar "Toolbar"
+
+//Toolbar Settings Group Title Pane
+//l: title_pane_t2/opt9
+//r:5.0
+//
+#define qtn_browser_setting_group_title_toolbar "Toolbar settings"
+
+
+// -----------------------------------------------------------------
+// ShortCut Keys Settings group label and title strings
+// -----------------------------------------------------------------
+
+//Shortcut Keys Settings group label
+//l:list_single_graphic_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_group_shortcuts "Shortcut keys"
+
+//Shortcut Keys Settings Group Title Pane
+//l: title_pane_t2/opt9
+//r:5.0
+//
+#define qtn_browser_setting_group_title_shortcuts "Shortcut key settings"
+
+
+// Shortcut Keys labels for settings
+
+//d: Shortcut key setting label for key "1"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key1 "1 Key"
+
+//d: Shortcut key setting label for key "2"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key2 "2 Key"
+
+//d: Shortcut key setting label for key "3"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key3 "3 Key"
+
+//d: Shortcut key setting label for key "4"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key4 "4 Key"
+
+//d: Shortcut key setting label for key "5"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key5 "5 Key"
+
+//d: Shortcut key setting label for key "6"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key6 "6 Key"
+
+//d: Shortcut key setting label for key "7"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key7 "7 Key"
+
+//d: Shortcut key setting label for key "8"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key8 "8 Key"
+
+//d: Shortcut key setting label for key "9"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key9 "9 Key"
+
+//d: Shortcut key setting label for key "0"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key0 "0 Key"
+
+//d: Shortcut key setting label for key "*"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_starkey "* Key"
+
+//d: Shortcut key setting label for key "#"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_hashkey "# Key"
+
+//d:List of feeds to choose from .
+//l:heading_pane_t1
+//r:5.0
+//
+#define qtn_browser_subscribe_list "Subscribe to"
+
+//d: Options menu item for displaying the shortcut keymap in a browser submenu
+//l: list_single_popup_submenu_pane_t1
+//r: 3.2.3, 5.0+
+#define qtn_browser_list_show_shortcut_keymap "Show Shortcut Keymap"
+
+//d: Options menu list item for displaying the shortcut keymap in the top level browser menu
+//l: list_single_pane_t1_cp2
+//r: 3.2.3, 5.0+, browser 7.x
+#define qtn_browser_list_main_show_shortcuts "Show shortcuts"
+
+//d:Command text associated to a softkey in the control pane.
+//d:Configure Keymap functionality.
+//l:control_pane_t1/opt7
+//
+#define text_softkey_configure "Configure"
+
+// -----------------------------------------------------------------
+// ShortCut Keymap text strings
+// -----------------------------------------------------------------
+
+//d: Shortcut key function Display Keymap
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_keymap "Show Keymap"
+
+//d: Shortcut key function Go To Web Address
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_go_to_web_address "Go to Web Address"
+
+//d: Shortcut key function Save as bookmark
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_save_as_bookmark "Save as Bookmark"
+
+//d: Shortcut key function Find Keyword
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_find_keyword "Find Keyword"
+
+//d: Shortcut key function Reload
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_reload "Reload"
+
+//d: Shortcut key function Page Overview
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_miniature_show "Page Overview"
+
+//d: Shortcut key function Back One Page
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_previous_page "Back One Page"
+
+//d: Shortcut key function Go to Homepage
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_go_to_homepage "Go to Homepage"
+
+//d: Shortcut key function Zoom In
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_zoom_in "Zoom In"
+
+//d: Shortcut key function Zoom Out
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_zoom_out "Zoom Out"
+
+//d: Shortcut key function Zoom Mode
+//l: cell_scut_pane
+//r: Browser 7.x
+//
+#define qtn_browser_keymap_text_zoom_mode "Zoom Mode"
+
+//d: Shortcut key function Settings
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_settings "Settings"
+
+//d: Shortcut key function Rotate Screen
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_rotate_screen "Rotate Screen"
+
+//d: Shortcut key function Subscribe To Feeds
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_subscribe_to_feeds "Subscribe To Feeds"
+
+//d: Shortcut key function Manage Bookmarks
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_manage_bookmarks "Manage Bookmarks"
+
+//d: Shortcut key function History
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_visual_history "History"
+
+//d: Shortcut key function View Images
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_view_images "View Images"
+
+//d: Shortcut key function Save Page
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_save_page "Save Page"
+
+//d: Shortcut key function Switch Window
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_switch_window "Switch Window"
+
+//d: Shortcut key function Display Toolbar
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_toolbar "Display Toolbar"
+
+//d: Shortcut key function Help
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_help "Help"
+
+//d: Shortcut key function None
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_none "None"
+
+//d: Shortcut key function Full Screen
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_full_screen "Full Screen"
+
+// -----------------------------------------------------------------
+// Touch Toolbar Button strings
+// -----------------------------------------------------------------
+
+//---------------------------------
+// Main Toolbar Strings
+//---------------------------------
+// Goto Address Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_gotoaddress_tt "Goto Address"
+
+// Show Zoom Slider Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_zoomshow_tt "Show Zoom Slider"
+
+// Hide Zoom Slider Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_zoomhide_tt "Hide Zoom Slider"
+
+//---------------------------------
+// Extended Toolbar Strings
+//---------------------------------
+//d:Extended Toolbar Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_tt "Expand toolbar"
+
+//d:Bookmarks Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_bm "Bookmarks"
+
+//d:Bookmarks Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_bm_tt "Bookmarks"
+
+//d:Home Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_home "Home"
+
+//d:Home Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_home_tt "Home"
+
+//d:Settings Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_settings "Settings"
+
+//d:Settings Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_settings_tt "Settings"
+
+
+//d:Save Bookmark Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_save_bookmark "Save Bookmark"
+
+//d:Save Bookmark Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_save_bookmark_tt "Save Bookmark"
+
+
+//d:Find Keyword Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_find_keyword "Find Keyword"
+
+//d:Find Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_find_keyword_tt "Find Keyword"
+
+//d:Find Next Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_findnext_tt "Find Next"
+
+//d:Find Previous Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_findprevious_tt "Find Previous"
+
+//d:Navigate Back in History Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_history_back_tt "Back"
+
+//d:Navigate Forward in History Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_history_forward_tt "Forward"
+
+//d:Subscribe Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_subscribe_list "Subscribe"
+
+//d:Subscribe Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_subscribe_list_tt "Subscribe"
+
+//d:Reload Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_reload "Reload"
+
+//d:Reload Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_reload_tt "Reload"
+
+//d:Page Overview Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_miniature_show "Show Miniature"
+
+//d:Page Overview Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_miniature_show_tt "Show Miniature"
+
+//d:Help Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_help "Help"
+
+//d:Help Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_help_tt "Help"
+
+//d:Goto Address Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_gotoaddress "Goto Address"
+
+//d:Show Zoom Slider Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_zoomshow "Show Zoom Slider"
+
+//d:Full Screen Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_full_screen "Full Screen"
+
+//d:Full Screen Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_full_screen_tt "Full Screen"
+
+//d:Send Url Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_send_url "Send Url"
+
+//d:Send Url Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_send_url_tt "Send Url"
+//d:Rotate Display Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_rotate "Rotate Display"
+
+//d:Rotate Display Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_rotate_tt "Rotate Display"
+
+//d:View Feeds Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_view_feeds "View Feeds"
+
+//d:View Feeds Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_view_feeds_tt "View Feeds"
+
+//d:Switch Window Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_switch_win "Switch Window"
+
+//d:Switch Window Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_switch_win_tt "Switch Window"
+
+
+//---------------------------------
+// Bookmark Toolbar Strings
+//---------------------------------
+//d:Add Bookmark Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_tb_add_bookmark "Add Bookmark"
+
+//d:Delete Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_tb_del_bookmark "Delete"
+
+// Add Bookmark Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_add_bookmark_tt "Add Bookmark"
+
+// Delete Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_del_bookmark_tt "Delete"
+
+// -----------------------------------------------------------------
+// Option menu sub-options
+// -----------------------------------------------------------------
+
+//d: "Go to" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_goto "Go to"
+
+//d: "Page Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_pageactions "Page actions"
+
+//d: "Bookmark Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_bmactions "Bookmark actions"
+
+//d: "Feeds Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_feedsactions "Feeds actions"
+
+//d: "Edit" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_edit "Edit"
+
+//d: "Mark/Unmark" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_markunmark "Mark/Unmark"
+
+//d: "View" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_view "View"
+
+//d: "Clear" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_clear "Clear"
+
+// -----------------------------------------------------------------
+// Go to sub-options
+// -----------------------------------------------------------------
+//d: "Web feeds" menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_web_feeds "Web feeds"
+
+//d: "New web page" menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_new_web_page "New web page"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_next "Next Toolbar"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_back "Back"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_forward "Forward"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_pageoverview "Page Overview"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_reload "Reload"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_findkeyword "Find Keyword"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_home "Home"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_subscribe "subscribe"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_go "Go"
+
+//d: List of feeds to choose from .
+//l: heading_pane_t1
+//
+#define qtn_browser_toolbar_subscribe_header "Select to subscribe"
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+//
+#define qtn_browser_query_set_as_home_page "Set as home page?"
+
+// -----------------------------------------------------------------
+// View sub-options
+// -----------------------------------------------------------------
+//d: Full Screen menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_full_screen_enter "Full Screen"
+
+// -----------------------------------------------------------------
+// Search strings
+// -----------------------------------------------------------------
+//d: Left softkey: (accept typing and activate search application)
+//l: control_pane_t1/opt7
+//r: 5.0
+//
+#define qtn_is_softkey_search "Search"
+//d: Search second level options menu text
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_is_list_search "Search"
+//d: Tooltip for go to/search icon
+//l: popup_preview_text_window_t1
+//r: 5.0
+//
+#define qtn_is_tooltip_goto_search "Go to web page or search"
+//d: settings view menu item
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browsers_sett_web_search_provider "Web search provider"
+//d: setting text when it is not defined
+//l: set_value_pane_t1
+//r: 5.0
+//
+#define qtn_is_label_not_selected "Not selected"
+//d: search editor default text
+//l: query_popup_data_pane_t1/opt4
+//r: 5.0
+//
+#define qtn_is_web_search "Web search"
+// -----------------------------------------------------------------
+// Service strings
+// -----------------------------------------------------------------
+//d: Here and now bookmark list item
+//l: list_single_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_is_recommendations "Here and Now"
+
+//d: Confirmation to install add-on browser
+//l: popup_note_window
+//r: 7.2
+#define qtn_install_addon_browser "A new browser is available. Would you like to install it?"
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project build file for Browser UI
+*
+*/
+
+
+/*
+* Order is important
+*/
+#include "../browser/group/bld.inf"
+#include "../operatormenu/group/bld.inf"
+#include "../videoservices/group/bld.inf"
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/aif/OperatorMenuaif.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Resource file for creating AIF
+*
+*/
+
+
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+ {
+ app_uid=0x10008D5E;
+ num_icons=2;
+ embeddability=KAppNotEmbeddable;
+ newfile=KAppDoesNotSupportNewFile;
+ }
+
+// End of File
Binary file browserui/operatormenu/aif/qgn_menu_operator_cxt.bmp has changed
Binary file browserui/operatormenu/aif/qgn_menu_operator_cxt_mask.bmp has changed
Binary file browserui/operatormenu/aif/qgn_menu_operator_lst.bmp has changed
Binary file browserui/operatormenu/aif/qgn_menu_operator_lst_mask.bmp has changed
Binary file browserui/operatormenu/cenrep/keys_operatormenu.xls has changed
Binary file browserui/operatormenu/conf/operatormenu.confml has changed
Binary file browserui/operatormenu/conf/operatormenu_10008D5E.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/data/OperatorMenu_caption.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Caption file for OperatorMenu
+*
+*/
+
+
+#include "operatormenu.loc"
+#include <apcaptionfile.rh>
+
+RESOURCE CAPTION_DATA
+{
+ caption=qtn_apps_operator_list;
+ shortcaption=qtn_apps_operator_grid;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/data/OperatorMenu_reg.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: RSS for registration file for OperatorMenu.
+*
+*/
+
+
+#include <appinfo.rh>
+#include <OperatorMenu.rsg>
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10008D5E
+
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "OperatorMenu";
+
+ localisable_resource_file = APP_RESOURCE_DIR"\\OperatorMenu";
+
+ localisable_resource_id = R_OPERATORMENU_LOCALISABLE_APP_INFO;
+ embeddability=KAppNotEmbeddable;
+ newfile = KAppDoesNotSupportNewFile;
+ }
+
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/data/operatormenu.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Operatormenu resource file
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+NAME OPME // For operator menu
+
+// INCLUDES
+
+#include <eikon.rh>
+#include "operatormenu.hrh"
+#include <operatormenu.loc>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <apcaptionfile.rh>
+#include <data_caging_paths_strings.hrh>
+#include <appinfo.rh>
+
+
+// CONSTANTS
+
+// MACROS
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf="OperatorMenu"; }
+
+RESOURCE EIK_APP_INFO
+ {
+ hotkeys=r_operatormenu_hotkeys;
+ menubar=r_operatormenu_menubar;
+ cba=R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+ }
+
+
+
+
+//----------------------------------------------------
+//
+// r_operatormenu_localisable_app_info
+// ?description
+//
+//----------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_operatormenu_localisable_app_info
+ {
+ short_caption = qtn_apps_operator_grid;
+ caption_and_icon =
+ CAPTION_AND_ICON_INFO
+ {
+ caption = qtn_apps_operator_list;
+
+#ifdef __SCALABLE_ICONS
+ number_of_icons = 1;
+ icon_file =
+ APP_RESOURCE_DIR"\\operatorMenu_aif.mif";
+#else
+ number_of_icons = 2;
+
+ icon_file =
+ APP_RESOURCE_DIR"\\operatormenu_aif.mbm";
+
+#endif // __SCALABLE_ICONS
+ };
+ }
+
+
+//----------------------------------------------------
+//
+// r_operatormenu_hotkeys
+// Hotkeys for operator menu
+//
+//----------------------------------------------------
+//
+RESOURCE HOTKEYS r_operatormenu_hotkeys
+ {
+ control=
+ {
+ HOTKEY { command=EAknCmdExit; key='e'; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_operatormenu_menubar
+// MenuBar for operator menu (only the exit item)
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_operatormenu_menubar
+ {
+ titles=
+ {
+ MENU_TITLE { menu_pane=R_AVKON_MENUPANE_EXIT; }
+ };
+ }
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/group/OperatorMenu.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file for OperatorMenu
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET OperatorMenu.exe
+TARGETTYPE exe
+
+UID 0x100039CE 0x10008D5E
+TARGETPATH /system/apps/OperatorMenu
+
+epocstacksize 0x5000
+
+CAPABILITY CAP_APPLICATION
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../src
+SOURCE OperatorMenuApp.cpp
+SOURCE OperatorMenuAppUi.cpp
+SOURCE OperatorMenuDocument.cpp
+
+START RESOURCE ../data/Operatormenu.rss
+DEPENDS avkon.rsg
+HEADER
+TARGETPATH APP_RESOURCE_DIR
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+END
+
+START RESOURCE ../data/Operatormenu_reg.rss
+DEPENDS operatormenu.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
+USERINCLUDE . ../inc
+
+SYSTEMINCLUDE .
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY apparc.lib
+LIBRARY cone.lib
+LIBRARY eikcore.lib
+LIBRARY avkon.lib
+LIBRARY browserlauncher.lib
+LIBRARY CentralRepository.lib
+LIBRARY FeatMgr.lib
+
+START WINS
+// ?wins_specific_information
+END
+
+START MARM
+// ?marm_specific_information
+END
+
+// DEFFILE ?filename
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Build information file
+*
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths_strings.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+// Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+../rom/operatormenu.iby CORE_APP_LAYER_IBY_EXPORT_PATH(operatormenu.iby)
+../rom/OperatorMenuResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(OperatorMenuResources.iby)
+../loc/operatormenu.loc APP_LAYER_LOC_EXPORT_PATH(operatormenu.loc)
+
+../conf/operatormenu.confml APP_LAYER_CONFML(operatormenu.confml)
+../conf/operatormenu_10008D5E.crml APP_LAYER_CRML(operatormenu_10008D5E.crml)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+
+#ifdef __SCALABLE_ICONS
+ gnumakefile opmenuaifsvgiconsdc.mk
+#else
+ gnumakefile opmenuaificonsdc.mk
+#endif
+
+./OperatorMenu.mmp
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE operatormenu_aif.mif
+OPTION SOURCES -c8,8 qgn_menu_operator
+END
+
+PRJ_MMPFILES
+./OperatorMenu.mmp
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/group/opmenuaificons.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,68 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\SYSTEM\APPS\OPERATORMENU
+ICONTARGETFILENAME=$(TARGETDIR)\operatormenu_aif.mbm
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_operator_cxt.bmp\
+ /c8,8 qgn_menu_operator_lst.bmp
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/group/opmenuaificonsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,68 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\operatormenu_aif.mbm
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_operator_lst.bmp \
+ /c8,8 qgn_menu_operator_cxt.bmp
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/group/opmenuaifsvgicons.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\SYSTEM\APPS\OPERATORMENU
+ICONTARGETFILENAME=$(TARGETDIR)\operatormenu_aif.mif
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_operator.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/group/opmenuaifsvgiconsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\operatormenu_aif.mif
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_operator.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
Binary file browserui/operatormenu/help/data/xhtml.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/help/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+*
+* Description:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+#if !defined(__PLATFORM_VERSION_32__) && !defined(__PLATFORM_VERSION_5250__) && !defined(__PLATFORM_VERSION_S60_50__)
+
+PRJ_EXPORTS
+:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite
+
+../inc/ope.hlp.hrh APP_LAYER_PLATFORM_EXPORT_PATH(csxhelp/ope.hlp.hrh)
+../rom/operatormenuhelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(operatormenuhelps_variant.iby)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/help/inc/ope.hlp.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,14 @@
+//
+// ope.hlp.hrh
+//
+
+//
+// File generated by CSXHelp Utilities on 2009-04-17
+//
+
+#ifndef __OPE_HLP_HRH__
+#define __OPE_HLP_HRH__
+
+_LIT(KOPERATOR_HLP_OPTIONS_LIST, "OPERATOR_HLP_OPTIONS_LIST"); //
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/help/rom/operatormenuhelps_variant.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for Operatormenu Help
+*
+*/
+
+#ifndef __OPERATORMENUHELPS_VARIANT_IBY__
+#define __OPERATORMENUHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE) && defined(__OPERATORMENU_USED)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D5E\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D5E\contents.zip)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D5E\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D5E\index.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D5E\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D5E\keywords.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D5E\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D5E\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/inc/OperatorMenuApp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for COperatorMenuApp
+*
+*/
+
+
+#ifndef OPERATORMENUAPP_H
+#define OPERATORMENUAPP_H
+
+// INCLUDES
+#include <aknapp.h>
+
+// CONSTANTS
+// UID of the application
+const TUid KUidOperatorMenu = { 0x10008D5E };
+
+// CLASS DECLARATION
+
+/**
+* COperatorMenuApp application class.
+* Provides factory to create concrete document object.
+*
+*/
+class COperatorMenuApp : public CAknApplication
+ {
+
+ private: //From base class
+
+ /**
+ * From CApaApplication, creates COperatorMenuDocument document object.
+ * @return A pointer to the created document object.
+ */
+ CApaDocument* CreateDocumentL();
+
+ /**
+ * From CApaApplication, returns application's UID (KUidOperatorMenu).
+ * @return The value of KUidOperatorMenu.
+ */
+ TUid AppDllUid() const;
+ };
+
+#endif
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/inc/OperatorMenuAppUi.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,189 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for COperatorMenuAppUi
+*
+*/
+
+
+#ifndef OPERATORMENUAPPUI_H
+#define OPERATORMENUAPPUI_H
+
+// INCLUDES
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikproc.h>
+#include <e32std.h>
+#include <coeccntx.h>
+#include <aknappui.h>
+#include <browserlauncher.h>
+#include <downloadedcontenthandler.h>
+#include <centralrepository.h>
+#include <httpcachemanagerinternalcrkeys.h>
+#include "OperatorMenuPrivateCRKeys.h"
+#include <favouriteslimits.h> //KFavouritesMaxUrl
+#include <browseroverriddensettings.h>
+
+// CONSTANTS
+const TUid KUidBrowserApplication = { 0x10008d39 }; //Browser UID
+const TUid KUidCacheManager = { 0x101f8557 }; //Cache manager UID
+_LIT( KBrowserPath, "Z:\\system\\apps\\Browser\\Browser.app" ); //Browser path
+
+// FORWARD DECLARATIONS
+class COperatorMenuContainer;
+class COperatorMenuAppUi;
+
+// CLASS DECLARATION
+
+/**
+* Class responsible for delayed browser lunching.
+*
+* @since Series 60 2.0
+*/
+class COperatorDelayedStarter : public CActive
+{
+public:
+ COperatorDelayedStarter(COperatorMenuAppUi* aOperatorMenuAppUi);
+ ~COperatorDelayedStarter();
+ //Start() puts the class to the active scheduler
+ void Start();
+ // From CActive
+ void RunL();
+ void DoCancel();
+private:
+ COperatorMenuAppUi* iOperatorMenuAppUi;
+};
+/**
+* Application UI class.
+* Provides support for the EIKON control architecture
+*
+* @since Series 60 2.0
+*/
+class COperatorMenuAppUi : public CAknAppUi,
+ public MDownloadedContentHandler,
+ MApaEmbeddedDocObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Default Constructor
+ */
+ COperatorMenuAppUi();
+
+ /**
+ * Destructor.
+ */
+ ~COperatorMenuAppUi();
+
+ public: // New functions
+
+ public: // From MDownloadedContentHandler
+ /**
+ * Handle downloaded content that has been saved to a file,
+ * and return ETrue if it was handled successfully.
+ * @param aFileName File name with path.
+ * @param aParamList Generic parameter list.
+ * @param aContinue Output parameter: It must be ETrue if the caller wants
+ * Browser not to terminate after the content is handled.
+ * @return ETrue if the implementer has processed the content. If it is
+ * EFalse, BrowserLauncher opens that content in an
+ * appropriate viewer application.
+ */
+ TBool HandleContentL( const TDesC& aFileName, const CAiwGenericParamList& aParamList, TBool& aContinue );
+
+ /**
+ * Reserved for future use.
+ */
+ TAny* DownloadedContentHandlerReserved1( TAny* aAnyParam );
+
+ private:
+ /**
+ * EPOC Default Constructor
+ */
+ void ConstructL();
+
+ /**
+ * From CEikAppUi, takes care of command handling.
+ * @param aCommand command to be handled
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * From CEikAppUi, handles key events.
+ * @param aKeyEvent Event to handled.
+ * @param aType Type of the key event.
+ * @return Response code (EKeyWasConsumed, EKeyWasNotConsumed).
+ */
+ virtual TKeyResponse HandleKeyEventL(
+ const TKeyEvent& aKeyEvent,TEventCode aType );
+
+ private: //From MApaEmbeddedDocObserver
+ /**
+ * From MApaEmbeddedDocObserver, observes when the
+ * embedded browser exits
+ * @param aMode The browser exit mode (ignored in OperatorMenu)
+ */
+ void NotifyExit( TExitMode aMode );
+
+ private: //New functions
+ /**
+ * Launches browser with operator specific url as start page
+ * @since Series 60 2.0
+ */
+ void LaunchBrowserEmbeddedWithOperatorUrlL();
+
+ /**
+ * Launches browser in embedded mode with the default
+ * Access Point's homepage as start page
+ * @since Series 60 2.0
+ */
+ void LaunchBrowserEmbeddedWithDefaultAPHomepageL();
+ public:
+ /**
+ * Launches the browser according to the available parameters
+ * ( operator specific url )
+ * @since Series 60 2.0
+ */
+ void LaunchBrowserL();
+
+ public: // Functions from MEikStatusPaneObserver
+
+ /**
+ * Handles status pane size change.
+ */
+ void HandleStatusPaneSizeChange();
+
+ private: //Data
+
+ //OperatorMenu App view container (not shown in final App)
+ COperatorMenuContainer* iAppContainer;
+
+ // Access central repository of HttpCacheManager
+ CRepository* iRepository;
+
+ // Access central repository of OperatorMenu
+ CRepository* iRepositoryOp;
+
+ //Buffer where the url is read
+ TBuf<KFavouritesMaxUrl> iUrl;
+
+ //settings to override
+ TBrowserOverriddenSettings *iOverriddenSettings;
+
+ TBool iLaunched;
+ COperatorDelayedStarter* iDelayedStarter;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/inc/OperatorMenuDocument.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for COperatorMenuDocument
+*
+*/
+
+#ifndef OPERATORMENUDOCUMENT_H
+#define OPERATORMENUDOCUMENT_H
+
+// INCLUDES
+#include <akndoc.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CEikAppUi;
+
+// CLASS DECLARATION
+
+/**
+* COperatorMenuDocument application class.
+*/
+class COperatorMenuDocument : public CAknDocument
+ {
+ public: // Constructor and destructor
+ /**
+ * Two-phased constructor.
+ * @param aApp Application instance
+ * @since Series 60 2.0
+ */
+ static COperatorMenuDocument* NewL( CEikApplication& aApp );
+
+ /**
+ * Destructor.
+ */
+ ~COperatorMenuDocument();
+
+ private:
+
+ /**
+ * Default constructor.
+ * @param aApp Application instance
+ */
+ COperatorMenuDocument( CEikApplication& aApp );
+
+ /**
+ * Epoc Constructor
+ */
+ void ConstructL();
+
+ private:
+
+ /**
+ * From CEikDocument, create COperatorMenuAppUi "App UI" object.
+ */
+ CEikAppUi* CreateAppUiL();
+ };
+
+#endif
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/inc/OperatorMenuPrivateCRKeys.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef OPERATORMENUPRIVATECRKEYS_H
+#define OPERATORMENUPRIVATECRKEYS_H
+
+const TUid KCrUidOperatorMenu = {0x10008D5E};
+
+// Vertical layout enabled in browserui when it is started
+// from operator menu( 0 not enabled 1 enabled)
+const TUint32 KOpMenuVerticalLayoutEnabled = 0x0000001;
+
+// Autoload images enabled in browserui when it is started
+// from operator menu( 0 not enabled 1 enabled)
+const TUint32 KOpMenuAutoLoadImages = 0x0000002;
+
+// Sets the font size for the browser ui when it is started
+// from operator menu (values 0"All Large",1 "Large",2 "Normal",3 "Small", 4 "All Small")
+const TUint32 KOpMenuFontSize = 0x0000003;
+
+// Full screen enabled in browserui when it is started from
+// operator menu(1"Softkeys Only", 2 "Full Screen")
+const TUint32 KOpMenuFullScreen = 0x0000004;
+
+// Custom access point provided by the operator. If specified,
+// contains an id of a read only access point what is then set
+// as default and it cannot be changed manually. If not defined,
+// operator menu works as before.
+// from operator menu( 0 - not specified, otherwise contains the access point id)
+const TUint32 KOpMenuDefAp = 0x0000005;
+
+#endif // OPERATORMENUPRIVATECRKEYS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/inc/operatormenu.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declarations of constants of OperatorMenu
+*
+*/
+
+
+#ifndef OPERATORMENU_HRH
+#define OPERATORMENU_HRH
+
+
+#endif // OPERATORMENU_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/loc/operatormenu.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: localisation strings for Operator menu
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d:Caption strings for operator Menu in list view
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:
+//
+#define qtn_apps_operator_list "Operator menu"
+
+//d:Caption strings for Operator Menu in list view
+//l:cell_app_pane_t1
+//w:
+//r:
+//
+#define qtn_apps_operator_grid "Operator menu"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/rom/OperatorMenuResources.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for those parts of Operatormenu that needs localization
+*
+*/
+
+
+#ifndef __OPERATORMENU_RESOURCES_IBY__
+#define __OPERATORMENU_RESOURCES_IBY__
+
+S60_APP_CAPTION(Operatormenu)
+S60_APP_RESOURCE(Operatormenu)
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/rom/operatormenu.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for Operatormenu
+*
+*/
+
+
+#ifndef __OPERATORMENU_IBY__
+#define __OPERATORMENU_IBY__
+
+#ifdef __OPERATOR_MENU
+S60_APP_EXE(Operatormenu)
+S60_APP_AIF_ICONS(Operatormenu)
+S60_UPGRADABLE_APP_REG_RSC(Operatormenu)
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/src/OperatorMenuApp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: COperatorMenuApp Implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "OperatorMenuApp.h"
+#include "OperatorMenuDocument.h"
+#include <eikstart.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+LOCAL_C CApaApplication* NewApplication()
+ {
+ return new COperatorMenuApp;
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ return EikStart::RunApplication( NewApplication );
+ }
+
+// ---------------------------------------------------------
+// COperatorMenuApp::AppDllUid()
+// Returns application UID
+// ---------------------------------------------------------
+//
+TUid COperatorMenuApp::AppDllUid() const
+ {
+ return KUidOperatorMenu;
+ }
+
+
+// ---------------------------------------------------------
+// COperatorMenuApp::CreateDocumentL()
+// Creates COperatorMenuDocument object
+// ---------------------------------------------------------
+//
+CApaDocument* COperatorMenuApp::CreateDocumentL()
+ {
+ return COperatorMenuDocument::NewL( *this );
+ }
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/src/OperatorMenuAppUi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,406 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: COperatorMenuAppUi implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "OperatorMenuAppUi.h"
+
+#include <featmgr.h>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+
+#include <centralrepository.h>
+#include <menu2internalCRkeys.h>
+// CONSTANTS
+_LIT(KUrlLaunchParameter, "4 ");
+_LIT(KLongZeroLaunchParameter, "5");
+const TInt KUrlLaunchParamLength = 2;
+
+const TInt KCenRepBufferSize = 255;
+const TText KStrComma = ',';
+#define KOperatorMenuUID 0x10008D5E
+
+// ================= LOCAL FUNCTIONS ========================
+
+// ----------------------------------------------------------------------------
+// OperatorMenuUIDText
+//
+// @param aOperatorMenuUid buffer to set OperatorMenu UID as text
+// ----------------------------------------------------------------------------
+//
+void OperatorMenuUIDText( TDes& aOperatorMenuUid )
+ {
+ // TUid method name return UID in format [UID], but we need only UID part.
+ TUidName uidName( TUid::Uid( KOperatorMenuUID ).Name() );
+ aOperatorMenuUid.Copy( uidName.Mid( 1, KMaxUidName - 2 ) );
+ aOperatorMenuUid.UpperCase();
+ }
+
+// ----------------------------------------------------------------------------
+// SetOperatorMenuHiddenInAppShellL
+//
+// @param aHidden Whether OperatorMenu should be hidden
+// ----------------------------------------------------------------------------
+//
+void SetOperatorMenuHiddenInAppShellL( TBool aHidden )
+ {
+ CRepository* appShellRepository = CRepository::NewL( KCRUidMenu );
+ CleanupStack::PushL( appShellRepository );
+
+ // Read current value of the app shell hidden apps key
+ TBuf<KCenRepBufferSize> keyContent;
+ TInt err = appShellRepository->Get( KMenuHideApplication, keyContent );
+ if ( err != KErrNone )
+ {
+ User::Leave( err );
+ }
+
+ TBool updated( EFalse );
+
+ TBuf<8> OperatorMenuUid;
+ OperatorMenuUIDText( OperatorMenuUid );
+
+ // Search for PoC uid in the content (ignore case)
+ TInt offset = keyContent.FindC( OperatorMenuUid );
+ if ( offset == KErrNotFound && aHidden )
+ {
+ // PoC is not in the list but should be
+ //
+ __ASSERT_ALWAYS( keyContent.Length() + 9 < KCenRepBufferSize,
+ User::Leave( KErrOverflow ) );
+ if ( keyContent.Length() > 0 )
+ {
+ keyContent.Append( KStrComma );
+ }
+ keyContent.Append( OperatorMenuUid );
+ updated = ETrue;
+ }
+ else if ( offset != KErrNotFound && !aHidden )
+ {
+ // PoC is in the list but shouldn't be
+ //
+ if ( offset == 0 )
+ {
+ // Delete PoC uid and following comma (if any)
+ keyContent.Delete( 0, Min( 9, keyContent.Length() ) );
+ updated = ETrue;
+ }
+ else if ( keyContent[offset - 1] == ',' )
+ {
+ // Delete PoC uid and preceding comma
+ keyContent.Delete( offset - 1, 9 );
+ updated = ETrue;
+ }
+ else
+ {
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+ if ( updated )
+ {
+ err = appShellRepository->Set( KMenuHideApplication, keyContent );
+ if ( err != KErrNone )
+ {
+ User::Leave( err );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( appShellRepository );
+ }
+
+// ----------------------------------------------------------
+// COperatorDelayedStarter::COperatorDelayedStarter(COperatorMenuAppUi* aOperatorMenuAppUi)
+// ----------------------------------------------------------
+//
+COperatorDelayedStarter::COperatorDelayedStarter(COperatorMenuAppUi* aOperatorMenuAppUi)
+: CActive( EPriorityLow )
+ {
+ CActiveScheduler::Add( this );
+ iOperatorMenuAppUi = aOperatorMenuAppUi;
+ }
+
+// ----------------------------------------------------------
+// COperatorDelayedStarter::~COperatorDelayedStarter()
+// ----------------------------------------------------------
+//
+COperatorDelayedStarter::~COperatorDelayedStarter()
+ {
+ Cancel();
+ Deque();
+ }
+
+// ----------------------------------------------------------
+// COperatorDelayedStarter::Start()
+// ----------------------------------------------------------
+//
+void COperatorDelayedStarter::Start()
+ {
+ SetActive();
+ TRequestStatus* reqStat= &iStatus;
+ User::RequestComplete( reqStat, KErrNone );
+ }
+
+// ----------------------------------------------------------
+// COperatorDelayedStarter::RunL()
+// ----------------------------------------------------------
+//
+void COperatorDelayedStarter::RunL()
+ {
+ iOperatorMenuAppUi->LaunchBrowserL();
+ }
+
+// ----------------------------------------------------------
+// COperatorDelayedStarter::
+// ----------------------------------------------------------
+//
+void COperatorDelayedStarter::DoCancel()
+ {
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// ----------------------------------------------------------
+// COperatorMenuAppUi::COperatorMenuAppUi()
+// ----------------------------------------------------------
+//
+COperatorMenuAppUi::COperatorMenuAppUi()
+ {
+ }
+
+// ----------------------------------------------------------
+// COperatorMenuAppUi::ConstructL()
+// ----------------------------------------------------------
+//
+void COperatorMenuAppUi::ConstructL()
+ {
+ BaseConstructL(/* ENoScreenFurniture |*/ ENonStandardResourceFile /*| ENoAppResourceFile | EAknEnableSkin*/ );
+
+ // Connect to HttpCacheManager central repository
+ iRepository = CRepository::NewL( KCRUidCacheManager );
+ // Connect to OperatorMenu central repository
+ iRepositoryOp = CRepository::NewL( KCrUidOperatorMenu );
+
+ //Launch the browser with the Operator specific Url
+ //or with default AP's homepage if Operator domain url not available
+ //LaunchBrowserL();
+ iLaunched = EFalse;
+
+ TBool OperatorMenuSupport = FeatureManager::FeatureSupported( KFeatureIdOperatorMenu );
+ if ( OperatorMenuSupport )
+ {
+ iDelayedStarter = new (ELeave) COperatorDelayedStarter( this );
+ iDelayedStarter->Start();
+ }
+ else
+ {
+ SetOperatorMenuHiddenInAppShellL( ETrue );
+ Exit();
+ }
+ }
+// ----------------------------------------------------
+// COperatorMenuAppUi::~COperatorMenuAppUi()
+// ----------------------------------------------------
+//
+COperatorMenuAppUi::~COperatorMenuAppUi()
+ {
+ delete iRepository;
+ delete iRepositoryOp;
+
+ if( iOverriddenSettings )
+ {
+ delete iOverriddenSettings;
+ iOverriddenSettings = NULL;
+ }
+ if( iDelayedStarter )
+ {
+ delete iDelayedStarter;
+ iDelayedStarter = NULL;
+ }
+ }
+
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::HandleKeyEventL(
+// ----------------------------------------------------
+//
+TKeyResponse COperatorMenuAppUi::HandleKeyEventL(
+ const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/ )
+ {
+ return EKeyWasNotConsumed;
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::HandleCommandL(TInt aCommand)
+// ----------------------------------------------------
+//
+void COperatorMenuAppUi::HandleCommandL( TInt aCommand )
+ {
+ switch ( aCommand )
+ {
+ case EAknSoftkeyBack:
+ case EAknSoftkeyExit:
+ case EEikCmdExit:
+ case EAknCmdExit:
+ {
+ Exit();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::HandleContentL
+// Handles the content coming from the embedded browser.
+// Returns EFalse: content will be passed on to framework
+// ----------------------------------------------------
+//
+TBool COperatorMenuAppUi::HandleContentL( const TDesC& /*aFileName*/, const CAiwGenericParamList& /*aParamList*/, TBool& aContinue )
+ {
+ aContinue = EFalse;
+ return EFalse;
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::DownloadedContentHandlerReserved1
+// ( Reserved for future use )
+// ----------------------------------------------------
+//
+TAny* COperatorMenuAppUi::DownloadedContentHandlerReserved1( TAny* /*aAnyParam*/ )
+ {
+ // Empty implementation.
+ return NULL;
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::LaunchBrowserL()
+// ----------------------------------------------------
+//
+void COperatorMenuAppUi::LaunchBrowserL()
+ {
+ TBool LaunchWithUrl( EFalse );
+ TInt value;
+
+ if( !iLaunched )
+ {
+ iLaunched = ETrue;
+
+ //If centralrepository of HttpCahemanager is available...
+ if ( iRepository )
+ {
+ // Read the URL from CacheManager central repository
+ if ( KErrNone == iRepository->Get( KOperatorDomainUrl, iUrl ) )
+ {
+ LaunchWithUrl = ETrue;
+ }
+ }
+
+ //If centralrepository of OperatorMenu is available...
+ if ( iRepositoryOp )
+ {
+ delete iOverriddenSettings;
+ iOverriddenSettings = NULL;
+
+ iOverriddenSettings = new (ELeave) TBrowserOverriddenSettings;
+
+ //Read the values to override
+ if ( KErrNone == iRepositoryOp->Get( KOpMenuVerticalLayoutEnabled, value ) )
+ {
+ iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsSmallScreen, (TUint) value);
+ }
+ if ( KErrNone == iRepositoryOp->Get( KOpMenuAutoLoadImages, value ) )
+ {
+ iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsAutoLoadImages, (TUint) value);
+ }
+ if ( KErrNone == iRepositoryOp->Get( KOpMenuFontSize, value ) )
+ {
+ iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsFontSize, (TUint) value);
+ }
+ if ( KErrNone == iRepositoryOp->Get( KOpMenuFullScreen, value ) )
+ {
+ iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsFullScreen, (TUint) value);
+ }
+ if ( KErrNone == iRepositoryOp->Get( KOpMenuDefAp, value ) )
+ {
+ iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsCustomAp, (TUint) value);
+ }
+ }
+ }
+
+ // Launch browser according to the given launch type
+ if( LaunchWithUrl && iUrl.Length() )
+ {
+ LaunchBrowserEmbeddedWithOperatorUrlL();
+ }
+ else
+ {
+ LaunchBrowserEmbeddedWithDefaultAPHomepageL();
+ }
+ Exit();
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::LaunchBrowserEmbeddedWithUrlL
+// ----------------------------------------------------
+//
+void COperatorMenuAppUi::LaunchBrowserEmbeddedWithOperatorUrlL()
+ {
+ //Pass the operator specific url to browser
+ //(read from cachemanager ini file in LaunchBrowserL)
+ HBufC* url = NULL;
+ url = HBufC::NewLC( iUrl.Length() + KUrlLaunchParamLength );
+ url->Des().Append( KUrlLaunchParameter );
+ url->Des().Append( iUrl );
+
+ CBrowserLauncher* launcher = CBrowserLauncher::NewLC();
+
+ launcher->LaunchBrowserSyncEmbeddedL( url->Des(), this, iOverriddenSettings );
+
+ CleanupStack::PopAndDestroy(); //Launcher
+ CleanupStack::PopAndDestroy(); // url HBufC
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::NotifyExit
+// ----------------------------------------------------
+//
+void COperatorMenuAppUi::NotifyExit(TExitMode /*aMode*/)
+ {
+ }
+
+void COperatorMenuAppUi::LaunchBrowserEmbeddedWithDefaultAPHomepageL()
+ {
+ //Start the browser with parameter "5" to launch to default AP homepage
+ CBrowserLauncher* launcher = CBrowserLauncher::NewLC();
+
+ launcher->LaunchBrowserSyncEmbeddedL( KLongZeroLaunchParameter, this, iOverriddenSettings );
+
+ CleanupStack::PopAndDestroy();
+ }
+
+// ----------------------------------------------------
+// COperatorMenuAppUi::HandleStatusPaneSizeChange
+// ----------------------------------------------------
+//
+void COperatorMenuAppUi::HandleStatusPaneSizeChange()
+ {
+ }
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/src/OperatorMenuDocument.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: COperatorMenuDocument implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "OperatorMenuDocument.h"
+#include "OperatorMenuAppUi.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// constructor
+COperatorMenuDocument::COperatorMenuDocument( CEikApplication& aApp )
+: CAknDocument( aApp )
+ {
+ }
+
+// destructor
+COperatorMenuDocument::~COperatorMenuDocument()
+ {
+ }
+
+// EPOC default constructor can leave.
+void COperatorMenuDocument::ConstructL()
+ {
+ }
+
+// Two-phased constructor.
+COperatorMenuDocument* COperatorMenuDocument::NewL( CEikApplication& aApp )
+ {
+ COperatorMenuDocument* self = new ( ELeave ) COperatorMenuDocument( aApp );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------
+// COperatorMenuDocument::CreateAppUiL()
+// constructs COperatorMenuAppUi
+// ----------------------------------------------------
+//
+CEikAppUi* COperatorMenuDocument::CreateAppUiL()
+ {
+ return new (ELeave) COperatorMenuAppUi;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/aif/VideoServicesaif.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Resource file for creating AIF
+*
+*/
+
+
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+ {
+ app_uid=0x10281893;
+ num_icons=1;
+ embeddability=KAppNotEmbeddable;
+ newfile=KAppDoesNotSupportNewFile;
+ }
+
+// End of File
Binary file browserui/videoservices/cenrep/keys_videoservices.xls has changed
Binary file browserui/videoservices/conf/videoservices.confml has changed
Binary file browserui/videoservices/conf/videoservices_10281893.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/data/VideoServices.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: VideoServices resource file
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+NAME VIDS // For video Services
+
+// INCLUDES
+
+#include <eikon.rh>
+#include "VideoServices.hrh"
+#include "videoservices.loc"
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <apcaptionfile.rh>
+#include <appinfo.rh>
+#include <data_caging_paths_strings.hrh>
+
+// CONSTANTS
+
+// MACROS
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf="VideoServices"; }
+
+RESOURCE EIK_APP_INFO
+ {
+ hotkeys=r_videoservices_hotkeys;
+ menubar=r_videoservices_menubar;
+ cba=R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+ }
+
+
+//----------------------------------------------------
+//
+// r_videoservices_localisable_app_info
+// ?description
+//
+//----------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_videoservices_localisable_app_info
+ {
+ short_caption = qtn_apps_video_grid;
+ caption_and_icon =
+ CAPTION_AND_ICON_INFO
+ {
+ caption = qtn_apps_video_list;
+ number_of_icons = 1;
+ icon_file = APP_RESOURCE_DIR"\\VideoServices_AIF.MIF";
+ };
+ }
+
+
+//----------------------------------------------------
+//
+// r_videoservices_hotkeys
+// Hotkeys for video services
+//
+//----------------------------------------------------
+//
+RESOURCE HOTKEYS r_videoservices_hotkeys
+ {
+ control=
+ {
+ HOTKEY { command=EAknCmdExit; key='e'; }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_videoservices_menubar
+// MenuBar for video services (only the exit item)
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_videoservices_menubar
+ {
+ titles=
+ {
+ MENU_TITLE { menu_pane=R_AVKON_MENUPANE_EXIT; }
+ };
+ }
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/data/VideoServices_caption.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Caption file for VideoServices
+*
+*/
+
+
+#include "videoservices.loc"
+#include <apcaptionfile.rh>
+
+RESOURCE CAPTION_DATA
+{
+ caption=qtn_apps_video_list;
+ shortcaption=qtn_apps_video_grid;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/data/VideoServices_reg.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: RSS for registration file for VideoServices.
+*
+*/
+
+
+#include <appinfo.rh>
+#include <VideoServices.rsg>
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10281893
+
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "VideoServices";
+
+ localisable_resource_file = APP_RESOURCE_DIR"\\VideoServices";
+
+ localisable_resource_id = R_VIDEOSERVICES_LOCALISABLE_APP_INFO;
+ embeddability=KAppNotEmbeddable;
+ newfile = KAppDoesNotSupportNewFile;
+ }
+
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/group/VideoServices.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file for VideoServices
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET VideoServices.exe
+TARGETTYPE exe
+
+UID 0x100039CE 0x10281893
+TARGETPATH /system/apps/VideoServices
+
+epocstacksize 0x5000
+
+CAPABILITY CAP_APPLICATION
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../src
+SOURCE VideoServicesApp.cpp
+SOURCE VideoServicesAppUi.cpp
+SOURCE VideoServicesDocument.cpp
+SOURCE VideoServicesContainer.cpp
+
+START RESOURCE ../data/VideoServices.rss
+DEPENDS avkon.rsg
+HEADER
+TARGETPATH APP_RESOURCE_DIR
+
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+END
+
+START RESOURCE ../data/VideoServices_reg.rss
+DEPENDS videoservices.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
+USERINCLUDE . ../inc
+
+SYSTEMINCLUDE .
+APP_LAYER_SYSTEMINCLUDE
+LIBRARY euser.lib
+LIBRARY apparc.lib
+LIBRARY cone.lib
+LIBRARY eikcore.lib
+LIBRARY avkon.lib
+LIBRARY browserlauncher.lib
+LIBRARY CentralRepository.lib
+
+START WINS
+// ?wins_specific_information
+END
+
+START MARM
+// ?marm_specific_information
+END
+
+// DEFFILE ?filename
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Build information file
+*
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths_strings.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/VideoServices.iby CORE_APP_LAYER_IBY_EXPORT_PATH(VideoServices.iby)
+../rom/VideoServicesResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VideoServicesResources.iby)
+../loc/videoservices.loc APP_LAYER_LOC_EXPORT_PATH(videoservices.loc)
+
+../conf/videoservices.confml APP_LAYER_CONFML(videoservices.confml)
+../conf/videoservices_10281893.crml APP_LAYER_CRML(videoservices_10281893.crml)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+gnumakefile videoservicesaifsvgiconsdc.mk
+
+./VideoServices.mmp
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE VideoServices_AIF.mif
+OPTION SOURCES -c8,8 qgn_menu_mtv
+END
+
+PRJ_MMPFILES
+
+./VideoServices.mmp
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/group/videoservicesaifsvgiconsdc.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\VideoServices_AIF.MIF
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) \
+ /c8,8 qgn_menu_mtv.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/inc/VideoServices.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declarations of constants of VideoServices
+*
+*/
+
+
+#ifndef VIDEOSERVICES_HRH
+#define VIDEOSERVICES_HRH
+
+
+#endif // VIDEOSERVICES_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/inc/VideoServicesApp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CVideoServicesApp
+*
+*/
+
+
+#ifndef VIDEOSERVICESAPP_H
+#define VIDEOSERVICESAPP_H
+
+// INCLUDES
+#include <aknapp.h>
+
+// CONSTANTS
+// UID of the application
+const TUid KUidVideoServices = { 0x10281893 };
+
+// CLASS DECLARATION
+
+/**
+* CVideoServicesApp application class.
+* Provides factory to create concrete document object.
+*
+*/
+class CVideoServicesApp : public CAknApplication
+ {
+
+ private: //From base class
+
+ /**
+ * From CApaApplication, creates CVideoServicesDocument document object.
+ * @return A pointer to the created document object.
+ */
+ CApaDocument* CreateDocumentL();
+
+ /**
+ * From CApaApplication, returns application's UID (KUidVideoServices).
+ * @return The value of KUidVideoServices.
+ */
+ TUid AppDllUid() const;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/inc/VideoServicesAppUi.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CVideoServicesAppUi
+*
+*/
+
+
+#ifndef VideoServicesAPPUI_H
+#define VideoServicesAPPUI_H
+
+// INCLUDES
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikproc.h>
+#include <e32std.h>
+#include <coeccntx.h>
+#include <aknappui.h>
+#include <browserlauncher.h>
+#include <downloadedcontenthandler.h>
+#include <centralrepository.h>
+#include <httpcachemanagerinternalcrkeys.h>
+#include "VideoServicesPrivateCRKeys.h"
+
+#include <favouriteslimits.h> // KFavouritesMaxUrl
+#include <browseroverriddensettings.h>
+
+// CONSTANTS
+const TUid KUidBrowserApplication = { 0x10008d39 }; //Browser UID
+_LIT( KBrowserPath, "Z:\\system\\apps\\Browser\\Browser.app" ); //Browser path
+
+// FORWARD DECLARATIONS
+class CVideoServicesContainer;
+class CVideoServicesAppUi;
+
+// CLASS DECLARATION
+
+/**
+* Application UI class.
+* Provides support for the EIKON control architecture
+*
+* @since Series 60 3.1
+*/
+class CVideoServicesAppUi : public CAknAppUi,
+ public MDownloadedContentHandler,
+ MApaEmbeddedDocObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Default Constructor
+ */
+ CVideoServicesAppUi();
+
+ /**
+ * Destructor.
+ */
+ ~CVideoServicesAppUi();
+
+ public: // From MDownloadedContentHandler
+
+ /**
+ * Handle downloaded content that has been saved to a file,
+ * and return ETrue if it was handled successfully.
+ * @param aFileName File name with path.
+ * @param aParamList Generic parameter list.
+ * @param aContinue Output parameter: It must be ETrue if the caller wants
+ * Browser not to terminate after the content is handled.
+ * @return ETrue if the implementer has processed the content. If it is
+ * EFalse, BrowserLauncher opens that content in an
+ * appropriate viewer application.
+ */
+ TBool HandleContentL( const TDesC& aFileName, const CAiwGenericParamList& aParamList, TBool& aContinue );
+
+ /**
+ * Reserved for future use.
+ */
+ TAny* DownloadedContentHandlerReserved1( TAny* aAnyParam );
+
+ private:
+ /**
+ * EPOC Default Constructor
+ */
+ void ConstructL();
+
+ /**
+ * From CEikAppUi, takes care of command handling.
+ * @param aCommand command to be handled
+ * @return void
+ * @since Series 60 3.1
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * From CEikAppUi, handles key events.
+ * @param aKeyEvent Event to handled.
+ * @param aType Type of the key event.
+ * @return Response code (EKeyWasConsumed, EKeyWasNotConsumed).
+ * @since Series 60 3.1
+ */
+ virtual TKeyResponse HandleKeyEventL(
+ const TKeyEvent& aKeyEvent,TEventCode aType );
+
+ private: // From MApaEmbeddedDocObserver
+ /**
+ * From MApaEmbeddedDocObserver, observes when the
+ * embedded browser exits
+ * @param aMode The browser exit mode (ignored in VideoServices)
+ * @return void
+ * @since Series 60 3.1
+ */
+ void NotifyExit( TExitMode aMode );
+
+ private: // New functions
+ /**
+ * Launches browser with "Operator-specified" url as start page
+ * @return void
+ * @since Series 60 3.1
+ */
+ void LaunchBrowserEmbeddedWithVideoUrlL();
+
+ public: // New functions
+ /**
+ * Launches the browser according to the available parameters
+ * ( "Operator-specified" video url )
+ * @return void
+ * @since Series 60 3.1
+ */
+ void LaunchBrowserL();
+
+ public: // Functions from MEikStatusPaneObserver
+
+ /**
+ * Handles status pane size change.
+ * @return void
+ * @since Series 60 3.1
+ */
+ void HandleStatusPaneSizeChange();
+
+ private: // Data
+
+ // VideoServices App view container (not shown in final App)
+ CVideoServicesContainer* iAppContainer;
+
+ // Access central repository of VideoServices
+ CRepository* iVideoServicesRepository;
+
+ // Buffer where the url is read
+ TBuf<KFavouritesMaxUrl> iUrl;
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/inc/VideoServicesContainer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CVideoServicesContainer
+*
+*/
+
+
+#ifndef VIDEOSERVICESCONTAINER_H
+#define VIDEOSERVICESCONTAINER_H
+
+// INCLUDES
+#include <coecntrl.h>
+
+// FORWARD DECLARATIONS
+class CEikLabel; // for example labels
+
+// CLASS DECLARATION
+
+/**
+* CVideoServicesContainer container control class.
+*
+*/
+class CVideoServicesContainer : public CCoeControl, MCoeControlObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two phased constructor
+ * @param aRect Frame rectangle for container
+ * @since Series 60 3.0
+ */
+ static CVideoServicesContainer* NewL( const TRect& aRect );
+
+ /**
+ * Destructor.
+ */
+ ~CVideoServicesContainer();
+
+ private: // Functions from base classes
+
+ /**
+ * EPOC default constructor.
+ * @param aRect Frame rectangle for container.
+ * @return void
+ * @since Series 60 3.1
+ */
+ void ConstructL( const TRect& aRect );
+
+ /**
+ * From CCoeControl,Draw.
+ * @param aRect Frame rectangle to draw
+ * @return void
+ * @since Series 60 3.1
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * From CCoeControl, HandleControlEventL
+ * @param aControl Active Control
+ * @param aEventType Type of control event
+ * @return void
+ * @since Series 60 3.1
+ */
+ void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+ private: // data
+
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/inc/VideoServicesDocument.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Header file for CVideoServicesDocument
+*
+*/
+
+#ifndef VIDEOSERVICESDOCUMENT_H
+#define VIDEOSERVICESDOCUMENT_H
+
+// INCLUDES
+#include <akndoc.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CEikAppUi;
+
+// CLASS DECLARATION
+
+/**
+* CVideoServicesDocument application class.
+*/
+class CVideoServicesDocument : public CAknDocument
+ {
+ public: // Constructor and destructor
+ /**
+ * Two-phased constructor.
+ * @param aApp Application instance
+ * @since Series 60 3.1
+ */
+ static CVideoServicesDocument* NewL( CEikApplication& aApp );
+
+ /**
+ * Destructor.
+ */
+ ~CVideoServicesDocument();
+
+ private:
+
+ /**
+ * Default constructor.
+ * @param aApp Application instance
+ */
+ CVideoServicesDocument( CEikApplication& aApp );
+
+ /**
+ * Epoc Constructor
+ */
+ void ConstructL();
+
+ private:
+
+ /**
+ * From CEikDocument, create CVideoServicesAppUi "App UI" object.
+ */
+ CEikAppUi* CreateAppUiL();
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/inc/VideoServicesPrivateCRKeys.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef VIDEOSERVICESPRIVATECRKEYS_H
+#define VIDEOSERVICESPRIVATECRKEYS_H
+
+// The UID of the Video Services application
+const TUid KCrUidVideoServices = {0x10281893};
+
+// The default url used to launch the Video Services application. Can be customized
+// to launch a url that is specified by an "Phone Operator/Vendor"
+const TUint32 KVideoServicesUrl = 0x0000001;
+
+#endif // VIDEOSERVICESPRIVATECRKEYS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/loc/VideoServices.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: localisation strings for Video Services
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d: Caption strings for Video Services in list view
+//l: list_single_large_graphic_pane_t1
+//w:
+//r: 3.1
+//
+#define qtn_apps_video_list "Video Services"
+
+//d: Caption strings for Video Services in grid view
+//l: cell_app_pane_t1
+//w:
+//r: 3.1
+//
+#define qtn_apps_video_grid "Video Services"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/rom/VideoServices.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for VideoServices
+*
+*/
+
+
+#ifndef __VideoServices_IBY__
+#define __VideoServices_IBY__
+
+#ifdef __VIDEO_MENU
+S60_APP_EXE(VideoServices)
+S60_APP_AIF_ICONS(VideoServices)
+S60_UPGRADABLE_APP_REG_RSC(VideoServices)
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/rom/VideoServicesResources.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for those parts of VideoServices that needs localization
+*
+*/
+
+
+#ifndef __VideoServices_RESOURCES_IBY__
+#define __VideoServices_RESOURCES_IBY__
+
+S60_APP_CAPTION(VideoServices)
+S60_APP_RESOURCE(VideoServices)
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/src/VideoServicesApp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CVideoServicesApp Implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "VideoServicesApp.h"
+#include "VideoServicesDocument.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+#include <eikstart.h>
+
+LOCAL_C CApaApplication* NewApplication()
+ {
+ return new CVideoServicesApp;
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ return EikStart::RunApplication( NewApplication );
+ }
+
+
+// ---------------------------------------------------------
+// CVideoServicesApp::AppDllUid()
+// Returns application UID
+// ---------------------------------------------------------
+//
+TUid CVideoServicesApp::AppDllUid() const
+ {
+ return KUidVideoServices;
+ }
+
+
+// ---------------------------------------------------------
+// CVideoServicesApp::CreateDocumentL()
+// Creates CVideoServicesDocument object
+// ---------------------------------------------------------
+//
+CApaDocument* CVideoServicesApp::CreateDocumentL()
+ {
+ return CVideoServicesDocument::NewL( *this );
+ }
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/src/VideoServicesAppUi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CVideoServicesAppUi implementation
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "VideoServicesAppUi.h"
+#include "VideoServicesContainer.h"
+
+// CONSTANTS
+_LIT(KUrlLaunchParameter, "4 ");
+const TInt KUrlLaunchParamLength = 2;
+
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// ----------------------------------------------------------
+// CVideoServicesAppUi::CVideoServicesAppUi()
+// ----------------------------------------------------------
+//
+CVideoServicesAppUi::CVideoServicesAppUi()
+ {
+ }
+
+// ----------------------------------------------------------
+// CVideoServicesAppUi::ConstructL()
+// ----------------------------------------------------------
+//
+void CVideoServicesAppUi::ConstructL()
+ {
+ BaseConstructL( ENonStandardResourceFile | EAknEnableSkin /*| ENoScreenFurniture | ENoAppResourceFile*/ );
+ iAppContainer = CVideoServicesContainer::NewL( ClientRect() );
+ AddToStackL( iAppContainer );
+
+ // Connect to VideoServices central repository, leave if we don't have
+ // a VideoServices CR present
+ iVideoServicesRepository = CRepository::NewL( KCrUidVideoServices );
+
+ LaunchBrowserL();
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::~CVideoServicesAppUi()
+// ----------------------------------------------------
+//
+CVideoServicesAppUi::~CVideoServicesAppUi()
+ {
+ if ( iAppContainer )
+ {
+ RemoveFromStack( iAppContainer );
+ delete iAppContainer;
+ iAppContainer = NULL;
+ }
+
+ delete iVideoServicesRepository;
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::HandleKeyEventL(
+// ----------------------------------------------------
+//
+TKeyResponse CVideoServicesAppUi::HandleKeyEventL(
+ const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/ )
+ {
+ return EKeyWasNotConsumed;
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::HandleCommandL(TInt aCommand)
+// ----------------------------------------------------
+//
+void CVideoServicesAppUi::HandleCommandL( TInt aCommand )
+ {
+ switch ( aCommand )
+ {
+ case EAknSoftkeyBack:
+ case EAknSoftkeyExit:
+ case EEikCmdExit:
+ case EAknCmdExit:
+ {
+ Exit();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::HandleContentL
+// Handles the content coming from the embedded browser.
+// Returns EFalse: content will be passed on to framework
+// ----------------------------------------------------
+//
+ TBool CVideoServicesAppUi::HandleContentL( const TDesC& /*aFileName*/, const CAiwGenericParamList& /*aParamList*/, TBool& aContinue )
+ {
+ aContinue = EFalse;
+ return EFalse;
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::DownloadedContentHandlerReserved1
+// ( Reserved for future use )
+// ----------------------------------------------------
+//
+ TAny* CVideoServicesAppUi::DownloadedContentHandlerReserved1( TAny* /*aAnyParam*/ )
+ {
+ // Empty implementation.
+ return NULL;
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::LaunchBrowserL()
+// ----------------------------------------------------
+//
+void CVideoServicesAppUi::LaunchBrowserL()
+ {
+ // Read the video URL from Video Services central repository
+ if ( KErrNone == iVideoServicesRepository->Get( KVideoServicesUrl, iUrl ) )
+ {
+ if ( iUrl.Length() )
+ {
+ LaunchBrowserEmbeddedWithVideoUrlL();
+ }
+ }
+ Exit();
+ }
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::LaunchBrowserEmbeddedWithVideoUrlL
+// ----------------------------------------------------
+//
+void CVideoServicesAppUi::LaunchBrowserEmbeddedWithVideoUrlL()
+{
+ // Pass the specified video url to browser (read from Central Repository)
+ HBufC* url = NULL;
+ url = HBufC::NewLC( iUrl.Length() + KUrlLaunchParamLength );
+ url->Des().Append( KUrlLaunchParameter );
+ url->Des().Append( iUrl );
+
+ CBrowserLauncher* launcher = CBrowserLauncher::NewLC();
+ launcher->LaunchBrowserSyncEmbeddedL( url->Des(), this );
+
+ CleanupStack::PopAndDestroy(); // launcher
+ CleanupStack::PopAndDestroy(); // url
+}
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::NotifyExit
+// ----------------------------------------------------
+//
+void CVideoServicesAppUi::NotifyExit(TExitMode /*aMode*/)
+{
+}
+
+// ----------------------------------------------------
+// CVideoServicesAppUi::HandleStatusPaneSizeChange
+// ----------------------------------------------------
+//
+void CVideoServicesAppUi::HandleStatusPaneSizeChange()
+{
+ iAppContainer->SetRect( ClientRect() );
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/src/VideoServicesContainer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CVideoServicesContainer implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "VideoServicesContainer.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CVideoServicesContainer::NewL( const TRect& aRect )
+// EPOC two phased constructor
+// ---------------------------------------------------------
+//
+CVideoServicesContainer* CVideoServicesContainer::NewL( const TRect& aRect )
+ {
+ CVideoServicesContainer* self = new ( ELeave ) CVideoServicesContainer();
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CVideoServicesContainer::ConstructL(const TRect& aRect)
+// EPOC two phased constructor
+// ---------------------------------------------------------
+//
+void CVideoServicesContainer::ConstructL( const TRect& aRect )
+ {
+ CreateWindowL();
+ SetRect( aRect );
+ ActivateL();
+ }
+
+// Destructor
+CVideoServicesContainer::~CVideoServicesContainer()
+ {
+ }
+
+
+// ---------------------------------------------------------
+// CVideoServicesContainer::Draw(const TRect& aRect) const
+// ---------------------------------------------------------
+//
+void CVideoServicesContainer::Draw( const TRect& aRect ) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.SetPenStyle( CGraphicsContext::ENullPen );
+ gc.SetBrushColor( KRgbWhite );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.DrawRect( aRect );
+ }
+
+// ---------------------------------------------------------
+// CVideoServicesContainer::HandleControlEventL(
+// CCoeControl* aControl,TCoeEvent aEventType)
+// ---------------------------------------------------------
+//
+void CVideoServicesContainer::HandleControlEventL(
+ CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/ )
+ {
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/src/VideoServicesDocument.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CVideoServicesDocument implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "VideoServicesDocument.h"
+#include "VideoServicesAppUi.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// constructor
+CVideoServicesDocument::CVideoServicesDocument( CEikApplication& aApp )
+: CAknDocument( aApp )
+ {
+ }
+
+// destructor
+CVideoServicesDocument::~CVideoServicesDocument()
+ {
+ }
+
+// EPOC default constructor can leave.
+void CVideoServicesDocument::ConstructL()
+ {
+ }
+
+// Two-phased constructor.
+CVideoServicesDocument* CVideoServicesDocument::NewL( CEikApplication& aApp )
+ {
+ CVideoServicesDocument* self = new ( ELeave ) CVideoServicesDocument( aApp );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------
+// CVideoServicesDocument::CreateAppUiL()
+// constructs CVideoServicesAppUi
+// ----------------------------------------------------
+//
+CEikAppUi* CVideoServicesDocument::CreateAppUiL()
+ {
+ return new (ELeave) CVideoServicesAppUi;
+ }
+
+// End of File
--- a/group/bld.inf Tue Aug 31 15:16:11 2010 +0300
+++ b/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -18,6 +18,9 @@
/*
* Order is important
*/
+#include "../browserui/group/bld.inf"
+#include "../browserplugins/group/bld.inf"
+#include "../pushmtm/group/bld.inf"
PRJ_PLATFORMS
DEFAULT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Data/PushMtmUi.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Resources for the Mtm Ui Data
+*
+*/
+
+
+
+NAME PMTM
+
+// INCLUDES
+#include <browser_platform_variant.hrh>
+#include "PushMtmCommands.hrh"
+#include "PushMtmUi.hrh"
+#include <pushmtmui.loc>
+#include <eikon.rh>
+#include <uikon.rh>
+#include <uikon.hrh>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <avkon.loc>
+#include <mtud.rh>
+#include <MTMExtendedCapabilities.hrh>
+#include <bldvariant.hrh>
+#include <Muiu.mbg>
+
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+//=============================================================================
+//
+// MTM UI Data framework related resources
+//
+//=============================================================================
+
+RESOURCE MTUD_FUNCTION_ARRAY r_push_mtm_ui_data_function_array
+ {
+ functions =
+ {
+ MTUD_FUNCTION
+ {
+ functiontext = qtn_mce_fetch;
+ command = EPushMtmCmdLoadService;
+ flags = EMtudContextSpecific | EMtudAsynchronous |
+ EMtudCommandTransferReceive;
+ },
+ MTUD_FUNCTION
+ {
+ functiontext = qtn_mce_info;
+ command = KMtmUiFunctionMessageInfo;
+ flags = EMtudContextSpecific | EMtudAsynchronous |
+ EMtudCommandTransferReceive;
+ },
+ MTUD_FUNCTION
+ {
+ functiontext = qtn_mce_settings_push;
+ command = KMtmUiMceSettings;
+ flags = EMtudCommandTransferReceive;
+ }
+ };
+ }
+
+//=============================================================================
+//
+// Push Settings Dialog related resources
+//
+//=============================================================================
+
+RESOURCE TITLE_PANE r_pushsd_title_pane
+ {
+ txt = qtn_mce_title_settings_push;
+ }
+
+RESOURCE CBA r_pushsd_softkeys
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EPushSettingsDialogCmdOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EPushSettingsDialogCmdBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EPushSettingsDialogCmdChangeWithoutSettingPage; txt = qtn_msk_change; }
+ };
+ }
+
+RESOURCE MENU_BAR r_pushsd_menu
+ {
+ titles=
+ {
+ MENU_TITLE { menu_pane = r_pushsd_options_menu_pane; }
+ };
+ }
+
+RESOURCE MENU_PANE r_pushsd_options_menu_pane
+ {
+ items=
+ {
+ MENU_ITEM
+ {
+ command = EPushSettingsDialogCmdChange;
+ txt = qtn_mce_settings_change;
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ flags = EEikMenuItemAction;
+#endif
+ },
+#ifdef __SERIES60_HELP
+ MENU_ITEM
+ {
+ command = EPushSettingsDialogCmdHelp;
+ txt = qtn_options_help;
+ },
+#endif //__SERIES60_HELP
+ MENU_ITEM
+ {
+ command = EPushSettingsDialogCmdAknExit;
+ txt = qtn_mce_settings_exit;
+ }
+ };
+ }
+
+RESOURCE ARRAY r_pushsd_listboxarray
+ {
+ items=
+ {
+ LBUF { txt = " \tIgnore this\t\tIgnore this"; }
+ };
+ }
+
+RESOURCE DIALOG r_pushsd_dialog
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagFillAppClientRect;
+ buttons = r_pushsd_softkeys;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtSettingListBox;
+ itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
+ id = EPushSettingsDialogCntrlListBox;
+ control = LISTBOX
+ {
+ flags = 0;
+ height = 3;
+ width = 80;
+ array_id = r_pushsd_listboxarray;
+ };
+ }
+ };
+ }
+
+RESOURCE TBUF r_pushsd_recept { buf = qtn_mce_settings_push_recept; }
+RESOURCE TBUF r_pushsd_recep_on { buf = qtn_wml_push_setting_recep_on; }
+RESOURCE TBUF r_pushsd_recep_off { buf = qtn_wml_push_setting_recep_off; }
+
+RESOURCE TBUF r_pushsd_loading { buf = qtn_mce_settings_push_loading; }
+RESOURCE TBUF r_pushsd_load_autom { buf = qtn_wml_push_setting_load_autom; }
+RESOURCE TBUF r_pushsd_load_man { buf = qtn_wml_push_setting_load_man; }
+
+RESOURCE LISTBOX r_pushsd_sp_radiobutton_listbox
+ {
+ flags = EEikListBoxMultipleSelection;
+ }
+
+RESOURCE AVKON_SETTING_PAGE r_pushsd_sp_radiobutton
+ {
+ type = EAknSetListBox;
+ softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+ menubar = R_AVKON_MENUPANE_EMPTY;
+ editor_resource_id = r_pushsd_sp_radiobutton_listbox;
+ }
+
+RESOURCE DIALOG r_pushsd_autoload_sett_confirm
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = qtn_wml_push_sttng_autom_conf_q;
+ };
+ }
+ };
+ }
+
+//=============================================================================
+//
+// Push Message Info Dialog related resources
+//
+//=============================================================================
+
+RESOURCE TBUF r_pushmid_title { buf = qtn_wml_push_title_msginfo; }
+RESOURCE TBUF r_pushmid_from { buf = qtn_wml_push_msginfo_from; }
+RESOURCE TBUF r_pushmid_url { buf = qtn_wml_push_msginfo_url; }
+RESOURCE TBUF r_pushmid_body { buf = qtn_wml_push_msginfo_body; }
+RESOURCE TBUF r_pushmid_type { buf = qtn_wml_push_msginfo_type; }
+RESOURCE TBUF r_pushmid_type_str { buf = qtn_wml_push_msgnfo_type_srv_msg; }
+RESOURCE TBUF r_pushmid_content_type { buf = qtn_wml_push_msg_content_type; }
+RESOURCE TBUF r_pushmid_created { buf = qtn_wml_push_msginfo_created; }
+RESOURCE TBUF r_pushmid_expires { buf = qtn_wml_push_msginfo_expires; }
+RESOURCE TBUF r_pushmid_size { buf = qtn_wml_push_msginfo_size; }
+RESOURCE TBUF r_pushmid_rcvd { buf = qtn_wml_push_msginfo_rcvd; }
+
+//=============================================================================
+//
+// Push Load Service related resources
+//
+//=============================================================================
+
+RESOURCE TBUF r_pushls_expired_note { buf = qtn_wml_push_note_msg_expired; }
+
+RESOURCE DIALOG r_pushls_sl_not_auth
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ label = qtn_service_inbox_sl_not_trusted;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_pushls_sl_cache_not_auth
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ label = qtn_service_inbox_sl_cache_not_trusted;
+ };
+ }
+ };
+ }
+
+//=============================================================================
+//
+// Misc
+//
+//=============================================================================
+
+RESOURCE TBUF r_pushmisc_unk_sender { buf = qtn_mce_push_inbox_sender_unkw; }
+RESOURCE TBUF r_pushmisc_inbox_serv_msg { buf = qtn_mce_push_inbox_message; }
+RESOURCE TBUF r_pushmisc_info_replaced { buf = qtn_service_inbox_updating_message_received; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Data/PushRegistry.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the resources for the Mtm registry file
+*
+*/
+
+
+
+// INCLUDES
+
+#include <pushmtmui.loc>
+#include "PushMtmDef.hrh"
+#include <mtmconfig.rh>
+#include <msvstd.hrh>
+#include <e32capability.h>
+
+// RESOURCE DEFINITIONS
+
+// ---------------------------------------------------------
+//
+// MTM info resource for pushed Service messages
+//
+// ---------------------------------------------------------
+//
+RESOURCE MTM_INFO_FILE
+ {
+ mtm_type_uid = EUidPushMtmWapPush; // = KUidMtmWapPush in PushEntry.h
+ technology_type_uid = EUidPushMtmTechnologyGroup;
+ components =
+ {
+ MTM_COMPONENT_V2
+ {
+ human_readable_name = qtn_mce_settings_type_srv_msg;
+ component_uid = KUidMtmServerComponentVal;
+ entry_point = 2;
+ version = VERSION_V2 {};
+ filename = "PushMtmCliSrv.dll";
+ },
+ MTM_COMPONENT_V2
+ {
+ human_readable_name = qtn_mce_settings_type_srv_msg;
+ component_uid = KUidMtmClientComponentVal;
+ entry_point = 1;
+ version = VERSION_V2 {};
+ filename = "PushMtmCliSrv.dll";
+ },
+ MTM_COMPONENT_V2
+ {
+ human_readable_name = qtn_mce_settings_type_srv_msg;
+ component_uid = KUidMtmUiComponentVal;
+ entry_point = 1;
+ version = VERSION_V2 {};
+ filename = "PushMtmUi.dll";
+ },
+ MTM_COMPONENT_V2
+ {
+ human_readable_name = qtn_mce_settings_type_srv_msg;
+ component_uid = KUidMtmUiDataComponentVal;
+ entry_point = 2;
+ version = VERSION_V2 {};
+ filename = "PushMtmUi.dll";
+ }
+ };
+ }
+
+RESOURCE MTM_CAPABILITIES
+ {
+ send_capability = 1;
+ body_capability = 1;
+ }
+
+RESOURCE MTM_SECURITY_CAPABILITY_SET
+ {
+ capabilities = { ECapabilityNetworkServices };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Data/PushViewer.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the resources for the PushViewer.app.
+*
+*/
+
+
+
+// RESOURCE IDENTIFIER
+
+NAME PSHV
+
+// INCLUDES
+
+#include "PushViewer.hrh"
+#include <pushviewer.loc>
+#include <pushmtmui.loc>
+#include <uikon.rh>
+#include <eikon.rh>
+#include <avkon.rh>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <MsgEditor.mbg>
+#include <avkon.loc>
+#include <bldvariant.hrh>
+#include <data_caging_paths_strings.hrh>
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; } // This is not a file based application
+
+RESOURCE EIK_APP_INFO
+ {
+ menubar = r_pushviewer_menu;
+ cba = r_pushviewer_softkeys_open;
+ status_pane = r_pushviewer_status_pane;
+ }
+
+#include <appinfo.rh>
+
+RESOURCE LOCALISABLE_APP_INFO r_pushviewer_localisable_app_info
+ {
+ }
+
+RESOURCE STATUS_PANE_APP_MODEL r_pushviewer_status_pane
+ {
+ panes =
+ {
+ SPANE_PANE
+ {
+ id = EEikStatusPaneUidTitle;
+ type = EAknCtTitlePane;
+ resource = r_pushviewer_title_pane;
+ }
+ };
+ }
+
+RESOURCE TITLE_PANE r_pushviewer_title_pane
+ {
+ txt = qtn_wml_push_title_viewer;
+ }
+
+RESOURCE IMAGE r_pushviewer_navi_image
+ {
+ bmpfile = APP_BITMAP_DIR"\\msgeditor.mbm";
+ bmpid = EMbmMsgeditorQgn_prop_folder_sms_tab1;
+ bmpmask = EMbmMsgeditorQgn_prop_folder_sms_tab1_mask;
+ }
+
+RESOURCE CBA r_pushviewer_softkeys
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EPushViewerCmdOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EPushViewerCmdBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyEmpty; txt = text_softkey_empty; }
+ };
+ }
+
+RESOURCE CBA r_pushviewer_softkeys_open
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EPushViewerCmdOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EPushViewerCmdBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EPushViewerCmdLoadService; txt = qtn_mce_inbox_open; }
+ };
+ }
+
+RESOURCE MENU_BAR r_pushviewer_menu
+ {
+ titles=
+ {
+ MENU_TITLE { menu_pane = r_pushviewer_options_menu_pane; }
+ };
+ }
+
+RESOURCE MENU_PANE r_pushviewer_options_menu_pane
+ {
+ items=
+ {
+ MENU_ITEM
+ {
+ command = EPushViewerCmdLoadService;
+ txt = qtn_mce_inbox_fetch;
+ },
+ MENU_ITEM
+ {
+ command = EPushViewerCmdDelete;
+ txt = qtn_wml_push_cmd_delete;
+ },
+ MENU_ITEM
+ {
+ command = EPushViewerCmdMessageInfo;
+ txt = qtn_wml_push_cmd_info;
+ },
+#ifdef __SERIES60_HELP
+ MENU_ITEM
+ {
+ command = EPushViewerCmdHelp;
+ txt = qtn_options_help;
+ },
+#endif //__SERIES60_HELP
+ MENU_ITEM
+ {
+ command = EPushViewerCmdAknExit;
+ txt = qtn_wml_push_cmd_exit;
+ }
+ };
+ }
+
+RESOURCE TBUF r_pushviewer_mainpane_text { buf = qtn_service_inbox_push_viewer_view_text; }
+
+RESOURCE DIALOG r_pushviewer_entry_delete_confirm
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO__YES;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ label = qtn_wml_push_view_query_del;
+ };
+ }
+ };
+ }
+
+RESOURCE TBUF r_pushviewer_expired_note { buf = qtn_wml_push_note_msg_expired; }
+
+// Deleting message & replacement info notes.
+RESOURCE TBUF r_pushviewer_info_deleted { buf = qtn_wml_push_note_msg_expired; }
+RESOURCE TBUF r_pushviewer_info_replaced { buf = qtn_service_inbox_updating_message_received; }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Data/PushViewerAif.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains all the resources for the PushViewer.app.
+*
+*/
+
+
+
+#include "PushMtmDef.hrh"
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+ {
+ app_uid = EUidPushViewerApp;
+ hidden = KAppIsHidden;
+ embeddability = KAppEmbeddable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Data/PushViewer_caption.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// INCLUDES
+
+#include <apcaptionfile.rh>
+
+
+RESOURCE CAPTION_DATA
+ {
+ caption = "";
+ shortcaption = "";
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Data/PushViewer_reg.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: RSS for registration file.
+*
+*/
+
+
+#include "PushMtmDef.hrh"
+#include <MuiuMsgEditorService.rh>
+#include <MuiuMsgEditorServiceConst.h>
+#include <data_caging_paths_strings.hrh>
+#include <appinfo.rh>
+#include <PushViewer.rsg>
+
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10008D3C
+
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "PushViewer";
+
+ hidden = KAppIsHidden;
+ embeddability = KAppEmbeddable;
+
+ service_list =
+ {
+ SERVICE_INFO { uid = KMuiuMsgEditorServiceUid;
+ opaque_data = r_push_service_view; }
+ };
+ }
+
+RESOURCE MSG_SERVICE_STRUCT r_push_service_view
+ {
+ mtm_id = EUidPushMtmWapPush;
+ type = KMsgServiceView;
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Group/Bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Build specification file
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+// Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+../Inc/PushMtmCommands.hrh APP_LAYER_PLATFORM_EXPORT_PATH(PushMtmCommands.hrh)
+../rom/PushMtm.iby CORE_APP_LAYER_IBY_EXPORT_PATH(PushMtm.iby)
+../rom/PushMtmResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(PushMtmResources.iby)
+../rom/S60SiSlWapPush.iby CORE_APP_LAYER_IBY_EXPORT_PATH(S60SiSlWapPush.iby)
+#ifndef __S60_32__
+../rom/wappush.iby CORE_APP_LAYER_IBY_EXPORT_PATH(wappush.iby)
+#endif
+../loc/pushmtmui.loc APP_LAYER_LOC_EXPORT_PATH(pushmtmui.loc)
+../loc/pushviewer.loc APP_LAYER_LOC_EXPORT_PATH(pushviewer.loc)
+
+../conf/pushmtm.confml APP_LAYER_CONFML(pushmtm.confml)
+../conf/pushmtm_10008D42.crml APP_LAYER_CRML(pushmtm_10008D42.crml)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+
+// MTM registry files
+//gnumakefile PushRegistry.mk
+gnumakefile PushMtmIcons.mk
+// Push Mtm Utility
+PushMtmUtil.mmp
+// Push Server Mtm, Client Mtm and Ui Mtm
+PushMtmCliSrv.mmp
+// Ui Data Mtm
+PushMtmUi.mmp
+// Push Viewer
+PushViewer.mmp
+
+#include "../Plugins/Group/Bld.inf"
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE pushmtm.mif
+OPTION HEADERFILE pushmtm.mbg
+OPTION SOURCES -c8,1 qgn_prop_mce_push_unread -c8,1 qgn_prop_mce_push_read
+END
+
+PRJ_MMPFILES
+
+// MTM registry files
+// Push Mtm Utility
+PushMtmUtil.mmp
+// Push Server Mtm, Client Mtm and Ui Mtm
+PushMtmCliSrv.mmp
+// Ui Data Mtm
+PushMtmUi.mmp
+// Push Viewer
+PushViewer.mmp
+
+#include "../Plugins/Group/Bld.inf"
+
+#endif
+
+PRJ_TESTMMPFILES
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Group/PushMtmCliSrv.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmCliSrv.dll
+TARGETTYPE dll
+UID 0x10004845 0x10008D42
+TARGETPATH SHARED_LIB_DIR
+
+CAPABILITY CAP_GENERAL_DLL
+
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../MtmCliSrvInc
+USERINCLUDE ../Inc
+USERINCLUDE ../MtmUtilInc
+USERINCLUDE ../MtmUiInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../MtmCliSrvSrc
+SOURCE PushMtmClient.cpp
+SOURCE PushMtmCliSrvPanic.cpp
+SOURCE PushMtmGcOperation.cpp
+SOURCE PushMtmServer.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#ifdef __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY euser.lib
+LIBRARY msgs.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY SISLPushMsgUtils.lib
+
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/PUSHMTMCLISRVU_EKA2.def
+#else
+ DEFFILE ../BWinsCw/PUSHMTMCLISRVU_EKA2.def
+#endif
+
+START RESOURCE ../Data/PushRegistry.rss
+TARGET PushRegistry.rsc
+TARGETPATH MTM_INFO_FILE_DIR
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+END
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Group/PushMtmIcons.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\pushmtm.mif
+HEADERFILENAME=$(HEADERDIR)\pushmtm.mbg
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+ /c8,1 qgn_prop_mce_push_unread.bmp \
+ /c8,1 qgn_prop_mce_push_read.bmp
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(HEADERFILENAME)&& \
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Group/PushMtmUi.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmUi.dll
+TARGETTYPE dll
+UID 0x10004845 0x10008D43
+TARGETPATH SHARED_LIB_DIR
+
+CAPABILITY CAP_GENERAL_DLL
+
+VENDORID VID_DEFAULT
+
+START RESOURCE ../Data/PushMtmUi.rss
+DEPENDS avkon.rsg
+HEADER
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGETPATH MTM_RESOURCE_DIR
+END // RESOURCE
+
+USERINCLUDE ../MtmUiInc
+USERINCLUDE ../Inc
+USERINCLUDE ../MtmUtilInc
+USERINCLUDE ../ViewerInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../MtmUiSrc
+SOURCE PushLoadServiceOp.cpp
+SOURCE PushMessageInfoDialog.cpp
+SOURCE PushMessageInfoOp.cpp
+SOURCE PushMtmUi.cpp
+SOURCE PushMtmUiData.cpp
+SOURCE PushMtmUiOperation.cpp
+SOURCE PushMtmUiPanic.cpp
+SOURCE PushSettingsDialog.cpp
+SOURCE PushViewMessageOp.cpp
+
+#ifdef __SERIES60_PUSH_SP
+SOURCE PushViewServiceOp.cpp
+#endif // __SERIES60_PUSH_SP
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY apparc.lib
+LIBRARY AknSkins.lib
+LIBRARY apmime.lib
+LIBRARY avkon.lib
+LIBRARY bafl.lib
+LIBRARY CdlEngine.lib
+LIBRARY CommonEngine.lib
+LIBRARY commonui.lib
+LIBRARY cone.lib
+LIBRARY ecom.lib
+LIBRARY efsrv.lib
+LIBRARY eikcoctl.lib
+LIBRARY eikcore.lib
+LIBRARY eikdlg.lib
+LIBRARY euser.lib
+LIBRARY featmgr.lib
+LIBRARY inetprotutil.lib
+#ifdef __SERIES60_PUSH_SP
+LIBRARY MiscPushMsgUtils.lib // For CUnknownPushMsgEntry.
+#endif // __SERIES60_PUSH_SP
+LIBRARY msgs.lib
+LIBRARY mtur.lib
+LIBRARY muiu.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY PushMsgEntry.lib
+LIBRARY SISLPushMsgUtils.lib
+LIBRARY CENTRALREPOSITORY.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/PUSHMTMUIU_EKA2.def
+#else
+ DEFFILE ../BWinsCw/PUSHMTMUIU_EKA2.def
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Group/PushMtmUtil.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <bldvariant.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmUtil.dll
+TARGETTYPE dll
+UID 0x1000008d 0x10008D44
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../MtmUtilInc
+USERINCLUDE ../Inc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../MtmUtilSrc
+SOURCE PushAsyncOpRunner.cpp
+#ifdef __PUSH_WHITELIST
+SOURCE PushAuthenticationUtilitiesWL.cpp
+#else // __PUSH_WHITELIST
+SOURCE PushAuthenticationUtilitiesPure.cpp
+#endif // __PUSH_WHITELIST
+SOURCE PushInitiator.cpp
+SOURCE PushInitiatorList.cpp
+SOURCE PushMtmOperation.cpp
+SOURCE PushMtmSettings.cpp
+SOURCE PushMtmUtil.cpp
+SOURCE PushMtmUtilPanic.cpp
+#ifdef __PUSH_WHITELIST
+SOURCE WhiteListImporterWL.cpp
+#else // __PUSH_WHITELIST
+SOURCE WhiteListImporterDummy.cpp
+#endif // __PUSH_WHITELIST
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY efsrv.lib
+LIBRARY estor.lib
+LIBRARY euser.lib
+LIBRARY featmgr.lib
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+LIBRARY inetprotutil.lib
+LIBRARY msgs.lib
+#ifdef __PUSH_WHITELIST
+LIBRARY PushMsgEntry.lib
+LIBRARY WapPushUtils.lib
+#endif // __PUSH_WHITELIST
+LIBRARY SISLPushMsgUtils.lib
+LIBRARY CENTRALREPOSITORY.lib
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/PUSHMTMUTILU_EKA2.def
+#else
+ DEFFILE ../BWinsCw/PUSHMTMUTILU_EKA2.def
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Group/PushViewer.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushViewer.exe
+EPOCSTACKSIZE 0x5000
+TARGETTYPE exe
+UID 0x100039CE 0x10008D3C
+
+CAPABILITY CAP_APPLICATION
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../ViewerInc
+USERINCLUDE ../Inc
+USERINCLUDE ../MtmUiInc
+USERINCLUDE ../MtmUtilInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../ViewerSrc
+SOURCE PushViewerApp.cpp
+SOURCE PushViewerAppServer.cpp
+SOURCE PushViewerDoc.cpp
+SOURCE PushViewerPanic.cpp
+SOURCE PushViewerMsgEdAppUi.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY CommonUI.lib
+LIBRARY apparc.lib
+LIBRARY avkon.lib
+LIBRARY cone.lib
+LIBRARY eikcoctl.lib
+LIBRARY eikcore.lib
+LIBRARY euser.lib
+LIBRARY MsgEditorAppUi.lib
+LIBRARY MsgEditorModel.lib
+LIBRARY MsgEditorView.lib
+LIBRARY msgs.lib
+LIBRARY muiu.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY SISLPushMsgUtils.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#ifdef __TEST_LOG_MMP
+LIBRARY efsrv.lib
+DEBUGLIBRARY flogger.lib
+#endif
+
+START RESOURCE ../Data/PushViewer.rss
+DEPENDS avkon.rsg
+HEADER
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGETPATH APP_RESOURCE_DIR
+END // RESOURCE
+
+START RESOURCE ../Data/PushViewer_reg.rss
+DEPENDS pushviewer.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Inc/PushMtmCommands.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declarations command IDs.
+*
+*/
+
+
+
+#ifndef PUSHMTMCOMMANDS_HRH
+#define PUSHMTMCOMMANDS_HRH
+
+// INCLUDE FILES
+
+#include <MTMExtendedCapabilities.hrh>
+
+/**
+* The following enum constants define those Push MTM specific commands that
+* are supported by the client or the UI MTM components.
+*/
+enum TPushMtmCommands
+ {
+ EPushMtmCmdLoadService = KMtmUiFirstFreePlatformMTMFunctionId,
+ EPushMtmCmdViewService,
+ EPushMtmCmdCollectGarbage,
+ EPushMtmCmdFetchContent,
+ EPushMtmCmdViewMessage
+ };
+
+#endif // PUSHMTMCOMMANDS_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Inc/PushMtmDef.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Miscellaneous definitions for the Push MTM modules.
+*
+*/
+
+
+
+#ifndef PUSHMTMDEF_H
+#define PUSHMTMDEF_H
+
+
+struct TMessageInfoParam ///< Parameter for the Message info UI function
+ {
+ TBool iDontShowNotification; ///< Set to ETrue not to show info note.
+ };
+
+/// TMessageInfoParam packaged into a package buffer.
+typedef TPckgBuf<TMessageInfoParam> TMessageInfoParamBuf;
+
+/// TMessageInfoParam packaged into a pointer.
+typedef TPckgC<TMessageInfoParam> TMessageInfoParamPckg;
+
+
+#endif // PUSHMTMDEF_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Inc/PushMtmDef.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Macro definitions and enums for the Push MTM modules.
+*
+*/
+
+
+
+#ifndef PUSHMTMDEF_HRH
+#define PUSHMTMDEF_HRH
+
+
+/// Push technology UID.
+#define EUidPushMtmTechnologyGroup 0x10009157
+
+/// Uid defines for Push MTM and Push Message Types (see PushEntry.h).
+#define EUidPushMtmWapPush 0x10009158
+#define EUidPushMtmMsgSI 0x10009159
+#define EUidPushMtmMsgSL 0x1000915A
+#define EUidPushMtmMsgMultiPart 0x1000915B
+#define EUidPushMtmMsgUnknown 0x1000915C
+
+/// 3rd UID of the Push Viewer application.
+#define EUidPushViewerApp 0x10008D3C
+
+
+#endif // PUSHMTMDEF_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Inc/PushMtmProgress.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of class TPushMtmProgress.
+*
+*/
+
+
+
+#ifndef PUSHMTMPROGRESS_H
+#define PUSHMTMPROGRESS_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+// CLASS DECLARATION
+
+/**
+* This class provides progress information for the client side Push MTM
+* operations. This class is packaged into an 8 bit descriptor.
+* This information packaged is returned by CMsvOperation::ProgressL(), for
+* example.
+*/
+class TPushMtmProgress
+ {
+ public: // Constructors
+
+ inline TPushMtmProgress();
+
+ public: // New functions
+
+ inline void Reset();
+
+ public: // Data
+
+ TInt iTotalValue; ///< Final progress value.
+ TInt iCurrentValue; ///< Current progress value.
+ TInt iErrorCode1; ///< Error code.
+ TInt iErrorCode2; ///< Error code.
+ TInt iErrorCode3; ///< Error code.
+ };
+
+
+/// TPushMtmProgress packaged into a package buffer.
+typedef TPckgBuf<TPushMtmProgress> TPushMtmProgressBuf;
+
+/// TPushMtmProgress packaged into a pointer.
+typedef TPckgC<TPushMtmProgress> TPushMtmProgressPckg;
+
+
+#include "PushMtmProgress.inl"
+
+#endif // PUSHMTMPROGRESS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Inc/PushMtmProgress.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of class TPushMtmProgress.
+*
+*/
+
+
+
+//**********************************
+// TPushMtmProgress
+//**********************************
+
+inline TPushMtmProgress::TPushMtmProgress()
+ {
+ Reset();
+ }
+
+inline void TPushMtmProgress::Reset()
+ {
+ iTotalValue = 0;
+ iCurrentValue = 0;
+ iErrorCode1 = KErrNone;
+ iErrorCode2 = KErrNone;
+ iErrorCode3 = KErrNone;
+ };
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvInc/PushMtmCliSrvPanic.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+#ifndef PUSHMTMCLISRVPANIC_H
+#define PUSHMTMCLISRVPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushMtmCliSrvPanic
+ {
+ EPushMtmCliSrvPanCommandNotSupported = 1, ///< Not supported command.
+ EPushMtmCliSrvPanBadType, ///< Unsupported message type for an operation.
+ EPushMtmCliSrvPanFoldersNotSupported, ///< MTM loaded with bad message entry.
+ EPushMtmCliSrvPanEmptySelection, ///< Entry selection is empty.
+ EPushMtmCliSrvPanNotInitUrl,
+ EPushMtmCliSrvPanNoContext,
+ EPushMtmCliSrvPanAlreadyInitialized
+ };
+
+GLREF_C void CliSrvPanic( TPushMtmCliSrvPanic aReason );
+
+#endif // PUSHMTMCLISRVPANIC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvInc/PushMtmClient.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Client Mtm class declaration
+*
+*/
+
+
+
+#ifndef PUSHMTMCLIENT_H
+#define PUSHMTMCLIENT_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <msvstd.h>
+#include <mtclbase.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvOperation;
+class CMsvEntrySelection;
+
+// CLASS DECLARATION
+
+/**
+* Client MTM for pushed messages.
+*/
+class CPushMtmClient : public CBaseMtm
+ {
+ public: // construction
+
+ /**
+ * Two-phased constructor (exported factory function).
+ * Leaves on failure.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @param CMsvSession Message Server Session to be used by this client.
+ * @return The constructed client.
+ */
+ IMPORT_C static CPushMtmClient* NewL
+ ( CRegisteredMtmDll& aRegisteredMtmDll, CMsvSession& aMsvSession );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmClient();
+
+ private: // construction
+
+ /**
+ * Constructor.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @param CMsvSession Message Server Session to be used by this client.
+ */
+ CPushMtmClient
+ ( CRegisteredMtmDll& aRegisteredMtmDll, CMsvSession& aMsvSession );
+
+ /**
+ * Second phase constructor. Derivde classes should call this first
+ * during construction.
+ */
+ void ConstructL();
+
+ private: // from CBaseMtm
+
+ /**
+ * (Not supported) Save the message.
+ */
+ void SaveMessageL();
+
+ /**
+ * (Not supported) Load the message.
+ */
+ void LoadMessageL();
+
+ /**
+ * Validate the current context.
+ * @param aPartList Message parts for which validation is requested.
+ * @return
+ * - Bitmask of the TMsvPartList IDs for each invalid part, or
+ * - KErrNone if all parts are valid.
+ */
+ TMsvPartList ValidateMessage( TMsvPartList aPartList );
+
+ /**
+ * (Not supported) Find text in the current context.
+ * @param aTextToFind Text to find.
+ * @param aPartList Message parts to search.
+ * @return 0 (not supported).
+ */
+ TMsvPartList Find
+ ( const TDesC& aTextToFind, TMsvPartList aPartList );
+
+ /**
+ * (Not supported) Create a reply to the current context.
+ * @param aReplyEntryId The entry to which to assign the reply.
+ * @param aPartList Message parts to include in the reply.
+ * @param aCompletionStatus Completion request status.
+ * @return A completed operation with status KErrNotSupported.
+ */
+ CMsvOperation* ReplyL
+ (
+ TMsvId aReplyEntryId,
+ TMsvPartList aPartlist,
+ TRequestStatus& aCompletionStatus
+ );
+
+ /**
+ * (Not supported) Create a reply to the current context.
+ * @param aReplyEntryId The entry to which to assign the forwarded
+ * message.
+ * @param aPartList Message parts to include in the forwarded message.
+ * @param aCompletionStatus Completion request status.
+ * @return A completed operation with status KErrNotSupported.
+ */
+ CMsvOperation* ForwardL
+ (
+ TMsvId aForwardEntryId,
+ TMsvPartList aPartList,
+ TRequestStatus& aCompletionStatus
+ );
+
+ /**
+ * (Not supported) Add an addressee.
+ * @param aRealAddress Real address.
+ * @throw KErrNotSupported The specified function is not supported.
+ */
+ void AddAddresseeL( const TDesC& aRealAddress );
+
+ /**
+ * (Not supported) Add an addressee.
+ * @param aRealAddress Real address.
+ * @param aAlias Alias information.
+ * @throw KErrNotSupported The specified function is not supported.
+ */
+ void AddAddresseeL( const TDesC& aRealAddress,
+ const TDesC& aAlias );
+
+ /**
+ * (Not supported) Remove an addressee.
+ * @param aIndex Index of addressee.
+ */
+ void RemoveAddressee( TInt aIndex );
+
+ /**
+ * Call CBaseMtmUiData::QueryCapability.
+ * @param aCapability UID of capability to be queried.
+ * @param aResponse Response value.
+ * @return
+ * - KErrNone: aCapability is a recognised value
+ * and a response is returned.
+ * - KErrNotSupported: aCapability is not a recognised value.
+ */
+ TInt QueryCapability( TUid aCapability, TInt& aResponse );
+
+ /**
+ * Invoke synchronous functions.
+ * Supported function(s):
+ * - EPushMtmCmdCollectGarbage Deleting expired SIs
+ * @param aFunctionId ID of the requested operation.
+ * @param aSelection Selection of message entries to operate on.
+ * EPushMtmCmdFetchContent does not use it. It operates on the
+ * current MTM context.
+ * EPushMtmCmdCollectGarbage uses it. If it is not empty, then
+ * the first element is used as folder specifier, otherwise
+ * if the list s empty then KMsvNullIndexEntryId is passed to
+ * the GC operation.
+ * @param aParameter Ignored.
+ * @return None.
+ * @throw KErrNotSupported The specified function is not supported.
+ */
+ void InvokeSyncFunctionL
+ (
+ TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TDes8& aParameter
+ );
+
+ /**
+ * Invoke asynchronous operation.
+ * Supported functions:
+ * - EPushMtmCmdFetchContent (SL specific!)
+ * - EPushMtmCmdCollectGarbage Deleting expired SIs
+ * @param aFunctionId ID of the requested operation.
+ * @param aSelection Selection of message entries to operate on.
+ * EPushMtmCmdFetchContent does not use it. It operates on the
+ * current MTM context.
+ * EPushMtmCmdCollectGarbage uses it. If it is not empty, then
+ * the first element is used as folder specifier, otherwise
+ * if the list s empty then KMsvNullIndexEntryId is passed to
+ * the GC operation.
+ * @param aParameter Buffer containing input and output parameters.
+ * @param aCompletionStatus Completion status.
+ * @return
+ * - If successful, an asynchronously completing operation.
+ * - If failed, a completed operation, with status set to the
+ * relevant error code.
+ * @throw KErrNotSupported The specified function is not supported.
+ */
+ CMsvOperation* InvokeAsyncFunctionL
+ (
+ TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TDes8& aParameter,
+ TRequestStatus& aCompletionStatus
+ );
+
+ /**
+ * Context changed callback function. It does nothing.
+ */
+ void ContextEntrySwitched();
+ };
+
+#endif // PUSHMTMCLIENT_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvInc/PushMtmGcOperation.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMtmGcOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMGCOPERATION_H
+#define PUSHMTMGCOPERATION_H
+
+// INCLUDE FILES
+
+#include "PushMtmOperation.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <Msvstd.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CPushMtmUtil;
+class CMsvEntrySelection;
+class CSIPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* Garbage collection operation. It removes some or all expired SIs from the
+* Message Server.
+*/
+class CPushMtmGcOperation : public CPushMtmOperation
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aSession Message server session to be used by this operation.
+ * @param aFolderId aFolderId Garbage collection is made in this folder.
+ * If it's KMsvNullIndexEntryId, then gc is made in all the
+ * folders that may contain push messages.
+ * @param aObserverRequestStatus Observer's status.
+ * @return The constructed operation.
+ */
+ static CPushMtmGcOperation* NewL( CMsvSession& aSession,
+ TMsvId aFolderId,
+ TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmGcOperation();
+
+ public: // New functions
+
+ /**
+ * Do the garbage collection synchronously.
+ */
+ void DoSyncL();
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aSession Message server session to be used by this operation.
+ * @param aFolderId Garbage collection is made in this folder.
+ * @param aObserverRequestStatus Observer's status.
+ */
+ CPushMtmGcOperation( CMsvSession& aSession,
+ TMsvId aFolderId,
+ TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ protected: // New functions
+
+ /**
+ * Initialize the operation. Creates an array of SI messages.
+ */
+ void InitL();
+
+ /**
+ * Delete the current entry if it is expired.
+ */
+ void GcCurrentL();
+
+ protected: // Functions from base classes
+
+ /**
+ * Do garbage collection. Initializes an array of SI messages
+ * and check the expiration state: one check per one RunL shot.
+ */
+ void RunL();
+
+ /**
+ * Cancel protocol implementation. CPushMtmOperation::DoCancel() is
+ * called.
+ */
+ void DoCancel();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves. It continues the operation if the current entry is not
+ * found, otherwise it is stopped.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // Data members
+
+ enum TState
+ {
+ EInit,
+ EGarbageCollecting
+ };
+
+ TState iState; ///< Operation state.
+ TMsvId iFolderId; /**< Gc is done only in this specific folder,
+ * if it is not KMsvNullIndexEntryId. */
+ CPushMtmUtil* iUtil; ///< Utility class. Owned.
+ CMsvEntrySelection* iEntrySel; ///< Selection of entries to be deleted. Owned.
+ CSIPushMsgEntry* iEntryWrapper; ///< Msg class. Owned.
+ TInt iCount; ///< Count of the selection.
+ TInt iCurrentIndex; ///< Index of the current entry in the selection.
+ };
+
+#endif // PUSHMTMGCOPERATION_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvInc/PushMtmServer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Server Mtm class declaration
+*
+*/
+
+
+
+#ifndef PUSHMTMSERVER_H
+#define PUSHMTMSERVER_H
+
+// INCLUDES
+
+#include "PushMtmProgress.h"
+#include <mtsr.h>
+
+// CLASS DECLARATION
+
+/**
+* Server MTM for pushed messages. Currently, all operations are executed
+* in the Client MTM, so this class is a collection of dummy implementations.
+*
+* @lib ?library
+* @since ?Series60_version
+*/
+class CPushMtmServer : public CBaseServerMtm
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor (exported factory function).
+ * Leaves on failure.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @param aInitialEntry Initial entry.
+ * @return The constructed Server MTM.
+ */
+ IMPORT_C static CPushMtmServer* NewL(
+ CRegisteredMtmDll& aRegisteredMtmDll,
+ CMsvServerEntry* aInitialEntry );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmServer();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @param aInitialEntry Initial entry.
+ */
+ CPushMtmServer(
+ CRegisteredMtmDll& aRegisteredMtmDll,
+ CMsvServerEntry* aInitialEntry );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * Add this active object to the scheduler.
+ */
+ void ConstructL();
+
+ private: // Functions from base classes
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void CopyToLocalL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aDestination,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void CopyFromLocalL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aDestination,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void CopyWithinServiceL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aDestination,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void MoveToLocalL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aDestination,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void MoveFromLocalL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aDestination,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void MoveWithinServiceL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aDestination,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void DeleteAllL(
+ const CMsvEntrySelection& aSelection,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void CreateL( TMsvEntry aNewEntry, TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void ChangeL( TMsvEntry aNewEntry, TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but leave with KErrNotSupported.
+ */
+ void StartCommandL(
+ CMsvEntrySelection& aSelection,
+ TInt aCommand,
+ const TDesC8& aParameter,
+ TRequestStatus& aStatus );
+
+ /**
+ * Do nothing, but return EFalse.
+ */
+ TBool CommandExpected();
+
+ /**
+ * Return iProgressPckg.
+ */
+ const TDesC8& Progress();
+
+ /**
+ * Do nothing.
+ */
+ void DoRunL();
+
+ /**
+ * Do nothing.
+ */
+ void DoComplete( TInt aError );
+
+ /**
+ * Do nothing.
+ */
+ void DoCancel();
+
+ protected: // Data
+
+ TPushMtmProgress iProgress; ///< Progress information.
+ /// Reference to progress information as a buffer pointer.
+ TPushMtmProgressPckg iProgressPckg;
+ };
+
+#endif // PUSHMTMSERVER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvSrc/PushMtmCliSrvPanic.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmCliSrvPanic.h"
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT( KCliSrvPanicString, "PushMtmCliSrv" );
+
+// ---------------------------------------------------------
+// CliSrvPanic
+// ---------------------------------------------------------
+//
+GLDEF_C void CliSrvPanic( TPushMtmCliSrvPanic aReason )
+ {
+ User::Panic( KCliSrvPanicString, aReason );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvSrc/PushMtmClient.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Client Mtm class definition
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmClient.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmProgress.h"
+#include "PushMtmCliSrvPanic.h"
+#include "PushMtmGcOperation.h"
+#include <msvids.h>
+#include <msvapi.h>
+#include <MTMStore.h>
+#include <mtudcbas.h>
+
+// LOCAL CONSTANTS AND MACROS
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmClient::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmClient* CPushMtmClient::NewL
+ ( CRegisteredMtmDll& aRegisteredMtmDll,
+ CMsvSession& aMsvSession )
+ {
+ CPushMtmClient* client =
+ new (ELeave) CPushMtmClient( aRegisteredMtmDll, aMsvSession );
+ CleanupStack::PushL( client );
+ client->ConstructL();
+ CleanupStack::Pop(); // client
+ return client;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::~CPushMtmClient
+// ---------------------------------------------------------
+//
+CPushMtmClient::~CPushMtmClient()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::CPushMtmClient
+// ---------------------------------------------------------
+//
+CPushMtmClient::CPushMtmClient( CRegisteredMtmDll& aRegisteredMtmDll,
+ CMsvSession& aMsvSession )
+: CBaseMtm( aRegisteredMtmDll, aMsvSession )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmClient::ConstructL()
+ {
+ SwitchCurrentEntryL( KMsvRootIndexEntryId );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::SaveMessageL
+// ---------------------------------------------------------
+//
+void CPushMtmClient::SaveMessageL()
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::LoadMessageL
+// ---------------------------------------------------------
+//
+void CPushMtmClient::LoadMessageL()
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::ReplyL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmClient::ReplyL
+ (
+ TMsvId /*aReplyEntryId*/,
+ TMsvPartList /*aPartlist*/,
+ TRequestStatus& /*aCompletionStatus*/
+ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::ForwardL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmClient::ForwardL
+ (
+ TMsvId /*aForwardEntryId*/,
+ TMsvPartList /*aPartList*/,
+ TRequestStatus& /*aCompletionStatus*/
+ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::AddAddresseeL
+// ---------------------------------------------------------
+//
+void CPushMtmClient::AddAddresseeL( const TDesC& /*aRealAddress*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::AddAddresseeL
+// ---------------------------------------------------------
+//
+void CPushMtmClient::AddAddresseeL( const TDesC& /*aRealAddress*/,
+ const TDesC& /*aAlias*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::RemoveAddressee
+// ---------------------------------------------------------
+//
+void CPushMtmClient::RemoveAddressee( TInt /*aIndex*/ )
+ {
+ // Not suppored.
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::ValidateMessage
+// ---------------------------------------------------------
+//
+TMsvPartList CPushMtmClient::ValidateMessage( TMsvPartList /*aPartList*/ )
+ {
+ // Not supported. KErrNone means that the current context is valid.
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::Find
+// ---------------------------------------------------------
+//
+TMsvPartList CPushMtmClient::Find( const TDesC& /*aTextToFind*/,
+ TMsvPartList /*aPartList*/ )
+ {
+ // Not supported.
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::QueryCapability
+// ---------------------------------------------------------
+//
+TInt CPushMtmClient::QueryCapability( TUid /*aCapability*/, TInt& /*aResponse*/ )
+ {
+ return KErrNotSupported; // No supported capabilities here.
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::InvokeSyncFunctionL
+// ---------------------------------------------------------
+//
+void CPushMtmClient::InvokeSyncFunctionL(
+ TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TDes8& /*aParameter*/ )
+ {
+ if ( aFunctionId == EPushMtmCmdCollectGarbage )
+ {
+ TRequestStatus dummyStat; // We call the sync op.
+ CPushMtmGcOperation* op = CPushMtmGcOperation::NewL(
+ Session(),
+ aSelection.Count() ?
+ aSelection.At( 0 ) :
+ KMsvNullIndexEntryId,
+ dummyStat );
+ CleanupStack::PushL( op );
+ op->DoSyncL();
+ CleanupStack::PopAndDestroy( op ); // op
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::InvokeAsyncFunctionL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmClient::InvokeAsyncFunctionL(
+ TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TDes8& /*aParameter*/,
+ TRequestStatus& aCompletionStatus )
+ {
+ CMsvOperation* operation = NULL;
+
+ switch ( aFunctionId )
+ {
+ case EPushMtmCmdCollectGarbage:
+ {
+ CPushMtmGcOperation*
+ op = CPushMtmGcOperation::NewL( Session(),
+ aSelection.Count() ?
+ aSelection.At( 0 ) :
+ KMsvNullIndexEntryId,
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmClient::ContextEntrySwitched
+// ---------------------------------------------------------
+//
+void CPushMtmClient::ContextEntrySwitched()
+ {
+ // Does nothing
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvSrc/PushMtmGcOperation.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,317 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmGcOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmGcOperation.h"
+#include "PushMtmCliSrvPanic.h"
+#include "PushMtmUtil.h"
+#include "PushMtmLog.h"
+#include <push/CSIPushMsgEntry.h>
+#include <msvids.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmGcOperation* CPushMtmGcOperation::NewL(
+ CMsvSession& aSession,
+ TMsvId aFolderId,
+ TRequestStatus& aObserverRequestStatus )
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::NewL")
+
+ CPushMtmGcOperation* self = new (ELeave) CPushMtmGcOperation
+ ( aSession, aFolderId, aObserverRequestStatus );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::~CPushMtmGcOperation
+// ---------------------------------------------------------
+//
+CPushMtmGcOperation::~CPushMtmGcOperation()
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::~CPushMtmGcOperation")
+
+ Cancel();
+ delete iEntrySel;
+ delete iEntryWrapper;
+ delete iUtil;
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::~CPushMtmGcOperation")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::DoSyncL
+// ---------------------------------------------------------
+//
+void CPushMtmGcOperation::DoSyncL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::DoSyncL")
+
+ InitL();
+
+ for ( iCurrentIndex = 0; iCurrentIndex < iCount; ++iCurrentIndex )
+ {
+ // iCurrentIndex indicate the current entry in the selection.
+ GcCurrentL();
+ }
+
+ // Release unnecessary resources.
+ delete iEntrySel;
+ iEntrySel = NULL;
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::DoSyncL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::CPushMtmGcOperation
+// ---------------------------------------------------------
+//
+CPushMtmGcOperation::CPushMtmGcOperation( CMsvSession& aSession,
+ TMsvId aFolderId,
+ TRequestStatus& aObserverRequestStatus )
+: CPushMtmOperation( aSession, KMsvNullIndexEntryId, aObserverRequestStatus ),
+ iState( EInit ), iFolderId( aFolderId ), iCurrentIndex( 0 )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmGcOperation::ConstructL()
+ {
+ // Do nothing here.
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::InitL
+// ---------------------------------------------------------
+//
+void CPushMtmGcOperation::InitL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::InitL")
+
+ if ( !iUtil )
+ {
+ iUtil = CPushMtmUtil::NewL( iMsvSession );
+ }
+
+ CMsvEntrySelection* folders = NULL;
+ if ( iFolderId == KMsvNullIndexEntryId )
+ {
+ folders = iUtil->FindPushFoldersL();
+ CleanupStack::PushL( folders );
+ }
+ else
+ {
+ folders = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( folders );
+ folders->AppendL( iFolderId );
+ }
+
+ // Get SIs from the given folder(s).
+ delete iEntrySel;
+ iEntrySel = NULL;
+ iEntrySel = iUtil->FindMessagesL( *folders, KUidWapPushMsgSI );
+ CleanupStack::PopAndDestroy(); // folders
+
+ // Reset count.
+ iCount = iEntrySel->Count();
+ PUSHLOG_WRITE_FORMAT(" iCount: %d",iCount)
+ // Reset index.
+ iCurrentIndex = 0;
+
+ // We need a wrapper only if there is entry to delete.
+ if ( iCount && !iEntryWrapper )
+ {
+ iEntryWrapper = CSIPushMsgEntry::NewL();
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::InitL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::GcCurrentL
+// ---------------------------------------------------------
+//
+void CPushMtmGcOperation::GcCurrentL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::GcCurrentL")
+
+ PUSHLOG_WRITE_FORMAT(" iCurrentIndex: %d",iCurrentIndex)
+ TMsvId entryId( iEntrySel->At(iCurrentIndex) );
+
+#ifdef _DEBUG
+ TMsvEntry tEntry;
+ TMsvId dummyService;
+ User::LeaveIfError
+ ( iMsvSession.GetEntry( entryId, dummyService, tEntry ) );
+
+ __ASSERT_DEBUG( tEntry.iMtm == KUidMtmWapPush &&
+ tEntry.iBioType == KUidWapPushMsgSI.iUid,
+ CliSrvPanic( EPushMtmCliSrvPanBadType ) );
+#endif // _DEBUG
+
+ iEntryWrapper->RetrieveL( iMsvSession, entryId );
+ // Check expiration if expiration time was set.
+ if ( iEntryWrapper->Expires() != Time::NullTTime() )
+ {
+ TTime today;
+ today.UniversalTime();
+ if ( iEntryWrapper->Expires() < today )
+ {
+ PUSHLOG_WRITE(" Expired")
+ // The message has expired. Delete it.
+ CMsvEntry* cParent =
+ iMsvSession.GetEntryL( iEntryWrapper->Entry().Parent() );
+ CleanupStack::PushL( cParent );
+ // Delete the message.
+ cParent->DeleteL( entryId );
+ CleanupStack::PopAndDestroy(); // cParent
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::GcCurrentL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmGcOperation::RunL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::RunL")
+
+ if ( iState == EInit )
+ {
+ InitL();
+ if ( !iCount )
+ {
+ // Ready.
+ SignalObserver( KErrNone );
+ }
+ else
+ {
+ iState = EGarbageCollecting;
+ SetActive();
+ InvokeRun();
+ }
+ }
+ else if ( iState == EGarbageCollecting )
+ {
+ __ASSERT_DEBUG( iCount,
+ CliSrvPanic( EPushMtmCliSrvPanEmptySelection ) );
+ // iCurrentIndex indicate the current entry in the selection.
+ GcCurrentL();
+ if ( ++iCurrentIndex < iCount )
+ {
+ // Delete next.
+ SetActive();
+ InvokeRun();
+ }
+ else
+ {
+ // No more to delete.
+ SignalObserver( KErrNone );
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ CliSrvPanic( EPushMtmCliSrvPanCommandNotSupported ) );
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::RunL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmGcOperation::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::DoCancel")
+
+ CPushMtmOperation::DoCancel();
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmGcOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmGcOperation::RunError( TInt aError )
+ {
+ PUSHLOG_ENTERFN("CPushMtmGcOperation::RunError")
+ PUSHLOG_WRITE_FORMAT(" aError: %d",aError)
+
+ TBool doContinue( EFalse );
+
+ PUSHLOG_WRITE_FORMAT(" iState: %d",iState)
+ if ( iState == EInit )
+ {
+ // We cannot continue.
+ }
+ else if ( iState == EGarbageCollecting )
+ {
+ if ( aError == KErrNotFound )
+ {
+ // Try to continue with next.
+ if ( ++iCurrentIndex < iCount )
+ {
+ // Delete next.
+ doContinue = ETrue;
+ SetActive();
+ InvokeRun();
+ }
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ CliSrvPanic( EPushMtmCliSrvPanCommandNotSupported ) );
+ }
+
+ TInt ret = KErrNone;
+ if ( doContinue )
+ {
+ ret = KErrNone;
+ }
+ else
+ {
+ // Report error.
+ ret = CPushMtmOperation::RunError( aError );
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmGcOperation::RunError")
+ return ret;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmCliSrvSrc/PushMtmServer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Server Mtm class definition
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmServer.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmServer::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmServer* CPushMtmServer::NewL
+ ( CRegisteredMtmDll& aRegisteredMtmDll, CMsvServerEntry* aInitialEntry )
+ {
+ CPushMtmServer* server =
+ new (ELeave) CPushMtmServer( aRegisteredMtmDll, aInitialEntry );
+ CleanupStack::PushL( server );
+ server->ConstructL();
+ CleanupStack::Pop(); // server
+ return server;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::~CPushMtmServer
+// ---------------------------------------------------------
+//
+CPushMtmServer::~CPushMtmServer()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::CPushMtmServer
+// ---------------------------------------------------------
+//
+CPushMtmServer::CPushMtmServer
+( CRegisteredMtmDll& aRegisteredMtmDll, CMsvServerEntry* aInitialEntry )
+ : CBaseServerMtm( aRegisteredMtmDll, aInitialEntry ),
+ iProgressPckg( iProgress )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::CopyToLocalL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::CopyToLocalL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aDestination*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::CopyFromLocalL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::CopyFromLocalL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aDestination*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::CopyWithinServiceL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::CopyWithinServiceL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aDestination*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::MoveToLocalL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::MoveToLocalL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aDestination*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::MoveFromLocalL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::MoveFromLocalL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aDestination*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::MoveWithinServiceL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::MoveWithinServiceL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aDestination*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::DeleteAllL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::DeleteAllL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::CreateL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::CreateL
+( TMsvEntry /*aNewEntry*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::ChangeL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::ChangeL
+( TMsvEntry /*aNewEntry*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::StartCommandL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::StartCommandL( CMsvEntrySelection& /*aSelection*/,
+ TInt /*aCommand*/, const TDesC8& /*aParameter*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::CommandExpected
+// ---------------------------------------------------------
+//
+TBool CPushMtmServer::CommandExpected()
+ {
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::Progress
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmServer::Progress()
+ {
+ return iProgressPckg;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::DoComplete
+// ---------------------------------------------------------
+//
+void CPushMtmServer::DoComplete( TInt /*aError*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::DoRunL
+// ---------------------------------------------------------
+//
+void CPushMtmServer::DoRunL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmServer::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmServer::DoCancel()
+ {
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushLoadServiceOp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushLoadServiceOp.
+*
+*/
+
+
+
+#ifndef PUSHLOADSERVICEOP_H
+#define PUSHLOADSERVICEOP_H
+
+// INCLUDE FILES
+
+//#include "PushMtmOperation.h"
+#include "PushMtmUiOperation.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <apparc.h>
+#include <AknServerApp.h>
+// FORWARD DECLARATIONS
+
+class CSchemeHandler;
+class CPushMsgEntryBase;
+class CPushMtmSettings;
+
+// CLASS DECLARATION
+
+/**
+* This asynchronous operation is responsible for downloading service that is
+* indicated by the URL field of the pushed service message. It means that it
+* is applicable only for SI and SL pushed messages.
+* The operation uses the Scheme Handler to launch the appropriate handler
+* application for the given URL.
+*/
+class CPushLoadServiceOp : public CPushMtmUiOperation,
+ public MAknServerAppExitObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aEntryId Id of entry to operate on.
+ * @param aObserverStatus Observer's status.
+ * @return The constructed object.
+ */
+ static CPushLoadServiceOp* NewL( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushLoadServiceOp();
+
+ public: // Functions from CPushMtmOperation
+
+ /**
+ * Start or restart the operation. The expiration state of the entry
+ * is checked (of course only in case of SI) and if it is expired,
+ * then the entry is deleted and the operation is cancelled.
+ * @return None.
+ */
+ void StartL();
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aEntryId Id of entry to operate on.
+ * @param aObserverStatus Observer's status.
+ */
+ CPushLoadServiceOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ protected: // New functions
+
+ /**
+ * Check the expiration state of the context. It is SI specific.
+ * In case of other push messages it returns EFalse.
+ * @return ETrue or EFalse.
+ */
+ TBool IsExpiredL( const TMsvEntry& aTEntry ) const;
+
+ /**
+ * Retrieve the context and get the URL from the context.
+ * @param aUrl The URL filled from the context.
+ * @return The context entry.
+ */
+ CPushMsgEntryBase* RetrieveContextAndGetUrlLC( TPtrC& aUrl ) const;
+
+ /**
+ * Authenticate the message and display user query if necessary.
+ * @param aPushMsg The push message to be authenticated.
+ * @param aMtmSettings The push settings.
+ * @return ETrue if the message is authenticated.
+ */
+ TBool AuthenticateL( const CPushMsgEntryBase& aPushMsg,
+ const CPushMtmSettings& aMtmSettings ) const;
+
+ /**
+ * Execute a query which asks the user if (s)he wants to download
+ * the service anyway.
+ * @param aResId Resource to be used.
+ * @return ETrue, if the user wants to download it.
+ */
+ TBool ExecuteUserQueryL( TInt aResId ) const;
+
+ /**
+ * If no scheme exists in the URL, then "http://" is insetred.
+ * @param aUrl The original URL.
+ * @return The validated URL.
+ */
+ HBufC* ValidateLC( TDesC& aUrl ) const;
+
+ protected: // Functions from base classes
+
+ /**
+ * If the operation was not cancelled in StartL, then it extracts
+ * the URL from the message and launches the Document Handler to
+ * execute the proper handler for the scheme.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Cancel protocol implementation.
+ */
+ void DoCancel();
+
+ /**
+ * It calls CPushMtmOperation::RunError( aError ).
+ */
+ TInt RunError( TInt aError );
+
+ void HandleServerAppExit(TInt aReason);
+
+ private:
+
+ TMsvEntry iTEntry; ///< Current context.
+ TBool iDone; ///< Indicates that the operation is ready.
+ CSchemeHandler* iSchemeHandler; ///< Handles the URL. Owned.
+ };
+
+#endif // PUSHLOADSERVICEOP_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMessageInfoDialog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class definition of CPushMessageInfoDialog.
+*
+*/
+
+
+
+#ifndef PUSHMESSAGEINFODIALOG_H
+#define PUSHMESSAGEINFODIALOG_H
+
+// INCLUDES
+
+#include <AknPopup.h>
+#include <msvstd.h>
+#include <ConeResLoader.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CAknSingleHeadingPopupMenuStyleListBox;
+class CFont;
+
+// CLASS DECLARATION
+
+/**
+* Avkon environment is required.
+* It executes a waiting dialog.
+* Usage.
+* #include "PushMessageInfoDialog.h"
+* CPushMessageInfoDialog* dlg = new (ELeave) CPushMessageInfoDialog;
+* CleanupStack::PushL( dlg );
+* dlg->ExecuteLD( msvSession, id );
+* CleanupStack::Pop( dlg );
+*
+* Note that this class is independent from CMsgInfoMessageInfoDialog defined
+* in muiumsginfo.h. The mentioned class cannot be used, because it does not
+* support Push message information.
+*/
+class CPushMessageInfoDialog : public CAknPopupList
+ {
+ public: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CPushMessageInfoDialog();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMessageInfoDialog();
+
+ public: // New functions
+
+ /**
+ * Execute the dialog with this member.
+ * @param aMsvSession Message Server session.
+ * @param aId The id of the entry.
+ * @return None.
+ */
+ void ExecuteLD( CMsvSession& aMsvSession, TMsvId aId );
+
+ private: // Constructors and destructor
+
+ /**
+ * Symbian OS constructor.
+ * @param aMsvSession Message Server session.
+ * @param aId The id of the entry.
+ * @return None.
+ */
+ void ConstructL( CMsvSession& aMsvSession, TMsvId aId );
+
+ private: // New functions
+
+ /**
+ * Add a message info item.
+ * @param aHeaderResourceId Res id of the header text.
+ * @param aText The value text of the item.
+ * @return None.
+ */
+ void AddMessageInfoItemL
+ ( TInt aHeaderResourceId, const TDesC& aText ) const;
+
+ /**
+ * Convert UTC time to Home Time.
+ * @param aUniversalTime Universal (UTC) time to be converted.
+ * @return Home time.
+ */
+ TTime ConvertUniversalToHomeTime( const TTime& aUniversalTime ) const;
+
+ /**
+ * Add message info items to the dialog.
+ * @param aMsvSession Message Server session.
+ * @param aId The id of the entry.
+ * @return None.
+ */
+ void AddMessageInfoItemsL( CMsvSession& aMsvSession,
+ TMsvId aId ) const;
+
+ private: // Data
+
+ CAknSingleHeadingPopupMenuStyleListBox* iListBox; ///< Owns.
+ CDesCArrayFlat* iListBoxModel; ///< Owns.
+ RConeResourceLoader iResourceLoader;
+ TFileName iResourceFile;
+ // The following members help wrapping text.
+ const CFont* iSecondColumnFont; ///< Reference to the font. Not owned.
+ TInt iSecondColumnWidth;
+ TInt iPushSLEnabled;
+;
+ };
+
+#endif // PUSHMESSAGEINFODIALOG_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMessageInfoOp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMessageInfoOp.
+*
+*/
+
+
+
+#ifndef PUSHMESSAGEINFOOP_H
+#define PUSHMESSAGEINFOOP_H
+
+// INCLUDE FILES
+
+#include "PushMtmUiOperation.h"
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMessageInfoDialog;
+
+// CLASS DECLARATION
+
+/**
+* This asynchronous operation is responsible for executing the Message Info
+* dialog.
+*/
+class CPushMessageInfoOp : public CPushMtmUiOperation
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aEntryId Id of entry to operate on.
+ * @param aDontShowNotification ETrue: don't show info notes.
+ * @param aObserverStatus Observer's status.
+ */
+ CPushMessageInfoOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TBool aDontShowNotification,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMessageInfoOp();
+
+ public: // Functions from CPushMtmOperation
+
+ /**
+ * Start or restart the operation.
+ * Current implementation calls Cancel and invokes RunL.
+ * Derived classes may override this.
+ */
+ void StartL();
+
+ protected: // New functions
+
+ /**
+ * Decide if content changed and act accordingly.
+ */
+ void HandleEntryChangeL();
+
+ /**
+ * Show information note and cancel the operation.
+ */
+ void NotifyAndCancelL( TInt aResId );
+
+ protected: // Functions from base classes
+
+ /**
+ * TODO.
+ */
+ void RunL();
+
+ /**
+ * Cancel protocol implementation.
+ */
+ void DoCancel();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves. The observer is signaled if a leave occures.
+ * The leave code is not forwarded to the scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ /**
+ * Call-back for entry event handling.
+ */
+ void HandleEntryEventL( TMsvEntryEvent aEvent,
+ TAny* aArg1, TAny* aArg2, TAny* aArg3 );
+
+ private: // Data
+
+ CPushMessageInfoDialog* iDialog; ///< Owned.
+ TBool iDontShowNotification;
+ TBool iObserverCompleted;
+ TBool* iDeletedFlag;
+ };
+
+#endif // PUSHMESSAGEINFOOP_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMtmUi.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Ui Mtm class declaration
+*
+*/
+
+
+
+#ifndef PUSHMTMUI_H
+#define PUSHMTMUI_H
+
+// INCLUDE FILES
+
+#include <mtmuibas.h>
+
+// CLASS DECLARATION
+
+/**
+* UI MTM for pushed messages.
+*/
+class CPushMtmUi: public CBaseMtmUi
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor (exported factory function).
+ * Leaves on failure.
+ * @param aBaseMtm The client MTM.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @return The constructed UI.
+ */
+ IMPORT_C static CPushMtmUi* NewL
+ ( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmUi();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ * @param aBaseMtm The client MTM.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @return The constructed UI.
+ */
+ CPushMtmUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll );
+
+ private: // New functions
+
+ /**
+ * Utility to set a TMsvLocalOperationProgress completed.
+ * @param aProgress Progress package buffer to set.
+ * @param aId Id to set in the buffer.
+ */
+ void SetProgressSuccess
+ ( TPckgBuf<TMsvLocalOperationProgress>& aProgress, TMsvId aId );
+
+ /**
+ * Create a CMsvCompletedOperation object.
+ * @param aObserverStatus Observer's status.
+ * @return The operation object.
+ */
+ CMsvOperation* CompletedOperationL( TRequestStatus& aObserverStatus );
+
+ /**
+ * Ensure that a service entry exists with which the settings can be
+ * reached from a messaging application. It creates a service entry
+ * if necessary.
+ * @return None.
+ */
+ void EnsureServiceEntryL() const;
+
+ private: // Functions from base classes
+
+ /**
+ * Unsupported, leaves with KErrNotSupported.
+ * @param aEntry (Unused) The data to be copied into the new entry.
+ * @param aParent (Unused) The parent of the new entry.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* CreateL(
+ const TMsvEntry& aEntry,
+ CMsvEntry& aParent,
+ TRequestStatus& aStatus );
+
+ // --------------------------------------------------
+ // --- Functions dependent on the current context ---
+ // --------------------------------------------------
+
+ /**
+ * Open the current context. If it is a KUidMsvMessageEntry then it is
+ * equivalent to ViewL. If it is a KUidMsvServiceEntry then it is
+ * equivalent to EditL. Otherwise it leaves with KErrNotSupported.
+ * @param aStatus Completion status.
+ * @return The operation object.
+ */
+ CMsvOperation* OpenL( TRequestStatus& aStatus );
+
+ /**
+ * Close the current context. It does nothing just returns a completed
+ * operation.
+ * @param aStatus Completion status.
+ * @return The operation object.
+ */
+ CMsvOperation* CloseL( TRequestStatus& aStatus );
+
+ /**
+ * Edit the current context. For KUidMsvServiceEntry it executes the
+ * "Service Settings" dialog. It returns a completed operation. For
+ * other entry types it leaves with KErrNotSupported.
+ * @param aStatus Completion status.
+ * @return The operation object.
+ */
+ CMsvOperation* EditL( TRequestStatus& aStatus );
+
+ /**
+ * View the current context. Only for KUidMsvMessageEntry. It launches the
+ * Push Viewer application embedded for SI and it lauches the viewer
+ * application embedded for SP. For other entry types it leaves
+ * with KErrNotSupported.
+ * @param aStatus Completion status.
+ * @return The operation object.
+ */
+ CMsvOperation* ViewL( TRequestStatus& aStatus );
+
+ // --------------------------------------------------
+ // -- Functions independent on the current context --
+ // --------------------------------------------------
+
+ // --- Actions upon message selections ---
+ // Selections must be in same folder and all of the correct MTM type.
+ // Context may change after calling these functions.
+
+ /**
+ * This function is supported only for one selected entry. If the selection
+ * contains more than one entry then it leaves with KErrNotSupported.
+ * @param aStatus Completion status.
+ * @param aSelection Entry selection to operate on.
+ * @return The operation object.
+ */
+ CMsvOperation* OpenL
+ ( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection );
+
+ /**
+ * This function is supported only for one selected entry. If the selection
+ * contains more than one entry then it leaves with KErrNotSupported.
+ * Close the first entry from the selection. It does nothing however.
+ * @param aStatus Completion status.
+ * @param aSelection Entry selection to operate on.
+ * @return The operation object.
+ */
+ CMsvOperation* CloseL
+ ( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection );
+
+ /**
+ * This function is supported only for one selected entry. If the selection
+ * contains more than one entry then it leaves with KErrNotSupported.
+ * Edit the first selected entry.
+ * @param aStatus Completion status.
+ * @param aSelection Entry selection to operate on.
+ * @return The operation object.
+ */
+ CMsvOperation* EditL
+ ( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection );
+
+ /**
+ * This function is supported only for one selected entry. If the selection
+ * contains more than one entry then it leaves with KErrNotSupported.
+ * View the first entry from the selection.
+ * @param aStatus Completion status.
+ * @param aSelection Entry selection to operate on.
+ * @return The operation object.
+ */
+ CMsvOperation* ViewL
+ ( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection );
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aStatus Completion status.
+ * @param aSelection Entry selection to operate on.
+ * @return The operation object.
+ */
+ CMsvOperation* CancelL
+ ( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection );
+
+ // --- Deletion ---
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aSelection Entry selection to operate on.
+ * @param aStatus Completion status.
+ * @return The operation object.
+ */
+ CMsvOperation* DeleteFromL
+ ( const CMsvEntrySelection& aSelection, TRequestStatus& aStatus );
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aSelection (Unused) Entry selection to operate on. They must
+ * be children of the current context.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* UnDeleteFromL
+ ( const CMsvEntrySelection& aSelection, TRequestStatus& aStatus );
+
+ /* *
+ * It does nothing just leaves with KErrNotSupported.
+ * @param (Unused) aService Service to delete.
+ * @param (Unused) aStatus Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* DeleteServiceL
+ ( const TMsvEntry& aService, TRequestStatus& aStatus );
+
+ // --- Message responding ---
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aDestination (Unused) The entry to which to assign the reply.
+ * @param aPartList (Unused) Parts to be contained in the reply.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* ReplyL(
+ TMsvId aDestination,
+ TMsvPartList aPartlist,
+ TRequestStatus& aCompletionStatus );
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aDestination (Unused) The entry to which to assign the
+ * forwarded message.
+ * @param aPartList (Unused) Parts to be contained in the forwarded
+ * message.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* ForwardL(
+ TMsvId aDestination,
+ TMsvPartList aPartList,
+ TRequestStatus& aCompletionStatus );
+
+ // --- Copy and move functions ---
+ // Context should be set to folder or entry of this MTM.
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aSelection (Unused) Entry selection to operate on. They all
+ * must have the same parent.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* CopyToL
+ ( const CMsvEntrySelection& aSelection, TRequestStatus& aStatus );
+
+ /* *
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aSelection (Unused) Entry selection to operate on. They all
+ * must have the same parent.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* MoveToL
+ ( const CMsvEntrySelection& aSelection, TRequestStatus& aStatus );
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aSelection (Unused) Entry selection to operate on. They all
+ * must have the same parent.
+ * @param aTargetId (Unused) The ID of the entry to own the copies.
+ * @param aStatus (Unused) Completion status.
+ * @return (NULL) The operation object.
+ */
+ CMsvOperation* CopyFromL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aTargetId,
+ TRequestStatus& aStatus );
+
+ /**
+ * It does nothing just leaves with KErrNotSupported.
+ * @param aSelection Entry selection to operate on. They all
+ * must have the same parent.
+ * @param aTargetId The ID of the entry to move to.
+ * @param aStatus Completion status.
+ * @return The operation object.
+ */
+
+ CMsvOperation* MoveFromL(
+ const CMsvEntrySelection& aSelection,
+ TMsvId aTargetId,
+ TRequestStatus& aStatus );
+
+ /**
+ * Query if the MTM supports a particular (standard) capability.
+ * This feunction is also called by CPushMtmClient::QueryCapability.
+ * @param aCapability UID of capability to be queried.
+ * @param aResponse Response value.
+ * @return
+ * - KErrNone: aCapability is a recognized value
+ * and a response is returned.
+ * - KErrNotSupported: aCapability is not a recognized value.
+ */
+ TInt QueryCapability( TUid aCapability, TInt& aResponse );
+
+ /**
+ * Invoke synchronous operation.
+ * Only KMtmUiMessagingInitialisation and
+ * KMtmUiFunctionRestoreFactorySettings are supported.
+ * It will leave with KErrNotSupported otherwise.
+ * @param aFunctionId ID of the requested operation.
+ * @param aSelection Selection of message entries to operate on.
+ * @param aParameter Buffer containing input and output parameters.
+ * @return None.
+ * @throw KErrNotSupported The selected function is not supported.
+ */
+ void InvokeSyncFunctionL(
+ TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TDes8& aParameter );
+
+ /**
+ * Invoke asynchronous operation.
+ * Supported operations:
+ * - KMtmUiFunctionMessageInfo Launch message info dialog.
+ * - EPushMtmCmdLoadService Handle the URL in SI (or SL).
+ * - EPushMtmCmdViewService Render the content of the SP.
+ * - otherwise it calls CBaseMtmUi::InvokeAsyncFunctionL
+ * @param aFunctionId ID of the requested operation.
+ * @param aSelection Selection of message entries to operate on.
+ * @param aCompletionStatus Completion status.
+ * @param aParameter Buffer containing input and output parameters.
+ * @return
+ * - If successful, an asynchronously completing operation.
+ * - If failed, a completed operation, with status set to the
+ * relevant error code.
+ * @throw KErrNotSupported The selected function is not supported.
+ */
+ CMsvOperation* InvokeAsyncFunctionL(
+ TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TRequestStatus& aCompletionStatus,
+ TDes8& aParameter );
+
+ /**
+ * Get the resource file name for this MTM UI.
+ */
+ void GetResourceFileName( TFileName& aFileName ) const;
+ private:
+ TInt iPushSLEnabled;
+ };
+
+#endif // PUSHMTMUI_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMtmUi.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: HRH file for the Mtm Ui and Mtm Ui Data components
+*
+*/
+
+
+
+#ifndef PUSHMTMUI_HRH
+#define PUSHMTMUI_HRH
+
+#include <uikon.hrh>
+#include <avkon.hrh>
+#include <bldvariant.hrh>
+
+enum TPushSettingsDialogCommand
+ {
+ // Dialog specific command ids.
+ //
+ EPushSettingsDialogCmdChangeWithoutSettingPage = EAknSoftkeyChange,
+ //
+ // Ui framework defined command ids.
+ //
+ EPushSettingsDialogCmdChange = EAknSoftkeySelect,// Required by CAknSettingPage::OfferKeyEventL.
+ EPushSettingsDialogCmdOptions = EAknSoftkeyOptions,// = 3000
+#ifdef __SERIES60_HELP
+ EPushSettingsDialogCmdHelp = EAknCmdHelp, // = 4003
+#endif //__SERIES60_HELP
+ EPushSettingsDialogCmdBack = EAknSoftkeyBack, // = 3001
+ EPushSettingsDialogCmdExit = EEikCmdExit, // = 0x100. Use in HandleCommanL.
+ EPushSettingsDialogCmdAknExit = EAknCmdExit // = 4011. Use in resources.
+ };
+
+enum TPushSettingsDialogControl
+ {
+ EPushSettingsDialogCntrlListBox = 1
+ };
+
+enum TPushLoadWaitNoteControl
+ {
+ EPushLoadWaitNoteCntrl = 1
+ };
+
+#endif // PUSHMTMUI_HRH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMtmUiData.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Push Ui Data Mtm class declaration
+*
+*/
+
+
+
+#ifndef PUSHMTMUIDATA_H
+#define PUSHMTMUIDATA_H
+
+// INCLUDE FILES
+
+#include <msvstd.h>
+#include <mtudcbas.h>
+
+// CLASS DECLARATION
+
+/**
+* UI Data MTM for pushed messages.
+*/
+class CPushMtmUiData: public CBaseMtmUiData
+ {
+ public: // construction
+
+ /**
+ * Two-phased constructor (exported factory function).
+ * Leaves on failure.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ * @return The constructed UI Data.
+ */
+ IMPORT_C static CPushMtmUiData* NewL( CRegisteredMtmDll& aRegisteredDll );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmUiData();
+
+ private: // construction
+
+ /**
+ * Constructor.
+ * @param aRegisteredMtmDll Registration data for the MTM DLL.
+ */
+ CPushMtmUiData( CRegisteredMtmDll& aRegisteredDll );
+
+ private: // from CBaseMtmUiData
+
+ /**
+ * Get an array of bitmaps relevant to the passed context entry.
+ * @param aContext Context entry to return the icons for.
+ * @param aStateFlags
+ * @return Bitmap array for the given context.
+ */
+ const CBaseMtmUiData::CBitmapArray& ContextIcon
+ ( const TMsvEntry& aContext, TInt aStateFlags ) const;
+
+ /**
+ * Check if aNewEntry can be created as a child of aContext.
+ * (Yes for services in the root).
+ * @param aParent The entry under which aNewEntry should be created.
+ * @param aNewEntry The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanCreateEntryL( const TMsvEntry& aParent,TMsvEntry& aNewEntry,
+ TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if a delete operation is supported for aContext (yes).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanDeleteFromEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if the service aService can be deleted (yes).
+ * @param aService The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanDeleteServiceL
+ ( const TMsvEntry& aService, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if aContext can be replied to (no).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanReplyToEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if aContext can be forwarded (no).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanForwardEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if aContext can be edited (no).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanEditEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if aContext can be viewed (yes for messages).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanViewEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if aContext can be opened (yes for messages).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanOpenEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if aContext can be closed (yes for messages).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanCloseEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if a copy to or move to operation is supported
+ * for aContext (yes).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanCopyMoveToEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if a copy from or move from operation is supported
+ * for aContext (yes).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanCopyMoveFromEntryL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if a cancel operation is supported for aContext (no).
+ * @param aContext The entry to which the operation applies.
+ * @param aReasonResourceId On return, a resource string ID or 0.
+ */
+ TBool CanCancelL
+ ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const;
+
+ /**
+ * Check if an MTM-specific operation is appropriate to the entry
+ * specified in aContext.
+ * @param aOperationId ID of operation to query.
+ * @param aContext The entry to which the operation applies.
+ * @return
+ * - KErrNone if operation is supported,
+ * - KErrCancel if the operation is not supported.
+ */
+ TInt OperationSupportedL
+ ( TInt aOperationId, const TMsvEntry& aContext ) const;
+
+ /**
+ * Query if the MTM supports a particular (standard) capability.
+ * This function is also called by CPushMtmBaseClient::QueryCapability.
+ * @param aCapability UID of capability to be queried.
+ * @param aResponse Response value.
+ * @return
+ * - KErrNone: aCapability is a recognised value
+ * and a response is returned.
+ * - KErrNotSupported: aCapability is not a recognised value.
+ */
+ TInt QueryCapability( TUid aCapability, TInt& aResponse ) const;
+
+ /**
+ * Since we don't support sending, we don't need to support this
+ * function.
+ * @param aContext
+ * @return NULL.
+ */
+ HBufC* StatusTextL( const TMsvEntry& aContext ) const;
+
+ /**
+ * Load and populate icons and functions.
+ */
+ void PopulateArraysL();
+
+ /**
+ * Get the resource file name for this component.
+ */
+ void GetResourceFileName( TFileName& aFileName ) const;
+
+ private: // New functions
+
+ /**
+ * Create skinned icons in iIconArrays.
+ */
+ void CreateSkinnedBitmapsL();
+ };
+
+#endif // PUSHMTMUIDATA_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMtmUiDef.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Generic definition file. Internal usage only.
+*
+*/
+
+
+
+#ifndef PUSHMTMUIDEF_H
+#define PUSHMTMUIDEF_H
+
+// CONSTANTS
+
+/// Resource file for the Push Ui Data Mtm.
+_LIT( KPushMtmUiDataResourceFileAndDrive, "z:PushMtmUi.rsc" );
+
+/// Bitmap file for the Push Ui Data Mtm.
+_LIT( KPushMtmUiDataBitmapFileAndDrive, "z:PushMtm.mbm" );
+
+/// Resource file for the Push Ui Mtm.
+_LIT( KPushMtmUiResourceFileAndDrive, "z:PushMtmUi.rsc" );
+
+#endif // PUSHMTMUIDEF_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMtmUiOperation.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMtmUiOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMUIOPERATION_H
+#define PUSHMTMUIOPERATION_H
+
+// INCLUDES
+
+#include "PushMtmOperation.h"
+#include <e32std.h>
+#include <ConeResLoader.h>
+
+// FORWARD DECLARATIONS
+
+class CCoeEnv;
+class CPushMtmUtil;
+
+// CLASS DECLARATION
+
+/**
+* Base class for UI operations. It extends CPushMtmOperation with
+* AssureResourceL().
+*/
+class CPushMtmUiOperation : public CPushMtmOperation
+ {
+ protected: // Constructors and destructor
+
+ /**
+ * Constructor.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aId Id of entry to operate on.
+ * @param aObserverStatus Observer's status.
+ */
+ CPushMtmUiOperation( CMsvSession& aSession,
+ TMsvId aId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Symbian OS constructor. Derived classes must call this!
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmUiOperation();
+
+ protected: // New functions
+
+ /**
+ * Add the resource file to the Cone.
+ * Must be called before using a resource from this file to ensure that
+ * the resource file is loaded. Only one file can be loaded that is
+ * closed only in the destructor.
+ * @param aResourceFile Resource file name to be loaded.
+ * @return None.
+ */
+ void AssureResourceL( const TDesC& aResourceFile );
+
+ /**
+ * Show a global error note using CErrorUI.
+ * @param aError Error code.
+ * @return None.
+ */
+ void ShowGlobalErrorNoteL( TInt aError ) const;
+
+ protected: // Data members
+
+ CCoeEnv& iCoeEnv;
+ CPushMtmUtil* iMtmUtil; ///< Utility. Has.
+ RConeResourceLoader iResourceLoader; ///< Resource loader.
+ TBool iResourceOpened; ///< Indicate if the resource is opened.
+ };
+
+#endif // PUSHMTMUIOPERATION_H
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushMtmUiPanic.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+#ifndef PUSHMTMUIPANIC_H
+#define PUSHMTMUIPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushMtmUiPanic
+ {
+ EPushMtmUiPanCommandNotSupported = 1, ///< Not supported command.
+ EPushMtmUiPanBadType, ///< Unsupported message type for an operation.
+ EPushMtmUiPanFoldersNotSupported, ///< MTM loaded with bad message entry.
+ EPushMtmUiPanEmptySelection, ///< Entry selection is empty.
+ EPushMtmUiPanAlreadyExistingTitle,
+ EPushMtmUiPanMissingTitle,
+ EPushMtmUiPanAlreadyExistingModel,
+ EPushMtmUiPanMissingModel,
+ EPushMtmUiPanNotInitialized,
+ EPushMtmUiPanAlreadyInitialized,
+ EPushMtmUiPanMissingListBox,
+ EPushMtmUiPanBadEvent,
+ EPushMtmUiPanBadMtm, ///< Bad MTM type.
+ EPushMtmUiPanBadBioType, ///< Bad BIO type.
+ EPushMtmUiPanCodeReached, ///< The code line shouldn't be reached.
+ EPushMtmUiPanTooManyServiceEntries
+ };
+
+GLREF_C void UiPanic( TPushMtmUiPanic aReason );
+
+#endif // PUSHMTMUIPANIC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushSettingsDialog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class definition of CPushSettingsDialog.
+*
+*/
+
+
+
+#ifndef PUSHSETTINGSDIALOG_H
+#define PUSHSETTINGSDIALOG_H
+
+// INCLUDES
+
+#include "PushMtmSettings.h"
+#include <AknForm.h>
+#include <eiklbo.h>
+#include <ConeResLoader.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CAknSettingStyleListBox;
+class CEikImage;
+
+// CLASS DECLARATION
+
+/**
+* Avkon environment is required.
+* Waiting dialog.
+* Usage.
+* #include "PushSettingsDialog.h"
+* CPushSettingsDialog* dlg = new (ELeave) CPushSettingsDialog;
+* dlg->ExecuteLD( msvSession );
+*
+* Note that we could use CMuiuSettingsArray defined in MuiuSettingsArray.h,
+* but it seems that our PI list handling (Ignore services from) makes
+* this dialog so complicated, that it is better not to use CMuiuSettingsArray,
+* which would make the desing more complicated, because it does not support
+* such functionality that PI list handling requires.
+*/
+class CPushSettingsDialog : public CAknDialog,
+ public MEikListBoxObserver
+ {
+ public: // Constructors
+
+ /**
+ * Constructor.
+ * @param aMsvSession Message Server session.
+ */
+ CPushSettingsDialog( CMsvSession& aMsvSession );
+
+ public: // New functions
+
+ /**
+ * Execute the dialog with this member.
+ * @return None.
+ */
+ void ExecuteLD();
+
+ private: // New data types
+
+ enum TSettingType
+ {
+ EServiceReception, ///< On or Off
+ EServiceLoadingType ///< Automatic or Manual
+ };
+
+ private: // Constructors and destructor
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ ~CPushSettingsDialog();
+
+ private: // New functions
+
+ /**
+ * Set up title text.
+ * @return none
+ */
+ void SetUpStatusPaneL();
+
+ /**
+ * Restore the previous title text.
+ * @return none
+ */
+ void RestoreStatusPaneL();
+
+ /**
+ * Construct model.
+ * @return none
+ */
+ void ConstructModelL();
+
+ /**
+ * Update setting page model.
+ * @return none
+ */
+ void UpdateSettingListBoxModelL();
+
+ /**
+ * Update setting page view.
+ * @return none
+ */
+ void UpdateSettingListBoxViewL() const;
+
+ /**
+ * Apply changes of the model.
+ * @return None.
+ */
+ void ApplyModelChangesL();
+
+ /**
+ * Show radio button setting page for all
+ * items except for EIgnoreServicesFrom.
+ * @return none
+ */
+ void ShowRadioButtonSettingPageL( const TSettingType aSettingType );
+
+ /**
+ * Show the confirmation dialog about the changing of the service loading
+ * type from 'manual' to 'automatic'.
+ * @return ETrue if the user confirmed. EFalse otherwise.
+ */
+ TBool ShowServiceLoadingTypeConfirmationL() const;
+
+ /**
+ * Change current setting. No setting page usage is preferred.
+ * @return none
+ */
+ void ChangeCurrentSettingWithoutSettingPageL();
+
+ /**
+ * Change current setting with the usage of setting page.
+ * @return none
+ */
+ void ChangeCurrentSettingL();
+
+ /**
+ * Append an item to the list box' item text array.
+ * @param aSettingType Setting item type.
+ * @param aTitleResId Title resource id. If it is KErrNotFound,
+ * then aTitleText is used.
+ * @param aValueResId Value resource id. If it is KErrNotFound,
+ * then aValueText is used.
+ * @param aTitleText See above.
+ * @param aValueText See above.
+ * @return none
+ */
+ void ConstructAndAppendItemTextL
+ ( const TSettingType aSettingType,
+ const TInt aTitleResId, const TInt aValueResId,
+ const TDesC& aTitleText = KNullDesC(),
+ const TDesC& aValueText = KNullDesC() );
+
+ /**
+ * Construct the title text for a setting.
+ * param aSettingType Type of the setting.
+ * @return The constructed title text.
+ */
+ HBufC* ConstructSettingTitleL( const TSettingType aSettingType ) const;
+
+ /**
+ * Get the resource ids of those strings that a given binary setting can have.
+ * Note. The following functions have strong relations:
+ * ConstructSettingValueArray, CurrentlySelectedSettingValueResId,
+ * ConstructSettingValueArrayL, UpdateSettingL!
+ * param aSettingType Type of the setting.
+ * param aVal1ResId The id of the first value string.
+ * param aVal2ResId The id of the second value string.
+ * @return None.
+ */
+ void ConstructSettingValueArray
+ ( const TSettingType aSettingType, TInt& aVal1ResId, TInt& aVal2ResId ) const;
+
+ /**
+ * Get the resource ids of the currently set value string.
+ * Note. The following functions have strong relations:
+ * ConstructSettingValueArray, CurrentlySelectedSettingValueResId,
+ * ConstructSettingValueArrayL, UpdateSettingL!
+ * param aSettingType Type of the setting.
+ * param aIndex The index of this currently selected value is also returned.
+ * @return Resource id.
+ */
+ TInt CurrentlySelectedSettingValueResId
+ ( const TSettingType aSettingType, TInt& aIndex ) const;
+
+ /**
+ * Get the value strings of those strings that a given binary setting can have.
+ * Note. The following functions have strong relations:
+ * ConstructSettingValueArray, CurrentlySelectedSettingValueResId,
+ * ConstructSettingValueArrayL, UpdateSettingL!
+ * param aSettingType Type of the setting.
+ * param aIndex The index of this currently selected value is also returned.
+ * @return The value array.
+ */
+ CDesCArrayFlat* ConstructSettingValueArrayL
+ ( const TSettingType aSettingType, TInt& index ) const;
+
+ /**
+ * Set in the model the right setting value using the given index.
+ * Note. The following functions have strong relations:
+ * ConstructSettingValueArray, CurrentlySelectedSettingValueResId,
+ * ConstructSettingValueArrayL, UpdateSettingL!
+ * param aSettingType Type of the setting.
+ * param aIndex The index of the selected value.
+ * @return None.
+ */
+ void UpdateSettingL
+ ( const TSettingType aSettingType, const TInt index ) const;
+
+ private: // Functions from base classes
+
+ TKeyResponse OfferKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ void PreLayoutDynInitL();
+
+ void ProcessCommandL( TInt aCommand );
+
+ TBool OkToExitL( TInt aButtonId );
+
+ void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+#ifdef __SERIES60_HELP
+
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+#endif //__SERIES60_HELP
+
+ private: // Data members
+
+ CPushMtmSettings* iModel; ///< Settings: the model. Has.
+ CMsvSession& iMsvSession; ///< Message Server session.
+ RConeResourceLoader iResourceLoader; ///< Resource file loader.
+ TFileName iResourceFile;
+ CAknSettingStyleListBox* iSettingListBox; ///< List box contained by the dialog. Uses.
+ CDesCArrayFlat* iSettingListBoxItemTextArray; ///< List box' item text array. Uses.
+ CArrayFixFlat<TSettingType>* iSettingType; /**< A given array item
+ * determines the type of
+ * the item of the list
+ * with the same index. Has.
+ */
+ TBool iNewTitleTextUsed; ///< Indicate if new title text is used.
+ HBufC* iPreviousTitleText; ///< Restore it on termination. Has.
+ TBool iRestoreSP; /**< EFalse, if it is not necessary
+ * to restore status pane. */
+ TInt iPushSLEnabled;
+ };
+
+#endif // PUSHSETTINGSDIALOG_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushViewMessageOp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushViewMessageOp.
+*
+*/
+
+
+
+#ifndef PUSHVIEWMESSAGEOP_H
+#define PUSHVIEWMESSAGEOP_H
+
+// INCLUDE FILES
+
+#include "PushMtmUiOperation.h"
+#include <e32base.h>
+#include <apparc.h>
+#include <AknServerApp.h>
+
+// FORWARD DECLARATIONS
+
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+/**
+* This asynchronous operation is responsible for launching the appropriate
+* application (embedded if possible) that is capable of rendering the text
+* of an SI message.
+* The operation uses the Document Handler to lauch the appropriate handler
+* application.
+*/
+class CPushViewMessageOp : public CPushMtmUiOperation,
+ public MAknServerAppExitObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aEntryId Id of entry to operate on.
+ * @param aObserverStatus Observer's status.
+ * @return The constructed object.
+ */
+ static CPushViewMessageOp* NewL( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushViewMessageOp();
+
+ public: // Functions from CPushMtmOperation
+
+ /**
+ * Start or restart the operation.
+ * Current implementation calls Cancel and invokes RunL.
+ * Derived classes may override this.
+ */
+ void StartL();
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aEntryId Id of entry to operate on.
+ * @param aObserverStatus Observer's status.
+ */
+ CPushViewMessageOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ protected: // New functions
+
+ /**
+ * Show information note and cancel the operation.
+ */
+ void NotifyAndCancelL( TInt aResId );
+
+ protected: // Functions from base classes
+
+ /**
+ * Current implementation calls SignalObserver( KErrNone ).
+ * Derived classes should override this and also should
+ * call SignalObserver.
+ */
+ void RunL();
+
+ /**
+ * Cancel protocol implementation.
+ */
+ void DoCancel();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves. The observer is signaled if a leave occures.
+ * The leave code is not forwarded to the scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ /**
+ * Call-back for entry event handling.
+ */
+ void HandleEntryEventL( TMsvEntryEvent aEvent,
+ TAny* aArg1, TAny* aArg2, TAny* aArg3 );
+
+ protected: // From MAknServerAppExitObserver
+
+ void HandleServerAppExit( TInt aReason );
+
+ private: // Data
+
+ CDocumentHandler* iDocHandler; ///< Owned.
+ TBool iIsCancelled;
+ };
+
+#endif // PUSHVIEWMESSAGEOP_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiInc/PushViewServiceOp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushViewServiceOp.
+*
+*/
+
+
+
+#ifndef PUSHVIEWSERVICEOP_H
+#define PUSHVIEWSERVICEOP_H
+
+// INCLUDE FILES
+
+#include "PushMtmUiOperation.h"
+#include <e32base.h>
+#include <apparc.h>
+#include <apaserverapp.h>
+
+// FORWARD DECLARATIONS
+
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+/**
+* This asynchronous operation is responsible for launching the appropriate
+* application (embedded if possible) that is capable of rendering the content
+* of a SP simple push message.
+* The operation uses the Document Handler to lauch the appropriate handler
+* application for the given content.
+*/
+class CPushViewServiceOp : public CPushMtmUiOperation,
+ public MAknServerAppExitObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aEntryId Id of entry to operate on.
+ * @param aObserverStatus Observer's status.
+ */
+ CPushViewServiceOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushViewServiceOp();
+
+ public: // Functions from CPushMtmOperation
+
+ /**
+ * Start or restart the operation.
+ * Current implementation calls Cancel and invokes RunL.
+ * Derived classes may override this.
+ */
+ void StartL();
+
+ protected: // Functions from base classes
+
+ /**
+ * Current implementation calls SignalObserver( KErrNone ).
+ * Derived classes should override this and also should
+ * call SignalObserver.
+ */
+ void RunL();
+
+ /**
+ * Cancel protocol implementation.
+ */
+ void DoCancel();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves. The observer is signaled if a leave occures.
+ * The leave code is not forwarded to the scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // From MAknServerAppExitObserver
+
+ void HandleServerAppExit( TInt aReason );
+
+ private: // Data
+
+ CDocumentHandler* iDocHandler; ///< Owned.
+ };
+
+#endif // PUSHVIEWSERVICEOP_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushLoadServiceOp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushLoadServiceOp.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushLoadServiceOp.h"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmLog.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushAuthenticationUtilities.h"
+#include <push/CSIPushMsgEntry.h>
+#include <push/CSLPushMsgEntry.h>
+#include <eikenv.h>
+#include <apmstd.h>
+#include <schemehandler.h>
+#include <AknNoteWrappers.h>
+#include <PushEntry.h>
+#include <PushMtmUi.rsg>
+#include <AknQueryDialog.h>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+#include <Uri16.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// CONSTANTS
+
+_LIT( KDefaultScheme, "http://" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::NewL
+// ---------------------------------------------------------
+//
+CPushLoadServiceOp* CPushLoadServiceOp::NewL( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus )
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::NewL")
+
+ CPushLoadServiceOp* self =
+ new (ELeave) CPushLoadServiceOp( aSession, aEntryId, aObserverStatus );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::~CPushLoadServiceOp
+// ---------------------------------------------------------
+//
+CPushLoadServiceOp::~CPushLoadServiceOp()
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::~CPushLoadServiceOp")
+
+ Cancel();
+ delete iSchemeHandler;
+ FeatureManager::UnInitializeLib();
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::~CPushLoadServiceOp")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::StartL
+// ---------------------------------------------------------
+//
+void CPushLoadServiceOp::StartL()
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::StartL")
+
+ Cancel();
+
+ // Check expiration (SI specific).
+ if ( IsExpiredL( iTEntry ) )
+ {
+ PUSHLOG_WRITE(" Msg is expired.")
+ // The entry is expired.
+
+ // Display a confirmation dialog.
+ TParse* fileParser = new (ELeave) TParse;
+ CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ AssureResourceL( fileParser->FullName() );
+ CleanupStack::PopAndDestroy( fileParser ); // fileParser
+ fileParser = NULL;
+
+ HBufC* value = iCoeEnv.AllocReadResourceLC( R_PUSHLS_EXPIRED_NOTE );
+ CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+ note->ExecuteLD( *value );
+ CleanupStack::PopAndDestroy( value ); // value
+
+ // Delete the expired message.
+ CMsvEntry* cParent = iMsvSession.GetEntryL( iTEntry.Parent() );
+ CleanupStack::PushL( cParent );
+ cParent->DeleteL( iEntryId );
+ CleanupStack::PopAndDestroy( cParent ); // cParent
+
+ // Nothing to do.
+ iDone = ETrue;
+ }
+
+ CPushMtmUiOperation::StartL();
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::StartL")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::CPushLoadServiceOp
+// ---------------------------------------------------------
+//
+CPushLoadServiceOp::CPushLoadServiceOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus )
+: CPushMtmUiOperation( aSession, aEntryId, aObserverStatus ),
+ iDone( EFalse )
+ {
+ PUSHLOG_WRITE("CPushLoadServiceOp constructing")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::ConstructL
+// ---------------------------------------------------------
+//
+void CPushLoadServiceOp::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::ConstructL")
+
+ FeatureManager::InitializeLibL();
+
+ CPushMtmUiOperation::ConstructL();
+
+ // Initialize iTEntry.
+ TMsvId service;
+ User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, iTEntry ) );
+ __ASSERT_ALWAYS( iTEntry.iMtm == KUidMtmWapPush,
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::IsExpiredL
+// ---------------------------------------------------------
+//
+TBool CPushLoadServiceOp::IsExpiredL( const TMsvEntry& aTEntry ) const
+ {
+ TBool ret( EFalse );
+
+ if ( aTEntry.iBioType == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( si );
+ si->RetrieveL( iMsvSession, iEntryId );
+ // Check expiration if expiration time was set.
+ if ( si->Expires() != Time::NullTTime() )
+ {
+ TTime today;
+ today.UniversalTime();
+ if ( si->Expires() < today )
+ {
+ ret = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( si ); // si
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::RetrieveContextAndGetUrlLC
+// ---------------------------------------------------------
+//
+CPushMsgEntryBase* CPushLoadServiceOp::RetrieveContextAndGetUrlLC
+ ( TPtrC& aUrl ) const
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::RetrieveContextAndGetUrlLC");
+
+ CPushMsgEntryBase* context = NULL;
+ const TInt32 bioType( iTEntry.iBioType );
+
+ if ( bioType == KUidWapPushMsgSI.iUid )
+ {
+ context = CSIPushMsgEntry::NewL();
+ }
+ else if ( bioType == KUidWapPushMsgSL.iUid &&
+ FeatureManager::FeatureSupported( KFeatureIdPushSL ) )
+ {
+ context = CSLPushMsgEntry::NewL();
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ CleanupStack::PushL( context );
+ context->RetrieveL( iMsvSession, iEntryId );
+
+ if ( bioType == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, context );
+ aUrl.Set( si->Url() );
+ }
+ else if ( bioType == KUidWapPushMsgSL.iUid )
+ {
+ CSLPushMsgEntry* sl = STATIC_CAST( CSLPushMsgEntry*, context );
+ aUrl.Set( sl->Url() );
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+ }
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::RetrieveContextAndGetUrlLC");
+ return context;
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::AuthenticateL
+// ---------------------------------------------------------
+//
+TBool CPushLoadServiceOp::AuthenticateL( const CPushMsgEntryBase& aPushMsg,
+ const CPushMtmSettings& aMtmSettings ) const
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::AuthenticateL");
+
+ TBool isAuthenticated = ETrue; // by default.
+
+ if ( iTEntry.iBioType != KUidWapPushMsgSL.iUid )
+ {
+ PUSHLOG_WRITE(" Not SL");
+ isAuthenticated = ETrue; // No authentication needed.
+ }
+ else
+ {
+ // SL cache & execute-high message requires additional authentication.
+ CSLPushMsgEntry& sl = (CSLPushMsgEntry&)aPushMsg;
+
+ if ( sl.Action() == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+ {
+ PUSHLOG_WRITE(" SL cache");
+ isAuthenticated = TPushAuthenticationUtil::
+ AuthenticateMsgL( aMtmSettings, aPushMsg );
+ if ( !isAuthenticated )
+ {
+ // Ask the user...
+ isAuthenticated = ExecuteUserQueryL( R_PUSHLS_SL_CACHE_NOT_AUTH );
+ }
+ }
+ else if
+ (
+ sl.Action() == CSLPushMsgEntry::ESLPushMsgExecuteHigh &&
+ aMtmSettings.ServiceLoadingType() == CPushMtmSettings::EAutomatic
+ )
+ {
+ PUSHLOG_WRITE(" SL high + auto");
+ isAuthenticated = TPushAuthenticationUtil::
+ AuthenticateMsgL( aMtmSettings, aPushMsg );
+ if ( !isAuthenticated )
+ {
+ // Ask the user...
+ isAuthenticated = ExecuteUserQueryL( R_PUSHLS_SL_NOT_AUTH );
+ }
+ }
+ else
+ {
+ PUSHLOG_WRITE(" Other SL");
+ isAuthenticated = ETrue; // No authentication needed.
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::AuthenticateL");
+ return isAuthenticated;
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::ExecuteUserQueryL
+// ---------------------------------------------------------
+//
+TBool CPushLoadServiceOp::ExecuteUserQueryL( TInt aResId ) const
+ {
+ CAknQueryDialog* queryDlg = CAknQueryDialog::NewL();
+ TInt userResponse = queryDlg->ExecuteLD( aResId );
+ TBool userWantsToDownload = ( userResponse == EAknSoftkeyYes );
+
+ return userWantsToDownload;
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::ValidateLC
+// ---------------------------------------------------------
+//
+HBufC* CPushLoadServiceOp::ValidateLC( TDesC& aUrl ) const
+ {
+ TUriParser uriParser;
+ TInt err = uriParser.Parse( aUrl );
+ User::LeaveIfError( err );
+ HBufC* validated = NULL;
+
+ if ( uriParser.IsPresent( EUriScheme ) )
+ {
+ // Just copy the original URL.
+ validated = aUrl.AllocLC();
+ }
+ else
+ {
+ // Add default scheme.
+ validated = HBufC::NewLC( aUrl.Length() + KDefaultScheme().Length() );
+ validated->Des().Copy( KDefaultScheme );
+ validated->Des().Append( aUrl );
+ }
+
+ return validated;
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::RunL
+// ---------------------------------------------------------
+//
+void CPushLoadServiceOp::RunL()
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::RunL")
+
+ if ( iDone )
+ {
+ PUSHLOG_WRITE(" Done")
+ SignalObserver( KErrNone );
+ }
+ else
+ {
+ TPtrC url;
+ CPushMsgEntryBase* context = RetrieveContextAndGetUrlLC( url );
+
+ CPushMtmSettings* mtmSettings = CPushMtmSettings::NewLC();
+ TBool msgAuthenticated = AuthenticateL( *context, *mtmSettings );
+ CleanupStack::PopAndDestroy( mtmSettings ); // mtmSettings
+
+ if ( !msgAuthenticated )
+ {
+ // Ready.
+ SignalObserver( KErrNone );
+ }
+ else
+ {
+ // OK, authenticated. Can be downloaded.
+
+ // Mark service read.
+ iMtmUtil->MarkServiceUnreadL( iEntryId, EFalse );
+
+ // Download the URL.
+ delete iSchemeHandler;
+ iSchemeHandler = NULL;
+ HBufC* validatedUrl = ValidateLC( url );
+ iSchemeHandler = CSchemeHandler::NewL( *validatedUrl );
+
+ if( (url.Mid(0,7).Compare(_L("http://")) == 0) || (url.Mid(0,8).Compare(_L("https://")) == 0))
+ {
+ TRAPD( err, iSchemeHandler->HandleUrlStandaloneL());
+ CleanupStack::PopAndDestroy( validatedUrl ); // validatedUrl
+ SignalObserver( err );
+ }
+ else
+ {
+ iSchemeHandler->Observer( this );
+ TRAPD(err, iSchemeHandler->HandleUrlEmbeddedL());
+ CleanupStack::PopAndDestroy( validatedUrl ); // validatedUrl
+ if( err != KErrNone)
+ SignalObserver( err );
+ }
+
+ }
+
+ CleanupStack::PopAndDestroy( context ); // context, needed for 'url'
+ }
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::RunL")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::DoCancel
+// ---------------------------------------------------------
+//
+void CPushLoadServiceOp::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::DoCancel")
+ SignalObserver( KErrCancel );
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::RunError
+// ---------------------------------------------------------
+//
+TInt CPushLoadServiceOp::RunError( TInt aError )
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::RunError")
+ PUSHLOG_WRITE_FORMAT(" CPushLoadServiceOp::RunError <%d>",aError)
+
+ TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
+ return CPushMtmUiOperation::RunError( aError );
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::RunError")
+ }
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::HandleServerAppExit
+// ---------------------------------------------------------
+//
+void CPushLoadServiceOp::HandleServerAppExit(TInt LOG_ONLY(aReason))
+ {
+ PUSHLOG_ENTERFN("CPushLoadServiceOp::HandleServerAppExit")
+ PUSHLOG_WRITE_FORMAT(" CPushLoadServiceOp::HandleServerAppExit <%d>",aReason)
+
+ // Ready.
+ SignalObserver( KErrNone );
+
+ PUSHLOG_LEAVEFN("CPushLoadServiceOp::HandleServerAppExit")
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMessageInfoDialog.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,536 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Member definitions of CPushMessageInfoDialog.
+*
+*/
+
+
+
+// INCLUDES
+
+#include "PushMessageInfoDialog.h"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmUtil.h"
+#include "PushMtmLog.h"
+#include <push/CSIPushMsgEntry.h>
+#include <push/CSLPushMsgEntry.h>
+#include <push/CUnknownPushMsgEntry.h>
+#include <PushMtmUi.rsg>
+#include <AknLists.h>
+#include <msvapi.h>
+#include <e32math.h>
+#include <StringLoader.h>
+#include <AVKON.RSG>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+#include <AknUtils.h>
+#include <AknBidiTextUtils.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+// CONSTANTS
+LOCAL_D const TInt KNoResource = 0;
+LOCAL_D const TInt KArrayGranularity = 16;
+LOCAL_D const TReal KReal1024 = 1024.0;
+_LIT( KTab, "\t" );
+_LIT( KSpace, " " );
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::CPushMessageInfoDialog
+// ---------------------------------------------------------
+//
+CPushMessageInfoDialog::CPushMessageInfoDialog()
+: CAknPopupList(),
+ iResourceLoader( *iCoeEnv )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::~CPushMessageInfoDialog
+// ---------------------------------------------------------
+//
+CPushMessageInfoDialog::~CPushMessageInfoDialog()
+ {
+ iSecondColumnFont = 0;
+ iResourceLoader.Close();
+ delete iListBox;
+ delete iListBoxModel;
+ FeatureManager::UnInitializeLib();
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::ExecuteLD
+// ---------------------------------------------------------
+//
+void CPushMessageInfoDialog::ExecuteLD( CMsvSession& aMsvSession, TMsvId aId )
+ {
+ ConstructL( aMsvSession, aId );
+ CAknPopupList::ExecuteLD();
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoDialog::ConstructL( CMsvSession& aMsvSession, TMsvId aId )
+ {
+ PUSHLOG_ENTERFN("CPushMessageInfoDialog::ConstructL");
+ __ASSERT_DEBUG( !iListBox &&
+ !iListBoxModel,
+ UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+
+ FeatureManager::InitializeLibL();
+
+ CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( PushSL );
+ User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
+ PUSHLOG_WRITE_FORMAT(" iPushSLEnabled: <%d>",iPushSLEnabled);
+ CleanupStack::PopAndDestroy( PushSL );
+
+ // Add resource file.
+ TParse* fileParser = new (ELeave) TParse;
+ // Unnecessary to call CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ iResourceFile = fileParser->FullName();
+ PUSHLOG_WRITE_FORMAT(" iResourceFile: <%S>",&iResourceFile);
+ delete fileParser;
+ fileParser = NULL;
+ iResourceLoader.OpenL( iResourceFile );
+ PUSHLOG_WRITE(" iResourceFile opened");
+
+ // Construct list box's model first
+ // This list box will be used by an CAknPopupList object.
+ __ASSERT_DEBUG( !iListBoxModel && !iListBox,
+ UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+ iListBoxModel = new (ELeave) CDesCArrayFlat( KArrayGranularity );
+ // Construct list box.
+ iListBox = new (ELeave) CAknSingleHeadingPopupMenuStyleListBox;
+
+ // ========================================================
+ // Layout info of CAknSingleHeadingPopupMenuStyleListBox
+ TAknTextLineLayout textLayout =
+ AknLayout::List_pane_texts__menu_single_heading__Line_2(0);
+
+ // Font of the second column of the given list box
+ iSecondColumnFont = AknLayoutUtils::FontFromId( textLayout.FontId() );
+
+ // Line width of the second column of the given list box
+ TInt itemCount = 0; // No need to set
+ TInt titleVisible = 1; // known value (we always have title)
+ TRect main_pane = iAvkonAppUi->ClientRect();
+
+ TAknLayoutRect popup_menu_graphic_window;
+ popup_menu_graphic_window.LayoutRect( main_pane,
+ AknLayout::popup_menu_graphic_window(itemCount) );
+
+ TAknLayoutRect menu_heading_pane;
+ menu_heading_pane.LayoutRect( popup_menu_graphic_window.Rect(),
+ AknLayout::list_menu_heading_pane(titleVisible, itemCount) );
+
+ TAknLayoutRect list_item;
+ list_item.LayoutRect( menu_heading_pane.Rect(),
+ AknLayout::list_single_heading_popup_menu_pane(itemCount) );
+
+ TAknLayoutText text;
+ text.LayoutText( list_item.Rect(), textLayout );
+
+ iSecondColumnWidth = text.TextRect().Width();
+ // ========================================================
+
+ // Add items to the list.
+ AddMessageInfoItemsL( aMsvSession, aId );
+
+ CAknPopupList::ConstructL( iListBox,
+ R_AVKON_SOFTKEYS_OK_EMPTY__OK,
+ AknPopupLayouts::EMenuGraphicHeadingWindow );
+
+ iListBox->ConstructL( this, EAknListBoxViewerFlags );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL
+ ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ CTextListBoxModel* listBoxModel = iListBox->Model();
+ listBoxModel->SetItemTextArray( iListBoxModel );
+ listBoxModel->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ // Get title text of popup list
+ HBufC* title = iCoeEnv->AllocReadResourceLC( R_PUSHMID_TITLE );
+ PUSHLOG_WRITE(" R_PUSHMID_TITLE read");
+ SetTitleL( *title );
+ CleanupStack::PopAndDestroy( title ); // title
+
+ PUSHLOG_LEAVEFN("CPushMessageInfoDialog::ConstructL");
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::AddMessageInfoItemL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoDialog::AddMessageInfoItemL( TInt aHeaderResourceId,
+ const TDesC& aText ) const
+ {
+ __ASSERT_DEBUG( iListBoxModel, UiPanic( EPushMtmUiPanNotInitialized ) );
+
+ // Make some necessary conversion.
+ HBufC* paramTextCopy = aText.AllocLC();
+ TPtr paramTextCopyPtr = paramTextCopy->Des();
+ // Remove tabs, because of the list box...
+ AknTextUtils::StripCharacters( paramTextCopyPtr, KAknStripListControlChars );
+ // Number conversion
+ if ( paramTextCopyPtr.Length() > 0 )
+ {
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( paramTextCopyPtr );
+ }
+
+ HBufC* header = ( aHeaderResourceId == KNoResource ?
+ KNullDesC().AllocLC() :
+ iCoeEnv->AllocReadResourceLC( aHeaderResourceId ) );
+
+ CArrayFix<TPtrC>* wrappedArray =
+ new ( ELeave ) CArrayFixFlat<TPtrC>( KArrayGranularity );
+ CleanupStack::PushL( wrappedArray );
+
+ AknTextUtils::WrapToArrayL
+ ( paramTextCopyPtr, iSecondColumnWidth,
+ *iSecondColumnFont, *wrappedArray );
+ // visual is directly not used, but wrappedArray points to it
+
+ // Add the lines in wrappedArray to the list
+ const TInt lines = wrappedArray->Count();
+ for ( TInt loop = 0; loop < lines; ++loop )
+ {
+ TPtrC current = ( *wrappedArray )[loop];
+ // Allocate a buffer for the new list box item text
+ // (including header, separator and wrapped text)
+ HBufC* currentFormattedLine = HBufC::NewLC
+ ( ((loop==0) ? header->Length() : /*KSpace().Length()*/1) +
+ /*KTab().Length()*/1 + current.Length() );
+ TPtr currentFormattedLinePtr = currentFormattedLine->Des(); // writeable
+
+ if ( loop == 0 )
+ { currentFormattedLinePtr.Copy( *header ); }
+ else
+ { currentFormattedLinePtr.Copy( KSpace ); }
+
+ currentFormattedLinePtr.Append( KTab );
+ currentFormattedLinePtr.Append( current );
+ iListBoxModel->AppendL( currentFormattedLinePtr );
+
+ CleanupStack::PopAndDestroy( currentFormattedLine ); // currentFormattedLine
+ }
+
+ CleanupStack::PopAndDestroy( 1, wrappedArray ); // wrappedArray
+ CleanupStack::PopAndDestroy( 2, paramTextCopy ); // header, paramTextCopy
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::ConvertUniversalToHomeTime
+// ---------------------------------------------------------
+//
+TTime CPushMessageInfoDialog::ConvertUniversalToHomeTime
+ ( const TTime& aUniversalTime ) const
+ {
+ TTime time( aUniversalTime ); // time stores UTC time.
+
+ TLocale locale;
+ TTimeIntervalSeconds universalTimeOffset( locale.UniversalTimeOffset() );
+ // Add locale's universal time offset to universal time.
+ time += universalTimeOffset; // time stores Local Time.
+
+ // If home daylight saving in effect, add one hour offset.
+ if ( locale.QueryHomeHasDaylightSavingOn() )
+ {
+ TTimeIntervalHours daylightSaving(1);
+ time += daylightSaving; // Now it is Home Time.
+ }
+
+#ifdef __TEST_LOG__
+ // The following section will call LEAVEable functions, but
+ // they are only for logging purposes.
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ aUniversalTime.FormatL( dateHolder, KDateFormat );
+ aUniversalTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" UTC date: <%S>",&dateHolder);
+ PUSHLOG_WRITE_FORMAT(" UTC time: <%S>",&timeHolder);
+ time.FormatL( dateHolder, KDateFormat );
+ time.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" Home date: <%S>",&dateHolder);
+ PUSHLOG_WRITE_FORMAT(" Home time: <%S>",&timeHolder);
+#endif // __TEST_LOG__
+
+ return time; // Home Time.
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoDialog::AddMessageInfoItemsL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoDialog::AddMessageInfoItemsL( CMsvSession& aMsvSession,
+ TMsvId aId ) const
+ {
+ PUSHLOG_ENTERFN("CPushMessageInfoDialog::AddMessageInfoItemsL");
+
+ TMsvEntry tEntry;
+ TMsvId dummyService;
+ User::LeaveIfError( aMsvSession.GetEntry( aId, dummyService, tEntry ) );
+ PUSHLOG_WRITE(" Entry got");
+ __ASSERT_DEBUG
+ ( tEntry.iMtm == KUidMtmWapPush, UiPanic( EPushMtmUiPanBadType ) );
+
+ // Construct model.
+ CPushMsgEntryBase* msg = NULL;
+ const TInt32 bioType( tEntry.iBioType );
+ if ( bioType == KUidWapPushMsgSI.iUid )
+ {
+ msg = CSIPushMsgEntry::NewL();
+ PUSHLOG_WRITE(" SI");
+ }
+ else if(iPushSLEnabled && bioType == KUidWapPushMsgSL.iUid)
+ {
+ msg = CSLPushMsgEntry::NewL();
+ PUSHLOG_WRITE(" SL");
+ }
+#ifdef __SERIES60_PUSH_SP
+ else if ( bioType == KUidWapPushMsgUnknown.iUid )
+ {
+ msg = CUnknownPushMsgEntry::NewL();
+ PUSHLOG_WRITE(" Unknown");
+ }
+#endif // __SERIES60_PUSH_SP
+ else
+ {
+ PUSHLOG_WRITE(" Bad message type");
+ User::Leave( KErrNotSupported );
+ }
+
+ CleanupStack::PushL( msg );
+ msg->RetrieveL( aMsvSession, tEntry.Id() );
+ PUSHLOG_WRITE(" RetreiveL OK");
+
+ // ************************************************************************
+ // Information item: From (push initiator).
+ // This can be MSISDN number, URL, etc.
+ // ************************************************************************
+ TPtrC8 from8( msg->From() );
+ if ( from8.Length() )
+ {
+ // Copy the 8-bit text into a 16-bit one and convert the string to
+ // decoded form.
+ HBufC* from16 = HBufC::NewMaxLC( from8.Length() );
+ from16->Des().Copy( from8 );
+
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *from16 );
+ CleanupStack::PushL( convertedFrom );
+ //
+ AddMessageInfoItemL( R_PUSHMID_FROM, *convertedFrom );
+ PUSHLOG_WRITE(" From added");
+ //
+ CleanupStack::PopAndDestroy( 2, from16 ); // convertedFrom, from16
+ }
+
+ // ************************************************************************
+ // Information item: Address/URL (SI and SL specific).
+ // ************************************************************************
+ if ( msg->PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, msg );
+ const TPtrC url = si->Url();
+ if ( url.Length() )
+ {
+ //
+ HBufC* convertedUrl =
+ CPushMtmUtil::ConvertUriToDisplayFormL( url );
+ CleanupStack::PushL( convertedUrl );
+ //
+ AddMessageInfoItemL( R_PUSHMID_URL, *convertedUrl );
+ PUSHLOG_WRITE(" URL added");
+ //
+ CleanupStack::PopAndDestroy( convertedUrl );
+ }
+ }
+ else if ( iPushSLEnabled && msg->PushMsgType() == KUidWapPushMsgSL.iUid )
+ {
+ CSLPushMsgEntry* sl = STATIC_CAST( CSLPushMsgEntry*, msg );
+ const TPtrC url = sl->Url();
+ if ( url.Length() )
+ {
+ //
+ HBufC* convertedUrl =
+ CPushMtmUtil::ConvertUriToDisplayFormL( url );
+ CleanupStack::PushL( convertedUrl );
+ //
+ AddMessageInfoItemL( R_PUSHMID_URL, sl->Url() );
+ PUSHLOG_WRITE(" URL added");
+ //
+ CleanupStack::PopAndDestroy( convertedUrl );
+ }
+ }
+
+ // ************************************************************************
+ // Information item: Message body/text (SI specific).
+ // ************************************************************************
+ if ( msg->PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, msg );
+ if ( si->Text().Length() )
+ {
+ TPtrC siText = si->Text();
+ PUSHLOG_WRITE_FORMAT(" SI text: <%S>",&siText);
+ AddMessageInfoItemL( R_PUSHMID_BODY, siText );
+ PUSHLOG_WRITE(" SI text added");
+ }
+ }
+
+ // ************************************************************************
+ // Information item: Type.
+ // ************************************************************************
+ HBufC* value = iCoeEnv->AllocReadResourceLC( R_PUSHMID_TYPE_STR );
+ AddMessageInfoItemL( R_PUSHMID_TYPE, *value );
+ CleanupStack::PopAndDestroy( value ); // value
+ PUSHLOG_WRITE(" Msg. type added");
+
+#ifdef __SERIES60_PUSH_SP
+ // ************************************************************************
+ // Information item: Content type (SP specific)
+ // ************************************************************************
+ if ( msg->PushMsgType() == KUidWapPushMsgUnknown.iUid )
+ {
+ CUnknownPushMsgEntry* sp = STATIC_CAST( CUnknownPushMsgEntry*, msg );
+ TPtrC contType = sp->ContentType();
+ if ( contType.Length() )
+ {
+ AddMessageInfoItemL( R_PUSHMID_CONTENT_TYPE, contType );
+ PUSHLOG_WRITE(" Content type added ");
+ }
+ }
+#endif // __SERIES60_PUSH_SP
+
+ TBuf<32> time;
+ TBuf<32> date;
+ HBufC* dateFormatString =
+ iCoeEnv->AllocReadResourceLC( R_QTN_DATE_USUAL_WITH_ZERO );
+ HBufC* timeFormatString =
+ iCoeEnv->AllocReadResourceLC( R_QTN_TIME_USUAL_WITH_ZERO );
+
+ // ************************************************************************
+ // SI specific information item: creation time and date.
+ // ************************************************************************
+ if ( msg->PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, msg );
+ const TTime created( si->Created() );
+ // Check if created time was set.
+ if ( created != Time::NullTTime() )
+ {
+ // OK. this attribute was set. Render it to the user.
+ TTime creLocal = ConvertUniversalToHomeTime( created );
+ creLocal.FormatL( time, *timeFormatString );
+ creLocal.FormatL( date, *dateFormatString );
+ AddMessageInfoItemL( R_PUSHMID_CREATED, time );
+ AddMessageInfoItemL( KNoResource, date );
+ PUSHLOG_WRITE(" Created added");
+ }
+ }
+
+ // ************************************************************************
+ // Information item: Arrival time and date.
+ // ************************************************************************
+ const TTime arrivalTime( msg->ReceivedDate() );
+ // Arrival time is always set by the wappush framework. Render it to the user.
+ TTime arrLocal = ConvertUniversalToHomeTime( arrivalTime );
+ arrLocal.FormatL( time, *timeFormatString );
+ arrLocal.FormatL( date, *dateFormatString );
+ AddMessageInfoItemL( R_PUSHMID_RCVD, time );
+ AddMessageInfoItemL( KNoResource, date );
+ PUSHLOG_WRITE(" Received added");
+
+ // ************************************************************************
+ // SI specific information item: expiration time and date.
+ // ************************************************************************
+ if ( msg->PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, msg );
+ const TTime expires( si->Expires() );
+ // Check expiration if expiration time was set.
+ if ( expires != Time::NullTTime() )
+ {
+ TTime expLocal = ConvertUniversalToHomeTime( expires );
+ expLocal.FormatL( time, *timeFormatString );
+ expLocal.FormatL( date, *dateFormatString );
+ AddMessageInfoItemL( R_PUSHMID_EXPIRES, time );
+ AddMessageInfoItemL( KNoResource, date );
+ PUSHLOG_WRITE(" Expires added");
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2, dateFormatString );
+ // timeFormatString, dateFormatString
+
+ // ************************************************************************
+ // Information item: Size.
+ // Convert the message size given in bytes into kilobytes. Round the
+ // value up, if necessary.
+ // ************************************************************************
+ TReal messageSize( 0 );
+ if ( msg->PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, msg );
+ messageSize = (TReal)si->Text().Size() / KReal1024;
+ }
+ else if ( iPushSLEnabled && msg->PushMsgType() == KUidWapPushMsgSL.iUid )
+ {
+ CSLPushMsgEntry* sl = STATIC_CAST( CSLPushMsgEntry*, msg );
+ messageSize = (TReal)sl->Url().Size() / KReal1024;
+ }
+#ifdef __SERIES60_PUSH_SP
+ else if ( msg->PushMsgType() == KUidWapPushMsgUnknown.iUid )
+ {
+ CUnknownPushMsgEntry* sp = STATIC_CAST( CUnknownPushMsgEntry*, msg );
+ messageSize = (TReal)sp->MessageData().Size() / KReal1024;
+ }
+#endif // __SERIES60_PUSH_SP
+ TInt32 messageSizeInt;
+ User::LeaveIfError( Math::Int( messageSizeInt, messageSize ) );
+ TReal fraction;
+ User::LeaveIfError( Math::Frac( fraction, messageSize ) );
+ if ( fraction )
+ {
+ ++messageSizeInt;
+ }
+ HBufC* size =
+ StringLoader::LoadLC( R_QTN_SIZE_KB, messageSizeInt, iCoeEnv );
+ // From avkon.loc:
+ // #define qtn_size_kb " %N kB"
+ // We don't need white spaces at the beginning of the size string, so
+ // remove them:
+ size->Des().Trim();
+ AddMessageInfoItemL( R_PUSHMID_SIZE, *size );
+ PUSHLOG_WRITE(" Size added");
+ CleanupStack::PopAndDestroy( size ); // size
+
+ CleanupStack::PopAndDestroy( msg ); // msg
+
+ PUSHLOG_LEAVEFN("CPushMessageInfoDialog::AddMessageInfoItemsL");
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMessageInfoOp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,261 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMessageInfoOp.
+*
+*/
+
+// INCLUDE FILES
+
+#include "PushMessageInfoOp.h"
+#include "PushMessageInfoDialog.h"
+#include "PushMtmUtil.h"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmLog.h"
+#include <AknNoteWrappers.h>
+#include <PushMtmUi.rsg>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::CPushMessageInfoOp
+// ---------------------------------------------------------
+//
+CPushMessageInfoOp::CPushMessageInfoOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TBool aDontShowNotification,
+ TRequestStatus& aObserverStatus )
+: CPushMtmUiOperation( aSession, aEntryId, aObserverStatus ),
+ iDontShowNotification( aDontShowNotification ),
+ iObserverCompleted( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::~CPushMessageInfoOp
+// ---------------------------------------------------------
+//
+CPushMessageInfoOp::~CPushMessageInfoOp()
+ {
+ Cancel();
+ delete iDialog;
+ if ( iDeletedFlag )
+ {
+ *iDeletedFlag = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::StartL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoOp::StartL()
+ {
+ Cancel();
+ iObserverCompleted = EFalse;
+ CPushMtmOperation::StartL();
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::RunL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoOp::RunL()
+ {
+ __ASSERT_DEBUG( !iDialog, UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+
+ if ( iObserverCompleted )
+ {
+ return;
+ }
+
+ TBool deleted( EFalse );
+ iDeletedFlag = &deleted;
+
+ // Time to set up entry observation (delete & replacement case).
+ ObserveEntryEventL();
+
+ iDialog = new (ELeave) CPushMessageInfoDialog;
+ // Workaround for Cancel(): SetActive() is called.
+ // CMsvSingleOpWatcher::DoCancel() will wait for this observed object to
+ // complete that. iDialog->ExecuteLD() allows other RunL's to run, so
+ // that it may happen that CMsvSingleOpWatcher::DoCancel() is called
+ // when iDialog->ExecuteLD() is running. It means that this object must
+ // be active in that time in order DoCancel() will be called.
+ iStatus = KRequestPending;
+ iDialog->ExecuteLD( iMsvSession, iEntryId );
+ SetActive();
+ // Ready.
+ if ( !deleted )
+ {
+ iDialog = NULL;
+ iDeletedFlag = NULL;
+ // Consider what happens if this object is cancelled in ExecuteLD!
+ // In this case the observer is already completed (DoCancel), so
+ // avoid completeing it twice. iObserverCompleted indicates it.
+ if ( !iObserverCompleted )
+ {
+ SignalObserver( KErrNone );
+ iObserverCompleted = ETrue;
+ // Due to SetActive() call RunL again, but it will do nothing
+ // (see above).
+ InvokeRun();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMessageInfoOp::DoCancel()
+ {
+ PUSHLOG_WRITE("CPushMessageInfoOp::DoCancel");
+ CancelObserveEntryEvent();
+
+ if ( iDialog )
+ {
+ delete iDialog;
+ iDialog = NULL;
+ // Due to SetActive() in RunL we must call InvokeRun(): the dialog
+ // does not completes this operation.
+ InvokeRun();
+ }
+ if ( !iObserverCompleted )
+ {
+ SignalObserver( KErrCancel );
+ iObserverCompleted = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMessageInfoOp::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMessageInfoOp::RunError: %d",aError);
+ CancelObserveEntryEvent();
+
+ if ( !iObserverCompleted )
+ {
+ SignalObserver( aError );
+ iObserverCompleted = ETrue;
+ }
+ return aError;
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::HandleEntryEventL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoOp::HandleEntryEventL( TMsvEntryEvent aEvent,
+ TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/ )
+ {
+ PUSHLOG_ENTERFN("CPushMessageInfoOp::HandleEntryEventL");
+
+ if ( aEvent == EMsvEntryChanged )
+ {
+ PUSHLOG_WRITE(" Changed");
+ HandleEntryChangeL();
+ }
+ else if ( aEvent == EMsvEntryDeleted )
+ {
+ PUSHLOG_WRITE(" Deleted");
+ NotifyAndCancelL( R_PUSHLS_EXPIRED_NOTE );
+ }
+ else
+ {
+ // Nothing to do.
+ }
+
+ PUSHLOG_LEAVEFN("CPushMessageInfoOp::HandleEntryEventL");
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::HandleEntryChangeL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoOp::HandleEntryChangeL()
+ {
+ PUSHLOG_ENTERFN("CPushMessageInfoOp::HandleEntryChangeL");
+
+ // We have to act only in case of such changes where the content
+ // of the message changes, not only the unread/read flag.
+ // The content handlers and the Push subsystem behave so that
+ // the content is changed only when the entry becomes 'unread',
+ // except one case where the CH changes the content, but the
+ // message becomes 'read' (SL-execute-high). In this case
+ // a flag indicates that the content was changed.
+
+ // Get an up-to-date entry and check the necessary flags:
+ TMsvEntry tEntry;
+ TMsvId service;
+ User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, tEntry ) );
+ TBool isChangeToUnread = tEntry.Unread();
+ TBool contentChangedFlagSet =
+ CPushMtmUtil::Attrs( tEntry ) & EPushMtmReadButContentChanged;
+
+ if ( !isChangeToUnread && !contentChangedFlagSet )
+ {
+ // Nothing to do. Somebody has just marked it 'read'.
+ PUSHLOG_WRITE(" Content not changed");
+ }
+ else
+ {
+ NotifyAndCancelL( R_PUSHMISC_INFO_REPLACED );
+ }
+
+ PUSHLOG_LEAVEFN("CPushMessageInfoOp::HandleEntryChangeL")
+ }
+
+// ---------------------------------------------------------
+// CPushMessageInfoOp::NotifyAndCancelL
+// ---------------------------------------------------------
+//
+void CPushMessageInfoOp::NotifyAndCancelL( TInt aResId )
+ {
+ PUSHLOG_ENTERFN("CPushMessageInfoOp::NotifyAndCancelL");
+
+ if ( iDontShowNotification )
+ {
+ // Don't show.
+ }
+ else
+ {
+ // Add resource file.
+ TParse* fileParser = new (ELeave) TParse;
+ CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ AssureResourceL( fileParser->FullName() );
+ CleanupStack::PopAndDestroy( fileParser ); // fileParser
+ fileParser = NULL;
+
+ // Show note about the message deletion.
+ HBufC* noteText = iCoeEnv.AllocReadResourceLC( aResId );
+ CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+ note->ExecuteLD( *noteText );
+ CleanupStack::PopAndDestroy( noteText ); // noteText
+ }
+
+ // Close the dialog anyway.
+ Cancel();
+
+ PUSHLOG_LEAVEFN("CPushMessageInfoOp::NotifyAndCancelL");
+ }
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,635 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Ui Mtm class definition
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <bldvariant.hrh>
+#include "PushMtmUi.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmUiDef.h"
+#include "PushViewerDef.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmSettings.h"
+#include "PushSettingsDialog.h"
+#include "PushMessageInfoOp.h"
+#include "PushLoadServiceOp.h"
+#ifdef __SERIES60_PUSH_SP
+#include "PushViewServiceOp.h"
+#endif // __SERIES60_PUSH_SP
+#include "PushViewMessageOp.h"
+#include "PushMtmLog.h"
+#include "PushMtmDef.h"
+#include <PushEntry.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <msvapi.h>
+#include <mtmuidef.hrh>
+#include <MTMExtendedCapabilities.hrh>
+#include <MuiuMsgEditorLauncher.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmUi::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmUi* CPushMtmUi::NewL( CBaseMtm& aBaseMtm,
+ CRegisteredMtmDll& aRegisteredMtmDll )
+ {
+ CPushMtmUi* ui = new (ELeave) CPushMtmUi( aBaseMtm, aRegisteredMtmDll );
+ CleanupStack::PushL( ui );
+ ui->ConstructL();
+ CleanupStack::Pop(); // ui
+ return ui;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::~CPushMtmUi
+// ---------------------------------------------------------
+//
+CPushMtmUi::~CPushMtmUi()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CPushMtmUi
+// ---------------------------------------------------------
+//
+CPushMtmUi::CPushMtmUi( CBaseMtm& aBaseMtm,
+ CRegisteredMtmDll& aRegisteredMtmDll )
+: CBaseMtmUi( aBaseMtm, aRegisteredMtmDll )
+ {
+ CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( PushSL );
+ User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
+ CleanupStack::PopAndDestroy( PushSL );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::SetProgressSuccess
+// ---------------------------------------------------------
+//
+void CPushMtmUi::SetProgressSuccess
+( TPckgBuf<TMsvLocalOperationProgress>& aProgress, TMsvId aId )
+ {
+ aProgress().iTotalNumberOfEntries = 1;
+ aProgress().iNumberCompleted = 1;
+ aProgress().iId = aId;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CompletedOperationL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CompletedOperationL
+( TRequestStatus& aObserverStatus )
+ {
+ TPckgBuf<TMsvLocalOperationProgress> progress;
+ SetProgressSuccess( progress, BaseMtm().Entry().Entry().Id() );
+ CMsvCompletedOperation* operation =
+ CMsvCompletedOperation::NewL( Session(), Type(), progress,
+ KMsvLocalServiceIndexEntryId, aObserverStatus );
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::EnsureServiceEntryL
+// ---------------------------------------------------------
+//
+void CPushMtmUi::EnsureServiceEntryL() const
+ {
+ PUSHLOG_ENTERFN("CPushMtmUi::EnsureServiceEntryL")
+
+ // Get root entry.
+ CMsvEntry* rootMsvEntry = Session().GetEntryL( KMsvRootIndexEntryId );
+ CleanupStack::PushL( rootMsvEntry );
+
+ // The Push MTM service entry is invisible. Set selection ordering
+ // to find the invisible entries also.
+ TMsvSelectionOrdering msvSelectionOrdering = rootMsvEntry->SortType();;
+ msvSelectionOrdering.SetShowInvisibleEntries( ETrue );
+ rootMsvEntry->SetSortTypeL( msvSelectionOrdering );
+
+ // The service entry is the child entry of the root entry.
+ // KUidMtmWapPush is used to identify the mtm type of the service entry!
+ CMsvEntrySelection* msvEntrySelection =
+ rootMsvEntry->ChildrenWithMtmL( KUidMtmWapPush );
+ CleanupStack::PushL( msvEntrySelection );
+
+ const TInt serviceEntryCount = msvEntrySelection->Count();
+ PUSHLOG_WRITE_FORMAT(" serviceEntryCount <%d>",serviceEntryCount)
+ __ASSERT_DEBUG( serviceEntryCount <= 1,
+ UiPanic( EPushMtmUiPanTooManyServiceEntries ) );
+ // If there is no push service entry in Message Server, create one.
+ // If there is more than one, then delete the unnecessary entries.
+ if ( serviceEntryCount == 0 )
+ {
+ TMsvEntry newEntryData;
+ newEntryData.iType = KUidMsvServiceEntry;
+ newEntryData.iMtm = KUidMtmWapPush;
+ newEntryData.SetVisible( EFalse );
+ rootMsvEntry->CreateL( newEntryData );
+ }
+ else if ( 1 < serviceEntryCount )
+ {
+ for ( TInt i = 1; i < serviceEntryCount; ++i ) // i starts from 1.
+ {
+ rootMsvEntry->DeleteL( msvEntrySelection->At(i) );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2, rootMsvEntry );
+ // msvEntrySelection, rootMsvEntry
+
+ PUSHLOG_LEAVEFN("CPushMtmUi::EnsureServiceEntryL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CreateL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CreateL(
+ const TMsvEntry& /*aEntry*/,
+ CMsvEntry& /*aParent*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::OpenL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::OpenL( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( BaseMtm().Entry().Entry().iMtm == Type(),
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ const TUid type( BaseMtm().Entry().Entry().iType );
+
+ CMsvOperation* operation = NULL;
+
+ if ( type == KUidMsvMessageEntry )
+ {
+ operation = ViewL( aStatus );
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CloseL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CloseL( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( BaseMtm().Entry().Entry().iType == KUidMsvMessageEntry,
+ UiPanic( EPushMtmUiPanBadType ) );
+ return CompletedOperationL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::EditL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::EditL( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( BaseMtm().Entry().Entry().iMtm == Type(),
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ if ( BaseMtm().Entry().Entry().iType != KUidMsvServiceEntry )
+ {
+ // All push messages are read only ones.
+ User::Leave( KErrNotSupported );
+ }
+
+ CPushSettingsDialog* dlg = new (ELeave) CPushSettingsDialog( Session() );
+ dlg->ExecuteLD();
+ return CompletedOperationL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ViewL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ViewL( TRequestStatus& aStatus )
+ {
+ const TMsvEntry tEntry( BaseMtm().Entry().Entry() );
+
+ __ASSERT_DEBUG( tEntry.iMtm == Type(), UiPanic( EPushMtmUiPanBadMtm ) );
+ __ASSERT_DEBUG( tEntry.iType == KUidMsvMessageEntry,
+ UiPanic( EPushMtmUiPanBadType ) );
+
+ if ( tEntry.iType != KUidMsvMessageEntry )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ CMsvOperation* operation = NULL;
+
+ if (
+ tEntry.iBioType == KUidWapPushMsgSI.iUid || (iPushSLEnabled && tEntry.iBioType == KUidWapPushMsgSL.iUid)
+ )
+ {
+ TEditorParameters editorParameters;
+ editorParameters.iId = tEntry.Id();
+ editorParameters.iFlags = EMsgLaunchEditorThenWait |
+ EMsgReadOnly |
+ EMsgLaunchEditorEmbedded;
+
+ // Get the application name.
+ HBufC* appFileName =
+ MsvUiEditorUtilities::ResolveAppFileNameL( KUidPushViewerApp );
+ CleanupStack::PushL( appFileName );
+
+ operation = MsgEditorLauncher::LaunchEditorApplicationL
+ ( BaseMtm().Session(),
+ tEntry.iMtm,
+ aStatus,
+ editorParameters,
+ *appFileName );
+
+ CleanupStack::PopAndDestroy( appFileName ); // appFileName
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ else if ( tEntry.iBioType == KUidWapPushMsgUnknown.iUid )
+ {
+ // Don't launch the PushViewer, but the embedded viewer.
+ // It's unnecessary to call
+ // BaseMtm().SwitchCurrentEntryL( tEntry.Id() );
+ TBuf8<1> dummyPar;
+ CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( dummySel );
+
+ operation = InvokeAsyncFunctionL( EPushMtmCmdViewService,
+ *dummySel,
+ aStatus,
+ dummyPar );
+
+ CleanupStack::PopAndDestroy( dummySel ); // dummySel
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ else
+ {
+ __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::OpenL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::OpenL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CloseL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CloseL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::EditL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::EditL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ViewL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ViewL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CancelL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CancelL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::DeleteFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::DeleteFromL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::UnDeleteFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::UnDeleteFromL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::DeleteServiceL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::DeleteServiceL
+( const TMsvEntry& /*aService*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ReplyL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ReplyL(
+ TMsvId /*aDestination*/,
+ TMsvPartList /*aPartlist*/,
+ TRequestStatus& /*aCompletionStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ForwardL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ForwardL(
+ TMsvId /*aDestination*/,
+ TMsvPartList /*aPartlist*/,
+ TRequestStatus& /*aCompletionStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CopyToL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CopyToL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPushMtmUi::MoveToL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::MoveToL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPushMtmUi::CopyFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CopyFromL(
+ const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aTargetId*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::MoveFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::MoveFromL(
+ const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aTargetId*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::QueryCapability
+// ---------------------------------------------------------
+//
+TInt CPushMtmUi::QueryCapability( TUid aCapability, TInt& aResponse )
+ {
+ TInt ret( KErrNone );
+
+ switch ( aCapability.iUid )
+ {
+ case KUidMsvMtmUiQueryMessagingInitialisation:
+ case KUidMsvMtmQueryFactorySettings:
+ case KUidMsvMtmQueryMessageInfo:
+ {
+ aResponse = ETrue;
+ break;
+ }
+ default:
+ {
+ ret = BaseMtm().QueryCapability( aCapability, aResponse );
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::InvokeSyncFunctionL
+// ---------------------------------------------------------
+//
+void CPushMtmUi::InvokeSyncFunctionL( TInt aFunctionId,
+ const CMsvEntrySelection& /*aSelection*/,
+ TDes8& /*aParameter*/ )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmUi::InvokeSyncFunctionL <%d>",aFunctionId)
+
+ if ( aFunctionId == KMtmUiMessagingInitialisation ||
+ aFunctionId == KMtmUiFunctionRestoreFactorySettings )
+ {
+ // Restore the settings...
+ CPushMtmSettings* pushMtmSettings = CPushMtmSettings::NewLC();
+ pushMtmSettings->RestoreFactorySettingsL();
+ CleanupStack::PopAndDestroy( pushMtmSettings ); // pushMtmSettings
+ // ...and ensure that a service entry exists with which
+ // the settings can be reached from a messaging application.
+ EnsureServiceEntryL();
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::InvokeAsyncFunctionL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::InvokeAsyncFunctionL
+ ( TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TRequestStatus& aCompletionStatus,
+ TDes8& aParameter )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmUi::InvokeAsyncFunctionL <%d>",aFunctionId)
+
+ CMsvOperation* operation = NULL;
+
+ switch ( aFunctionId )
+ {
+ case KMtmUiFunctionMessageInfo:
+ {
+ TBool dontShowNotification = EFalse;
+ if ( 0 < aParameter.Length() )
+ {
+ TMessageInfoParam par;
+ TMessageInfoParamPckg parPckg( par );
+ parPckg.Set( aParameter );
+ dontShowNotification = par.iDontShowNotification;
+ }
+
+ CPushMessageInfoOp* op = new (ELeave) CPushMessageInfoOp
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ dontShowNotification,
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+ case EPushMtmCmdLoadService:
+ {
+ CPushLoadServiceOp* op = CPushLoadServiceOp::NewL
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ case EPushMtmCmdViewService:
+ {
+ CPushViewServiceOp* op = new (ELeave) CPushViewServiceOp
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ case EPushMtmCmdViewMessage:
+ {
+ CPushViewMessageOp* op = CPushViewMessageOp::NewL
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+ default:
+ {
+ operation = CBaseMtmUi::InvokeAsyncFunctionL
+ ( aFunctionId, aSelection, aCompletionStatus, aParameter );
+ break;
+ }
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::GetResourceFileName
+// ---------------------------------------------------------
+//
+void CPushMtmUi::GetResourceFileName( TFileName& aFileName ) const
+ {
+ // Extract the file name and extension from the constant
+ TParsePtrC fileParser( KPushMtmUiResourceFileAndDrive );
+ aFileName = fileParser.NameAndExt();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUiData.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Push Ui Data Mtm class definition
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmUiData.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmUtil.h"
+#include <PushMtmUi.rsg>
+#include <PushEntry.h>
+#include <msvuids.h>
+#include <MTMExtendedCapabilities.hrh>
+#include <PushMtm.mbg>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+#include <AknsUtils.h>
+
+// CONSTANTS
+
+// Number of zoom states.
+LOCAL_C const TInt KPushIconArrayGranularity = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmUiData::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmUiData* CPushMtmUiData::NewL
+( CRegisteredMtmDll& aRegisteredDll )
+ {
+ CPushMtmUiData* uiData = new (ELeave) CPushMtmUiData( aRegisteredDll );
+ CleanupStack::PushL( uiData );
+ uiData->ConstructL();
+ CleanupStack::Pop(); // uiData
+ return uiData;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::~CPushMtmUiData
+// ---------------------------------------------------------
+//
+CPushMtmUiData::~CPushMtmUiData()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CPushMtmUiData
+// ---------------------------------------------------------
+//
+CPushMtmUiData::CPushMtmUiData( CRegisteredMtmDll& aRegisteredDll )
+: CBaseMtmUiData( aRegisteredDll )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::ContextIcon
+// ---------------------------------------------------------
+//
+const CBaseMtmUiData::CBitmapArray& CPushMtmUiData::ContextIcon
+( const TMsvEntry& aContext, TInt /*aStateFlags*/ ) const
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue,
+ UiPanic( EPushMtmUiPanFoldersNotSupported ) );
+
+ return *iIconArrays->At( aContext.Unread() ? 0 : 1 );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCreateEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/,
+ TMsvEntry& aNewEntry, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/,
+ TMsvEntry& /*aNewEntry*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aNewEntry.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ aReasonResourceId = KErrNotSupported;
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanDeleteFromEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanDeleteFromEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanDeleteFromEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ aReasonResourceId = KErrNotSupported;
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanDeleteServiceL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanDeleteServiceL
+( const TMsvEntry& aService, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanDeleteServiceL
+( const TMsvEntry& /*aService*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aService.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ aReasonResourceId = KErrNotSupported;
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanReplyToEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanReplyToEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanReplyToEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ aReasonResourceId = KErrNotSupported;
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanForwardEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanForwardEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanForwardEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ aReasonResourceId = KErrNotSupported;
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanEditEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanEditEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+ aReasonResourceId = KErrNotSupported;
+
+ if ( aContext.iType == KUidMsvServiceEntry )
+ {
+ // Only the service entry can be changed.
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanViewEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanViewEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+ aReasonResourceId = KErrNotSupported;
+
+ if ( aContext.iType != KUidMsvMessageEntry )
+ {
+ // Only the messages can be viewed(this function
+ // should not be available on a service entry)
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanOpenEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanOpenEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+ {
+ return CanViewEntryL( aContext, aReasonResourceId );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCloseEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanCloseEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+ {
+ return CanOpenEntryL( aContext, aReasonResourceId );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCopyMoveToEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanCopyMoveToEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+ aReasonResourceId = KErrNotSupported;
+
+ if ( aContext.iType != KUidMsvMessageEntry )
+ {
+ // Only the messages can be moved(this function
+ // should not be available on a service entry)
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCopyMoveFromEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanCopyMoveFromEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanCopyMoveFromEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+ aReasonResourceId = KErrNotSupported;
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCancelL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanCancelL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanCancelL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+ aReasonResourceId = KErrNotSupported;
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::OperationSupportedL
+// ---------------------------------------------------------
+//
+TInt CPushMtmUiData::OperationSupportedL
+( TInt aOperationId, const TMsvEntry& aContext ) const
+ {
+ __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+ __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue,
+ UiPanic( EPushMtmUiPanFoldersNotSupported ) );
+
+ TInt ret( KErrCancel );
+
+ switch ( aOperationId )
+ {
+
+ case KMtmUiFunctionMessageInfo:
+ {
+ // The message info operation is always supported.
+ ret = ( aContext.iType.iUid == KUidMsvMessageEntryValue ) ?
+ KErrNone : KErrCancel;
+ break;
+ }
+
+ case EPushMtmCmdLoadService:
+ {
+ // This function is available only if the message has URL in it.
+ if ( aContext.iType.iUid != KUidMsvMessageEntryValue )
+ {
+ // LoadService is not supported.
+ ret = KErrCancel;
+ }
+ else
+ {
+ if ( aContext.iBioType == KUidWapPushMsgSI.iUid &&
+ CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref )
+ {
+ // SI with not empty URL: LoadService is supported.
+ ret = KErrNone;
+ }
+ else if ( aContext.iBioType == KUidWapPushMsgSL.iUid &&
+ CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref )
+ {
+ // SL with not empty URL: LoadService is supported.
+ ret = KErrNone;
+ }
+ else
+ {
+ // LoadService is not supported.
+ ret = KErrCancel;
+ }
+ }
+ break;
+ }
+
+ default:
+ {
+ // No other operations are supported.
+ ret = KErrCancel;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::QueryCapability
+// ---------------------------------------------------------
+//
+TInt CPushMtmUiData::QueryCapability( TUid aCapability, TInt& aResponse ) const
+ {
+ TInt ret( KErrNotSupported );
+
+ if ( aCapability.iUid == KUidMsvMtmQueryMessageInfo )
+ {
+ aResponse = ETrue;
+ ret = KErrNone;
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::StatusTextL
+// ---------------------------------------------------------
+//
+HBufC* CPushMtmUiData::StatusTextL( const TMsvEntry& /*aContext*/ ) const
+ {
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::PopulateArraysL
+// ---------------------------------------------------------
+//
+void CPushMtmUiData::PopulateArraysL()
+ {
+ ReadFunctionsFromResourceFileL( R_PUSH_MTM_UI_DATA_FUNCTION_ARRAY );
+ CreateSkinnedBitmapsL();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::GetResourceFileName
+// ---------------------------------------------------------
+//
+void CPushMtmUiData::GetResourceFileName( TFileName& aFileName ) const
+ {
+ // Extract the file name and extension from the constant
+ TParsePtrC fileParser( KPushMtmUiDataResourceFileAndDrive );
+ aFileName = fileParser.NameAndExt();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CreateSkinnedBitmapsL
+// ---------------------------------------------------------
+//
+void CPushMtmUiData::CreateSkinnedBitmapsL()
+ {
+ TParse fileParser;
+ fileParser.Set( KPushMtmUiDataBitmapFileAndDrive, &KDC_APP_BITMAP_DIR, NULL );
+
+ MAknsSkinInstance* skins = AknsUtils::SkinInstance();
+ TAknsItemID id;
+ CFbsBitmap* bitmap;
+ CFbsBitmap* bitmapMask;
+ TBool found = ETrue;
+
+ for( TInt i = EMbmPushmtmQgn_prop_mce_push_unread;
+ i < EMbmPushmtmQgn_prop_mce_push_read_mask + 1;
+ i++ )
+ {
+ found = ETrue;
+ switch( i )
+ {
+ // Add to iIconArrays in this order
+ case EMbmPushmtmQgn_prop_mce_push_unread:
+ id.Set( KAknsIIDQgnPropMcePushUnread );
+ break;
+ case EMbmPushmtmQgn_prop_mce_push_read:
+ id.Set( KAknsIIDQgnPropMcePushRead );
+ break;
+ default:
+ found = EFalse;
+ break;
+ }
+ if( found )
+ {
+ CArrayPtrFlat<CFbsBitmap>* array =
+ new (ELeave) CArrayPtrFlat<CFbsBitmap>( KPushIconArrayGranularity );
+ CleanupStack::PushL( array );
+
+ array->SetReserveL( KPushIconArrayGranularity ); // AppendLs will not LEAVE
+ AknsUtils::CreateIconL( skins, id, bitmap, bitmapMask,
+ fileParser.FullName(), i, i + 1 );
+ // bitmap & bitmapMask is not on the Cleanup Stack, but it is not
+ // necessary, because AppendLs will not LEAVE.
+ array->AppendL( bitmap );
+ bitmap = 0;
+ array->AppendL( bitmapMask );
+ bitmapMask = 0;
+ iIconArrays->AppendL( array );
+ CleanupStack::Pop( array ); // array
+ }
+ }
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUiOperation.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmUiOperation.
+*
+*/
+
+
+
+// INCLUDES
+
+#include "PushMtmUiOperation.h"
+#include "PushMtmUtil.h"
+#include <coemain.h>
+#include <ErrorUI.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmUiOperation::CPushMtmUiOperation
+// ---------------------------------------------------------
+//
+CPushMtmUiOperation::CPushMtmUiOperation( CMsvSession& aSession,
+ TMsvId aId,
+ TRequestStatus& aObserverStatus )
+: CPushMtmOperation( aSession, aId, aObserverStatus ),
+ iCoeEnv( *CCoeEnv::Static() ),
+ iResourceLoader( iCoeEnv ),
+ iResourceOpened( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmUiOperation::ConstructL()
+ {
+ iMtmUtil = CPushMtmUtil::NewL( iMsvSession );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiOperation::~CPushMtmUiOperation
+// ---------------------------------------------------------
+//
+CPushMtmUiOperation::~CPushMtmUiOperation()
+ {
+ Cancel();
+ delete iMtmUtil;
+ iResourceLoader.Close();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiOperation::AssureResourceL
+// ---------------------------------------------------------
+//
+void CPushMtmUiOperation::AssureResourceL( const TDesC& aResourceFile )
+ {
+ if ( !iResourceOpened )
+ {
+ // Add resource file.
+ TFileName resourceFileName( aResourceFile );
+ iResourceLoader.OpenL( resourceFileName );
+ iResourceOpened = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUiOperation::ShowGlobalErrorNoteL
+// ---------------------------------------------------------
+//
+void CPushMtmUiOperation::ShowGlobalErrorNoteL( TInt aError ) const
+ {
+ CErrorUI* errorUi = CErrorUI::NewLC( iCoeEnv );
+ if ( errorUi->ShowGlobalErrorNoteL( aError ) == EFalse )
+ {
+ User::Leave( KErrGeneral );
+ }
+ CleanupStack::PopAndDestroy( errorUi );
+ }
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUiPanic.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmUiPanic.h"
+
+
+_LIT( KUiPanicString, "PushMtmUi" );
+
+GLDEF_C void UiPanic( TPushMtmUiPanic aReason )
+ {
+ User::Panic( KUiPanicString, aReason );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushSettingsDialog.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,726 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Member definitions of CPushSettingsDialog.
+*
+*/
+
+
+
+// INCLUDES
+#include "browser_platform_variant.hrh"
+#include "PushSettingsDialog.h"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include <PushMtmUi.rsg>
+#include "PushMtmUi.hrh"
+#include "PushMtmDef.hrh"
+#include <akntitle.h>
+#include <akncontext.h>
+#include <AknQueryDialog.h>
+#include <barsread.h>
+#include <AknRadioButtonSettingPage.h>
+#include <bldvariant.hrh>
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <hlplch.h>
+#include <csxhelp/wpush.hlp.hrh>
+#endif // __SERIES60_HELP
+#include <msvapi.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::CPushSettingsDialog
+// ---------------------------------------------------------
+//
+CPushSettingsDialog::CPushSettingsDialog( CMsvSession& aMsvSession )
+: CAknDialog(),
+ iMsvSession( aMsvSession ),
+ iResourceLoader( *iCoeEnv ),
+ iNewTitleTextUsed( EFalse ),
+ iRestoreSP( ETrue )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ExecuteLD
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ExecuteLD()
+ {
+ CleanupStack::PushL( this );
+ ConstructL();
+ CAknDialog::ConstructL( R_PUSHSD_MENU );
+ CleanupStack::Pop( this );
+ CAknDialog::ExecuteLD( R_PUSHSD_DIALOG );
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ConstructL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ConstructL()
+ {
+ // Add resource file.
+ CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( PushSL );
+ User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
+ CleanupStack::PopAndDestroy( PushSL );
+
+ TParse* fileParser = new (ELeave) TParse;
+ // Unnecessary to call CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ iResourceFile = fileParser->FullName();
+ delete fileParser;
+ fileParser = NULL;
+ iResourceLoader.OpenL( iResourceFile );
+
+ // Construct model.
+ ConstructModelL();
+
+ // Now model is ready for view.
+ const TInt KGranularity( 8 );
+ iSettingType = new (ELeave) CArrayFixFlat<TSettingType>( KGranularity );
+
+ // Set up Title Pane and Context Pane.
+ SetUpStatusPaneL();
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::~CPushSettingsDialog
+// ---------------------------------------------------------
+//
+CPushSettingsDialog::~CPushSettingsDialog()
+ {
+ if ( iRestoreSP )
+ {
+ TRAP_IGNORE( RestoreStatusPaneL() );
+ }
+ iResourceLoader.Close();
+ delete iPreviousTitleText;
+ delete iModel;
+ delete iSettingType;
+ iSettingListBox = NULL;
+ iSettingListBoxItemTextArray = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::SetUpStatusPaneL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::SetUpStatusPaneL()
+ {
+ if ( !iNewTitleTextUsed )
+ {
+ __ASSERT_DEBUG( !iPreviousTitleText,
+ UiPanic( EPushMtmUiPanAlreadyExistingTitle ) );
+ // Set up Title Pane.
+ CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+ CAknTitlePane* titlePane =
+ STATIC_CAST( CAknTitlePane*,
+ statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ // Save content.
+ iPreviousTitleText = titlePane->Text()->AllocL();
+ // Set new content.
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, R_PUSHSD_TITLE_PANE );
+ titlePane->SetFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader
+ iNewTitleTextUsed = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::RestoreStatusPaneL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::RestoreStatusPaneL()
+ {
+ if ( iNewTitleTextUsed )
+ {
+ __ASSERT_DEBUG( iPreviousTitleText,
+ UiPanic( EPushMtmUiPanMissingTitle ) );
+ // Restore Title Pane.
+ CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+ CAknTitlePane* titlePane =
+ STATIC_CAST( CAknTitlePane*,
+ statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ titlePane->SetTextL( *iPreviousTitleText );
+ delete iPreviousTitleText;
+ iPreviousTitleText = NULL;
+ iNewTitleTextUsed = EFalse;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ConstructModelL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ConstructModelL()
+ {
+ __ASSERT_DEBUG( !iModel, UiPanic( EPushMtmUiPanAlreadyExistingModel ) );
+
+ // This will be the model.
+ iModel = CPushMtmSettings::NewL();
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::UpdateSettingListBoxModelL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::UpdateSettingListBoxModelL()
+ {
+ __ASSERT_DEBUG( iModel &&
+ iSettingListBox &&
+ iSettingListBoxItemTextArray &&
+ iSettingType, UiPanic( EPushMtmUiPanNotInitialized ) );
+
+ // Reset the list box' item text array and the setting type array.
+ iSettingListBoxItemTextArray->Reset();
+ iSettingType->Reset();
+
+ // Service reception.
+ ConstructAndAppendItemTextL
+ ( EServiceReception, R_PUSHSD_RECEPT,
+ iModel->ServiceReception() ? R_PUSHSD_RECEP_ON : R_PUSHSD_RECEP_OFF );
+
+
+if(iPushSLEnabled)
+ {
+ // Service loading (SL specific).
+ ConstructAndAppendItemTextL
+ ( EServiceLoadingType, R_PUSHSD_LOADING,
+ ( iModel->ServiceLoadingType() == CPushMtmSettings::EAutomatic ) ?
+ R_PUSHSD_LOAD_AUTOM : R_PUSHSD_LOAD_MAN );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::UpdateSettingListBoxViewL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::UpdateSettingListBoxViewL() const
+ {
+ __ASSERT_DEBUG( iSettingListBox, UiPanic( EPushMtmUiPanMissingListBox ) );
+ //iSettingListBox->DrawItem( iSettingListBox->CurrentItemIndex() );
+ TInt currentItemIndex( iSettingListBox->CurrentItemIndex() );
+ iSettingListBox->DrawNow();
+ iSettingListBox->SetCurrentItemIndex( currentItemIndex );
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ApplyModelChangesL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ApplyModelChangesL()
+ {
+ UpdateSettingListBoxModelL();
+ UpdateSettingListBoxViewL();
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ShowRadioButtonSettingPageL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ShowRadioButtonSettingPageL
+ ( const TSettingType aSettingType )
+ {
+ __ASSERT_DEBUG( iModel, UiPanic( EPushMtmUiPanMissingModel ) );
+
+ TInt index;
+ HBufC* settingTitle = ConstructSettingTitleL( aSettingType );
+ CleanupStack::PushL( settingTitle );
+ CDesCArrayFlat* itemArray =
+ ConstructSettingValueArrayL( aSettingType, index );
+ CleanupStack::PushL( itemArray );
+ CAknRadioButtonSettingPage* settingPage =
+ new (ELeave) CAknRadioButtonSettingPage
+ ( R_PUSHSD_SP_RADIOBUTTON, index, itemArray );
+ CleanupStack::PushL( settingPage );
+ settingPage->SetSettingTextL( *settingTitle );
+
+ const TInt previousIndex = index;
+ CleanupStack::Pop(); // settingPage
+ if ( settingPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ if ( previousIndex != index )
+ {
+ // Set the changes in the model.
+ UpdateSettingL( aSettingType, index );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // itemArray, settingTitle
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ShowServiceLoadingTypeConfirmationL
+// ---------------------------------------------------------
+//
+TBool CPushSettingsDialog::ShowServiceLoadingTypeConfirmationL() const
+ {
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ return dlg->ExecuteLD( R_PUSHSD_AUTOLOAD_SETT_CONFIRM ) == EAknSoftkeyYes;
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ChangeCurrentSettingWithoutSettingPageL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ChangeCurrentSettingWithoutSettingPageL()
+ {
+ __ASSERT_DEBUG( iModel && iSettingListBox,
+ UiPanic( EPushMtmUiPanNotInitialized ) );
+
+ switch ( iSettingType->At( iSettingListBox->CurrentItemIndex() ) )
+ {
+ case EServiceReception:
+ {
+ iModel->SetServiceReception( !iModel->ServiceReception() );
+ break;
+ }
+
+ case EServiceLoadingType:
+ {
+ if(iPushSLEnabled){
+ if ( iModel->ServiceLoadingType() == CPushMtmSettings::EManual )
+ {
+ // Display a confirmation dialog first.
+ if ( ShowServiceLoadingTypeConfirmationL() )
+ {
+ iModel->SetServiceLoadingType
+ ( CPushMtmSettings::EAutomatic );
+ }
+ }
+ else
+ {
+ // Do not show confirmation dialog.
+ iModel->SetServiceLoadingType( CPushMtmSettings::EManual );
+ }
+ }//End iPushSLEnabled
+ break;
+ }
+
+
+ default:
+ {
+ __ASSERT_DEBUG( EFalse,
+ UiPanic( EPushMtmUiPanCommandNotSupported ) );
+ break;
+ }
+ }
+
+ // Apply changes.
+ iModel->SaveL();
+ ApplyModelChangesL();
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ChangeCurrentSettingL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ChangeCurrentSettingL()
+ {
+ __ASSERT_DEBUG( iModel && iSettingListBox,
+ UiPanic( EPushMtmUiPanNotInitialized ) );
+ ShowRadioButtonSettingPageL
+ ( iSettingType->At( iSettingListBox->CurrentItemIndex() ) );
+ // Apply changes.
+ iModel->SaveL();
+ ApplyModelChangesL();
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ConstructAndAppendItemTextL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ConstructAndAppendItemTextL
+( const TSettingType aSettingType,
+ const TInt aTitleResId, const TInt aValueResId,
+ const TDesC& aTitleText, const TDesC& aValueText )
+ {
+ __ASSERT_DEBUG( iSettingListBoxItemTextArray && iSettingType,
+ UiPanic( EPushMtmUiPanNotInitialized ) );
+
+ // Define separator text.
+ _LIT( KHeadOfItemText, " \t" );
+ // Define separator text.
+ _LIT( KSeparatorOfItemText, "\t\t" );
+
+ HBufC* titleText = ( aTitleResId != KErrNotFound ) ?
+ iEikonEnv->AllocReadResourceLC( aTitleResId ) : aTitleText.AllocLC();
+ HBufC* valueText = ( aValueResId != KErrNotFound ) ?
+ iEikonEnv->AllocReadResourceLC( aValueResId ) : aValueText.AllocLC();
+
+ // Define a heap descriptor to hold all the item text.
+ HBufC* itemText = HBufC::NewMaxLC(
+ KHeadOfItemText().Length() + titleText->Length() +
+ KSeparatorOfItemText().Length() + valueText->Length() );
+ TPtr itemTextPtr = itemText->Des();
+ itemTextPtr = KHeadOfItemText;
+ itemTextPtr += *titleText;
+ itemTextPtr += KSeparatorOfItemText;
+ itemTextPtr += *valueText;
+ iSettingListBoxItemTextArray->AppendL( itemTextPtr );
+ iSettingType->AppendL( aSettingType );
+
+ CleanupStack::PopAndDestroy( 3 ); // itemText, valueText, titleText
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ConstructSettingTitleL
+// ---------------------------------------------------------
+//
+HBufC* CPushSettingsDialog::ConstructSettingTitleL
+( const TSettingType aSettingType ) const
+ {
+ TInt titleResId = 0;
+
+ if(aSettingType == EServiceReception )
+ titleResId = R_PUSHSD_RECEPT;
+
+ else if (aSettingType == EServiceLoadingType)
+ {
+ if(iPushSLEnabled )
+ titleResId = R_PUSHSD_LOADING;
+ }
+
+ else
+ titleResId = KErrNotFound;
+
+
+ __ASSERT_DEBUG( titleResId != KErrNotFound,
+ UiPanic( EPushMtmUiPanNotInitialized ) );
+
+ return iEikonEnv->AllocReadResourceL( titleResId );
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ConstructSettingValueArray
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ConstructSettingValueArray
+ (
+ const TSettingType aSettingType,
+ TInt& aVal1ResId,
+ TInt& aVal2ResId
+ ) const
+ {
+ if( aSettingType == EServiceReception)
+ aVal1ResId = R_PUSHSD_RECEP_ON;
+
+ else if((aSettingType == EServiceLoadingType) && iPushSLEnabled )
+ {
+ aVal1ResId = R_PUSHSD_LOAD_AUTOM;
+ }
+ else
+ aVal1ResId = KErrNotFound;
+
+
+ if( aSettingType == EServiceReception )
+ aVal2ResId = R_PUSHSD_RECEP_OFF;
+ else if( aSettingType == EServiceLoadingType && iPushSLEnabled)
+ aVal2ResId = R_PUSHSD_LOAD_MAN;
+ else
+ aVal2ResId = KErrNotFound;
+
+
+ __ASSERT_DEBUG( aVal1ResId != KErrNotFound &&
+ aVal2ResId != KErrNotFound,
+ UiPanic( EPushMtmUiPanNotInitialized ) );
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::CurrentlySelectedSettingValueResId
+// ---------------------------------------------------------
+//
+TInt CPushSettingsDialog::CurrentlySelectedSettingValueResId
+( const TSettingType aSettingType, TInt& aIndex ) const
+ {
+ TInt val1ResId( KErrNotFound );
+ TInt val2ResId( KErrNotFound );
+ ConstructSettingValueArray( aSettingType, val1ResId, val2ResId );
+
+ TBool firstSelected;
+
+ if(aSettingType == EServiceReception )
+ firstSelected = iModel->ServiceReception();
+
+ else if( aSettingType == EServiceLoadingType && iPushSLEnabled )
+ {
+ firstSelected = (iModel->ServiceLoadingType() == CPushMtmSettings::EAutomatic);
+ }
+ else
+ firstSelected = EFalse;
+
+
+
+ aIndex = firstSelected ? 0 : 1;
+ return firstSelected ? val1ResId : val2ResId;
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ConstructSettingValueArrayL
+// ---------------------------------------------------------
+//
+CDesCArrayFlat* CPushSettingsDialog::ConstructSettingValueArrayL
+( const TSettingType aSettingType, TInt& aIndex ) const
+ {
+ CDesCArrayFlat* valueArray = new (ELeave) CDesCArrayFlat( 2 );
+ CleanupStack::PushL( valueArray );
+
+ TInt val1ResId( KErrNotFound );
+ TInt val2ResId( KErrNotFound );
+ ConstructSettingValueArray( aSettingType, val1ResId, val2ResId );
+ HBufC* value1Text = iEikonEnv->AllocReadResourceLC( val1ResId );
+ HBufC* value2Text = iEikonEnv->AllocReadResourceLC( val2ResId );
+ valueArray->AppendL( *value1Text );
+ valueArray->AppendL( *value2Text );
+ CleanupStack::PopAndDestroy( 2 ); // value2Text, value1Text
+
+ // Returned val. is ignored.
+ CurrentlySelectedSettingValueResId( aSettingType, aIndex );
+
+ CleanupStack::Pop(); // valueArray
+ return valueArray;
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::UpdateSettingL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::UpdateSettingL
+( const TSettingType aSettingType, const TInt aIndex ) const
+ {
+ switch ( aSettingType )
+ {
+ case EServiceReception:
+ {
+ iModel->SetServiceReception( aIndex == 0 ? ETrue : EFalse );
+ break;
+ }
+
+ case EServiceLoadingType:
+ {
+ if(iPushSLEnabled)
+ {
+ if ( aIndex == 0 )
+ // iModel->ServiceLoadingType() == CPushMtmSettings::EManual
+ {
+ // Display a confirmation dialog first.
+ if ( ShowServiceLoadingTypeConfirmationL() )
+ {
+ iModel->SetServiceLoadingType
+ ( CPushMtmSettings::EAutomatic );
+ }
+ }
+ else
+ {
+ // Do not show confirmation dialog.
+ iModel->SetServiceLoadingType( CPushMtmSettings::EManual );
+ }
+ }
+ break;
+ }
+
+ default:
+ {
+ __ASSERT_DEBUG( EFalse,
+ UiPanic( EPushMtmUiPanCommandNotSupported ) );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CPushSettingsDialog::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyEscape )
+ {
+ // Shutting down. Do not restore SP.
+ iRestoreSP = EFalse;
+ }
+ return CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::DynInitMenuPaneL
+ ( TInt /*aResourceId*/, CEikMenuPane* /*aMenuPane*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::PreLayoutDynInitL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::PreLayoutDynInitL()
+ {
+ __ASSERT_DEBUG( !iSettingListBox &&
+ !iSettingListBoxItemTextArray,
+ UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+
+ iSettingListBox = STATIC_CAST( CAknSettingStyleListBox*,
+ Control( EPushSettingsDialogCntrlListBox ) );
+ iSettingListBoxItemTextArray = STATIC_CAST( CDesCArrayFlat*,
+ iSettingListBox->Model()->ItemTextArray() );
+ iSettingListBox->SetListBoxObserver( this );
+ TRect rect = Rect();
+ iSettingListBox->SetRect( rect );
+ // Set up scroll bar.
+ iSettingListBox->CreateScrollBarFrameL( ETrue );
+ iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL
+ ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ // Update setting list box model.
+ UpdateSettingListBoxModelL();
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::ProcessCommandL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::ProcessCommandL( TInt aCommand )
+ {
+ HideMenu();
+
+ switch ( aCommand )
+ {
+ case EPushSettingsDialogCmdChangeWithoutSettingPage:
+ {
+ ChangeCurrentSettingWithoutSettingPageL();
+ break;
+ }
+
+ case EPushSettingsDialogCmdChange:
+ {
+ ChangeCurrentSettingL();
+ break;
+ }
+
+#ifdef __SERIES60_HELP
+
+ case EPushSettingsDialogCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL
+ ( iEikonEnv->WsSession(),
+ iEikonEnv->EikAppUi()->AppHelpContextL() );
+ break;
+ }
+
+#endif //__SERIES60_HELP
+
+ case EPushSettingsDialogCmdBack:
+ case EPushSettingsDialogCmdExit:
+ {
+ TryExitL( EPushSettingsDialogCmdAknExit );
+ break;
+ }
+
+ case EPushSettingsDialogCmdAknExit:
+ {
+ STATIC_CAST( MEikCommandObserver*, iEikonEnv->EikAppUi() )->
+ ProcessCommandL( EPushSettingsDialogCmdAknExit );
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::OkToExitL
+// ---------------------------------------------------------
+//
+TBool CPushSettingsDialog::OkToExitL( TInt aButtonId )
+ {
+ TBool ret( EFalse );
+
+ switch ( aButtonId )
+ {
+ case EPushSettingsDialogCmdOptions:
+ {
+ if ( !MenuShowing() )
+ {
+ DisplayMenuL();
+ }
+ break;
+ }
+ case EPushSettingsDialogCmdChangeWithoutSettingPage:
+ {
+ ChangeCurrentSettingWithoutSettingPageL();
+ break;
+ }
+ case EPushSettingsDialogCmdBack:
+ case EPushSettingsDialogCmdExit:
+ case EPushSettingsDialogCmdAknExit:
+ {
+ RestoreStatusPaneL();
+ ret = ETrue;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushSettingsDialog::HandleListBoxEventL
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::HandleListBoxEventL
+( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+ {
+ // Generate change command only if double tapped/center key is pressed.
+ //Removed single tap check from here
+ if ( aEventType == EEventEnterKeyPressed ||
+ aEventType == EEventItemDoubleClicked
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+ || aEventType == EEventItemSingleClicked
+#endif
+ )
+ {
+ ProcessCommandL( EPushSettingsDialogCmdChangeWithoutSettingPage );
+ }
+ }
+
+#ifdef __SERIES60_HELP
+// ---------------------------------------------------------
+// CPushSettingsDialog::GetHelpContext
+// ---------------------------------------------------------
+//
+void CPushSettingsDialog::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = TUid::Uid( EUidPushViewerApp );
+ aContext.iContext = KWPUSH_HLP_SETTINGS;
+ }
+#endif //__SERIES60_HELP
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushViewMessageOp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,316 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushViewMessageOp.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewMessageOp.h"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmLog.h"
+#include "PushMtmUtil.h"
+#include <push/CSIPushMsgEntry.h>
+#include <eikenv.h>
+#include <aknappui.h>
+#include <uikon.hrh>
+#include <apmstd.h>
+#include <DocumentHandler.h>
+//#include <PushMtmUi.rsg>
+#include <AknNoteWrappers.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// CONSTANTS
+
+_LIT8( KTextPlainString, "text/plain" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushLoadServiceOp::NewL
+// ---------------------------------------------------------
+//
+CPushViewMessageOp* CPushViewMessageOp::NewL( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus )
+ {
+ PUSHLOG_ENTERFN("CPushViewMessageOp::NewL")
+
+ CPushViewMessageOp* self =
+ new (ELeave) CPushViewMessageOp( aSession, aEntryId, aObserverStatus );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CPushViewMessageOp::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::~CPushViewMessageOp
+// ---------------------------------------------------------
+//
+CPushViewMessageOp::~CPushViewMessageOp()
+ {
+ PUSHLOG_ENTERFN("CPushViewMessageOp::~CPushViewMessageOp")
+
+ Cancel();
+ delete iDocHandler;
+
+ PUSHLOG_LEAVEFN("CPushViewMessageOp::~CPushViewMessageOp")
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::StartL
+// ---------------------------------------------------------
+//
+void CPushViewMessageOp::StartL()
+ {
+ PUSHLOG_WRITE("CPushViewMessageOp StartL")
+
+ Cancel();
+
+ // Mark service read.
+ iMtmUtil->MarkServiceUnreadL( iEntryId, EFalse );
+
+ CPushMtmUiOperation::StartL();
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::CPushViewMessageOp
+// ---------------------------------------------------------
+//
+CPushViewMessageOp::CPushViewMessageOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus )
+: CPushMtmUiOperation( aSession, aEntryId, aObserverStatus ),
+ iIsCancelled( EFalse )
+ {
+ PUSHLOG_WRITE("CPushViewMessageOp constructing")
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::ConstructL
+// ---------------------------------------------------------
+//
+void CPushViewMessageOp::ConstructL()
+ {
+ CPushMtmUiOperation::ConstructL();
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::RunL
+// ---------------------------------------------------------
+//
+void CPushViewMessageOp::RunL()
+ {
+ PUSHLOG_ENTERFN("CPushViewMessageOp::RunL");
+
+ if ( iDocHandler )
+ {
+ // Content handler is running; we just need to close it,
+ // NotifyExit has already been called.
+ delete iDocHandler;
+ iDocHandler = NULL;
+ CancelObserveEntryEvent();
+
+ // Ready.
+ SignalObserver( KErrNone );
+ }
+ else
+ {
+ // Lauch the content handler.
+ TMsvEntry tEntry;
+ TMsvId service;
+ User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, tEntry ) );
+
+ __ASSERT_ALWAYS( tEntry.iMtm == KUidMtmWapPush,
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ CSIPushMsgEntry* si = NULL;
+ const TInt32 bioType( tEntry.iBioType );
+
+ if ( bioType == KUidWapPushMsgSI.iUid )
+ {
+ si = CSIPushMsgEntry::NewL();
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ CleanupStack::PushL( si );
+ si->RetrieveL( iMsvSession, iEntryId );
+
+ PUSHLOG_WRITE("CPushViewMessageOp SI retrieved")
+
+ __ASSERT_DEBUG( !iDocHandler, UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+ iDocHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
+
+ iDocHandler->SetExitObserver( this ); // (1)
+ const TPtrC text = si->Text();
+ // Copy the text to an 8-bit buffer:
+ HBufC8* text8 = HBufC8::NewMaxLC( text.Length() );
+ text8->Des().Copy( text );
+ TDataType dataType( KTextPlainString );
+
+ CAiwGenericParamList& paramList = iDocHandler->InParamListL();
+ RFile tempFile;
+ iDocHandler->SaveTempFileL
+ ( *text8, dataType, KNullDesC, tempFile );
+ PUSHLOG_WRITE(" SaveTempFileL OK");
+ CleanupClosePushL( tempFile );
+ iDocHandler->OpenFileEmbeddedL( tempFile, dataType, paramList );
+ PUSHLOG_WRITE(" OpenFileEmbeddedL OK");
+ CleanupStack::PopAndDestroy( &tempFile ); // tempFile
+ PUSHLOG_WRITE(" PopAndDestroy( &tempFile ) OK");
+
+ CleanupStack::PopAndDestroy( 2, si ); // text8, si
+ PUSHLOG_WRITE(" PopAndDestroy( 2, si ) OK");
+
+ // Signal the observer when the viewer is terminated.
+ // Until then we are observeing the message
+ // (delete & replacement notification).
+ //ObserveEntryEventL(); // (2)
+ // Now we are observing two things: the viewer (1) and the entry (2).
+
+ iStatus = KRequestPending;
+ SetActive();
+ }
+
+ PUSHLOG_LEAVEFN("CPushViewMessageOp::RunL")
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::DoCancel
+// ---------------------------------------------------------
+//
+void CPushViewMessageOp::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CPushViewMessageOp::DoCancel");
+
+ iIsCancelled = ETrue;
+
+ CancelObserveEntryEvent();
+ // If there is DocHandler, then it means that we are active and
+ // waiting for NotifyExit to be called.
+ if ( iDocHandler )
+ {
+ // Terminate the embedded viewer. TODO
+ // Complete us.
+ InvokeRun();
+ }
+
+ SignalObserver( KErrCancel );
+
+ PUSHLOG_LEAVEFN("CPushViewMessageOp::DoCancel");
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::RunError
+// ---------------------------------------------------------
+//
+TInt CPushViewMessageOp::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushViewMessageOp::RunError: %d",aError);
+
+ CancelObserveEntryEvent();
+
+ delete iDocHandler;
+ iDocHandler = NULL;
+
+ TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
+ return CPushMtmUiOperation::RunError( aError );
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::HandleEntryEventL
+// ---------------------------------------------------------
+//
+void CPushViewMessageOp::HandleEntryEventL( TMsvEntryEvent aEvent,
+ TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/ )
+ {
+ PUSHLOG_ENTERFN("CPushViewMessageOp::HandleEntryEventL");
+
+ if ( aEvent == EMsvEntryChanged )
+ {
+ PUSHLOG_WRITE(" Changed");
+ // We don't have to bother with such case that the
+ // content changes, but the entry is saved as 'read' in
+ // this case, because this operation handles only SI messages.
+ //TODO NotifyAndCancelL( R_PUSHMISC_INFO_REPLACED );
+ }
+ else if ( aEvent == EMsvEntryDeleted )
+ {
+ PUSHLOG_WRITE(" Deleted");
+ //TODO NotifyAndCancelL( R_PUSHLS_EXPIRED_NOTE );
+ }
+ else
+ {
+ // Nothing to do.
+ }
+
+ PUSHLOG_LEAVEFN("CPushViewMessageOp::HandleEntryEventL");
+ }
+
+// ---------------------------------------------------------
+// CPushViewMessageOp::NotifyAndCancelL
+// ---------------------------------------------------------
+//
+void CPushViewMessageOp::NotifyAndCancelL( TInt aResId )
+ {
+ PUSHLOG_ENTERFN("CPushViewMessageOp::NotifyAndCancelL");
+
+ // Add resource file.
+ TParse* fileParser = new (ELeave) TParse;
+ CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ AssureResourceL( fileParser->FullName() );
+ CleanupStack::PopAndDestroy( fileParser ); // fileParser
+ fileParser = NULL;
+
+ // Show note about the message deletion.
+ HBufC* noteText = iCoeEnv.AllocReadResourceLC( aResId );
+ CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+ note->ExecuteLD( *noteText );
+ CleanupStack::PopAndDestroy( noteText ); // noteText
+
+ // Close the dialog.
+ Cancel();
+
+ PUSHLOG_LEAVEFN("CPushViewMessageOp::NotifyAndCancelL");
+ }
+
+// -----------------------------------------------------------------------------
+// CPushViewMessageOp::HandleServerAppExit
+// -----------------------------------------------------------------------------
+//
+void CPushViewMessageOp::HandleServerAppExit( TInt LOG_ONLY( aReason ) )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushViewMessageOp::HandleServerAppExit: %d",aReason);
+
+ if ( !iIsCancelled )
+ {
+ // Ready. The application was terminated normally.
+ InvokeRun();
+ }
+ }
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushViewServiceOp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushViewServiceOp.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewServiceOp.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmLog.h"
+#include <PushEntry.h>
+#include <CUnknownPushMsgEntry.h>
+#include <eikenv.h>
+#include <apmstd.h>
+#include <DocumentHandler.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::CPushViewServiceOp
+// ---------------------------------------------------------
+//
+CPushViewServiceOp::CPushViewServiceOp( CMsvSession& aSession,
+ TMsvId aEntryId,
+ TRequestStatus& aObserverStatus )
+: CPushMtmUiOperation( aSession, aEntryId, aObserverStatus )
+ {
+ PUSHLOG_WRITE("CPushViewServiceOp constructing")
+ }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::~CPushViewServiceOp
+// ---------------------------------------------------------
+//
+CPushViewServiceOp::~CPushViewServiceOp()
+ {
+ Cancel();
+ delete iDocHandler;
+ }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::StartL
+// ---------------------------------------------------------
+//
+void CPushViewServiceOp::StartL()
+ {
+ PUSHLOG_ENTERFN("CPushViewServiceOp::~CPushViewServiceOp")
+
+ Cancel();
+ CPushMtmOperation::StartL();
+
+ PUSHLOG_LEAVEFN("CPushViewServiceOp::~CPushViewServiceOp")
+ }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::RunL
+// ---------------------------------------------------------
+//
+void CPushViewServiceOp::RunL()
+ {
+ PUSHLOG_ENTERFN("CPushViewServiceOp::RunL")
+
+ TMsvEntry tEntry;
+ TMsvId service;
+ User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, tEntry ) );
+
+ __ASSERT_ALWAYS( tEntry.iMtm == KUidMtmWapPush,
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ CUnknownPushMsgEntry* context = NULL;
+ const TInt32 bioType( tEntry.iBioType );
+
+ if ( bioType == KUidWapPushMsgUnknown.iUid )
+ {
+ context = CUnknownPushMsgEntry::NewL();
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ CleanupStack::PushL( context );
+ context->RetrieveL( iMsvSession, iEntryId );
+
+ const TPtrC contentType = context->ContentType();
+ const TPtrC8 content = context->MessageData();
+
+ __ASSERT_DEBUG( !iDocHandler, UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+ iDocHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
+
+ iDocHandler->SetExitObserver( this );
+ HBufC8* contentType8 = HBufC8::NewMaxLC( contentType.Length() );
+ contentType8->Des().Copy( contentType );
+ TDataType dataType( *contentType8 );
+
+ CAiwGenericParamList& paramList = iDocHandler->InParamListL();
+ RFile tempFile;
+ iDocHandler->SaveTempFileL
+ ( content, dataType, KNullDesC, tempFile );
+ PUSHLOG_WRITE(" SaveTempFileL OK");
+ CleanupClosePushL( tempFile );
+ iDocHandler->OpenFileEmbeddedL( tempFile, dataType, paramList );
+ PUSHLOG_WRITE(" OpenFileEmbeddedL OK");
+ CleanupStack::PopAndDestroy( &tempFile ); // tempFile
+ PUSHLOG_WRITE(" PopAndDestroy( &tempFile ) OK");
+
+ CleanupStack::PopAndDestroy( 2, context ); // contentType8, context
+
+ // Signal the observer when the viewer is terminated.
+
+ PUSHLOG_LEAVEFN("CPushViewServiceOp::RunL")
+ }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::DoCancel
+// ---------------------------------------------------------
+//
+void CPushViewServiceOp::DoCancel()
+ {
+ PUSHLOG_WRITE("CPushViewServiceOp::DoCancel")
+ SignalObserver( KErrCancel );
+ }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::RunError
+// ---------------------------------------------------------
+//
+TInt CPushViewServiceOp::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushViewServiceOp::RunError <%d>",aError)
+ TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
+ return CPushMtmOperation::RunError( aError );
+ }
+
+// -----------------------------------------------------------------------------
+// CPushViewServiceOp::HandleServerAppExit
+// -----------------------------------------------------------------------------
+//
+void CPushViewServiceOp::HandleServerAppExit( TInt aReason )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushViewServiceOp::HandleServerAppExit <%d>",aReason)
+ aReason = 0; // Just to avoid warnings.
+ // Ready.
+ SignalObserver( KErrNone );
+ }
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushAsyncOpRunner.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This file contains the class definition of CPushAsyncOpRunner.
+*
+*
+*/
+
+
+
+#ifndef PUSHASYNCOPRUNNER_H
+#define PUSHASYNCOPRUNNER_H
+
+// INCLUDES
+
+#include "PushMtmOperation.h"
+#include <e32std.h>
+#include <msvstd.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CMsvOperation;
+
+// CLASS DECLARATION
+
+/**
+* This class is intended as a base class of asynchronous ui operations.
+* It provides the syntax, and the semantics should be implemented by derived classes:
+* default implementations are provided, and derived classes may override this.
+* The main goal was to make those Push Mtm Ui's functions asynchronous, that are
+* really asynchronous, and avoid making them synchronous with using
+* CActiveScheduler::Start() and CActiveScheduler::Stop(). This makes the
+* design clearer and may prevent some problems raised by the usage of Start()'s and
+* Stop()'s.
+*/
+class CPushAsyncOpRunner : public CPushMtmOperation
+ {
+ public: // Functions from base classes
+
+ /**
+ * Start or restart the operation. OnStartupL is called. See OnStartupL.
+ * @return None.
+ */
+ IMPORT_C void StartL();
+
+ /**
+ * Get progress information.
+ * @return A package buffer (of type TPushMtmProgressBuf), containing
+ * progress information.
+ */
+ IMPORT_C const TDesC8& ProgressL();
+
+ protected: // Constructors and destructor
+
+ /**
+ * Constructor. CActiveScheduler::Add( this ) is called. Derived
+ * classes shouldn't call CActiveScheduler::Add( this ) in their constructor.
+ * @param aSession Msv session to use.
+ * @param aEntryId Id of the context to operate on.
+ * @param aObserverStatus Observer status.
+ * @return None.
+ */
+ IMPORT_C CPushAsyncOpRunner( CMsvSession& aSession,
+ const TMsvId aEntryId,
+ TRequestStatus& aObserverStatus );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C virtual ~CPushAsyncOpRunner();
+
+ protected: // New functions
+
+ /**
+ * This method is called from StartL. Default implementation returns ETrue
+ * and sets aIsObserving to EFalse.
+ * @param aIsObserving Used only if the function returns EFalse.
+ * In this case
+ * indicate in this variable if this operation observes
+ * an other one. If so, then it is set to active, but
+ * not completed - this will be made by the observed
+ * operation.
+ * Derived classes may override this.
+ * @return Return ETrue if the operation has completed. Return EFalse
+ * if the operation has not completed yet. In the latter case
+ * parameter aIsObserving is also used.
+ */
+ IMPORT_C virtual TBool OnStartupL( TBool& aIsObserving );
+
+ /**
+ * This method is called from RunL. Default implementation returns ETrue
+ * and sets aIsObserving to EFalse.
+ * @param aIsObserving Used only if the function returns EFalse.
+ * In this case
+ * indicate in this variable if this operation observes
+ * an other one. If so, then it is set to active, but
+ * not completed - this will be made by the observed
+ * operation.
+ * Derived classes may override this.
+ * @return Return ETrue if the operation has completed. Return EFalse
+ * if the operation has not completed yet. In the latter case
+ * parameter aIsObserving is also used.
+ */
+ IMPORT_C virtual TBool OnRunLActionL( TBool& aIsObserving );
+
+ /**
+ * Set observed operation and take ownership.
+ * @param aOp The operation.
+ * @return None.
+ */
+ IMPORT_C void SetOperation( CMsvOperation* aOp );
+
+ /**
+ * Delete the observed operation.
+ * @return None.
+ */
+ IMPORT_C void DeleteOperation();
+
+ /**
+ * Return the observed operation.
+ * @return The operation.
+ */
+ IMPORT_C CMsvOperation& Operation();
+
+ protected: // Functions from base classes
+
+ /**
+ * RunL protocol implementation. See OnRunLActionL.
+ * @return None.
+ */
+ IMPORT_C void RunL();
+
+ /**
+ * Default implementation cancels the observed operation, and
+ * completes the observer with KErrCancel.
+ * Derived classes may override this.
+ * @return None.
+ */
+ IMPORT_C void DoCancel();
+
+ /**
+ * Default implementation cancels the observed operation,
+ * completes the observer with aError and forwards the
+ * error to the scheduler.
+ * Derived classes may override this.
+ * @param aError Leave code.
+ * @return aError.
+ */
+ IMPORT_C TInt RunError( TInt aError );
+
+ private: // Data members
+
+ TBool iReady; ///< ETrue, if the operation is ready.
+ CMsvOperation* iOperation; ///< The observed operation. Has.
+ TBufC8<1> iDummyProgressBuf; ///< Dummy progress buffer. Ignored.
+ };
+
+#endif // PUSHASYNCOPRUNNER_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushAuthenticationUtilities.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Authentication utilities.
+*
+*/
+
+
+
+#ifndef PUSHAUTHENTICATIONUTILITIES_H
+#define PUSHAUTHENTICATIONUTILITIES_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmSettings;
+class CPushMessage;
+class CPushMsgEntryBase;
+
+// CLASS DECLARATION
+
+/**
+* Utility class.
+*/
+class TPushAuthenticationUtil
+ {
+ public: // New functions
+
+ /**
+ * Authenticate the push message.
+ * @param aMtmSettings The push settings.
+ * @param aPushMsg The push message.
+ * @return ETrue if authenticated. EFalse otherwise.
+ */
+ IMPORT_C static TBool AuthenticateMsgL
+ (
+ const CPushMtmSettings& aMtmSettings,
+ const CPushMessage& aPushMsg
+ );
+
+ /**
+ * Authenticate the push message.
+ * @param aMtmSettings The push settings.
+ * @param aPushMsg The push message.
+ * @return ETrue if authenticated. EFalse otherwise.
+ */
+ IMPORT_C static TBool AuthenticateMsgL
+ (
+ const CPushMtmSettings& aMtmSettings,
+ const CPushMsgEntryBase& aPushMsg
+ );
+
+ };
+
+#endif // PUSHAUTHENTICATIONUTILITIES_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushInitiator.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This header file contains the declaration of TPushInitiator.
+*
+*/
+
+
+
+#ifndef PUSHINITIATOR_H
+#define PUSHINITIATOR_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32def.h>
+
+// CONSTANTS
+
+const TUint32 ENullInitiatorEntryId = 0;
+
+// CLASS DECLARATION
+
+/**
+* This class represents a push initiator's address.
+*/
+class CPushInitiator : public CBase
+ {
+ public: // Data type
+
+ enum TAddrType ///< Address type
+ {
+ ETypeIpv4, ///< IPv4
+ ETypeIpv6, ///< IPv6
+ ETypeE164, ///< MSISDN
+ ETypeAlpha, ///< Alphanumeric
+ ETypeAny ///< Any
+ };
+
+ public: // Constructors
+
+ IMPORT_C CPushInitiator();
+ IMPORT_C ~CPushInitiator();
+
+ public: // New functions
+
+ IMPORT_C void SetAddressL( const TDesC& aAddr,
+ TAddrType aType );
+
+ inline const TDesC& Addr() const;
+ inline TAddrType Type() const;
+
+ inline void SetEntryID( TUint32 aEntryID );
+ inline TUint32 EntryID() const;
+
+ inline CPushInitiator* AllocL() const;
+ inline CPushInitiator* AllocLC() const;
+
+ /**
+ * Compares two initiators for equality. It compares the address and
+ * type. Note that ETypeAny matches any!
+ * @param aPushInitiator The other push initiator.
+ * @return ETrue if they are equal.
+ */
+ inline TBool operator==( const CPushInitiator& aOther ) const;
+ inline TBool operator!=( const CPushInitiator& aOther ) const;
+
+ private: // Data members
+
+ HBufC* iAddress; ///< Address string. Owned.
+ TAddrType iType; ///< Address type.
+ TUint32 iEntryID; ///< Unique ID of the entry.
+ };
+
+#include "PushInitiator.inl"
+
+#endif // PUSHINITIATOR_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushInitiator.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline functions of CPushInitiator.
+*
+*/
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushInitiator::Addr
+// ---------------------------------------------------------
+//
+inline const TDesC& CPushInitiator::Addr() const
+ {
+ return *iAddress;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::Type
+// ---------------------------------------------------------
+//
+inline CPushInitiator::TAddrType CPushInitiator::Type() const
+ {
+ return iType;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::SetEntryID
+// ---------------------------------------------------------
+//
+inline void CPushInitiator::SetEntryID( TUint32 aEntryID )
+ {
+ iEntryID = aEntryID;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::EntryID
+// ---------------------------------------------------------
+//
+inline TUint32 CPushInitiator::EntryID() const
+ {
+ return iEntryID;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::AllocL
+// ---------------------------------------------------------
+//
+inline CPushInitiator* CPushInitiator::AllocL() const
+ {
+ CPushInitiator* temp = AllocLC();
+ CleanupStack::Pop( temp );
+ return temp;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::AllocLC
+// ---------------------------------------------------------
+//
+inline CPushInitiator* CPushInitiator::AllocLC() const
+ {
+ CPushInitiator* temp = new (ELeave) CPushInitiator;
+ CleanupStack::PushL( temp );
+ temp->SetAddressL( Addr(), Type() );
+ return temp;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::operator==
+// ---------------------------------------------------------
+//
+inline TBool CPushInitiator::
+ operator==( const CPushInitiator& aOther ) const
+ {
+ return (Addr().Compare(aOther.Addr())==KErrNone) &&
+ ( (Type()==aOther.Type()) ||
+ Type()==ETypeAny ||
+ aOther.Type()==ETypeAny );
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::operator!=
+// ---------------------------------------------------------
+//
+inline TBool CPushInitiator::
+ operator!=( const CPushInitiator& aOther ) const
+ {
+ return (*this==aOther) == EFalse;
+ }
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushInitiatorList.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This header file contains the declaration of CPushInitiatorList.
+*
+*/
+
+
+
+#ifndef PUSHINITIATORLIST_H
+#define PUSHINITIATORLIST_H
+
+// INCLUDE FILES
+
+#include "PushInitiator.h"
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CRepository;
+
+// CLASS DECLARATION
+
+/**
+* This class is used to store push initiator addresses.
+*/
+class CPushInitiatorList : protected CArrayPtrFlat<CPushInitiator>
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @return New CPushInitiatorList object.
+ */
+ IMPORT_C static CPushInitiatorList* NewL();
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CPushInitiatorList();
+
+ public: // New functions
+
+ /**
+ * Append the initiator to the list. An Initiator is defined by an
+ * address and an address type together.
+ * The address with the given type is added to the list even if an
+ * initiator with the same address & type already exists in it.
+ * @param aPushInitiator The push initiator.
+ * @return A unique ID of the Initiator in the list (greater than 0).
+ */
+ IMPORT_C TUint32 AddL( const CPushInitiator& aPushInitiator );
+
+ /**
+ * Append the initiator to the list. An Initiator is defined by an
+ * address and an address type together.
+ * The address with the given type is added to the list even if an
+ * initiator with the same address & type already exists in it.
+ * @param aPushInitiator The push initiator. Ownership is taken!
+ * @return A unique ID of the Initiator in the list (greater than 0).
+ */
+ IMPORT_C TUint32 AddL( CPushInitiator* aPushInitiator );
+
+ /**
+ * Give a reference to the indicated initiator.
+ * @param aIndex Index of the initiator starting from zero.
+ * @return Reference to the initiator.
+ */
+ IMPORT_C CPushInitiator& At( TInt aIndex ) const;
+
+ /**
+ * Delete the initiator at index.
+ * @param aIndex Index of the initiator starting from zero.
+ * @return None.
+ */
+ IMPORT_C void Delete( TInt aIndex );
+
+ /**
+ * Number of initiators in the list.
+ * @return Item count.
+ */
+ IMPORT_C TInt Count() const;
+
+ /**
+ * Get a free ID that is not used by the list members yet.
+ * The smallest ID got is 1.
+ * See CPushInitiator::EntryID()!
+ * @return The largest ID used plus 1 is returned.
+ */
+ TUint32 FreeId() const;
+
+ /**
+ * Return the "changed" flag.
+ * @return See above.
+ */
+ TBool Changed() const;
+
+ /**
+ * Reset the "changed" flag.
+ * @return None.
+ */
+ void ResetChanged();
+
+ /**
+ * Delete the items in the list.
+ * @return None.
+ */
+ IMPORT_C void ResetAndDestroy();
+
+ /**
+ * Find the first occurrence of the given initiator in the list.
+ * This method uses only the address & type properties of the
+ * Initiator - it does not use the ID property!
+ * @param aPushInitiator The push initiator to be found.
+ * @param aIndex If found, the index of it starting from zero.
+ * @return KErrNone if found, KErrNotFound otherwise.
+ */
+ IMPORT_C TInt Find( const CPushInitiator& aPushInitiator,
+ TInt& aIndex ) const;
+
+ IMPORT_C TBool operator==( const CPushInitiatorList& aList ) const;
+ IMPORT_C TBool operator!=( const CPushInitiatorList& aList ) const;
+
+ /**
+ * Externalize into the Repository.
+ * @param aRepository CenRep
+ * @return none
+ */
+ void ExternalizeL( CRepository& aRepository ) const;
+
+ /**
+ * Internalize from the Repository.
+ * @param aRepository CenRep
+ * @return none
+ */
+ void InternalizeL( CRepository& aRepository );
+
+ void ParseAndProcessBuf2ListL( const TDesC& aStreamedBuf );
+
+ HBufC* ParseAndProcessList2BufL() const;
+
+ private: // Constructors and operators
+
+ CPushInitiatorList( const TInt aGranularity );
+
+ private: // Data
+
+ /// The following members indicate if a value has been changed.
+ TBool iPushInitiatorListChanged;
+ };
+
+#endif // PUSHINITIATORLIST_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmLog.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Logger facility for the Push MTM modules.
+*
+*/
+
+
+
+#ifndef PUSHMTMLOG_H
+#define PUSHMTMLOG_H
+
+//
+#ifdef __TEST_LOG__
+//
+
+#include <e32std.h>
+#include <e32def.h>
+#include <flogger.h>
+
+_LIT( KPushLogDir, "PushMtm" );
+_LIT( KPushLogFile, "PushLog.txt" );
+_LIT( KPushLogEnterFn, "-> %S" );
+_LIT( KPushLogLeaveFn, "<- %S" );
+_LIT( KPushLogTimeFormatString, "%H:%T:%S:%*C2" );
+_LIT( KPushLogTimeStampFormatString, "%S %S" );
+
+#define PUSHLOG_ENTERFN(a) {_LIT(temp, a); RFileLogger::WriteFormat(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, KPushLogEnterFn, &temp);}
+#define PUSHLOG_LEAVEFN(a) {_LIT(temp, a); RFileLogger::WriteFormat(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, KPushLogLeaveFn, &temp);}
+#define PUSHLOG_WRITE(a) {_LIT(temp, a); RFileLogger::Write(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, temp);}
+#define PUSHLOG_WRITE_FORMAT(a,b) {_LIT(temp, a); RFileLogger::WriteFormat(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, temp, b);}
+#define PUSHLOG_WRITE_FORMAT2(a,b,c) {_LIT(temp, a); RFileLogger::WriteFormat(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, temp, b, c);}
+#define PUSHLOG_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<32> timeBuf; TRAPD(err, time.FormatL( timeBuf, KPushLogTimeFormatString )); if (!err) {RFileLogger::WriteFormat(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, KPushLogTimeStampFormatString, &temp, &timeBuf);} }
+// Use HEXDUMP with a TDesC8-derived parameter.
+#define PUSHLOG_HEXDUMP(aBuf) {RFileLogger::HexDump(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, _S(" "), _S(" "), aBuf.Ptr(), aBuf.Size());}
+// Guard "log-only" argument name with this (expands to argument).
+#define LOG_ONLY( argName ) argName
+
+//
+#else // #ifndef __TEST_LOG__
+//
+
+#define PUSHLOG_ENTERFN(a)
+#define PUSHLOG_LEAVEFN(a)
+#define PUSHLOG_WRITE(a)
+#define PUSHLOG_WRITE_FORMAT(a,b)
+#define PUSHLOG_WRITE_FORMAT2(a,b,c)
+#define PUSHLOG_WRITE_TIMESTAMP(a)
+#define PUSHLOG_HEXDUMP(aBuf)
+// Guard "log-only" argument name with this (expands to nothing).
+#define LOG_ONLY( argName )
+
+//
+#endif // __TEST_LOG__
+//
+#endif // PUSHMTMLOG_H
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmOperation.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMtmOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMOPERATION_H
+#define PUSHMTMOPERATION_H
+
+// INCLUDE FILES
+
+#include "PushMtmProgress.h"
+#include <e32base.h>
+#include <msvapi.h>
+
+// CLASS DECLARATION
+
+/**
+* Base class for mtm operations controlling asynchronous functions on the
+* client side.
+*/
+class CPushMtmOperation : public CMsvOperation,
+ public MMsvEntryObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C virtual ~CPushMtmOperation();
+
+ public: // New functions
+
+ /**
+ * Start or restart the operation.
+ * Current implementation calls Cancel and invokes RunL.
+ * Derived classes may override this.
+ */
+ IMPORT_C virtual void StartL();
+
+ public: // Functions from base classes
+
+ /**
+ * Get progress information.
+ * @return A package buffer (of type TPushMtmProgressBuf), containing
+ * progress information.
+ */
+ IMPORT_C const TDesC8& ProgressL();
+
+ protected: // Constructors
+
+ /**
+ * Constructor. Calls CActiveScheduler::Add( this )!
+ * @param aSession Message Server Session to be used by this operation.
+ * @param aId Id of entry to operate on.
+ * @param aObserverRequestStatus Observer's status.
+ */
+ IMPORT_C CPushMtmOperation( CMsvSession& aSession,
+ TMsvId aId,
+ TRequestStatus& aObserverRequestStatus );
+
+ protected: // New functions
+
+ /**
+ * Invoke RunL. Complete request with KErrNone.
+ * @return None.
+ */
+ IMPORT_C void InvokeRun();
+
+ /**
+ * Signal the observer that the asynchronous request is complete.
+ * @param aCompletionCode The value for which the observer's request
+ * status is set.
+ */
+ IMPORT_C void SignalObserver( TInt aCompletionCode );
+
+ /**
+ * Request entry event observation.
+ * @return None.
+ */
+ IMPORT_C void ObserveEntryEventL();
+
+ /**
+ * Cancel the request for entry event observation.
+ * @return None.
+ */
+ IMPORT_C void CancelObserveEntryEvent();
+
+ protected: // Functions from base classes
+
+ /**
+ * Current implementation calls SignalObserver( KErrNone ).
+ * Derived classes should override this and also should
+ * call SignalObserver.
+ */
+ IMPORT_C void RunL();
+
+ /**
+ * Cancel protocol implementation.
+ */
+ IMPORT_C void DoCancel();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves. The observer is signaled if a leave occures.
+ * The leave code is not forwarded to the scheduler.
+ */
+ IMPORT_C TInt RunError( TInt aError );
+
+ /**
+ * Call-back for entry event handling. Derived classes may override it.
+ */
+ IMPORT_C void HandleEntryEventL( TMsvEntryEvent aEvent,
+ TAny* aArg1, TAny* aArg2, TAny* aArg3 );
+
+ protected: // Data
+
+ TMsvId iEntryId; ///< Id of entry to operate on.
+ CMsvEntry* iCEntry; ///< Context. Owned.
+ TPushMtmProgress iProgress; ///< Progress information.
+ /// 8 bit descriptor package pointing to the progress information.
+ TPushMtmProgressPckg iProgressPckg;
+ };
+
+#endif // PUSHMTMOPERATION_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmPrivateCRKeys.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef PUSHMTMPRIVATECRKEYS_H
+#define PUSHMTMPRIVATECRKEYS_H
+
+const TUid KCRUidPushMtm = {0x10008D42};
+
+// Service reception: on/off
+const TUint32 KPushMtmServiceReception = 0x0000001;
+
+// Service loading: automatic/manual
+const TUint32 KPushMtmServiceLoading = 0x0000002;
+
+// Read only White List
+const TUint32 KPushMtmWhiteList = 0x0000003;
+
+//To Enable to Disable PUSH_SL Service in Run-time
+const TUint32 KPushMtmServiceEnabled = 0x0000004;
+
+#endif // PUSHMTMPRIVATECRKEYS_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmSettings.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Push Mtm settings class declaration
+*
+*/
+
+
+
+#ifndef PUSHMTMSETTINGS_H
+#define PUSHMTMSETTINGS_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32std.h>
+
+// FORWARD DECLARATIONS
+
+class CPushInitiatorList;
+class CRepository;
+
+// CLASS DECLARATION
+
+/**
+* CPushMtmSettings supports an API with which push mtm settings can be
+* read or edited. These settings are stored in Central Repository.
+*
+* On construction with the static NewL or NewLC methods the new instance is
+* initialized with the stored values (with the usage of the LoadL method).
+* Changes made are stored in the associated file if the SaveL method
+* is called. It is possible that there are more than one instances of this
+* class. The instances manipulate on the same CenRep.
+*
+* The instances do not update their settings values from the Repository
+* automatically if it is modified. If an instance's owner wants that the
+* settings values be up-to-date, then it should call LoadL or reconstruct a
+* new CPushMtmSettings object.
+*/
+class CPushMtmSettings : public CBase
+ {
+ public: // Type definitions
+
+ enum TServiceLoading ///< Service loading type
+ {
+ EAutomatic, ///< Automatic loading
+ EManual ///< Manual loading
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @return New CPushMtmSettings object.
+ */
+ IMPORT_C static CPushMtmSettings* NewL();
+
+ /**
+ * Two-phased constructor.
+ * @return New CPushMtmSettings object.
+ */
+ IMPORT_C static CPushMtmSettings* NewLC();
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C virtual ~CPushMtmSettings();
+
+ public: // New functions
+
+ // ==================== Setters =====================
+
+ /**
+ * Set service reception.
+ * @param aReceive If this parameter is ETrue, service
+ * reception is on. Otherwise it is off.
+ * @return none
+ */
+ IMPORT_C void SetServiceReception( TBool aReceive );
+
+ /**
+ * Set service loading type.
+ * @param aType Service loading type.
+ * @return none
+ */
+ IMPORT_C void SetServiceLoadingType( TServiceLoading aType );
+
+ // ==================== Getters =====================
+
+ /**
+ * Return wap push service reception setting.
+ * @return Message reception setting.
+ * It is ETrue, if setting is on.
+ * It is EFalse, if setting is off.
+ */
+ IMPORT_C TBool ServiceReception() const;
+
+ /**
+ * Return wap push service loading type setting.
+ * @return Service loading type setting.
+ */
+ IMPORT_C TServiceLoading ServiceLoadingType() const;
+
+ /**
+ * Return the 'White list' i.e. list of the addresses of push
+ * initiators from where we accept push messages.
+ * @return The push initiator list.
+ */
+ IMPORT_C CPushInitiatorList& PushInitiatorList() const;
+
+ // ==================== Saving and loading =====================
+
+ /**
+ * The data stored in the permanent store is internalized into the
+ * instance of this class.
+ * The existing values will be overwritten.
+ * @return none
+ */
+ IMPORT_C void LoadL();
+
+ /**
+ * Save changes if one ore more of then have been changed.
+ * @param aForce Force saving to permanent store.
+ * @return None.
+ */
+ IMPORT_C void SaveL( const TBool aForce = EFalse );
+
+ /**
+ * Restore factory settings from the Shared Data.
+ * Note that it issues SaveL() to persist the settings!
+ * @return None.
+ */
+ IMPORT_C void RestoreFactorySettingsL();
+
+ private: // Constructors
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Constructor.
+ */
+ CPushMtmSettings();
+
+ private: // New functions
+
+ /**
+ * Reset data members.
+ * It is called at the beginning of LoadL(), for example.
+ * @return none
+ */
+ void Reset();
+
+ /**
+ * Externalize into the Repository.
+ * @param aRepository Central Repository
+ * @return none
+ */
+ void ExternalizeL( CRepository& aRepository ) const;
+
+ /**
+ * Internalize from the Repository.
+ * @param aRepository Central Repository
+ * @return none
+ */
+ void InternalizeL( CRepository& aRepository );
+
+ /**
+ * Parse and process the streamed White List.
+ * @param aStreamedBuf The streamed White List.
+ * @return None.
+ */
+ void ParseAndProcessWhiteListBufL( const TDesC& aStreamedBuf );
+
+ private: // Data
+
+ TBool iServiceReception; ///< Setting value.
+ TServiceLoading iServiceLoadingType; ///< Setting value.
+ CPushInitiatorList* iPushInitiatorList; ///< The 'white list'. Owned.
+
+ /// The following members indicate if a value has been changed.
+ TBool iServiceReceptionChanged;
+ TBool iServiceLoadingTypeChanged;
+
+ TBool iFeatureManagerInitialized;
+ };
+
+#endif // PUSHMTMSETTINGS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmUtil.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMtmUtil.
+*
+*/
+
+
+
+#ifndef PUSHMTMUTIL_H
+#define PUSHMTMUTIL_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32std.h>
+#include <msvstd.h>
+
+// CONSTANTS
+
+/**
+* Defines for masking values used to extract information from iMtmData2.
+* Note that iMtmData1 is used by CPushMsgEntryBase and derived classes!
+*/
+const TUint32 KPushMtmMaskOnlyAttrs = 0x000000FF;
+const TUint32 KPushMtmShiftOnlyAttrs = 0;
+const TUint32 KPushMtmMaskEverythingButAttrs = 0xFFFFFF00;
+/**
+* Attributes. The maximum number of attribute is determined by
+* **************** KPushMtmMaskOnlyAttrs ******************
+* Each attribute can be set (1) or reseted (0).
+*/
+const TUint32 EPushMtmAttrHasHref = 0x00000001;
+const TUint32 EPushMtmReadButContentChanged = 0x00000002;
+const TUint32 EPushMtmNotUsed1 = 0x00000004;
+const TUint32 EPushMtmNotUsed2 = 0x00000008;
+const TUint32 EPushMtmNotUsed3 = 0x00000010;
+const TUint32 EPushMtmNotUsed4 = 0x00000020;
+const TUint32 EPushMtmNotUsed5 = 0x00000040;
+const TUint32 EPushMtmNotUsed6 = 0x00000080;
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+
+// CLASS DECLARATION
+
+/**
+* Utility class.
+*/
+class CPushMtmUtil : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aMsvSession Message Server Session to be used by this operation.
+ * @return The constructed object.
+ */
+ IMPORT_C static CPushMtmUtil* NewL( CMsvSession& aMsvSession );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C virtual ~CPushMtmUtil();
+
+ public: // New functions
+
+ /**
+ * Mark the given entry unread and new.
+ * @param aEntryId The entry id to use.
+ * @param aUnread ETrue=mark unread, EFalse=mark read.
+ * @return None.
+ */
+ IMPORT_C void MarkServiceUnreadL( TMsvId aEntryId, TBool aUnread );
+
+ /**
+ * Find all the push messages of the specified type in the given folder
+ * and its subfolders recursively (if specified).
+ * @param aFolderId The given folder.
+ * @param aMsgType Push message type.
+ * @param aRecursive Is recursive search desired.
+ * @return TMsvIds of the messages.
+ */
+ IMPORT_C CMsvEntrySelection* FindMessagesL( TMsvId aFolderId,
+ TUid aMsgType,
+ TBool aRecursive );
+
+ /**
+ * Find all the push messages of the specified type in the given folders.
+ * @param aFolders Selection of folders.
+ * @param aMsgType Push message type.
+ * @return TMsvIds of the messages.
+ */
+ IMPORT_C CMsvEntrySelection* FindMessagesL
+ ( const CMsvEntrySelection& aFolders, TUid aMsgType );
+
+ /**
+ * Find all the push messages of the specified type in the 'push' folders.
+ * @param aMsgType Push message type.
+ * @return TMsvIds of the messages.
+ */
+ IMPORT_C CMsvEntrySelection* FindMessagesL( TUid aMsgType );
+
+ /**
+ * Find all the folders that may contain push messages.
+ * @return TMsvIds of the folders.
+ */
+ IMPORT_C CMsvEntrySelection* FindPushFoldersL();
+
+ /**
+ * Locates SI entries with the specified SI-ID. Search is made in the
+ * 'push' folders returned by FindPushFoldersL().
+ * @param aSiId Id of SI message to locate.
+ * @return Selection of entry IDs found.
+ */
+ IMPORT_C CMsvEntrySelection* FindSiIdLC( const TDesC& aSiId );
+
+ /**
+ * Finds SI or SL entries with the specified Url and Push Message Type.
+ * Search is made in the 'push' folders returned by FindPushFoldersL().
+ * @param aUrl URL to find
+ * @param aPushType Push Message type to filter entries by.
+ * @return Selection of entry IDs found.
+ */
+ IMPORT_C CMsvEntrySelection* FindUrlLC( const TDesC& aUrl,
+ TUid aPushType );
+
+ /**
+ * Delete the given entry.
+ * @param aId Id of the message to locate.
+ * @return None.
+ */
+ IMPORT_C void DeleteEntryL( TMsvId aId );
+
+ /**
+ * Convert the "From" information to the format required by the UI spec:
+ * it extracts the Host part of the URI. If it is ampty string, then
+ * it returns the copy of the original string.
+ * @param aFrom The sender information of a push message.
+ * @return The converted string in unicode.
+ */
+ IMPORT_C HBufC* ConvertDetailsL( const TDesC8& aFrom ) const;
+
+ /**
+ * Sets the given attributes of the context
+ * @param aContext Context entry that is modified.
+ * @param aAttr Attributes to be set.
+ * @return None.
+ */
+ IMPORT_C static void SetAttrs( TMsvEntry& aContext, TUint32 aAttrs );
+
+ /**
+ * Resets the given attributes of the context.
+ * @param aContext Context entry that is modified.
+ * @param aAttr Attributes to be reset.
+ * @return None.
+ */
+ IMPORT_C static void ResetAttrs( TMsvEntry& aContext, TUint32 aAttrs );
+
+ /**
+ * Get the value of the attributes of the context.
+ * @param aContext Context entry.
+ * @return The attributes.
+ */
+ IMPORT_C static TUint32 Attrs( const TMsvEntry& aContext );
+
+ /**
+ * Convert the given URI to an appropriate form to be displayed.
+ * See UriUtils::ConvertToDisplayFormL for more information.
+ * @param aUri URI to be converted.
+ * @return The converted URI.
+ */
+ IMPORT_C static HBufC* ConvertUriToDisplayFormL( const TDesC& aUri );
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aMsvSession Message server session.
+ */
+ CPushMtmUtil( CMsvSession& aMsvSession );
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ protected: // New functions
+
+ /**
+ * Find all the push messages of the specified type in the given folder
+ * and its subfolders recursively (if specified).
+ * @param aFolderId The given folder.
+ * @param aMsgType Push message type.
+ * @param aRecursive Is recursive search desired.
+ * @param aResult The result (TMsvIds of the messages) is appended to
+ * this array.
+ * @return None.
+ */
+ void FindMessagesL( TMsvId aFolderId,
+ TUid aMsgType,
+ TBool aRecursive,
+ CMsvEntrySelection& aResult );
+
+ private: // Data
+
+ CMsvSession& iMsvSession; ///< Message Server session.
+ };
+
+#endif // PUSHMTMUTIL_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmUtilDef.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Generic definition file. Internal usage only.
+*
+*/
+
+
+
+#ifndef PUSHMTMUTILDEF_H
+#define PUSHMTMUTILDEF_H
+
+#endif // PUSHMTMUTILDEF_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/PushMtmUtilPanic.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+#ifndef PUSHMTMUTILPANIC_H
+#define PUSHMTMUTILPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushMtmUtilPanic
+ {
+ EPushMtmUtilPanNull = 1,
+ EPushMtmUtilPanNotNull,
+ EPushMtmUtilPanNotSupported,
+ EPushMtmUtilPanBadMtm,
+ EPushMtmUtilPanBadBioType
+ };
+
+GLREF_C void UtilPanic( TPushMtmUtilPanic aReason );
+
+#endif // PUSHMTMUTILPANIC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilInc/WhiteListImporter.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declatarion of CWhiteListImporter.
+*
+*/
+
+
+#ifndef WHITE_LIST_CONVERTER_H
+#define WHITE_LIST_CONVERTER_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32std.h>
+
+// FORWARD DECLARATIONS
+
+class CPushInitiatorList;
+
+// CLASS DECLARATION
+
+/**
+* Converter utility.
+* Import White List data from a comma and semicolon separated descriptor to
+* push initiator list, or export that to a descriptor.
+*/
+class CWhiteListConverter : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aPushInitiatorList PushInitiatorList.
+ * @return The constructed importer.
+ */
+ static CWhiteListConverter* NewL( CPushInitiatorList& aPushInitiatorList );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CWhiteListConverter();
+
+ public: // New methods
+
+ /**
+ * Import White List data from a comma and semicolon
+ * separated descriptor.
+ * @param aSource Input descriptor.
+ * @throw KErrOverflow No more space in input buffer.
+ * @throw KErrCorrupt Corrupt input.
+ */
+ void Buffer2ListL( const TDesC& aSource );
+
+ /**
+ * Export White List data to a comma and semicolon separated descriptor.
+ * @return Output descriptor. Ownership transferred to the caller.
+ * @throw KErrOverflow No more space in input buffer.
+ * @throw KErrCorrupt Corrupt input.
+ */
+ HBufC* List2BufferL();
+
+ private: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ CWhiteListConverter( CPushInitiatorList& aPushInitiatorList );
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ private: // New methods
+
+ /**
+ * Get next character and store it in iCurCh.
+ */
+ inline void GetChar();
+
+ /**
+ * Process next line = Record.
+ * @return ETrue if more lines to go, EFalse on EOS.
+ */
+ TBool NextLineL();
+
+ /**
+ * Parse next token = Unit.
+ * Next token spans from current character up to (but excluding)
+ * to the next stop character.
+ * @param aStopChar Stop character (terminate the token).
+ * @return Pointer to token. This may be empty string. Note that the
+ * returned pointer is valid until next call (consecutive calls reuse
+ * the same buffer).
+ */
+ TPtrC NextTokenL( TUint aStopChar );
+
+ /**
+ * Parse the separated list of White List entries and
+ * add it to PushMtmSettings.
+ */
+ void AttrsL();
+
+ private: // data
+
+ CPushInitiatorList& iPushInitiatorList; ///< The initiator list.
+ TLex iSource; ///< Helper to parse iSource.
+ TUint iCurCh; ///< Current (lookahead) character.
+ TText* iBuf; ///< Token buffer. Owned.
+ TText* iNextCh; ///< Next character is stored here. Not owned.
+ TText* iMaxCh; ///< End of buffer (points past the buffer). Not owned.
+ HBufC* iConverterBuf; ///< Owned.
+ };
+
+#endif // WHITE_LIST_CONVERTER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushAsyncOpRunner.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This file contains the member definitions of CPushAsyncOpRunner.
+*
+*
+*/
+
+
+
+// INCLUDES
+
+#include "PushAsyncOpRunner.h"
+#include "PushMtmUtilPanic.h"
+#include <msvapi.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::StartL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushAsyncOpRunner::StartL()
+ {
+ Cancel();
+ TBool isObserving( EFalse );
+ iReady = OnStartupL( isObserving );
+ SetActive();
+ if ( !isObserving )
+ {
+ InvokeRun();
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::ProgressL
+// ---------------------------------------------------------
+//
+EXPORT_C const TDesC8& CPushAsyncOpRunner::ProgressL()
+ {
+ if ( iOperation )
+ {
+ return iOperation->ProgressL();
+ }
+ else
+ {
+ return iDummyProgressBuf;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::CPushAsyncOpRunner
+// ---------------------------------------------------------
+//
+EXPORT_C CPushAsyncOpRunner::CPushAsyncOpRunner( CMsvSession& aSession,
+ const TMsvId aEntryId,
+ TRequestStatus& aObserverStatus )
+: CPushMtmOperation( aSession, aEntryId, aObserverStatus ),
+ iReady( EFalse ),
+ iDummyProgressBuf( KNullDesC8 )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::~CPushAsyncOpRunner
+// ---------------------------------------------------------
+//
+EXPORT_C CPushAsyncOpRunner::~CPushAsyncOpRunner()
+ {
+ Cancel();
+ delete iOperation;
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::OnStartupL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CPushAsyncOpRunner::OnStartupL( TBool& aIsObserving )
+ {
+ aIsObserving = EFalse;
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::OnRunLActionL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CPushAsyncOpRunner::OnRunLActionL( TBool& aIsObserving )
+ {
+ aIsObserving = EFalse;
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::SetOperation
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushAsyncOpRunner::SetOperation( CMsvOperation* aOp )
+ {
+ delete iOperation;
+ iOperation = NULL;
+ iOperation = aOp;
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::SetOperation
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushAsyncOpRunner::DeleteOperation()
+ {
+ delete iOperation;
+ iOperation = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::Operation
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvOperation& CPushAsyncOpRunner::Operation()
+ {
+ __ASSERT_DEBUG( iOperation, UtilPanic( EPushMtmUtilPanNull ) );
+ return *iOperation;
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::DoCancel
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushAsyncOpRunner::DoCancel()
+ {
+ if ( iOperation )
+ {
+ iOperation->Cancel();
+ }
+ CPushMtmOperation::DoCancel();
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::RunError
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CPushAsyncOpRunner::RunError( TInt aError )
+ {
+ if ( iOperation )
+ {
+ iOperation->Cancel();
+ delete iOperation;
+ iOperation = NULL;
+ }
+ return CPushMtmOperation::RunError( aError );
+ }
+
+// ---------------------------------------------------------
+// CPushAsyncOpRunner::RunL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushAsyncOpRunner::RunL()
+ {
+ if ( iReady )
+ {
+ SignalObserver( KErrNone );
+ }
+ else
+ {
+ TBool isObserving( EFalse );
+ iReady = OnRunLActionL( isObserving );
+ if ( iReady )
+ {
+ SignalObserver( KErrNone );
+ }
+ else
+ {
+ // Invoke RunL again and run OnRunLActionL in it again.
+ SetActive();
+ if ( !isObserving )
+ {
+ InvokeRun();
+ }
+ }
+ }
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushAuthenticationUtilitiesPure.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Authentication utilities not using White List.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushAuthenticationUtilities.h"
+#include "PushMtmUtilPanic.h"
+#include "PushMtmLog.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TPushAuthenticationUtil::AuthenticateMsgL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool TPushAuthenticationUtil::AuthenticateMsgL
+ (
+ const CPushMtmSettings& /*aMtmSettings*/,
+ const CPushMessage& /*aPushMsg*/
+ )
+ {
+ PUSHLOG_ENTERFN("TPushAuthenticationUtil::AuthenticateMsgL")
+ PUSHLOG_WRITE(" Nothing done.")
+ PUSHLOG_LEAVEFN("TPushAuthenticationUtil::AuthenticateMsgL")
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// TPushAuthenticationUtil::AuthenticateMsgL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool TPushAuthenticationUtil::AuthenticateMsgL
+ (
+ const CPushMtmSettings& /*aMtmSettings*/,
+ const CPushMsgEntryBase& /*aPushMsg*/
+ )
+ {
+ PUSHLOG_ENTERFN("TPushAuthenticationUtil::AuthenticateMsgL 2")
+ PUSHLOG_WRITE(" Nothing done.")
+ PUSHLOG_LEAVEFN("TPushAuthenticationUtil::AuthenticateMsgL 2")
+ return ETrue;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushAuthenticationUtilitiesWL.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Authentication utilities using White List.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushAuthenticationUtilities.h"
+#include "PushInitiatorList.h"
+#include "PushInitiator.h"
+#include "PushMtmSettings.h"
+#include "PushMtmUtilPanic.h"
+#include "PushMtmLog.h"
+#include <push/PushMessage.h>
+#include <PushEntry.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TPushAuthenticationUtil::AuthenticateMsgL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool TPushAuthenticationUtil::AuthenticateMsgL
+ (
+ const CPushMtmSettings& aMtmSettings,
+ const CPushMessage& aPushMsg
+ )
+ {
+ PUSHLOG_ENTERFN("TPushAuthenticationUtil::AuthenticateMsgL")
+
+ // In case of white listing by default do not accept messages.
+ TBool msgAuthenticated = EFalse;
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( !aPushMsg.GetServerAddress( srvAddress ) )
+ {
+ srvAddress.Set( KNullDesC8 );
+ }
+
+ if ( srvAddress.Length() == 0 )
+ {
+ PUSHLOG_WRITE(" No Server address")
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" Server address: <%S>",&srvAddress)
+
+ CPushInitiator* sender = new (ELeave) CPushInitiator;
+ CleanupStack::PushL( sender );
+
+ // Copy the 8-bit text into a 16-bit one.
+ HBufC* from = HBufC::NewMaxLC( srvAddress.Length() );
+
+ from->Des().Copy( srvAddress );
+ sender->SetAddressL( *from, CPushInitiator::ETypeAny );
+
+ CleanupStack::PopAndDestroy( from ); // from
+
+ CPushInitiatorList& whiteList = aMtmSettings.PushInitiatorList();
+ TInt index( 0 );
+ TInt err = whiteList.Find( *sender, index );
+ if ( !err )
+ {
+ // Sender is in White list.
+ msgAuthenticated = ETrue;
+ PUSHLOG_WRITE(" Is in White List: msg accepted")
+ }
+
+ CleanupStack::PopAndDestroy( sender ); // sender
+ }
+
+ PUSHLOG_WRITE_FORMAT(" msgAuthenticated <%d>",msgAuthenticated)
+ PUSHLOG_LEAVEFN("TPushAuthenticationUtil::AuthenticateMsgL")
+ return msgAuthenticated;
+ }
+
+// ---------------------------------------------------------
+// TPushAuthenticationUtil::AuthenticateMsgL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool TPushAuthenticationUtil::AuthenticateMsgL
+ (
+ const CPushMtmSettings& aMtmSettings,
+ const CPushMsgEntryBase& aPushMsg
+ )
+ {
+ PUSHLOG_ENTERFN("TPushAuthenticationUtil::AuthenticateMsgL 2")
+
+ // In case of white listing by default do not accept messages.
+ TBool msgAuthenticated = EFalse;
+
+ // Get server address.
+ TPtrC8 srvAddress = aPushMsg.From();
+
+ if ( srvAddress.Length() == 0 )
+ {
+ PUSHLOG_WRITE(" Empty server address")
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" Server address: <%S>",&srvAddress)
+
+ CPushInitiator* sender = new (ELeave) CPushInitiator;
+ CleanupStack::PushL( sender );
+
+ // Copy the 8-bit text into a 16-bit one.
+ HBufC* from = HBufC::NewMaxLC( srvAddress.Length() );
+
+ from->Des().Copy( srvAddress );
+ sender->SetAddressL( *from, CPushInitiator::ETypeAny );
+
+ CleanupStack::PopAndDestroy( from ); // from
+
+ CPushInitiatorList& whiteList = aMtmSettings.PushInitiatorList();
+ TInt index( 0 );
+ TInt err = whiteList.Find( *sender, index );
+ if ( !err )
+ {
+ // Sender is in White list.
+ msgAuthenticated = ETrue;
+ PUSHLOG_WRITE(" Is in White List: msg accepted")
+ }
+
+ CleanupStack::PopAndDestroy( sender ); // sender
+ }
+
+ PUSHLOG_WRITE_FORMAT(" msgAuthenticated <%d>",msgAuthenticated)
+ PUSHLOG_LEAVEFN("TPushAuthenticationUtil::AuthenticateMsgL 2")
+ return msgAuthenticated;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushInitiator.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushInitiator.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushInitiator.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushInitiator::CPushInitiator
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiator::CPushInitiator()
+: CBase(),
+ iType( ETypeIpv4 )
+ {}
+
+// ---------------------------------------------------------
+// CPushInitiator::~CPushInitiator
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiator::~CPushInitiator()
+ {
+ delete iAddress;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiator::SetAddressL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushInitiator::SetAddressL( const TDesC& aAddr,
+ TAddrType aType )
+ {
+ HBufC* temp = aAddr.AllocL();
+ delete iAddress;
+ iAddress = temp;
+ iType = aType;
+ }
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushInitiatorList.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,358 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The definition of CPushInitiatorList.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushInitiatorList.h"
+#include "PushMtmLog.h"
+#include "PushMtmUtilPanic.h"
+#include "WhiteListImporter.h"
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushInitiatorList::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiatorList* CPushInitiatorList::NewL()
+ {
+ const TInt KGranularity( 8 );
+ return new (ELeave) CPushInitiatorList( KGranularity );
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::~CPushInitiatorList
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiatorList::~CPushInitiatorList()
+ {
+ ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::AddL
+// ---------------------------------------------------------
+//
+EXPORT_C TUint32 CPushInitiatorList::AddL
+ ( const CPushInitiator& aPushInitiator )
+ {
+ CPushInitiator* temp = aPushInitiator.AllocLC();
+ TUint32 entryId = AddL( temp );
+ CleanupStack::Pop( temp );
+ return entryId;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::AddL
+// ---------------------------------------------------------
+//
+EXPORT_C TUint32 CPushInitiatorList::AddL( CPushInitiator* aPushInitiator )
+ {
+ PUSHLOG_ENTERFN("CPushInitiatorList::AddL")
+
+ __ASSERT_DEBUG( aPushInitiator, UtilPanic( EPushMtmUtilPanNull ) );
+
+ TUint32 entryId( ENullInitiatorEntryId );
+
+ if ( !aPushInitiator )
+ {
+ // Nothing to insert.
+ }
+ else
+ {
+ // Get an ID for the new entry before we insert it to the list if it
+ // has not set yet:
+ entryId = aPushInitiator->EntryID();
+ if ( entryId == ENullInitiatorEntryId )
+ {
+ entryId = FreeId();
+ // Give this new ID to the new entry:
+ aPushInitiator->SetEntryID( entryId );
+ }
+ __ASSERT_DEBUG( entryId != ENullInitiatorEntryId,
+ UtilPanic( EPushMtmUtilPanNull ) );
+ // And append it to the list:
+ AppendL( aPushInitiator );
+ // Set flag that indicates that the list has changed:
+ iPushInitiatorListChanged = ETrue;
+ }
+
+ PUSHLOG_WRITE_FORMAT(" entryId <%d>",entryId)
+ PUSHLOG_LEAVEFN("CPushInitiatorList::AddL")
+ return entryId;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::At
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiator& CPushInitiatorList::At( TInt aIndex ) const
+ {
+ return (CPushInitiator&)
+ (*CArrayPtrFlat<CPushInitiator>::At( aIndex ));
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::Delete
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushInitiatorList::Delete( TInt aIndex )
+ {
+ delete &At( aIndex );
+ CArrayPtrFlat<CPushInitiator>::Delete( aIndex );
+ // Set indicator flag.
+ iPushInitiatorListChanged = ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::Count
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CPushInitiatorList::Count() const
+ {
+ return CArrayPtrFlat<CPushInitiator>::Count();
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::FreeId
+// ---------------------------------------------------------
+//
+TUint32 CPushInitiatorList::FreeId() const
+ {
+ TUint32 largestId( 0 );
+ // Find the largest ID:
+ const TInt count( Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ if ( largestId < At(i).EntryID() )
+ {
+ largestId = At(i).EntryID();
+ }
+ }
+ if ( largestId == KMaxTUint32 )
+ {
+ return 0;
+ }
+
+ return ( largestId + 1 );
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::Changed
+// ---------------------------------------------------------
+//
+TBool CPushInitiatorList::Changed() const
+ {
+ return iPushInitiatorListChanged;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::ResetChanged
+// ---------------------------------------------------------
+//
+void CPushInitiatorList::ResetChanged()
+ {
+ iPushInitiatorListChanged = EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::ResetAndDestroy
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushInitiatorList::ResetAndDestroy()
+ {
+ CArrayPtrFlat<CPushInitiator>::ResetAndDestroy();
+ // Set indicator flag.
+ iPushInitiatorListChanged = ETrue;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::Find
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CPushInitiatorList::Find( const CPushInitiator& aPushInitiator,
+ TInt& aIndex ) const
+ {
+ PUSHLOG_ENTERFN("CPushInitiatorList::Find")
+
+ TInt ret( KErrNotFound );
+
+ PUSHLOG_WRITE_FORMAT2(" Searching for: <%S>, <%d>",
+ &aPushInitiator.Addr(),aPushInitiator.Type())
+
+ const TInt count( Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ PUSHLOG_WRITE_FORMAT2(" Item: <%S>, <%d>",
+ &At( i ).Addr(),At( i ).Type())
+
+ if ( At( i ) == aPushInitiator )
+ {
+ // We have found push initiator which is identical with the one
+ // given in the parameter.
+ PUSHLOG_WRITE(" WL Found!")
+ aIndex = i;
+ ret = KErrNone;
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushInitiatorList::Find")
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::operator==
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CPushInitiatorList::operator==
+ ( const CPushInitiatorList& aList ) const
+ {
+ TBool equal( EFalse );
+ const TInt count = Count();
+
+ if ( count == aList.Count() )
+ {
+ TBool inequalFound( EFalse );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ if ( At(i) != aList.At(i) )
+ {
+ inequalFound = ETrue;
+ break;
+ }
+ }
+ equal = !inequalFound;
+ }
+
+ return equal;
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::operator!=
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CPushInitiatorList::operator!=
+ ( const CPushInitiatorList& aList ) const
+ {
+ return !( *this == aList );
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::ExternalizeL
+// ---------------------------------------------------------
+//
+void CPushInitiatorList::ExternalizeL( CRepository& aRepository ) const
+ {
+ PUSHLOG_ENTERFN("CPushInitiatorList::ExternalizeL");
+
+ HBufC* wlBuf = ParseAndProcessList2BufL();
+ CleanupStack::PushL( wlBuf );
+ User::LeaveIfError( aRepository.Set( KPushMtmWhiteList, *wlBuf ) );
+ CleanupStack::PopAndDestroy( wlBuf ); // wlBuf
+
+ PUSHLOG_LEAVEFN("CPushInitiatorList::ExternalizeL");
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::InternalizeL
+// ---------------------------------------------------------
+//
+void CPushInitiatorList::InternalizeL( CRepository& aRepository )
+ {
+ PUSHLOG_ENTERFN("CPushInitiatorList::InternalizeL");
+
+ HBufC* wlBuf = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength );
+ TPtr nonConstWLBuf = wlBuf->Des();
+ User::LeaveIfError( aRepository.Get( KPushMtmWhiteList, nonConstWLBuf ) );
+ ParseAndProcessBuf2ListL( *wlBuf );
+ CleanupStack::PopAndDestroy( wlBuf ); // wlBuf
+
+ PUSHLOG_LEAVEFN("CPushInitiatorList::InternalizeL");
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::CPushInitiatorList
+// ---------------------------------------------------------
+//
+CPushInitiatorList::CPushInitiatorList( const TInt aGranularity )
+: CArrayPtrFlat<CPushInitiator>( aGranularity ),
+ iPushInitiatorListChanged( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::ParseAndProcessBuf2ListL
+// ---------------------------------------------------------
+//
+void CPushInitiatorList::ParseAndProcessBuf2ListL
+ ( const TDesC& aStreamedBuf )
+ {
+ PUSHLOG_ENTERFN("CPushInitiatorList::ParseAndProcessBuf2ListL");
+ PUSHLOG_WRITE_FORMAT(" param: <%S>",&aStreamedBuf)
+
+ CWhiteListConverter* converter = CWhiteListConverter::NewL( *this );
+ CleanupStack::PushL( converter );
+
+ TRAPD( err, converter->Buffer2ListL( aStreamedBuf ) );
+ PUSHLOG_WRITE_FORMAT(" <%d>",err);
+ if ( err == KErrOverflow || err == KErrCorrupt )
+ {
+ // The input is corrupted. Leave the White List as is and
+ // do not forward these LEAVE values, because it would
+ // terminate the RFS of Push.
+ }
+ else
+ {
+ // Other error. Must be forwarded.
+ User::LeaveIfError( err );
+ }
+
+ CleanupStack::PopAndDestroy( converter ); // converter
+
+ PUSHLOG_LEAVEFN("CPushInitiatorList::ParseAndProcessBuf2ListL");
+ }
+
+// ---------------------------------------------------------
+// CPushInitiatorList::ParseAndProcessList2BufL
+// ---------------------------------------------------------
+//
+HBufC* CPushInitiatorList::ParseAndProcessList2BufL() const
+ {
+ PUSHLOG_ENTERFN("CPushInitiatorList::ParseAndProcessList2BufL");
+
+ CPushInitiatorList& nonConstPiList = (CPushInitiatorList&)*this;
+ CWhiteListConverter* converter = CWhiteListConverter::NewL( nonConstPiList );
+ CleanupStack::PushL( converter );
+
+ HBufC* retBuf(0);
+ TRAPD( err, retBuf = converter->List2BufferL() );
+ PUSHLOG_WRITE_FORMAT(" <%d>",err);
+ User::LeaveIfError( err );
+
+ CleanupStack::PopAndDestroy( converter ); // converter
+
+ PUSHLOG_WRITE_FORMAT(" ret: <%S>",retBuf)
+ PUSHLOG_LEAVEFN("CPushInitiatorList::ParseAndProcessList2BufL");
+ return retBuf;
+ }
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushMtmOperation.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmOperation.h"
+#include <msvids.h>
+#include <PushEntry.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmOperation::~CPushMtmOperation
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmOperation::~CPushMtmOperation()
+ {
+ Cancel();
+ delete iCEntry;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::StartL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::StartL()
+ {
+ // Enable restart.
+ Cancel();
+ SetActive();
+ InvokeRun();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::ProgressL
+// ---------------------------------------------------------
+//
+EXPORT_C const TDesC8& CPushMtmOperation::ProgressL()
+ {
+ return iProgressPckg;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::CPushMtmOperation
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmOperation::CPushMtmOperation( CMsvSession& aSession,
+ TMsvId aId,
+ TRequestStatus& aObserverRequestStatus )
+: CMsvOperation( aSession, EPriorityStandard, aObserverRequestStatus ),
+ iEntryId( aId ),
+ iProgressPckg( iProgress )
+ {
+ iProgress.Reset();
+ // The Push MTM has no services.
+ iService = KMsvLocalServiceIndexEntryId;
+ // The operation belongs to the Push MTM.
+ iMtm = KUidMtmWapPush;
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::InvokeRun
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::InvokeRun()
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::SignalObserver
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::SignalObserver( TInt aCompletionCode )
+ {
+ TRequestStatus* status = &iObserverRequestStatus;
+ User::RequestComplete( status, aCompletionCode );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::ObserveEntryEventL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::ObserveEntryEventL()
+ {
+ if ( iCEntry == NULL )
+ {
+ iCEntry = iMsvSession.GetEntryL( iEntryId );
+ }
+ iCEntry->AddObserverL( *this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::CancelObserveEntryEvent
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::CancelObserveEntryEvent()
+ {
+ if ( iCEntry )
+ {
+ iCEntry->RemoveObserver( *this );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::RunL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::RunL()
+ {
+ SignalObserver( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::DoCancel
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::DoCancel()
+ {
+ CancelObserveEntryEvent();
+ SignalObserver( KErrCancel );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::RunError
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CPushMtmOperation::RunError( TInt aError )
+ {
+ CancelObserveEntryEvent();
+ if ( aError )
+ {
+ // Signal the observer that a leave has occured.
+ SignalObserver( aError );
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmOperation::HandleEntryEventL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmOperation::HandleEntryEventL( TMsvEntryEvent /*aEvent*/,
+ TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/ )
+ {
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushMtmSettings.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CPushMtmSettings class definition.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmSettings.h"
+#include "PushInitiatorList.h"
+#include "PushMtmUtilPanic.h"
+#include "PushMtmLog.h"
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+#include <PushEntry.h>
+#include <SysUtil.h>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmSettings::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings* CPushMtmSettings::NewL()
+ {
+ CPushMtmSettings* self = CPushMtmSettings::NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::NewLC
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings* CPushMtmSettings::NewLC()
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::NewLC")
+
+ CPushMtmSettings* self = new (ELeave) CPushMtmSettings();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ PUSHLOG_LEAVEFN("CPushMtmSettings::NewLC")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::~CPushMtmSettings
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings::~CPushMtmSettings()
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::~CPushMtmSettings")
+ delete iPushInitiatorList;
+ if ( iFeatureManagerInitialized )
+ {
+ FeatureManager::UnInitializeLib();
+ iFeatureManagerInitialized = EFalse;
+ }
+ PUSHLOG_LEAVEFN("CPushMtmSettings::~CPushMtmSettings")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::SetServiceReception
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::SetServiceReception( TBool aReceive )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmSettings::SetServiceReception <%d>",aReceive?1:0)
+ if ( iServiceReception != aReceive )
+ {
+ iServiceReception = aReceive;
+ iServiceReceptionChanged = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::SetServiceLoadingType
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::SetServiceLoadingType( TServiceLoading aType )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmSettings::SetServiceLoadingType <%d>",(TInt)aType)
+ if ( iServiceLoadingType != aType )
+ {
+ iServiceLoadingType = aType;
+ iServiceLoadingTypeChanged = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ServiceReception
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CPushMtmSettings::ServiceReception() const
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmSettings::ServiceReception <%d>",(TInt)iServiceReception)
+ return iServiceReception;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ServiceLoadingType
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmSettings::TServiceLoading
+ CPushMtmSettings::ServiceLoadingType() const
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmSettings::ServiceLoadingType <%d>",(TInt)iServiceLoadingType)
+ return iServiceLoadingType;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::PushInitiatorList
+// ---------------------------------------------------------
+//
+EXPORT_C CPushInitiatorList& CPushMtmSettings::PushInitiatorList() const
+ {
+ __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+ return *iPushInitiatorList;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::LoadL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::LoadL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::LoadL")
+
+ Reset(); // Remove outdated data.
+
+ // Open the Repository for reading:
+ CRepository* repository = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( repository );
+
+ InternalizeL( *repository );
+
+ CleanupStack::PopAndDestroy( repository ); // repository
+
+ // ******************** Reset indicators ***********************
+ iServiceReceptionChanged = EFalse;
+ iServiceLoadingTypeChanged = EFalse;
+ __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+ iPushInitiatorList->ResetChanged();
+
+ PUSHLOG_LEAVEFN("CPushMtmSettings::LoadL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::SaveL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::SaveL( const TBool aForce )
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::SaveL")
+ PUSHLOG_WRITE_FORMAT(" aForce <%d>",aForce?1:0)
+ PUSHLOG_WRITE_FORMAT(" SR changed <%d>",iServiceReceptionChanged?1:0)
+ PUSHLOG_WRITE_FORMAT(" SL changed <%d>",iServiceLoadingTypeChanged?1:0)
+ __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+ PUSHLOG_WRITE_FORMAT(" WL changed <%d>",iPushInitiatorList->Changed()?1:0)
+
+ if ( aForce || ( iServiceReceptionChanged ||
+ iServiceLoadingTypeChanged ||
+ iPushInitiatorList->Changed() ) )
+ {
+ // Save the settings to Repository.
+ CRepository* repository = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( repository );
+
+ ExternalizeL( *repository );
+
+ CleanupStack::PopAndDestroy( repository ); // repository
+
+ // ***************** Reset indicators ***********************
+ iServiceReceptionChanged = EFalse;
+ iServiceLoadingTypeChanged = EFalse;
+ __ASSERT_DEBUG( iPushInitiatorList,
+ UtilPanic( EPushMtmUtilPanNull ) );
+ iPushInitiatorList->ResetChanged();
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmSettings::SaveL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::RestoreFactorySettingsL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmSettings::RestoreFactorySettingsL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::RestoreFactorySettingsL")
+
+ // The factory settings are stored in the shared data.
+ CRepository* repository = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( repository );
+ User::LeaveIfError( repository->Reset() );
+ PUSHLOG_WRITE(" repository->Reset OK")
+ CleanupStack::PopAndDestroy( repository ); // repository
+
+ // Load up-to-date values.
+ LoadL();
+
+ PUSHLOG_LEAVEFN("CPushMtmSettings::RestoreFactorySettingsL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::ConstructL()
+ {
+ // Create an empty push initiator list.
+ iPushInitiatorList = CPushInitiatorList::NewL();
+ FeatureManager::InitializeLibL();
+ iFeatureManagerInitialized = ETrue;
+ // Initialize:
+ LoadL();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::CPushMtmSettings
+// ---------------------------------------------------------
+//
+CPushMtmSettings::CPushMtmSettings()
+: CBase(),
+ iServiceReception( ETrue ),
+ iServiceLoadingType( EManual ),
+ iServiceReceptionChanged ( EFalse ),
+ iServiceLoadingTypeChanged ( EFalse ),
+ iFeatureManagerInitialized( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::Reset
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::Reset()
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::Reset")
+ __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+ iPushInitiatorList->ResetAndDestroy();
+ PUSHLOG_LEAVEFN("CPushMtmSettings::Reset")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::ExternalizeL
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::ExternalizeL( CRepository& aRepository ) const
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::ExternalizeL")
+
+ __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+
+ TInt value;
+ PUSHLOG_WRITE_FORMAT
+ (" iServiceReception <%d>",(TInt)iServiceReception)
+ value = iServiceReception ? 1 : 0;
+ User::LeaveIfError( aRepository.Set( KPushMtmServiceReception, value ) );
+ PUSHLOG_WRITE(" SR written")
+
+ PUSHLOG_WRITE_FORMAT
+ (" iServiceLoadingType <%d>",(TInt)iServiceLoadingType)
+ value = ( iServiceLoadingType == CPushMtmSettings::EManual ) ? 1 : 0;
+ User::LeaveIfError( aRepository.Set( KPushMtmServiceLoading, value ) );
+ PUSHLOG_WRITE(" SL written")
+
+ iPushInitiatorList->ExternalizeL( aRepository );
+
+ PUSHLOG_LEAVEFN("CPushMtmSettings::ExternalizeL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmSettings::InternalizeL
+// ---------------------------------------------------------
+//
+void CPushMtmSettings::InternalizeL( CRepository& aRepository )
+ {
+ PUSHLOG_ENTERFN("CPushMtmSettings::InternalizeL")
+
+ __ASSERT_DEBUG( iPushInitiatorList, UtilPanic( EPushMtmUtilPanNull ) );
+
+ TInt value(0);
+ User::LeaveIfError( aRepository.Get( KPushMtmServiceReception, value ) );
+ PUSHLOG_WRITE_FORMAT(" KPushMtmServiceReception <%d>",(TInt)value)
+ iServiceReception = ( value == 1 ) ? ETrue : EFalse;
+ PUSHLOG_WRITE(" SR loaded")
+
+ User::LeaveIfError( aRepository.Get( KPushMtmServiceLoading, value ) );
+ PUSHLOG_WRITE_FORMAT(" KPushMtmServiceLoading <%d>",(TInt)value)
+ iServiceLoadingType = ( value == 1 ) ? CPushMtmSettings::EManual :
+ CPushMtmSettings::EAutomatic;
+ PUSHLOG_WRITE(" SL loaded")
+
+ iPushInitiatorList->InternalizeL( aRepository );
+
+ PUSHLOG_LEAVEFN("CPushMtmSettings::InternalizeL")
+ }
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushMtmUtil.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,461 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CPushMtmUtil class definition.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmUtil.h"
+#include "PushMtmUtilPanic.h"
+#include "PushMtmLog.h"
+#include <push/CSIPushMsgEntry.h>
+#include <push/CSLPushMsgEntry.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <msvapi.h>
+#include <Uri16.h>
+#include <UriUtils.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmUtil::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmUtil* CPushMtmUtil::NewL( CMsvSession& aMsvSession )
+ {
+ CPushMtmUtil* self = new (ELeave) CPushMtmUtil( aMsvSession );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::~CPushMtmUtil
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmUtil::~CPushMtmUtil()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::MarkServiceUnreadL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmUtil::MarkServiceUnreadL( TMsvId aEntryId,
+ TBool aUnread )
+ {
+ PUSHLOG_ENTERFN("CPushMtmUtil::MarkServiceUnreadL")
+
+ CMsvEntry* cEntry = iMsvSession.GetEntryL( aEntryId );
+ CleanupStack::PushL( cEntry );
+
+ TMsvEntry tEntry( cEntry->Entry() );
+ // Change the context only if necessary.
+ if ( tEntry.New() != aUnread || tEntry.Unread() != aUnread )
+ {
+ tEntry.SetNew( aUnread );
+ tEntry.SetUnread( aUnread );
+ cEntry->ChangeL( tEntry );
+ }
+
+ CleanupStack::PopAndDestroy( cEntry ); // cEntry
+
+ PUSHLOG_LEAVEFN("CPushMtmUtil::MarkServiceUnreadL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindMessagesL
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvEntrySelection* CPushMtmUtil::FindMessagesL
+ ( TMsvId aFolderId,
+ TUid aMsgType,
+ TBool aRecursive )
+ {
+ CMsvEntrySelection* sel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( sel );
+
+ FindMessagesL( aFolderId, aMsgType, aRecursive, *sel );
+
+ CleanupStack::Pop(); // sel
+ return sel;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindMessagesL
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvEntrySelection* CPushMtmUtil::FindMessagesL
+( const CMsvEntrySelection& aFolders, TUid aMsgType )
+ {
+ CMsvEntrySelection* sel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( sel );
+
+ const TInt count( aFolders.Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ FindMessagesL( aFolders[i], aMsgType, EFalse, *sel );
+ }
+
+ CleanupStack::Pop(); // sel
+ return sel;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindMessagesL
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvEntrySelection* CPushMtmUtil::FindMessagesL( TUid aMsgType )
+ {
+ CMsvEntrySelection* pushFolders = FindPushFoldersL();
+ CleanupStack::PushL( pushFolders );
+
+ CMsvEntrySelection* msgs = FindMessagesL( *pushFolders, aMsgType );
+
+ CleanupStack::PopAndDestroy( pushFolders ); // pushFolders
+ return msgs;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindPushFoldersL
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvEntrySelection* CPushMtmUtil::FindPushFoldersL()
+ {
+ // Only the Inbox, the Documents folder and the user
+ // defined folders can contain push messages.
+ // The user defined folders can only be in the Documents folder.
+ // (See the definition of CMsgFolderSelectionListArray::ConstructL
+ // in msgavkon for more details.)
+ CMsvEntrySelection* pushFolders = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( pushFolders );
+
+ // Check if Inbox folder exists.
+ TMsvEntry dummyFolder;
+ TMsvId dummyService;
+ TInt err( iMsvSession.GetEntry
+ ( KMsvGlobalInBoxIndexEntryId, dummyService, dummyFolder) );
+
+ if ( !err )
+ {
+ pushFolders->AppendL( KMsvGlobalInBoxIndexEntryId );
+ }
+
+ // Check if Documents folder exists.
+ const TMsvId KDocumentsIndexEntryId( 0x1008 );
+ err = iMsvSession.GetEntry
+ ( KDocumentsIndexEntryId, dummyService, dummyFolder);
+
+ if ( !err )
+ {
+ pushFolders->AppendL( KDocumentsIndexEntryId );
+ // Get the user defined folders in Documents.
+ const TMsvSelectionOrdering selOrd
+ ( KMsvGroupByType, EMsvSortByDescription, ETrue );
+ CMsvEntry* documentsFolder = CMsvEntry::NewL
+ ( iMsvSession, KDocumentsIndexEntryId, selOrd );
+ CleanupStack::PushL( documentsFolder );
+
+ CMsvEntrySelection* userDefFolders =
+ documentsFolder->ChildrenWithTypeL( KUidMsvFolderEntry );
+ CleanupStack::PopAndDestroy(); // documentsFolder
+ CleanupStack::PushL( userDefFolders );
+
+ const TMsvId KTemplatesIndexEntryId( 0x1009 );
+ const TInt count( userDefFolders->Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ // However Templates folder is in Documents, no messages
+ // can be moved there - it cannot contain push messages.
+ if ( userDefFolders->At( i ) != KTemplatesIndexEntryId )
+ {
+ pushFolders->AppendL( userDefFolders->At( i ) );
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // userDefFolders
+ }
+
+ CleanupStack::Pop(); // pushFolders
+ return pushFolders;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindSiIdLC
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvEntrySelection* CPushMtmUtil::FindSiIdLC( const TDesC& aSiId )
+ {
+ CMsvEntrySelection* matching = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( matching );
+
+ CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( siEntry );
+
+ CMsvEntrySelection* allSi = FindMessagesL( KUidWapPushMsgSI );
+ CleanupStack::PushL( allSi );
+
+ // loop until we find a match or reach the end of the SI entries
+ const TInt numEntries( allSi->Count() );
+ for (TInt count = 0; count < numEntries; ++count )
+ {
+ siEntry->RetrieveL( iMsvSession, allSi->At( count ) );
+ if ( aSiId.CompareF( siEntry->Id() ) == 0 ) // Found a match
+ {
+ matching->AppendL( allSi->At( count ) );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // allSi, siEntry
+
+ return matching; //Still on CleanupStack
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindUrlLC
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvEntrySelection* CPushMtmUtil::FindUrlLC( const TDesC& aUrl,
+ TUid aPushType )
+ {
+ __ASSERT_ALWAYS( aPushType == KUidWapPushMsgSI ||
+ aPushType == KUidWapPushMsgSL,
+ UtilPanic( EPushMtmUtilPanBadBioType ) );
+
+ CMsvEntrySelection* matching = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( matching );
+
+ CMsvEntrySelection* all = FindMessagesL( aPushType );
+ CleanupStack::PushL( all );
+
+ // loop until we find a match or reach the end of the SI entries
+ const TInt numEntries( all->Count() );
+
+ if ( aPushType == KUidWapPushMsgSI )
+ {
+ CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( siEntry );
+
+ for (TInt count = 0; count < numEntries; ++count )
+ {
+ siEntry->RetrieveL( iMsvSession, all->At( count ) );
+ if ( aUrl.CompareF( siEntry->Url() ) == 0 ) // Found a match
+ {
+ matching->AppendL( all->At( count ) );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( siEntry ); // siEntry
+ }
+ else // aPushType == KUidWapPushMsgSL
+ {
+ CSLPushMsgEntry* slEntry = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( slEntry );
+
+ for (TInt count = 0; count < numEntries; ++count )
+ {
+ slEntry->RetrieveL( iMsvSession, all->At( count ) );
+ if ( aUrl.CompareF( slEntry->Url() ) == 0 ) // Found a match
+ {
+ matching->AppendL( all->At( count ) );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( slEntry ); // slEntry
+ }
+
+ CleanupStack::PopAndDestroy( all ); // all
+
+ return matching; //Still on CleanupStack
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::DeleteEntryL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmUtil::DeleteEntryL( TMsvId aId )
+ {
+ CMsvEntry* cEntry = iMsvSession.GetEntryL( aId );
+ CleanupStack::PushL( cEntry );
+ // Set as parent.
+ cEntry->SetEntryL( cEntry->Entry().Parent() );
+ // Delete the child.
+ cEntry->DeleteL( aId );
+ CleanupStack::PopAndDestroy( cEntry ); // cEntry
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::ConvertDetailsL
+// ---------------------------------------------------------
+//
+EXPORT_C HBufC* CPushMtmUtil::ConvertDetailsL( const TDesC8& aFrom ) const
+ {
+ HBufC* from = HBufC::NewMaxLC( aFrom.Length() );
+ from->Des().Copy( aFrom );
+
+ TUriParser pars;
+ User::LeaveIfError( pars.Parse( *from ) );
+
+ HBufC* res = NULL;
+ if ( pars.IsPresent( EUriHost ) )
+ {
+ res = pars.Extract( EUriHost ).AllocL();
+ }
+ else
+ {
+ res = from->AllocL();
+ }
+
+ CleanupStack::PopAndDestroy( from ); // from
+ return res;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::SetAttrs
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmUtil::SetAttrs( TMsvEntry& aContext, TUint32 aAttrs )
+ {
+ aContext.iMtmData2 = aContext.iMtmData2 |
+ (aAttrs<<KPushMtmShiftOnlyAttrs);
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::ResetAttrs
+// ---------------------------------------------------------
+//
+EXPORT_C void CPushMtmUtil::ResetAttrs( TMsvEntry& aContext, TUint32 aAttrs )
+ {
+ aContext.iMtmData2 = aContext.iMtmData2 &
+ ~(aAttrs<<KPushMtmShiftOnlyAttrs);
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::Attrs
+// ---------------------------------------------------------
+//
+EXPORT_C TUint32 CPushMtmUtil::Attrs( const TMsvEntry& aContext )
+ {
+ return (aContext.iMtmData2 >> KPushMtmShiftOnlyAttrs) &
+ KPushMtmMaskOnlyAttrs;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::ConvertUriToDisplayFormL
+// ---------------------------------------------------------
+//
+EXPORT_C HBufC* CPushMtmUtil::ConvertUriToDisplayFormL( const TDesC& aUri )
+ {
+ HBufC8* uri8 = HBufC8::NewMaxLC( aUri.Length() );
+ uri8->Des().Copy( aUri );
+ TUriParser8 uriParser8;
+ User::LeaveIfError( uriParser8.Parse( *uri8 ) );
+ CUri* convertedCUri = UriUtils::ConvertToDisplayFormL( uriParser8 );
+ CleanupStack::PopAndDestroy( uri8 );
+ CleanupStack::PushL( convertedCUri );
+ HBufC* convertedUri = convertedCUri->Uri().UriDes().AllocL();
+ CleanupStack::PopAndDestroy( convertedCUri );
+ return convertedUri;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::CPushMtmUtil
+// ---------------------------------------------------------
+//
+CPushMtmUtil::CPushMtmUtil( CMsvSession& aMsvSession )
+: iMsvSession( aMsvSession )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmUtil::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUtil::FindMessagesL
+// ---------------------------------------------------------
+//
+void CPushMtmUtil::FindMessagesL( TMsvId aFolderId,
+ TUid aMsgType,
+ TBool aRecursive,
+ CMsvEntrySelection& aResult )
+ {
+ // Find the push entries of the specified type in the specified folder.
+ CMsvEntry* thisFolder = iMsvSession.GetEntryL( aFolderId );
+ CleanupStack::PushL( thisFolder );
+
+ TMsvSelectionOrdering selOrd( thisFolder->SortType() );
+ selOrd.SetShowInvisibleEntries( EFalse );
+ thisFolder->SetSortTypeL( selOrd );
+ CMsvEntrySelection* msgSel = thisFolder->ChildrenWithMtmL( KUidMtmWapPush );
+ CleanupStack::PushL( msgSel );
+
+ // The selection may contain any kind of push message.
+ // Select only those that have the specified type.
+ TMsvEntry tEntry;
+ TMsvId service;
+ TInt err;
+ const TInt msgCnt( msgSel->Count() );
+ for ( TInt i = 0; i < msgCnt; ++i )
+ {
+ err = iMsvSession.GetEntry( msgSel->At(i), service, tEntry );
+ if ( err == KErrNotFound )
+ {
+ // Do nothing, just continue.
+ }
+ else if ( !err )
+ {
+ if ( tEntry.iBioType == aMsgType.iUid )
+ {
+ // We have found an entry of the requested type.
+ aResult.AppendL( msgSel->At(i) );
+ }
+ }
+ else
+ {
+ User::Leave( err );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( msgSel ); // msgSel
+
+ // Find messages in the subfolders if required.
+ if ( aRecursive )
+ {
+ CMsvEntrySelection* subFolders =
+ thisFolder->ChildrenWithTypeL( KUidMsvFolderEntry );
+ CleanupStack::PushL( subFolders );
+
+ const TInt count( subFolders->Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ FindMessagesL( subFolders->At(i), aMsgType, aRecursive, aResult );
+ }
+
+ CleanupStack::PopAndDestroy( subFolders ); // subFolders
+ }
+
+ CleanupStack::PopAndDestroy( thisFolder ); // thisFolder
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/PushMtmUtilPanic.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmUtilPanic.h"
+
+
+_LIT( KUtilPanicString, "PushMtmUtil" );
+
+GLDEF_C void UtilPanic( TPushMtmUtilPanic aReason )
+ {
+ User::Panic( KUtilPanicString, aReason );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/WhiteListImporterDummy.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Dummy implementation of CWhiteListConverter.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "WhiteListImporter.h"
+#include "PushMtmLog.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CWhiteListConverter::NewL
+// ---------------------------------------------------------
+//
+CWhiteListConverter* CWhiteListConverter::NewL
+ ( CPushInitiatorList& aPushInitiatorList )
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::NewL Dummy");
+ CWhiteListConverter* converter =
+ new (ELeave) CWhiteListConverter( aPushInitiatorList );
+ return converter;
+ PUSHLOG_LEAVEFN("CWhiteListConverter::NewL Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::~CWhiteListConverter
+// ---------------------------------------------------------
+//
+CWhiteListConverter::~CWhiteListConverter()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::~CWhiteListConverter Dummy");
+ delete iBuf;
+ iNextCh = NULL; // Only used.
+ iMaxCh = NULL; // Only used.
+ PUSHLOG_LEAVEFN("CWhiteListConverter::~CWhiteListConverter Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::Buffer2ListL
+// ---------------------------------------------------------
+//
+void CWhiteListConverter::Buffer2ListL( const TDesC& /*aSource*/ )
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::Buffer2ListL Dummy");
+ PUSHLOG_LEAVEFN("CWhiteListConverter::Buffer2ListL Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::List2BufferL
+// ---------------------------------------------------------
+//
+HBufC* CWhiteListConverter::List2BufferL()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::Buffer2ListL Dummy");
+ PUSHLOG_WRITE("Returning KNullDesC");
+ return KNullDesC().AllocL();
+ PUSHLOG_LEAVEFN("CWhiteListConverter::Buffer2ListL Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::CWhiteListConverter
+// ---------------------------------------------------------
+//
+CWhiteListConverter::CWhiteListConverter( CPushInitiatorList& aPushInitiatorList )
+: iPushInitiatorList( aPushInitiatorList )
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::CWhiteListConverter Dummy");
+ PUSHLOG_LEAVEFN("CWhiteListConverter::CWhiteListConverter Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::ConstructL
+// ---------------------------------------------------------
+//
+void CWhiteListConverter::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::ConstructL Dummy");
+ PUSHLOG_LEAVEFN("CWhiteListConverter::ConstructL Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::GetChar
+// ---------------------------------------------------------
+//
+inline void CWhiteListConverter::GetChar()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::GetChar Dummy");
+ PUSHLOG_LEAVEFN("CWhiteListConverter::GetChar Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::NextLineL
+// ---------------------------------------------------------
+//
+TBool CWhiteListConverter::NextLineL()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::NextLineL Dummy");
+ PUSHLOG_WRITE("Returning ETrue");
+ return ETrue;
+ PUSHLOG_LEAVEFN("CWhiteListConverter::NextLineL Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::NextTokenL
+// ---------------------------------------------------------
+//
+TPtrC CWhiteListConverter::NextTokenL( TUint /*aStopChar*/ )
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::NextTokenL Dummy");
+ PUSHLOG_WRITE("Returning TPtrC");
+ return TPtrC();
+ PUSHLOG_LEAVEFN("CWhiteListConverter::NextTokenL Dummy");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::AttrsL
+// ---------------------------------------------------------
+//
+void CWhiteListConverter::AttrsL()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::AttrsL Dummy");
+ PUSHLOG_LEAVEFN("CWhiteListConverter::AttrsL Dummy");
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUtilSrc/WhiteListImporterWL.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,367 @@
+/*
+* Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CWhiteListConverter.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "WhiteListImporter.h"
+#include "PushMtmSettings.h"
+#include "PushInitiatorList.h"
+#include "PushInitiator.h"
+#include "PushMtmLog.h"
+#include <e32std.h>
+
+// CONSTANTS
+
+/// Max length allowed.
+LOCAL_C const TInt KMaxLength = 2048;
+
+/*
+* Special characters.
+*/
+/// ',' character.
+LOCAL_C const TUint KComma = ',';
+/// ';' character.
+LOCAL_C const TUint KSemicolon = ';';
+/// Escape '\' character.
+LOCAL_C const TUint KEscape = '\\';
+
+/*
+* Characters considered as EOS.
+*/
+/// '\r' character.
+LOCAL_C const TUint KCr = '\r';
+/// '\n' character.
+LOCAL_C const TUint KLf = '\n';
+
+/*
+* Separator characters.
+*/
+/// End-Of-String (0) character. It is a separator.
+LOCAL_C const TUint KEos = 0;
+/// Record separator (30) character.
+LOCAL_C const TUint KRecordSeparator = 30;
+/// Unit separator (31) character.
+LOCAL_C const TUint KUnitSeparator = 31;
+
+/*
+* Keywords.
+*/
+/// "Ipv4" keyword.
+_LIT( KIpv4, "Ipv4" );
+/// "Ipv6" keyword.
+_LIT( KIpv6, "Ipv6" );
+/// "E164" keyword.
+_LIT( KE164, "E164" );
+/// "Alpha" keyword.
+_LIT( KAlpha, "Alpha" );
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CWhiteListConverter::NewL
+// ---------------------------------------------------------
+//
+CWhiteListConverter* CWhiteListConverter::NewL( CPushInitiatorList& aPushInitiatorList )
+ {
+ CWhiteListConverter* converter =
+ new (ELeave) CWhiteListConverter( aPushInitiatorList );
+ CleanupStack::PushL( converter );
+ converter->ConstructL();
+ CleanupStack::Pop( converter ); // converter
+ return converter;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::~CWhiteListConverter
+// ---------------------------------------------------------
+//
+CWhiteListConverter::~CWhiteListConverter()
+ {
+ delete iConverterBuf;
+ delete iBuf;
+ iNextCh = NULL; // Only used.
+ iMaxCh = NULL; // Only used.
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::Buffer2ListL
+// ---------------------------------------------------------
+//
+void CWhiteListConverter::Buffer2ListL( const TDesC& aSource )
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::Buffer2ListL");
+
+ iSource.Assign( aSource );
+ iCurCh = KRecordSeparator; // Cannot be 0, because of GetChar()
+ GetChar();
+ while( NextLineL() )
+ {
+ };
+
+ PUSHLOG_LEAVEFN("CWhiteListConverter::Buffer2ListL");
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::List2BufferL
+// ---------------------------------------------------------
+//
+HBufC* CWhiteListConverter::List2BufferL()
+ {
+ PUSHLOG_ENTERFN("CWhiteListConverter::List2BufferL");
+
+ HBufC* newConverterBuf = KNullDesC().AllocL(); // initial zero length buffer
+ delete iConverterBuf;
+ iConverterBuf = newConverterBuf;
+ TPtr writableConvBuf = iConverterBuf->Des();
+ writableConvBuf.SetLength(0);
+ TInt itemsToExport = iPushInitiatorList.Count();
+ // temp buffers
+ TBuf<16> type;
+ TBuf<16> entryId;
+
+ for ( TInt i=0; i < itemsToExport; ++i )
+ {
+ CPushInitiator& curr = iPushInitiatorList.At(i);
+ switch ( curr.Type() )
+ {
+ case CPushInitiator::ETypeIpv4: type=KIpv4; break;
+ case CPushInitiator::ETypeIpv6: type=KIpv6; break;
+ case CPushInitiator::ETypeE164: type=KE164; break;
+ case CPushInitiator::ETypeAlpha: type=KAlpha; break;
+ default: type=KE164; break;
+ }
+ entryId.Format( _L("%d"), curr.EntryID() );
+
+ // check available space
+ // 3 is required for 2 commas and 1 semicolon.
+ TInt newItemLength = curr.Addr().Length()+type.Length()+entryId.Length()+3;
+ if ( writableConvBuf.MaxLength() < writableConvBuf.Length() + newItemLength )
+ {
+ // reallocate a greater buffer
+ TInt currentMaxLength = writableConvBuf.MaxLength();
+ iConverterBuf = iConverterBuf->ReAllocL( currentMaxLength + newItemLength );
+ writableConvBuf.Set( iConverterBuf->Des() ); // re-initialize
+ }
+
+ writableConvBuf.Append( curr.Addr() );
+ writableConvBuf.Append( TChar(KComma) );
+ writableConvBuf.Append( type );
+ writableConvBuf.Append( TChar(KComma) );
+ writableConvBuf.Append( entryId );
+ if ( i+1 < itemsToExport )
+ {
+ // there are still items to add
+ writableConvBuf.Append( TChar(KSemicolon) );
+ }
+ }
+
+ HBufC* ret = iConverterBuf; // ownersip is transferred to the caller.
+ iConverterBuf = 0;
+
+ PUSHLOG_LEAVEFN("CWhiteListConverter::List2BufferL");
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::CWhiteListConverter
+// ---------------------------------------------------------
+//
+CWhiteListConverter::CWhiteListConverter( CPushInitiatorList& aPushInitiatorList )
+: iPushInitiatorList( aPushInitiatorList )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::ConstructL
+// ---------------------------------------------------------
+//
+void CWhiteListConverter::ConstructL()
+ {
+ iBuf = new (ELeave) TText[KMaxLength];
+ iMaxCh = iBuf + KMaxLength;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::GetChar
+// ---------------------------------------------------------
+//
+inline void CWhiteListConverter::GetChar()
+ {
+ // Do not continue if we already reached EOS:
+ if ( iCurCh == KEos )
+ {
+ return;
+ }
+
+ iCurCh = iSource.Get();
+
+ if ( iCurCh == KCr || iCurCh == KLf )
+ {
+ // They are considered as EOS.
+ iCurCh = KEos;
+ }
+ else if ( iCurCh == KEscape )
+ {
+ // Drop the Escape character and get the next as is.
+ iCurCh = iSource.Get();
+ }
+ else if ( iCurCh == KComma )
+ {
+ // It is a Unit Separator.
+ iCurCh = KUnitSeparator;
+ }
+ else if ( iCurCh == KSemicolon )
+ {
+ // It is a Record Separator.
+ iCurCh = KRecordSeparator;
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::NextLineL
+// ---------------------------------------------------------
+//
+TBool CWhiteListConverter::NextLineL()
+ {
+ switch( iCurCh )
+ {
+ case KEos:
+ // EOS
+ return EFalse;
+
+ default:
+ // Parse White List attributes and process them.
+ AttrsL();
+ break;
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::NextTokenL
+// ---------------------------------------------------------
+//
+TPtrC CWhiteListConverter::NextTokenL( TUint aStopChar )
+ {
+ iNextCh = iBuf; // Start storing token at start of buffer.
+ while ( iNextCh < iMaxCh )
+ {
+ if ( iCurCh == aStopChar || iCurCh == KEos )
+ {
+ // Stop character found - return what we have stored so far.
+ // This may be an empty string as well.
+ return TPtrC( iBuf, iNextCh - iBuf );
+ }
+ else
+ {
+ *iNextCh = STATIC_CAST( TText16, iCurCh );
+ iNextCh++;
+ GetChar();
+ }
+ }
+ // No more space in buffer to store token.
+ User::Leave( KErrOverflow );
+ /*NOTREACHED*/
+ return TPtrC();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListConverter::AttrsL
+// ---------------------------------------------------------
+//
+void CWhiteListConverter::AttrsL()
+ {
+ CPushInitiator* newInitiator = new (ELeave) CPushInitiator;
+ CleanupStack::PushL( newInitiator );
+
+ TPtrC token;
+
+ // Address.
+ token.Set( NextTokenL( KUnitSeparator ) );
+ HBufC* address = token.AllocLC(); // Copy the token to a separate area.
+ GetChar();
+
+ // Address type and/or entry ID.
+ token.Set( NextTokenL( KRecordSeparator ) );
+ HBufC* addressTypeBuf = 0;
+ HBufC* entryIdBuf = 0;
+ // check if it contains an entry ID separated with a comma (KUnitSeparator)
+ TInt offset = token.Locate( TChar(KUnitSeparator) );
+ if ( offset == KErrNotFound )
+ {
+ // the whole token is address type
+ addressTypeBuf = token.AllocLC(); // Copy the token to a separate area.
+ entryIdBuf = 0;
+ }
+ else
+ {
+ addressTypeBuf = token.Mid(0,offset).AllocLC();
+ TInt tokenLength = token.Length();
+ entryIdBuf = token.Mid((offset+1),tokenLength-(offset+1)).AllocLC();
+ }
+
+ // Convert the address type string to enum.
+ // addressTypeBuf must not be NULL.
+ CPushInitiator::TAddrType addrType = CPushInitiator::ETypeE164;
+ if ( !(*addressTypeBuf).Compare( KIpv4 ) )
+ {
+ addrType = CPushInitiator::ETypeIpv4;
+ }
+ else if ( !(*addressTypeBuf).Compare( KIpv6 ) )
+ {
+ addrType = CPushInitiator::ETypeIpv6;
+ }
+ else if ( !(*addressTypeBuf).Compare( KE164 ) )
+ {
+ addrType = CPushInitiator::ETypeE164;
+ }
+ else if ( !(*addressTypeBuf).Compare( KAlpha ) )
+ {
+ addrType = CPushInitiator::ETypeAlpha;
+ }
+ else
+ {
+ User::Leave( KErrCorrupt );
+ }
+ PUSHLOG_WRITE_FORMAT2("WL Importer: <%S> <%S>",&(address->Des()),
+ &(addressTypeBuf->Des()));
+
+ TUint32 entryId(0);
+ if ( entryIdBuf )
+ {
+ PUSHLOG_WRITE_FORMAT("WL Importer entryIdBuf: <%S>",&(entryIdBuf->Des()));
+ TLex lex( *entryIdBuf );
+ lex.Val( entryId, EDecimal );
+ CleanupStack::PopAndDestroy( entryIdBuf ); // entryIdBuf
+ }
+
+ GetChar();
+
+ // No more attribute to parse.
+
+ // Add the new initiator data to the Push settings.
+ newInitiator->SetAddressL( *address, addrType );
+ newInitiator->SetEntryID( entryId );
+ CleanupStack::PopAndDestroy( 2, address ); // addressTypeBuf, address
+
+ iPushInitiatorList.AddL( newInitiator );
+ CleanupStack::Pop( newInitiator ); // newInitiator
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/Data/10008D3E.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: White List Adapter registration resources.
+*
+*/
+
+
+// INCLUDE FILES
+ // System includes
+#include <ecom/registryinfo.rh>
+
+ // User includes
+#include "WhiteListAdapterUids.h"
+
+// RESOURCE DEFINITIONS
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = KWhiteListAdapterDllUid;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KProvisioningAdapterInterfaceUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = KWhiteListAdapterImplementationUid;
+ version_no = 2;
+ display_name = "";
+ default_data = "";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/Group/Bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Build specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+#if defined( __S60_32__) || defined( __PLATFORM_VERSION_S60_50__) || defined( __PLATFORM_VERSION_5250__)
+// Remove Symbian Push Content Handler
+gnumakefile PushContentHandlerClean.mk
+#endif
+// Build our Push Content Handler
+PushMtmPushContentHandler.mmp
+
+#ifdef __PUSH_WHITELIST
+
+// Build our White List Adapter plug-in
+PushMtmWhiteListAdapter.mmp
+
+#endif // __PUSH_WHITELIST
+
+
+PRJ_TESTMMPFILES
+
+
+PRJ_TESTEXPORTS
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/Group/PushContentHandlerClean.mk Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,102 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+# Remove Symbian Push Content Handler DLL and registry resource files.
+# These push content handlers are replaced by the content handlers delivered
+# in the Push MTM.
+#
+
+LANGUAGE=sc
+
+#
+# Files to be removed: ECOM DLLs and registry files.
+#
+
+# The old-named push content handler DLL left by PushMtm or Symbian:
+TARGETDLL1=pushcontenthandler.dll
+# ECOM resource left by Symbian
+TARGETRESOURCE1=pushcontenthandler.r$(LANGUAGE)
+# SI & SL content handlers left by Symbian
+TARGETDLL2=sislcontenthandlers.dll
+# ECOM resource left by Symbian (for SI & SL content handlers)
+TARGETRESOURCE2=sislcontenthandlers.r$(LANGUAGE)
+# Just in case: remove the ECOM registry - the system will create a new
+ECOMREGISTRY=$(EPOCROOT)epoc32\$(PLATFORM)\c\system\data\plugins\ecom.rom.dat
+# Remove Symbian push mtm
+TARGETMTMDLL=wappushmtmclientserver.dll
+
+#
+# Target directories
+#
+
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ TARGETDIRRESOURCE=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\resource\plugins
+else
+endif
+TARGETDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
+GENERICTARGETDIRRESOURCE=$(EPOCROOT)epoc32\data\z\resource\plugins
+TARGETMTMDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
+
+#
+# Remove the files
+#
+
+do_tidy:
+ if exist "$(TARGETDIRDLL)\$(TARGETDLL1)" del "$(TARGETDIRDLL)\$(TARGETDLL1)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
+ del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
+endif
+ if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
+ del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
+ if exist "$(TARGETDIRDLL)\$(TARGETDLL2)" del "$(TARGETDIRDLL)\$(TARGETDLL2)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
+ del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
+endif
+ if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
+ del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ if exist "$(ECOMREGISTRY)" del "$(ECOMREGISTRY)"
+endif
+ if exist "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)" del "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)"
+
+do_nothing:
+
+#
+# The targets invoked by abld
+#
+
+MAKMAKE : do_tidy
+
+RESOURCE : do_nothing
+
+SAVESPACE : do_nothing
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN : do_tidy
+
+RELEASABLES : do_nothing
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/Group/PushMtmPushContentHandler.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmPushContentHandler.dll
+TARGETTYPE PLUGIN
+
+// UIDs - 2nd UID specifies an ECom dll,
+// 3rd UID is unique identifier
+// (EUidPushContentHandlerDll in PushContentHandlerDef.hrh).
+UID 0x10009D8D 0x101F854C
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../PushContentHandler
+START RESOURCE 101F854C.rss
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGET PushMtmPushContentHandler.rsc
+END // RESOURCE
+
+USERINCLUDE ../PushContentHandler
+USERINCLUDE ../../Inc
+USERINCLUDE ../../MtmUtilInc
+USERINCLUDE ../../MtmUiInc
+
+/* todo: to be removed once push header are updated */
+USERINCLUDE /epoc32/include/push
+
+APP_LAYER_SYSTEMINCLUDE
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(ecom)
+#endif
+
+SOURCEPATH ../PushContentHandler
+SOURCE CCOContentHandler.cpp
+SOURCE CMultiPartMixedContentHandler.cpp
+SOURCE CMultiPartRelAndAltContentHandler.cpp
+SOURCE CPushContentHandlerBase.cpp
+SOURCE CUnknownContentHandler.cpp
+SOURCE CSIContentHandler.cpp
+SOURCE CSLContentHandler.cpp
+SOURCE PushContentHandlerGroupProxy.cpp
+SOURCE PushContentHandlerPanic.cpp
+SOURCE PushContentHandlerUtils.cpp
+SOURCE PushMtmAutoFetchOperation.cpp
+SOURCE PushMtmFetchOperation.cpp
+SOURCE PushMtmCacheSupply.cpp
+SOURCE PushMtmCacheDataSupplier.cpp
+SOURCE si_dict.c
+SOURCE sl_dict.c
+SOURCE StringResourceReader.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY apengine.lib
+
+LIBRARY apgrfx.lib
+LIBRARY apmime.lib
+
+LIBRARY bafl.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY Bifu.lib
+LIBRARY BioDB.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY CharConv.lib
+
+LIBRARY commdb.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY commonui.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY ECom.lib
+LIBRARY efsrv.lib
+
+LIBRARY esock.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY etext.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY euser.lib
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY gsmu.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY http.lib
+LIBRARY BrowserCache.lib
+LIBRARY HttpFilterCommon.lib
+LIBRARY inetprotutil.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY MiscPushMsgUtils.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY msgs.lib
+LIBRARY PushMsgEntry.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY SISLPushMsgUtils.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY smcm.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY WapPushUtils.lib
+
+LIBRARY ws32.lib
+
+LIBRARY cXmlParser.lib
+LIBRARY CENTRALREPOSITORY.lib
+LIBRARY featmgr.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/Group/PushMtmWhiteListAdapter.mmp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Specification file of White List Adapter plug-in
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+#include <defaultcaps.hrh>
+#include "../WhiteListAdapterInc/WhiteListAdapterUids.h"
+
+TARGET PushMtmWhiteListAdapter.dll
+TARGETTYPE PLUGIN
+
+// UIDs - 2nd UID specifies an ECom dll,
+// 3rd UID is a unique identifier from WhiteListAdapterDef.h
+UID 0x10009D8D KWhiteListAdapterDllUid
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+// RESOURCES
+
+START RESOURCE ../Data/10008D3E.rss
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGET PushMtmWhiteListAdapter.rsc
+END // RESOURCE
+
+// INCLUDE DIRECTORIES
+
+USERINCLUDE ../WhiteListAdapterInc
+USERINCLUDE ../../MtmUtilInc
+
+APP_LAYER_SYSTEMINCLUDE
+
+// SOURCE FILES
+
+SOURCEPATH ../WhiteListAdapterSrc
+SOURCE WhiteListAdapter.cpp
+SOURCE WhiteListAdapterGroupProxy.cpp
+SOURCE WhiteListAdapterItem.cpp
+SOURCE WhiteListAdapterLogger.cpp
+SOURCE WhiteListAdapterPanic.cpp
+
+// LIBRARIES
+
+LIBRARY Euser.lib
+LIBRARY msgs.lib // for MMsvSessionObserver
+LIBRARY ProvisioningEngine.lib // for CWPAdapter & Co.
+LIBRARY PushMtmUtil.lib // for Push MTM Settings
+
+// Define this macro is you wish to enable logging
+//#define __TEST_WHITELISTADAPTER_LOG_ENABLED
+
+#ifdef __TEST_WHITELISTADAPTER_LOG_ENABLED
+ MACRO __TEST_WHITELISTADAPTER_LOG__
+ DEBUGLIBRARY flogger.lib
+#endif // __TEST_WHITELISTADAPTER_LOG_ENABLED
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/101F854C.rss Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Push Content Handlers registration resources.
+*
+*/
+
+
+
+#include <ecom/registryinfo.rh>
+#include "PushContentHandlerDef.hrh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = EUidPushContentHandlerDll;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = EUidPushContentHandlerBase;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushUnknownContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "*";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushSIContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "text/vnd.wap.si||application/vnd.wap.sic";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushSLContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "text/vnd.wap.sl||application/vnd.wap.slc";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushCOContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "text/vnd.wap.co||application/vnd.wap.coc";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushMultiPartMixedContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "application/vnd.wap.multipart.mixed||multipart/mixed";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushMultiPartRelAndAltContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "application/vnd.wap.multipart.related||application/vnd.wap.multipart.alternative||multipart/related||multipart/alternative";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CCOContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CCOContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CCOContentHandler.h"
+//#include "PushMtmUtil.h"
+//#include "PushMtmSettings.h"
+//#include <msvids.h>
+//#include <XmlElemt.h>
+
+// CONSTANTS
+
+#if defined(_DEBUG)
+_LIT( KErrPushMsgNull, "NULL CPushMessage" );
+#endif
+
+_LIT( KReserved, "Reserved" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CCOContentHandler::NewL
+// ---------------------------------------------------------
+//
+CCOContentHandler* CCOContentHandler::NewL()
+ {
+ CCOContentHandler* self = new(ELeave) CCOContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::~CCOContentHandler
+// ---------------------------------------------------------
+//
+CCOContentHandler::~CCOContentHandler()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CCOContentHandler
+// ---------------------------------------------------------
+//
+CCOContentHandler::CCOContentHandler()
+: CContentHandlerBase()
+ {
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::ConstructL()
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+
+ iState = EDone;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+
+ iState = EDone;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CPushHandlerBase_Reserved1()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CPushHandlerBase_Reserved2()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CCOContentHandler::DoCancel()
+ {
+ Complete( KErrCancel );
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::RunL()
+ {
+ switch( iState )
+ {
+ case EDone:
+ {
+ Complete( KErrNone );
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CCOContentHandler::RunError( TInt aError )
+ {
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CCOContentHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CCOContentHandler.
+*
+*/
+
+
+
+#ifndef __CCOCONTENTHANDLER_H__
+#define __CCOCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "PushContentHandlerDef.hrh"
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+
+// CONSTANTS
+
+const TUid KUidPushCOContentHandler = { EUidPushCOContentHandler };
+_LIT( KCOContentHandlerData, "text/vnd.wap.co||application/vnd.wap.coc" );
+
+// FORWARD DECLARATIONS
+
+/*class CMsvSession;
+class CSLPushMsgEntry;
+class CPushMtmUtil;
+class CPushMtmSettings;*/
+
+// CLASS DECLARATION
+
+/**
+* CCOContentHandler Handles Cache Operation Content
+*
+* This handler takes ownership of the CO message and processes it
+* according to the processing rules
+* [WAP Cache Operation version 31-July-2001].
+* Also S60 specific requirements are applied.
+*
+* NB. Currently all CO push messages are discarded!
+*/
+class CCOContentHandler : public CContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CCOContentHandler* NewL();
+
+ /**
+ * D'tor.
+ */
+ virtual ~CCOContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CCOContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Current implementation does nothing. TODO on 2.1.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Current implementation does nothing. TODO on 2.1.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Current implementation does nothing. TODO on 2.1.
+ * @return Error code to scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ enum TState
+ {
+ EDone
+ };
+ };
+
+#endif // __CCOCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CMultiPartMixedContentHandler.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CMultiPartMixedContentHandler.h"
+#include <push/pushdispatcher.h>
+#include <push/cmultiparttextiterator.h>
+#include <push/cmultipartbiniterator.h>
+
+// Constants
+
+_LIT(KReserved, "Reserved");
+#if defined(_DEBUG)
+_LIT(KErrPushMsgNull, "NULL CPushMessage");
+#endif
+
+/**
+ * Static Factory Construction
+ *
+ * @param aFs Reference to a file session
+ * @param aLibrary Reference to DLL Library Object
+ * @param aIndex Index number corresponding to the Unknown App Handler Class
+ * 'EMultiPartMixedContentHandler'
+ *
+ * @return fully initialized instance of this class
+ */
+CMultiPartMixedContentHandler* CMultiPartMixedContentHandler::NewL()
+ {
+ CMultiPartMixedContentHandler* self =
+ new (ELeave) CMultiPartMixedContentHandler;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+/**
+ * Destructor
+ */
+CMultiPartMixedContentHandler::~CMultiPartMixedContentHandler()
+ {
+ Cancel();
+ delete iMultiMessage;
+ iContentHandler = NULL; // Not owned.
+ }
+
+/**
+ * Constructor
+ *
+ * @param aFs Reference to a file session
+ * @param aLibrary Reference to DLL Library Object
+ * @param aIndex Index number corresponding to the Unknown App Handler Class
+ * 'EMultiPartMixedContentHandler'
+ */
+CMultiPartMixedContentHandler::CMultiPartMixedContentHandler()
+: CContentHandlerBase()
+ {
+ }
+
+/**
+ * This will complete initialization of the object
+ */
+void CMultiPartMixedContentHandler::ConstructL()
+ {
+ CActiveScheduler::Add(this);
+ }
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+/**
+ * Creates a Multipart Binary Iterator that will be used for splitting apart the binary
+ * mulitpart.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ */
+void CMultiPartMixedContentHandler::LoadMultipartMsgL()
+ {
+ __ASSERT_DEBUG( iMessage!= 0 , User::Panic(KErrPushMsgNull,0));
+
+ TPtrC contentType;
+ iMessage->GetContentType(contentType);
+ if (!contentType.FindF(KMultipartText))
+ iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
+ else if (!contentType.FindF(KMultipartBin))
+ iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
+ else
+ User::Leave(KErrCorrupt);
+
+ iMultiMessage->FirstL();
+ iState = EHandlePart;
+
+ IdleComplete();
+ }
+
+/**
+ * Handles the Message Part returned from the Multipart iterator
+ * by creating a new handler based on the Content-Type, then dispatches it
+ * synchronously.
+ */
+void CMultiPartMixedContentHandler::HandlePartL()
+ {
+ CPushMessage* msgPart = iMultiMessage->PartL();
+ CleanupStack::PushL(msgPart);
+
+ TPtrC contentType;
+ msgPart->GetContentType(contentType);
+ CContentHandlerBase& contentHandler =
+ PushContentTypeDispatcher::GetHandlerL( contentType, *iLog, *iManager );
+ iContentHandler = &contentHandler;
+ CleanupStack::Pop(msgPart);
+
+ // treat as an acknowledged message always to ensure
+ // sequential creation of handlers
+ iContentHandler->HandleMessageL(msgPart, iStatus);
+ iState = ENextPart;
+ SetActive();
+ }
+
+/**
+ * Moves multipart iterator to the next part. If there is none,
+ * State: EDone will be set to complete this handler
+ */
+void CMultiPartMixedContentHandler::NextPartL()
+ {
+ if (iMultiMessage->NextL())
+ iState = EHandlePart;
+ else
+ iState = EDone;
+
+ IdleComplete();
+ }
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+/**
+ * The Asynchronous entry point for this plug-in to handle the CPushMessage.
+ *
+ * Since we really didn't start an async event, make it look as though our
+ * asynchronous request has been completed.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ * @param aStatus The TRequestStatus of the caller indicating that this will
+ * be used aysnchronously
+ */
+void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = ETrue;
+ iMessage = aPushMsg;
+ SetConfirmationStatus(aStatus);
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = ETrue;
+ iMessage = aPushMsg;
+ SetConfirmationStatus(aStatus);
+ // Drop all multipart/mixed messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_MIX_SUPP
+ }
+
+
+/**
+ * The Synchronous entry point for this plug-in to handle the CPushMessage.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ * @param aStatus The TRequestStatus of the caller indicating that this will be
+ * used aysnchronously
+ */
+void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ // Drop all multipart messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_MIX_SUPP
+ }
+
+/**
+ * Cancels Asynronous requests on called handler.
+ */
+void CMultiPartMixedContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved1()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved2()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+/**
+ * Cancels Asynronous requests on caller and completes self.
+ */
+void CMultiPartMixedContentHandler::DoCancel()
+ {
+ if ( iContentHandler )
+ {
+ iContentHandler->CancelHandleMessage();
+ }
+ Complete( KErrCancel );
+ }
+
+/**
+ * State machine to step through the multipart message until it is done
+ *
+ * State EHandlePart: Starts the processing of each part of the multipart
+ * State ENextPart: Moves the interator to point to the next part of the multipart
+ * when there are no more parts, EDone will be the next state
+ * State EDone: Clean up and complete
+ */
+void CMultiPartMixedContentHandler::RunL()
+ {
+ switch(iState)
+ {
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+ case ELoadMsgData:
+ {
+ LoadMultipartMsgL();
+ break;
+ }
+ case EHandlePart:
+ {
+ HandlePartL();
+ break;
+ }
+ case ENextPart:
+ {
+ NextPartL();
+ break;
+ }
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+ case EDone:
+ {
+ Complete(KErrNone);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+/**
+ * Clean up
+ */
+TInt CMultiPartMixedContentHandler::RunError(TInt aError)
+ {
+ iState=EDone;
+ Complete(aError);
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CMultiPartMixedContentHandler.
+*
+*/
+
+#ifndef __CMULTIPARTMIXEDCONTENTHANDLER_H__
+#define __CMULTIPARTMIXEDCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <push/ccontenthandlerbase.h>
+#include <E32Base.h>
+
+// CONSTANTS
+
+const TUid KUidPushMultiPartMixedContentHandler = {
+ EUidPushMultiPartMixedContentHandler };
+_LIT(KMultiPartMixedContentHandlerData,
+ "application/vnd.wap.multipart.mixed||multipart/mixed");
+
+// FORWARD DECLARATIONS
+
+class CMultipartIteratorBase;
+
+// CLASS DECLARATION
+
+/**
+* The MultiPart/Mixed Content Handler
+*
+* Takes apart the mulitpart message, creating a new sub message from each
+* part, then calls on new Push Handlers to process each sub message.
+*
+* All multipart/mixed messages are dropped if __TEST_MULTIPART_MIX_SUPP
+* is not defined.
+*/
+class CMultiPartMixedContentHandler : public CContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ static CMultiPartMixedContentHandler* NewL();
+
+ virtual ~CMultiPartMixedContentHandler();
+
+ private: // Constructors
+
+ CMultiPartMixedContentHandler();
+
+ void ConstructL();
+
+ private: // New functions
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+ void LoadMultipartMsgL();
+
+ void HandlePartL();
+
+ void NextPartL();
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+ private: // Methods from CPushHandlerBase
+
+ void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+ void HandleMessageL(CPushMessage* aPushMsg);
+
+ void CancelHandleMessage();
+
+ void CPushHandlerBase_Reserved1();
+
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ void DoCancel();
+
+ void RunL();
+
+ TInt RunError(TInt aError);
+
+ private: // Attributes
+
+ enum TState
+ {
+ ELoadMsgData,
+ EHandlePart,
+ ENextPart,
+ EDone
+ };
+
+ CMultipartIteratorBase* iMultiMessage;
+
+ CContentHandlerBase* iContentHandler;
+
+ };
+
+
+#endif // __CMULTIPARTMIXEDCONTENTHANDLER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,335 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CMultiPartRelAndAltContentHandler.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CMultiPartRelAndAltContentHandler.h"
+#include <push/cmultipartiteratorbase.h>
+#include <msvids.h>
+
+// Constants
+
+_LIT(KReserved, "Reserved");
+
+/**
+ * Static Factory Construction
+ *
+ * version of NewLC which leaves nothing
+ * on the cleanup stack
+ */
+CMultiPartRelAndAltContentHandler* CMultiPartRelAndAltContentHandler::NewL()
+ {
+ CMultiPartRelAndAltContentHandler* self = new (ELeave) CMultiPartRelAndAltContentHandler;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+/**
+ * Default d'tor
+ */
+CMultiPartRelAndAltContentHandler::~CMultiPartRelAndAltContentHandler()
+ {
+ Cancel();
+ delete iMultiMessage;
+ delete iMsvSession;
+ }
+
+/**
+ * The Multipart Related Content handler
+ * Index number : ESLContentHandlerIndex
+ */
+CMultiPartRelAndAltContentHandler::CMultiPartRelAndAltContentHandler()
+: CContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId )
+ {
+ }
+
+/**
+ * This will complete initialization of the object
+ */
+void CMultiPartRelAndAltContentHandler::ConstructL()
+ {
+ iMsvSession = CMsvSession::OpenSyncL( *this );
+ CActiveScheduler::Add(this);
+ }
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+/**
+* Setup the multipart message.
+*/
+void CMultiPartRelAndAltContentHandler::LoadMultiPartMsgL()
+ {
+#ifdef _DEBUG
+ _LIT(KNullMsg,"NULL CPushMessage");
+ __ASSERT_DEBUG( iMessage != 0 , User::Panic(KNullMsg,0));
+#endif
+ TPtrC contentType;
+ iMessage->GetContentType(contentType);
+ if (!contentType.FindF(KMultipartText))
+ iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
+ else if (!contentType.FindF(KMultipartBin))
+ iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
+ else
+ User::Leave(KErrCorrupt);
+ iMultiMessage->FirstL();
+ IdleComplete();
+ }
+
+/**
+ * Saves message part to messaging server
+ */
+void CMultiPartRelAndAltContentHandler::HandlePartL()
+ {
+ CPushMessage* msgPart = iMultiMessage->PartL();
+ CleanupStack::PushL(msgPart);
+
+ // Create a new Unknown Push Entry to hold the header and body data
+ CUnknownPushMsgEntry* msgEntry=CUnknownPushMsgEntry::NewL();
+ CleanupStack::PushL(msgEntry);
+ // Get the header
+ TPtrC8 header;
+ msgPart->GetHeader(header);
+ //Get the From field
+ TPtrC8 from;
+ if (!msgPart->GetBinaryHeaderField(EHttpFrom,from) &&
+ !msgPart->GetBinaryHeaderField(EHttpXWapInitiatorURI,from) &&
+ !msgPart->GetBinaryHeaderField(EHttpContentLocation,from) )
+ {
+ from.Set(KNullDesC8);
+ }
+ // Get the body
+ TPtrC8 body;
+ msgPart->GetMessageBody(body);
+ TPtrC content;
+ msgPart->GetContentType(content);
+
+ //Set fields of the Unknown Entry
+ msgEntry->SetHeaderL(header);
+ msgEntry->SetMessageDataL(body);
+ msgEntry->SetFromL(from);
+ //Need this next bit so UI knows what to do with the data in the Push Entry
+ msgEntry->SetContentTypeL( content );
+
+ msgEntry->SaveL( *iMsvSession, iSavedMsgId );
+ CleanupStack::PopAndDestroy( 2 ); //msgEntry, msgPart
+
+ iState = ENextPart;
+ IdleComplete();
+
+ }
+
+/**
+ * Move multipart iterator to the next part
+ */
+void CMultiPartRelAndAltContentHandler::NextPartL()
+ {
+ if (iMultiMessage->NextL())
+ {
+ iState = EHandlePart;
+ }
+ else
+ {
+ iState = EDone;
+ }
+ IdleComplete();
+ }
+
+/**
+ *
+ */
+void CMultiPartRelAndAltContentHandler::SaveMsgRootL()
+ {
+ TPtrC8 msgHeaderPtr;
+ iMessage->GetHeader(msgHeaderPtr);
+ CMultiPartPushMsgEntry* msgEntry=CMultiPartPushMsgEntry::NewL();
+ CleanupStack::PushL(msgEntry);
+ msgEntry->SetHeaderL(msgHeaderPtr); //Top level entry
+ TPtrC contentType;
+ iMessage->GetContentType(contentType);
+ msgEntry->SetContentTypeL(contentType);
+
+ iSavedMsgId = msgEntry->SaveL(*iMsvSession,
+ KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PopAndDestroy();//msgEntry
+ }
+
+/**
+ * Loads multipart data and creates multipart head entry in the message
+ * server index.
+ * @throw KErrCorrupt - message data is corrupt
+ * @throw KErrNoMemory - insufficient free memory to complete operations
+ */
+
+void CMultiPartRelAndAltContentHandler::LoadMsgDataL()
+ {
+ LoadMultiPartMsgL();
+ SaveMsgRootL();
+ iState = EHandlePart;
+ }
+
+void CMultiPartRelAndAltContentHandler::SetMsgCorruptFlagL()
+ {
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( iSavedMsgId );
+ CleanupStack::PushL( msvEntry );
+ TMsvEntry entry = msvEntry->Entry();
+ // get the iMtmData1 value & zero bits 0-3 then add new status
+ TInt32 mtmdata1 = ( entry.iMtmData1 & 0xFFFFFFF0 );
+ mtmdata1 += CPushMsgEntryBase::EPushMsgStatusCorrupt;
+ // Now set values for TMsvEntry and update the server entry
+ entry.iMtmData1 = mtmdata1;
+ msvEntry->ChangeL( entry );
+
+ CleanupStack::PopAndDestroy( msvEntry );
+ }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+/**
+ * Async. Version
+ */
+void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+#ifdef __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=ETrue;
+ SetConfirmationStatus(aStatus);
+ iMessage = aPushMsg;
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=ETrue;
+ SetConfirmationStatus(aStatus);
+ iMessage = aPushMsg;
+ // Drop all multipart messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_REL_SUPP
+ }
+
+/**
+ * Sync. Version
+ */
+void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+#ifdef __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=EFalse;
+ iMessage = aPushMsg;
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=EFalse;
+ iMessage = aPushMsg;
+ // Drop all multipart messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_REL_SUPP
+ }
+
+void CMultiPartRelAndAltContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved1()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved2()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+void CMultiPartRelAndAltContentHandler::DoCancel()
+ {
+ Complete( KErrCancel );
+ }
+
+/**
+*RunL handles each part separately
+*/
+void CMultiPartRelAndAltContentHandler::RunL()
+ {
+ switch(iState)
+ {
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+ case ELoadMsgData:
+ {
+ LoadMsgDataL();
+ break;
+ }
+ case EHandlePart:
+ {
+ HandlePartL();
+ break;
+ }
+ case ENextPart:
+ {
+ NextPartL();
+ break;
+ }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+ case EDone:
+ {
+ Complete(KErrNone);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+/**
+ * Clean up
+ */
+TInt CMultiPartRelAndAltContentHandler::RunError(TInt aError)
+ {
+ iState=EDone;
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+ if (iSavedMsgId != KMsvNullIndexEntryId)
+ {
+ TRAPD(error, SetMsgCorruptFlagL());
+ }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+ Complete(aError);
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CMultiPartRelAndAltContentHandler::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CMultiPartRelAndAltContentHandler::HandleSessionEventL(
+ TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/,
+ TAny* /*aArg2*/,
+ TAny* /*aArg3*/ )
+ {}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CMultiPartRelAndAltContentHandler.
+*
+*/
+
+
+
+#ifndef __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+#define __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+
+// System includes
+//
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+#include <msvstd.h>
+#include <msvapi.h>
+
+// Constants
+//
+const TUid KUidPushMultiPartRelAndAltContentHandler = {
+ EUidPushMultiPartRelAndAltContentHandler };
+
+// Forward class declarations
+//
+class CMsvSession;
+class CMultipartIteratorBase;
+
+/**
+* The MultiPart/Alternative & Multipart/Alternative Content Handler
+*
+* Saves the whole message in the Message Server, each part getting saved as a child
+* entry to the main part.
+*
+* All multipart/rel+alt messages are dropped if __TEST_MULTIPART_REL_SUPP
+* is not defined.
+*/
+class CMultiPartRelAndAltContentHandler : public CContentHandlerBase,
+ public MMsvSessionObserver
+ {
+ public: // Methods
+
+ static CMultiPartRelAndAltContentHandler* NewL();
+
+ virtual ~CMultiPartRelAndAltContentHandler();
+
+ private: // Constructors
+
+ CMultiPartRelAndAltContentHandler();
+
+ void ConstructL();
+
+ private: // New functions
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+ void LoadMultiPartMsgL();
+
+ void HandlePartL();
+
+ void NextPartL();
+
+ void SaveMsgRootL();
+
+ void LoadMsgDataL();
+
+ void SetMsgCorruptFlagL();
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+ private: // Methods from CPushHandlerBase
+
+ void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+ void HandleMessageL(CPushMessage* aPushMsg);
+
+ void CancelHandleMessage();
+
+ void CPushHandlerBase_Reserved1();
+
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ void DoCancel();
+
+ void RunL();
+
+ TInt RunError(TInt aError);
+
+ private: // from MMsvSessionObserver
+
+ void HandleSessionEventL( TMsvSessionEvent aEvent,
+ TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+ private: // Attributes
+
+ enum TState
+ {
+ ELoadMsgData,
+ EHandlePart,
+ EDone,
+ ENextPart
+ };
+
+ CMsvSession* iMsvSession; ///< Has.
+
+ TMsvId iSavedMsgId;
+
+ CMultipartIteratorBase* iMultiMessage;
+ };
+
+#endif // __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushContentHandlerBase.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushInitiatorList.h"
+#include "PushInitiator.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmLog.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "PushContentHandlerPanic.h"
+#include <PushEntry.h>
+#include <push/pushmessage.h>
+#include <msvstd.h>
+#include <mtclreg.h>
+#include <mtclbase.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::CPushContentHandlerBase
+// ---------------------------------------------------------
+//
+CPushContentHandlerBase::CPushContentHandlerBase()
+: CContentHandlerBase()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::ConstructL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::ConstructL()
+ {
+ iMsvSession = CMsvSession::OpenSyncL( *this );
+ PUSHLOG_WRITE("CPushContentHandlerBase iMsvSession OK")
+ iWapPushUtils = CPushMtmUtil::NewL( *iMsvSession );
+ PUSHLOG_WRITE("CPushContentHandlerBase iWapPushUtils OK")
+ iMtmSettings = CPushMtmSettings::NewL();
+ PUSHLOG_WRITE("CPushContentHandlerBase iMtmSettings OK")
+
+ // Add resource file reader.
+ TParse* fileParser = new (ELeave) TParse;
+ CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ iStrRscReader = new (ELeave) CStringResourceReader
+ ( iMsvSession->FileSession(), fileParser->FullName() );
+ CleanupStack::PopAndDestroy( fileParser ); // fileParser
+ fileParser = NULL;
+ PUSHLOG_WRITE("CPushContentHandlerBase iStrRscReader OK")
+
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::~CPushContentHandlerBase
+// ---------------------------------------------------------
+//
+CPushContentHandlerBase::~CPushContentHandlerBase()
+ {
+ PUSHLOG_ENTERFN("CPushContentHandlerBase::~CPushContentHandlerBase")
+
+ // Call Cancel() in derived classes!
+ delete iStrRscReader; // Must be deleted before iMsvSession.
+ delete iMtmSettings; // It has to be deleted before iMsvSession, because
+ // it uses iMsvSession->FileSession().
+ delete iWapPushUtils;
+ delete iMsvSession;
+
+ PUSHLOG_LEAVEFN("CPushContentHandlerBase::~CPushContentHandlerBase")
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::DoCollectGarbageL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::DoCollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CPushContentHandlerBase::DoCollectGarbageL")
+
+ CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL( *iMsvSession );
+ CleanupStack::PushL( clientReg );
+ PUSHLOG_WRITE("CPushContentHandlerBase clientReg OK")
+ CBaseMtm* pushMtm = clientReg->NewMtmL( KUidMtmWapPush );
+ CleanupStack::PushL( pushMtm );
+ PUSHLOG_WRITE("CPushContentHandlerBase pushMtm OK")
+ CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( dummySel );
+ TBuf8<1> dummyPar;
+
+ pushMtm->InvokeSyncFunctionL( EPushMtmCmdCollectGarbage,
+ *dummySel, dummyPar );
+
+ CleanupStack::PopAndDestroy( 3, clientReg );
+ // dummySel, pushMtm, clientReg
+
+ PUSHLOG_LEAVEFN("CPushContentHandlerBase::DoCollectGarbageL")
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::FilterPushMsgL
+// ---------------------------------------------------------
+//
+TBool CPushContentHandlerBase::FilterPushMsgL()
+ {
+ PUSHLOG_ENTERFN("CPushContentHandlerBase::FilterPushMsgL")
+
+ TBool msgAccepted = ETrue;
+
+ if ( iMtmSettings->ServiceReception() == EFalse )
+ {
+ // Discard message.
+ msgAccepted = EFalse;
+ PUSHLOG_WRITE(" ServiceReception OFF")
+ }
+
+ PUSHLOG_WRITE_FORMAT(" msgAccepted <%d>",msgAccepted)
+ PUSHLOG_LEAVEFN("CPushContentHandlerBase::FilterPushMsgL")
+ return msgAccepted;
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::HandleSessionEventL
+ (
+ TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/,
+ TAny* /*aArg2*/,
+ TAny* /*aArg3*/
+ )
+ {
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushContentHandlerBase.
+*
+*/
+
+
+
+#ifndef __CPUSHCONTENTHANDLERBASE_H__
+#define __CPUSHCONTENTHANDLERBASE_H__
+
+
+// INCLUDE FILES
+
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+#include <msvstd.h>
+#include <msvapi.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CPushMtmUtil;
+class CPushMtmSettings;
+class CStringResourceReader;
+
+// CLASS DECLARATION
+
+/**
+* CPushContentHandlerBase class stands as a base class for almost all push
+* content handlers of the Push MTM. It collects the generic functionality of
+* a push content handler, such as garbage collection when receiving new
+* service message, supporting CMsvSession, CPushMtmUtil and CPushMtmSettings
+* objects.
+*/
+class CPushContentHandlerBase : public CContentHandlerBase,
+ public MMsvSessionObserver
+ {
+ protected: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ CPushContentHandlerBase();
+
+ /**
+ * Symbian OS constructor. CActiveScheduler::Add( this ) is called in
+ * this method!!
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushContentHandlerBase();
+
+ protected: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void DoCollectGarbageL();
+
+ /**
+ * Apply Push MTM settings on the message.
+ * @return ETrue if the message passed the filtering.
+ */
+ TBool FilterPushMsgL();
+
+ protected: // From MMsvSessionObserver
+
+ /**
+ * Msv session events are handled by this method. This implementation
+ * is empty.
+ * @return None.
+ */
+ void HandleSessionEventL( TMsvSessionEvent aEvent,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3);
+
+ protected: // Data
+
+ CMsvSession* iMsvSession; ///< Session to Message Server. Has.
+ CPushMtmUtil* iWapPushUtils; ///< Push Utility. Has.
+ CPushMtmSettings* iMtmSettings; ///< Push Settings. Has.
+ /// Owned. It uses iMsvSession's RFs!
+ CStringResourceReader* iStrRscReader;
+ };
+
+#endif // __CPUSHCONTENTHANDLERBASE_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSIContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1835 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CSIContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CSIContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushMtmLog.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "PushContentHandlerPanic.h"
+#include "si_dict.h"
+#include "PushContentHandlerUtils.h"
+#include <push/CSIPushMsgEntry.h>
+#include <msvids.h>
+#include <PushMtmUi.rsg>
+#include <nw_dom_node.h>
+#include <nw_dom_document.h>
+#include <nw_dom_element.h>
+#include <nw_dom_text.h>
+#include <nw_wbxml_dictionary.h>
+#include <THttpFields.h>
+
+// CONSTANTS
+
+// si attributes / elements
+_LIT8( KSi, "si" );
+_LIT8( KIndication, "indication" );
+_LIT8( KHrefAttrib, "href" );
+_LIT8( KSiIdAttrib, "si-id" );
+_LIT8( KCreatedAttrib, "created" );
+_LIT8( KExpiresAttrib, "si-expires" );
+_LIT8( KActionAttrib, "action" );
+
+// action attribute literals
+_LIT8( KDeleteAction, "delete" );
+_LIT8( KSignalNone, "signal-none" );
+_LIT8( KSignalLow, "signal-low" );
+_LIT8( KSignalMedium, "signal-medium" );
+_LIT8( KSignalHigh, "signal-high" );
+
+_LIT( KSiTextContentType, "text/vnd.wap.si" );
+
+const TInt KValidMaxEncodedDateTimeSize = 7;
+const TInt KValidUTCLength = 20; // YYYY-MM-DDTHH:MM:SSZ
+const TInt KValidUTCNumericals = 14;
+const TInt KValidUTCYearBlockLength = 4;
+const TInt KValidUTCOtherBlockLength = 2;
+const TUint8 KAsciiZeroCharCode = 0x30;
+
+const TInt KValidTTimeMonthStart = 4;
+const TInt KValidTTimeDayStart = 6;
+const TInt KValidTTimeHourStart = 8;
+const TInt KValidTTimeMinuteStart = 10;
+const TInt KValidTTimeSecondStart = 12;
+const TInt KValidTTimeBlockLength = 2;
+
+const TInt KValidTTimeLength = 14; // YYYYMMDDHHMMSS
+
+const TInt KNoOfDictArrays = 1;
+
+_LIT( KCharMinus, "-" );
+_LIT( KCharT, "T" );
+_LIT( KCharColon, ":" );
+_LIT( KCharZ, "Z" );
+
+/// Conversion buffer size.
+LOCAL_D const TInt KPushConversionBufferSize = 256;
+/// Zero width non-breaking space character.
+LOCAL_D const TUint16 KPushZeroWidthNbsp = 0xfeff;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CSIContentHandler::NewL
+// ---------------------------------------------------------
+//
+CSIContentHandler* CSIContentHandler::NewL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::NewL")
+
+ CSIContentHandler* self = new (ELeave) CSIContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::~CSIContentHandler
+// ---------------------------------------------------------
+//
+CSIContentHandler::~CSIContentHandler()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::~CSIContentHandler")
+
+ Cancel();
+ delete iHrefBuf;
+ delete iSiIdBuf;
+ delete iData;
+ delete iCharacterSetConverter;
+ iCharacterSetConverter = NULL;
+ delete iCharacterSetsAvailable;
+ iCharacterSetsAvailable = NULL;
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::~CSIContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CSIContentHandler
+// ---------------------------------------------------------
+//
+CSIContentHandler::CSIContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId ),
+ iPushMsgAction( KErrNotFound ),
+ iExpiresTime( Time::NullTTime() ),
+ iCreatedTime( Time::NullTTime() )
+ {
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConstructL")
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+ //Ready.
+ iState = EFilteringAndParsing;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::CollectGarbageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParsePushMsgL
+// Note that cXML parser dosn't do any validation!
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParsePushMsgL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParsePushMsgL")
+
+ TPtrC8 bodyPtr;
+ iMessage->GetMessageBody( bodyPtr );
+ // If there is no body in the message leave with an error
+ if ( bodyPtr.Size() == 0 )
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: Empty body")
+ User::Leave( KErrCorrupt );
+ }
+
+ // Get content type. It will tell us wheather the msg body is encoded or
+ // textual.
+ TPtrC contentType;
+ iMessage->GetContentType( contentType );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: HTTP header - Content type <%S>",&contentType);
+
+ /*
+ TPtrC8 encodingPtr;
+ TBool encodingFound = iMessage->GetHeaderField
+ ( EHttpContentEncoding, encodingPtr );
+ #ifdef __TEST_LOG__
+ TBuf<64> encodingBuf;
+ encodingBuf.Copy( encodingPtr );
+ PUSHLOG_WRITE_FORMAT(" HTTP header - Content encoding <%S>",&encodingBuf);
+ #endif // __TEST_LOG__
+ */
+
+ // Add SI dictionary.
+ NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
+ { (NW_WBXML_Dictionary_t*)&NW_SI_WBXMLDictionary };
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ RWbxmlDictionary wbxmlDict;
+ wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
+ CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
+
+ NW_TinyDom_Handle_t domHandle;
+ NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
+ NW_Int32 length = (NW_Int32)bodyPtr.Size();
+ // Let's use the content type now.
+ NW_Bool encoded = ( contentType.CompareF( KSiTextContentType ) == 0 ) ?
+ NW_FALSE : NW_TRUE;
+ // SI public identifier.
+ NW_Uint32 publicID = NW_SI_PublicId;
+ NW_Bool extTNotStringTable = NW_FALSE;
+ NW_DOM_NodeType_t type = 0;
+ /**********************************
+ * Root of DOM
+ ***********************************/
+ CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
+ CleanupStack::PushL( docTreeOwner );
+ NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
+ (
+ &domHandle,
+ buffer,
+ length,
+ encoded,
+ publicID,
+ extTNotStringTable
+ );
+ if (!domNode)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is Null")
+ }
+ User::LeaveIfNull( domNode );
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is not Null") // to be deleted
+ // Let domNode be on the Cleanup Stack.
+ docTreeOwner->SetDocTree( domNode );
+
+ // It must be a document node.
+ type = NW_DOM_Node_getNodeType( domNode );
+ if ( type != NW_DOM_DOCUMENT_NODE )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not Document node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ // Get character encoding (NW_Uint32)
+ iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
+
+ /**********************************
+ * ELEMENT si
+ ***********************************/
+ // Get the first element of the document that must be an si.
+ // first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
+ TBool domNodeHasChildNodes = EFalse;
+ domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
+ if (!domNodeHasChildNodes)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No SI element present in the dom tree. Message corrupted.")
+ User::Leave( KErrCorrupt );
+ }
+
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: before calling getDocumentElement")
+ NW_DOM_ElementNode_t* siElement =
+ NW_DOM_DocumentNode_getDocumentElement( domNode );
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: after calling getDocumentElement")
+ if (!siElement)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is Null")
+ }
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, before leaving")
+ User::LeaveIfNull( siElement );
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, after leaving if siElement is null")
+
+ type = NW_DOM_Node_getNodeType( siElement );
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* name = NW_String_new();
+ User::LeaveIfNull( name );
+ // Let name be on the Cleanup Stack.
+ stringOwner->SetString( name );
+ stat = NW_DOM_Node_getNodeName( siElement, name );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* nameBuf = NW_String_getStorage( name );
+ NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
+ TPtrC8 namePtr( nameBuf, nameLen );
+
+ // Now comes the validity check.
+ if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSi ) != 0 )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not si element node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ /**********************************
+ * ELEMENT indication
+ ***********************************/
+ if ( NW_DOM_Node_hasChildNodes( siElement ) )
+ {
+ NW_DOM_Node_t* node = NW_DOM_Node_getFirstChild( siElement );
+ if (!node)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: no si child nodes!")
+ }
+ User::LeaveIfNull( node );
+
+ // Find the indication element.
+ TBool indicationFound = EFalse;
+ do {
+ type = NW_DOM_Node_getNodeType( node );
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* name = NW_String_new();
+ User::LeaveIfNull( name );
+ stringOwner->SetString( name );
+ stat = NW_DOM_Node_getNodeName( node, name );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* nameBuf = NW_String_getStorage( name );
+ NW_Uint16 nameLen = NW_String_getCharCount( name,
+ iCharEncoding );
+ TPtrC8 namePtr( nameBuf, nameLen );
+
+ if ( type == NW_DOM_ELEMENT_NODE &&
+ namePtr.CompareF( KIndication ) == 0 )
+ {
+ // We found the indication element. Parse it.
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: indication under si found.")
+ indicationFound = ETrue;
+ NW_DOM_ElementNode_t* indicationElement =
+ REINTERPRET_CAST( NW_DOM_ElementNode_t*, node );
+ ParseIndicationL( *indicationElement );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ if ( !indicationFound )
+ {
+ // Iterate next.
+ node = NW_DOM_Node_getNextSibling( node );
+ if ( !node )
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No more sibling.")
+ break;
+ }
+ }
+
+ } while ( !indicationFound );
+ }
+
+ // Cleanup.
+ CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
+
+ if ( !ActionFlag() )
+ {
+ // default if no action explicitly stated
+ iPushMsgAction = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Defaulting to ActionFlag: %d",iPushMsgAction)
+ }
+
+ iState = EProcessing;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParsePushMsgL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseIndicationL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseIndicationL( NW_DOM_ElementNode_t& aIndication )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParseIndicationL")
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ NW_DOM_NodeType_t type = 0;
+
+ if ( NW_DOM_ElementNode_hasAttributes( &aIndication ) )
+ {
+ NW_DOM_AttributeListIterator_t attrIter;
+ stat = NW_DOM_ElementNode_getAttributeListIterator
+ ( &aIndication, &attrIter );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+ NW_DOM_AttributeHandle_t attrHandle;
+ while ( NW_DOM_AttributeListIterator_getNextAttribute
+ ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
+ {
+ ParseIndAttributeL( attrHandle );
+ }
+ }
+
+ /**********************************
+ * PCDATA of ELEMENT indication
+ ***********************************/
+ if ( NW_DOM_Node_hasChildNodes( &aIndication ) )
+ {
+ NW_DOM_TextNode_t* textNode =
+ NW_DOM_Node_getFirstChild( &aIndication );
+ User::LeaveIfNull( textNode );
+
+ type = NW_DOM_Node_getNodeType( textNode );
+ if ( type != NW_DOM_TEXT_NODE )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: Not text node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ ParseTextL( *textNode );
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndicationL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseIndAttributeL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseIndAttributeL( NW_DOM_AttributeHandle_t&
+ aAttrHandle )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParseIndAttributeL")
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* attrName = NW_String_new();
+ User::LeaveIfNull( attrName );
+ stringOwner->SetString( attrName );
+
+ // Get the name of the attribute.
+ stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* attrNameBuf = NW_String_getStorage( attrName );
+ NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
+ TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
+
+ if ( attrNamePtr.CompareF( KCreatedAttrib ) == 0 )
+ {
+ if ( CreatedFlag() )
+ {
+ PUSHLOG_WRITE(" created redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ TBool gotDate = AttributeToTTimeL( aAttrHandle, iCreatedTime );
+ SetCreatedFlag( gotDate );
+ PUSHLOG_WRITE_FORMAT(" iCreatedTime set %d",gotDate?1:0)
+ }
+ }
+ else if ( attrNamePtr.CompareF( KHrefAttrib ) == 0 )
+ {
+ if ( HrefFlag() )
+ {
+ PUSHLOG_WRITE(" href redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
+ {
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val,
+ iCharEncoding );
+ if ( length == 0 )
+ {
+ // Zero length href attribute is considered as missing.
+ PUSHLOG_WRITE(" Zero length HrefFlag");
+ }
+ else
+ {
+ TPtrC8 hrefPtr( storage, length );
+ HBufC* tempHrefBuf = HBufC::NewMaxL( length );
+ // No leavable after it!!! until...
+ tempHrefBuf->Des().Copy( hrefPtr );
+ iHrefBuf = tempHrefBuf; // ...until here.
+ SetHrefFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
+ }
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+ }
+ }
+ else if ( attrNamePtr.CompareF( KExpiresAttrib ) == 0 )
+ {
+ if ( ExpiresFlag() )
+ {
+ PUSHLOG_WRITE(" expires redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ TBool gotDate = AttributeToTTimeL( aAttrHandle, iExpiresTime );
+ SetExpiresFlag( gotDate );
+ PUSHLOG_WRITE_FORMAT(" iExpiresTime set %d",gotDate?1:0)
+ }
+ }
+ else if ( attrNamePtr.CompareF( KSiIdAttrib ) == 0 )
+ {
+ if ( SiIdFlag() )
+ {
+ PUSHLOG_WRITE(" si-id redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // It is expected to be String.
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 siidPtr( storage, length );
+
+ iSiIdBuf = HBufC::NewMaxL( siidPtr.Length() );
+ iSiIdBuf->Des().Copy( siidPtr );
+ SetSiIdFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" SiIdFlag set <%S>",iSiIdBuf)
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+ }
+ }
+ else if ( attrNamePtr.CompareF( KActionAttrib ) == 0 )
+ {
+ if ( ActionFlag() )
+ {
+ PUSHLOG_WRITE(" action redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // It is expected to be String.
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 actionPtr( storage, length );
+
+ iPushMsgAction = ConvertActionString( actionPtr );
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ ContHandPanic( EPushContHandPanUnexpSiToken ) );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndAttributeL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseTextL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseTextL( NW_DOM_TextNode_t& aTextNode )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParseTextL")
+
+ if ( DataFlag() )
+ {
+ PUSHLOG_WRITE(" Data flag already set.")
+ }
+ else
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* data = NW_String_new();
+ User::LeaveIfNull( data );
+ stringOwner->SetString( data );
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ stat = NW_DOM_TextNode_getData( &aTextNode, data );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+ HBufC16* ucs2buffer = ConvertToUnicodeL( *data, iCharEncoding );
+ // Be careful: ucs2buffer is not on the CleanupStack!
+ __ASSERT_DEBUG( ucs2buffer != 0, ContHandPanic( EPushContHandPanNullUcs2Buf ) );
+
+ TPtrC16 ucs2ptrC( *ucs2buffer );
+ if ( ucs2ptrC.Length() == 0 )
+ {
+ // Zero length data is considered as nothing.
+ PUSHLOG_WRITE(" Zero length Data");
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" Data: <%S>",&ucs2ptrC);
+
+ #ifdef __TEST_LOG__
+ // Write out each unicode character identifier
+ TInt length = ucs2ptrC.Length();
+ for (TInt logI=0;logI<length;logI++)
+ {
+ TBuf16<1> currChar;
+ currChar.Copy( ucs2ptrC.Mid( logI, /*aLength*/1 ) );
+ PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
+ }
+ #endif // __TEST_LOG__
+
+ iData = ucs2buffer; // Ownership transferred.
+ ucs2buffer = NULL;
+ SetDataFlag( ETrue );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner );
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParseTextL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertToUnicodeL
+// ---------------------------------------------------------
+//
+HBufC16* CSIContentHandler::ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
+
+ __ASSERT_DEBUG( aCharSetId != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
+
+ InitialiseCharacterSetConverterL();
+
+ HBufC16* ucs2buffer = NULL; // The return value.
+ TBool resultOnStack = EFalse;
+
+ #ifdef __TEST_LOG__
+ // Write out the original 8-bit buffer
+ TInt origiLength = aSrc.Length();
+ for (TInt origiLogI=0;origiLogI<origiLength;origiLogI++)
+ {
+ TBuf16<1> currChar; // Only 16-bit buffer can be written out.
+ currChar.Copy( aSrc.Mid( origiLogI, /*aLength*/1 ) );
+ PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
+ }
+ #endif // __TEST_LOG__
+
+ // Result
+ HBufC16* buffer = HBufC16::NewLC( KPushConversionBufferSize );
+ PUSHLOG_WRITE(" buffer allocated");
+ TPtr16 ptr( buffer->Des() );
+
+ // Prepare conversion for the given charset ID.
+ RFs& fs = iMsvSession->FileSession();
+ iCharacterSetConverter->PrepareToConvertToOrFromL
+ ( aCharSetId, *iCharacterSetsAvailable, fs );
+ PUSHLOG_WRITE(" PrepareToConvertToOrFromL OK");
+
+ TInt state = 0;
+ TInt remaining = iCharacterSetConverter->ConvertToUnicode( ptr, aSrc, state );
+ PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
+ while ( remaining >= 0 )
+ {
+ if ( ucs2buffer == NULL )
+ {
+ ucs2buffer = HBufC::NewLC( ptr.Length() );
+ resultOnStack = ETrue;
+ }
+ else
+ {
+ __ASSERT_DEBUG( resultOnStack,
+ ContHandPanic( EPushContHandPanSiResNotOnStack ) );
+ // This may change the address of ucs2buffer so we need to put
+ // it on the cleanup stack again!!
+ ucs2buffer = ucs2buffer->ReAllocL
+ ( ucs2buffer->Length() + ptr.Length() );
+ CleanupStack::Pop(); // old ucs2buffer
+ CleanupStack::PushL( ucs2buffer ); // possibly new copy
+ PUSHLOG_WRITE(" ucs2buffer reallocated");
+ }
+ TPtr16 ucs2ptr( ucs2buffer->Des() );
+ ucs2ptr.Append( ptr );
+ if ( remaining > 0 )
+ {
+ // Try to convert all remaining characters.
+ ptr.Zero();
+ remaining = iCharacterSetConverter->ConvertToUnicode
+ ( ptr, aSrc.Right( remaining ), state );
+ PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
+ }
+ else
+ {
+ PUSHLOG_WRITE(" break");
+ break;
+ }
+ }
+
+ if ( resultOnStack )
+ {
+ CleanupStack::Pop(); // ucs2buffer
+ resultOnStack = EFalse;
+ }
+
+ // ucs2buffer is not on the CleanupStack!
+
+ CleanupStack::PopAndDestroy( buffer ); // buffer
+
+ if ( ucs2buffer == NULL )
+ {
+ PUSHLOG_WRITE(" NULL ucs2buffer - allocating an empty buf");
+ ucs2buffer = KNullDesC().AllocL();
+ }
+ else
+ {
+ // Check if first character is a Zero-width nbsp.
+ TPtrC16 ucs2ptrC( *ucs2buffer );
+ if ( ucs2ptrC.Length() >= 1 && ucs2ptrC[0] == KPushZeroWidthNbsp )
+ {
+ // First character is a Zero-width NBSP. This character is used as
+ // BOM in some encodings and should not be present at this point.
+ // But we are tolerant and remove it.
+ // (Not expecting big-endianness here.)
+ HBufC16* temp = ucs2buffer;
+ CleanupStack::PushL( temp );
+ ucs2buffer = ucs2ptrC.Mid( 1 ).AllocL();
+ CleanupStack::PopAndDestroy( temp ); // temp
+ PUSHLOG_WRITE(" BOM removed");
+ }
+ else
+ {
+ PUSHLOG_WRITE(" No BOM");
+ }
+ }
+
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
+ return ucs2buffer;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertToUnicodeL
+// ---------------------------------------------------------
+//
+HBufC16* CSIContentHandler::ConvertToUnicodeL
+ ( NW_String_t& aString, NW_Uint32 aCharEncoding )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
+
+ /* As cXmlLibrary does, we support only the following charsets:
+ #define HTTP_iso_10646_ucs_2 0x03E8
+ #define HTTP_iso_8859_1 0x04
+ #define HTTP_us_ascii 0x03
+ #define HTTP_utf_8 0x6A
+ #define HTTP_utf_16 1015
+ */
+ TUint id = 0;
+ if ( aCharEncoding == HTTP_iso_10646_ucs_2 )
+ {
+ id = KCharacterSetIdentifierUcs2;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
+ }
+ else if ( aCharEncoding == HTTP_iso_8859_1 )
+ {
+ id = KCharacterSetIdentifierIso88591;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierIso88591")
+ }
+ else if ( aCharEncoding == HTTP_us_ascii )
+ {
+ id = KCharacterSetIdentifierAscii;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierAscii")
+ }
+ else if ( aCharEncoding == HTTP_utf_8 )
+ {
+ id = KCharacterSetIdentifierUtf8;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierUtf8")
+ }
+ else if ( aCharEncoding == HTTP_utf_16 ) // No such in CharConv.h
+ {
+ id = KCharacterSetIdentifierUcs2;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
+ }
+ else
+ {
+ id = KCharacterSetIdentifierUtf8; // Defaulting to UTF-8
+ PUSHLOG_WRITE(" DEFAULTING to KCharacterSetIdentifierUtf8");
+ }
+
+ PUSHLOG_WRITE_FORMAT(" id: 0x%x",id);
+ __ASSERT_DEBUG( id != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
+
+ // Source
+ PUSHLOG_WRITE_FORMAT(" Storage: 0x%x",NW_String_getStorage(&aString));
+ PUSHLOG_WRITE_FORMAT(" Byte count: %d",NW_String_getByteCount(&aString)-1);
+
+ // We will use NW_String_getByteCount(&aString)-1 as size, because
+ // NW_String_getByteCount(&aString) includes NULL terminator.
+ const TPtrC8 src( NW_String_getStorage(&aString),
+ NW_String_getByteCount(&aString)-1 );
+ HBufC16* ucs2buffer = ConvertToUnicodeL( src, id );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
+ return ucs2buffer;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::InitialiseCharacterSetConverterL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::InitialiseCharacterSetConverterL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::InitialiseCharacterSetConverterL")
+
+ iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
+
+ RFs& fs = iMsvSession->FileSession();
+ iCharacterSetsAvailable =
+ CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( fs );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::InitialiseCharacterSetConverterL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertActionString
+// ---------------------------------------------------------
+//
+TUint CSIContentHandler::ConvertActionString
+ ( const TDesC8& aActionString ) const
+ {
+ const TInt KMatchFound = 0;
+
+ // set to default signal value (to rid ourselves of build warning)
+ TUint actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+
+ if ( aActionString.Compare( KDeleteAction ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgDelete;
+ }
+ else if ( aActionString.Compare( KSignalNone ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalNone;
+ }
+ else if ( aActionString.Compare( KSignalLow ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalLow;
+ }
+ else if ( aActionString.Compare( KSignalMedium ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+ }
+ else if ( aActionString.Compare( KSignalHigh ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalHigh;
+ }
+
+ return actionValue;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::SetSIPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::SetSIPushMsgEntryFieldsL( CSIPushMsgEntry&
+ aSIPushMsgEntry )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
+
+ if ( SiIdFlag() || HrefFlag() )
+ {
+ if ( SiIdFlag() && ( HrefFlag() == EFalse ) )
+ {
+ // Message has only si-id but no href.
+ aSIPushMsgEntry.SetIdL( *iSiIdBuf );
+ }
+ else if ( HrefFlag() && ( SiIdFlag() == EFalse ) )
+ {
+ // If message has no si-id but does have a href, use href as si-id.
+ aSIPushMsgEntry.SetIdL( *iHrefBuf );
+ aSIPushMsgEntry.SetUrlL( *iHrefBuf );
+ }
+ else
+ {
+ // Use si-id and href as is.
+ aSIPushMsgEntry.SetIdL( *iSiIdBuf );
+ aSIPushMsgEntry.SetUrlL( *iHrefBuf );
+ }
+ }
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSiAction ) );
+ if ( ActionFlag() )
+ {
+ aSIPushMsgEntry.SetAction( iPushMsgAction );
+ }
+ else // default if no action explicitly stated
+ {
+ aSIPushMsgEntry.SetAction( CSIPushMsgEntry::ESIPushMsgSignalMedium );
+ }
+
+ // uses default null time value if no explicit date set in message
+ aSIPushMsgEntry.SetCreated( iCreatedTime );
+ aSIPushMsgEntry.SetExpires( iExpiresTime );
+
+ // PCDATA (text) from message
+ if ( DataFlag() )
+ {
+ aSIPushMsgEntry.SetTextL( *iData );
+ }
+
+ TPtrC8 msgHeaderPtr;
+ iMessage->GetHeader( msgHeaderPtr );
+ aSIPushMsgEntry.SetHeaderL( msgHeaderPtr );
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aSIPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aSIPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aSIPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ if ( DataFlag() )
+ {
+ // Display SI message.
+ aSIPushMsgEntry.SetMsgDescriptionL( *iData );
+ }
+ else
+ {
+ // Display URL.
+ __ASSERT_DEBUG( HrefFlag(),
+ ContHandPanic( EPushContHandPanUnspecSiHref ) );
+ const TPtrC url = aSIPushMsgEntry.Url();
+ HBufC* convertedUrl = CPushMtmUtil::ConvertUriToDisplayFormL( url );
+ CleanupStack::PushL( convertedUrl );
+ //
+ aSIPushMsgEntry.SetMsgDescriptionL( *convertedUrl );
+ //
+ CleanupStack::PopAndDestroy( convertedUrl ); // convertedUrl
+ }
+
+ // ******** Push MTM specific processing *********
+
+ /*
+ * Unfortunately in CPushMsgEntryBase there is no such functionality
+ * with which we can reach TMsvEntry as non-const, but we have to
+ * modify the entry's iMtmData2 member somehow. We can do it
+ * with either casting or with modifying and saving the entry
+ * manually after it has been saved by CSIPushMsgEntry. The latter
+ * solution is more expensive so we choose the first.
+ */
+ TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSIPushMsgEntry.Entry() );
+ if ( HrefFlag() )
+ {
+ CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+ else
+ {
+ CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+
+ // *** Set the entry to unread and new state. ***
+
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ProcessingPushMsgEntryL")
+
+ TBool deletePushMsg( EFalse );
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSiAction ) );
+
+ // S60 requirement: if both the href and the message is empty then
+ // delete the msg.
+ if ( HrefFlag() == EFalse && DataFlag() == EFalse )
+ {
+ deletePushMsg = ETrue;
+ }
+
+ // Expiration.
+ if ( !deletePushMsg && ExpiresFlag() )
+ {
+ TTime today;
+ today.UniversalTime();
+#ifdef __TEST_LOG__
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ today.FormatL( dateHolder, KDateFormat );
+ today.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" now date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" now time: <%S>",&timeHolder)
+ iExpiresTime.FormatL( dateHolder, KDateFormat );
+ iExpiresTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" exp date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" exp time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+ // check if message has expiry date before today's date
+ if ( iExpiresTime < today )
+ {
+ PUSHLOG_WRITE("CSIContentHandler already expired")
+ deletePushMsg = ETrue;
+ }
+ }
+
+ // An SI with the action attribute set to “delete” MUST have an
+ // explicitly assigned value for si-id.
+ if ( !deletePushMsg && ActionFlag() )
+ {
+ if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
+ {
+ if ( !SiIdFlag() || ( SiIdFlag() && iSiIdBuf->Length() == 0 ) )
+ {
+ deletePushMsg = ETrue;
+ }
+ }
+ }
+
+ // Handling out of order delivery & Replacement.
+ TMsvId matchingEntryId = KMsvNullIndexEntryId;
+
+ if ( !deletePushMsg && ( SiIdFlag() || HrefFlag() ) && CreatedFlag() )
+ {
+ deletePushMsg = HandleMsgOrderReceptionL( matchingEntryId );
+ }
+
+ if ( !deletePushMsg && ActionFlag() )
+ {
+ // SI with action=signal-none must not be presented to the end-user.
+ // Note. In S60 signal-none behaves the same as delete: the
+ // message is discarded after processing it!
+ if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgSignalNone )
+ {
+ deletePushMsg = ETrue;
+ }
+ // SI with action=delete must also be discarded.
+ else if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
+ {
+ deletePushMsg = ETrue;
+ }
+ }
+
+ // Store message if not marked for deletion.
+ if ( !deletePushMsg )
+ {
+ StoreSIMessageL( matchingEntryId );
+ }
+ else
+ {
+ // The new entry must be discarded.
+ // Delete the corresponding matching entry, too.
+ if ( matchingEntryId != KMsvNullIndexEntryId )
+ {
+ iWapPushUtils->DeleteEntryL( matchingEntryId );
+ }
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::StoreSIMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::StoreSIMessageL( TMsvId aMatchingEntryId )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::StoreSIMessageL")
+
+ CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( siEntry );
+
+ if ( aMatchingEntryId != KMsvNullIndexEntryId )
+ {
+ PUSHLOG_WRITE("Matching SI found");
+ //Delete this old entry
+ iWapPushUtils->DeleteEntryL( aMatchingEntryId );
+ }
+
+ SetSIPushMsgEntryFieldsL( *siEntry );
+ iSavedMsgId = siEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
+
+#ifdef __TEST_LOG__
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ TTime recDateTime = siEntry->ReceivedDate();
+ recDateTime.FormatL( dateHolder, KDateFormat );
+ recDateTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+
+ CleanupStack::PopAndDestroy( siEntry ); // siEntry
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::StoreSIMessageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMsgOrderReceptionL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::HandleMsgOrderReceptionL")
+
+ __ASSERT_DEBUG( ( SiIdFlag() || HrefFlag() ),
+ ContHandPanic( EPushContHandPanNoSiIdOrHrefAttr ) );
+ __ASSERT_DEBUG( CreatedFlag(),
+ ContHandPanic( EPushContHandPanNoCreatedAttr ) );
+
+ CMsvEntrySelection* matchingIdList = NULL;
+ TBool discardPushMsg( EFalse );
+
+ // Get list of matching stored SI messages.
+ if ( SiIdFlag() && iSiIdBuf->Length() != 0 )
+ {
+ matchingIdList = iWapPushUtils->FindSiIdLC( *iSiIdBuf );
+ }
+ else // HrefFlag()
+ {
+ // Use href as si-id.
+ matchingIdList = iWapPushUtils->FindSiIdLC( *iHrefBuf );
+ }
+ const TInt matchingListCount( matchingIdList->Count() );
+ // Note that the count can be greater than 1.
+
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler Count: %d",matchingListCount)
+
+ if ( 0 < matchingListCount && CreatedFlag() )
+ {
+ CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( siEntry );
+
+ // Delete older stored messages and/or mark current message for
+ // deletion if same date or older than stored messages
+ TBool foundOneToBeReplaced = EFalse;
+ for ( TInt count = 0; count < matchingListCount; ++count )
+ {
+ TMsvId matchingSiMsgEntryId( matchingIdList->At(count) );
+
+ siEntry->RetrieveL( *iMsvSession, matchingSiMsgEntryId );
+
+ // Skip date comparisons if creation date not valid -
+ // SI without created attribute never gets replaced.
+ TTime existingSiCreatedTime( siEntry->Created() );
+
+ if ( existingSiCreatedTime == Time::NullTTime() )
+ {
+ // continue;
+ }
+ else
+ {
+ __ASSERT_DEBUG( !foundOneToBeReplaced,
+ ContHandPanic( EPushContHandPanTooManySi ) );
+ if ( foundOneToBeReplaced )
+ {
+ PUSHLOG_WRITE(" Already found one")
+ // Only one SI has to be found.
+ // If the program runs into it, then make a
+ // garbage collection to ensure consistency and
+ // remove other messages found.
+ iWapPushUtils->DeleteEntryL( matchingSiMsgEntryId );
+ // After the 'for' only one SI is allowed that has created
+ // attribute.
+ }
+ else
+ {
+ foundOneToBeReplaced = ETrue; // A match was found.
+ // Check if received SI is newer than existing stored Si
+ // (out of order).
+ if ( iCreatedTime > existingSiCreatedTime )
+ {
+ PUSHLOG_WRITE(" Replacing...")
+ // The new SI replaces the existing.
+ aMatchingEntryId = matchingSiMsgEntryId;
+ discardPushMsg = EFalse;
+ }
+ else if ( iCreatedTime <= existingSiCreatedTime )
+ {
+ PUSHLOG_WRITE(" Discarding...")
+ // Received SI is older than existing stored Si.
+ discardPushMsg = ETrue;
+ }
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( siEntry ); // siEntry
+ }
+
+ CleanupStack::PopAndDestroy( matchingIdList ); // matchingIdList
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::HandleMsgOrderReceptionL")
+ return discardPushMsg;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertDateTimeL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::ConvertDateTimeL( const TDesC& aDateTime,
+ TTime& aConvertedDate ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertDateTimeL")
+
+ TTime convertedTime = Time::NullTTime();
+ TBool convertedOK = EFalse;
+
+ // check supplied descriptor is the correct length
+ if ( aDateTime.Length() != KValidUTCLength )
+ {
+ PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ TBuf<KValidUTCLength> str = aDateTime;
+ PUSHLOG_WRITE_FORMAT(" datetime str: <%S>",&str)
+ if ( !IsValidUTCTime( str ) )
+ {
+ // The UTC time is invalid.
+ PUSHLOG_WRITE(" invalid UTC time")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // Now 'str' is in format YYYYMMDD:HHMMSS
+ // Adjust UTC time to zero offset TTime. Only month and day
+ // is effected.
+ const TInt KFirstMonthChar = KValidTTimeMonthStart;
+ const TInt KSecondMonthChar = KFirstMonthChar + 1;
+ const TInt KFirstDayChar = KValidTTimeDayStart;
+ const TInt KSecondDayChar = KFirstDayChar + 1;
+ // Month.
+ // check for special case of month = 10 which becomes 09
+ if ( str[KFirstMonthChar] == '1' && str[KSecondMonthChar] == '0' )
+ {
+ str[KFirstMonthChar] = '0';
+ str[KSecondMonthChar] = '9';
+ }
+ else
+ {
+ // month value is either 11, 12 or less than 10, ie 1 - 9.
+ // reduce day by one, eg 11 becomes 10, 12 becomes 11, 09 becomes 08
+ str[KSecondMonthChar]--;
+ }
+
+ // Day.
+ // check for special cases 10, 20, 30
+ if ( str[KSecondDayChar] == '0' )
+ {
+ // reduce day by 1, ie 10 becomes 09, 20 becomes 19 ...
+ str[KSecondDayChar] = '9';
+ str[KFirstDayChar]--;
+ }
+ else
+ {
+ // day value is between 1 and 9 so reduce day by one
+ // eg 29 becomes 28, 11 bcomes 10, 31 becomes 30
+ str[KSecondDayChar]--;
+ }
+
+ // string is now syntaxically correct, but Set() will return an
+ // error if it's semantically incorrect.
+ User::LeaveIfError( convertedTime.Set( str ) );
+ convertedOK = ETrue;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertDateTimeL")
+ aConvertedDate = convertedTime;
+ return convertedOK;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertOpaqueToUtcL
+// ---------------------------------------------------------
+//
+HBufC* CSIContentHandler::ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertOpaqueToUtcL")
+
+ const TInt opaqueSize = aOpaque.Size();
+ if ( KValidMaxEncodedDateTimeSize < opaqueSize )
+ {
+ PUSHLOG_WRITE_FORMAT(" Bad OPAQUE size: <%d>",opaqueSize)
+ User::Leave( KErrCorrupt );
+ }
+
+ HBufC* converted = HBufC::NewMaxLC( KValidUTCLength );
+ TPtr convertedPtr = converted->Des();
+ convertedPtr.SetLength( 0 ); // Reset.
+
+ // Split up each opaque byte to two bytes.
+ TUint8 byte( 0x00 );
+ TUint8 high( 0x00 );
+ TUint8 low( 0x00 );
+ TInt i = 0;
+ for ( i = 0; i < opaqueSize; ++i )
+ {
+ byte = aOpaque[i];
+ high = (TUint8)( (byte & 0xF0) >> 4 );
+ low = (TUint8)( byte & 0x0F );
+ // Check high and low if they are in the range [0-9].
+ if ( 9 < high || 9 < low )
+ {
+ PUSHLOG_WRITE_FORMAT2(" Overflow: <%d, %d>",high,low)
+ User::Leave( KErrOverflow );
+ }
+ convertedPtr.Append( TChar(KAsciiZeroCharCode + high) );
+ convertedPtr.Append( TChar(KAsciiZeroCharCode + low) );
+ }
+
+ // A valid UTC %Datetime contains 14 numerical characters and 6
+ // non-numerical: “1999-04-30T06:40:00Z”.
+ // So fill the remaining bytes with zeros.
+ for ( i = convertedPtr.Length(); i < KValidUTCNumericals; ++i )
+ {
+ convertedPtr.Append( TChar('0') );
+ }
+
+ // Insert the necessary non-numerical boundary characters.
+ i = 0;
+ // Skip year and insert '-'. (Don't forget to increase i with 1 each time!)
+ i += KValidUTCYearBlockLength;
+ convertedPtr.Insert( i++, KCharMinus );
+ // Skip month and insert '-'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharMinus );
+ // Skip day and insert 'T'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharT );
+ // Skip hour and insert ':'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharColon );
+ // Skip minute and insert ':'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharColon );
+ // Skip second and insert 'Z'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharZ );
+
+ CleanupStack::Pop( converted ); // converted
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertOpaqueToUtcL")
+ return converted;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::IsValidUTCTime
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::IsValidUTCTime( TDes& aDateTime ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::IsValidUTCTime")
+
+ TBool isValid( ETrue ); // Return value.
+
+ // Now aDateTime has to be in format YYYY-MM-DDTHH:MM:SSZ
+
+ // check supplied descriptor is the correct length
+ if ( aDateTime.Length() != KValidUTCLength )
+ {
+ PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
+ isValid = EFalse;
+ }
+ else
+ {
+ // strip out formatting characters
+ TInt formatCharPos = 4;
+ aDateTime.Delete( formatCharPos, 1 );
+ // now move through two characters at a time and remove other chars
+ // to just leave digits
+ const TInt KRemainingFormatChars = 5;
+ TInt i( 0 );
+ for ( i = 0; i < KRemainingFormatChars; ++i )
+ {
+ formatCharPos += 2;
+ aDateTime.Delete( formatCharPos, 1 );
+ }
+
+ // Now aDateTime has to be in format YYYYMMDDHHMMSS
+
+ __ASSERT_DEBUG( aDateTime.Length() == KValidTTimeLength,
+ ContHandPanic( EPushContHandPanBadTTimeLength ) );
+
+ // now have UTC string stripped of format characters - check remaining
+ // characters are all digits - YYYYMMDDHHMMSS
+ TChar ch;
+ for ( i = 0; i < KValidTTimeLength; ++i )
+ {
+ ch = aDateTime[i];
+ if ( ch.IsDigit() == EFalse )
+ {
+ PUSHLOG_WRITE_FORMAT(" not digit <%d>",i)
+ isValid = EFalse;
+ }
+ }
+
+ if ( isValid )
+ {
+ /*
+ In YYYYMMDDHHMMSS
+ YYYY = 4 digit year ("0000" ... "9999")
+ MM = 2 digit month ("01"=January, "02"=February ... "12"=December)
+ DD = 2 digit day ("01", "02" ... "31")
+ HH = 2 digit hour, 24-hour timekeeping system ("00" ... "23")
+ MM = 2 digit minute ("00" ... "59")
+ SS = 2 digit second ("00" ... "59")
+ */
+ TInt err;
+ TUint val;
+ // Do not check year. There are no restrictions.
+ // Check month.
+ TLex parser( aDateTime.Mid( KValidTTimeMonthStart,
+ KValidTTimeBlockLength ) );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" month: <%d>",val)
+ if ( val < 1 || 12 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ // Check day.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeDayStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" day: <%d>",val)
+ if ( val < 1 || 31 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+ // Check hour.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeHourStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" hour: <%d>",val)
+ if ( 23 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+ // Check minute.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeMinuteStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" min: <%d>",val)
+ if ( 59 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+ // Check second.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeSecondStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" sec: <%d>",val)
+ if ( 59 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+
+ // insert colon seperating date from time
+ const TInt KColonPosition = 8;
+ aDateTime.Insert( KColonPosition, KCharColon );
+
+ // Now aDateTime has to be in format YYYYMMDD:HHMMSS
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::IsValidUTCTime")
+ return isValid; // aDateTime contains a modified buffer.
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::AttributeToTTimeL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::AttributeToTTimeL
+ ( NW_DOM_AttributeHandle_t& aAttrHandle,
+ TTime& aConvertedDate ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::AttributeToTTimeL")
+
+ TBool gotDate = EFalse;
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ NW_DOM_AttrVal_t attrVal;
+
+ // It is expected to be String or Opaque.
+ // It may be Opaque, to which we will need a NW_DOM_AttrVal_t structure.
+ stat = NW_DOM_AttributeHandle_getNextVal( &aAttrHandle, &attrVal );
+
+ if ( stat != NW_STAT_WBXML_ITERATE_MORE )
+ {
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ }
+ else
+ {
+ NW_Uint16 valType = NW_DOM_AttrVal_getType( &attrVal );
+
+ if ( valType == NW_DOM_ATTR_VAL_STRING )
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ //
+ stat = NW_DOM_AttrVal_toString( &attrVal, val, iCharEncoding );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 dataPtr( storage, length );
+ HBufC* dataBuf = HBufC::NewMaxLC( dataPtr.Length() );
+ dataBuf->Des().Copy( dataPtr );
+ gotDate = ConvertDateTimeL( *dataBuf, aConvertedDate );
+
+ CleanupStack::PopAndDestroy( 2, stringOwner ); // dataBuf,
+ // stringOwner
+ }
+ else if ( valType == NW_DOM_ATTR_VAL_OPAQUE )
+ {
+ NW_Uint32 len = 0;
+ NW_Byte* data = NW_DOM_AttrVal_getOpaque( &attrVal, &len );
+ User::LeaveIfNull( data );
+ TPtrC8 dataPtr( data, len );
+
+ HBufC* dateTime = ConvertOpaqueToUtcL( dataPtr );
+ CleanupStack::PushL( dateTime );
+ gotDate = ConvertDateTimeL( *dateTime, aConvertedDate );
+ CleanupStack::PopAndDestroy( dateTime ); // dateTime
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::AttributeToTTimeL")
+ return gotDate; // aConvertedDate contains the result.
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CancelHandleMessage()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::CancelHandleMessage")
+ Cancel();
+ PUSHLOG_LEAVEFN("CSIContentHandler::CancelHandleMessage")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CSIContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::DoCancel")
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CSIContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::RunL()
+ {
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+ User::LeaveIfError( iStatus.Int() );
+
+ // use active state machine routine to manage activites:
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+ case EFilteringAndParsing:
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ TInt ret = KErrNone;
+ PUSHLOG_WRITE("CSIContentHandler::RunL : before trapping parsing.")
+ TRAP(ret, ParsePushMsgL());
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunL : after trapping parsing. ret = %d", ret)
+ if ( ret != KErrNone)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::RunL : Parsing failed. discarding message.")
+ iState = EDone;
+ IdleComplete();
+ }
+ }
+ break;
+ }
+ case EProcessing:
+ {
+ ProcessingPushMsgEntryL();
+ break;
+ }
+ case EDone:
+ {
+ PUSHLOG_WRITE("CSIContentHandler EDone")
+ Complete( KErrNone );
+ break;
+ }
+ default:
+ {
+ // JIC.
+ PUSHLOG_WRITE("CSIContentHandler default Done")
+ Complete( KErrNone );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CSIContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSIContentHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CSIContentHandler.
+*
+*/
+
+
+
+#ifndef __CSICONTENTHANDLER_H__
+#define __CSICONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <msvstd.h>
+#include <nw_dom_attribute.h>
+#include <CharConv.h>
+
+// CONSTANTS
+
+const TUid KUidPushSIContentHandler = { EUidPushSIContentHandler };
+_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
+
+// FORWARD DECLARATIONS
+
+class CSIPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* CSIContentHandler handles Service Indication content
+*
+* This handler takes ownership of the SI message and processes it
+* according to the Reception rules
+* [WAP Service Indication version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* OVERVIEW:
+* The main body of this class and its functionality lies within
+* HandleMessage (asynchonous). This :
+* 1. takes ownership of the push message
+* 2. validates the message and generates a parsed document tree
+* 3. extracts the message attribute values from document tree
+* 4. processes the received message
+* 5. finishes
+*
+* NB: A received message with no creation date will be stored (unless
+* its action is set to delete or the expiry condition is met). This
+* means that the si-id in the message store will not be unique.
+*/
+class CSIContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CSIContentHandler* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSIContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CSIContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+ /**
+ * Parse the current message. If the SI is wbxml encoded then it is
+ * decoded first to XML format. Then the message details (attributes)
+ * are earned from the XML tree.
+ * @return None.
+ */
+ void ParsePushMsgL();
+
+ /**
+ * Parse the indication element.
+ * @param aIndication The element to be parsed.
+ * @return None.
+ */
+ void ParseIndicationL( NW_DOM_ElementNode_t& aIndication );
+
+ /**
+ * Parse an attribute of the indication element.
+ * @param aAttrHandle The attribute to be parsed.
+ * @return None.
+ */
+ void ParseIndAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+ /**
+ * Parse the text of the indication element.
+ * @param aTextNode The text node to be parsed.
+ * @return None.
+ */
+ void ParseTextL( NW_DOM_TextNode_t& aTextNode );
+
+
+ /**
+ * Converts the given buffer to unicode (UCS-2).
+ * @param aSrc Source text.
+ * @param aCharSetId Character set ID.
+ * @return The UCS-2 unicode buffer.
+ */
+ HBufC16* ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId );
+
+ /**
+ * Converts the given buffer to unicode (UCS-2).
+ * @param aString Source text.
+ * @param aCharEncoding Character encoding.
+ * @return The UCS-2 unicode buffer.
+ */
+ HBufC16* ConvertToUnicodeL( NW_String_t& aString, NW_Uint32 aCharEncoding );
+
+ /**
+ * Initialise the converter.
+ * @return None.
+ */
+ void InitialiseCharacterSetConverterL();
+
+
+ /**
+ * Convert the action string to a representative numeric value to
+ * facilitate storing the message.
+ * @param aActionString The attribute value indicating the action level
+ * eg 'signal-high'
+ * @return TUint: a value representing the action type.
+ */
+ TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+ /**
+ * The entry fields are set to the correct values.
+ * @return None.
+ */
+ void SetSIPushMsgEntryFieldsL( CSIPushMsgEntry& aSIPushMsgEntry );
+
+ /**
+ * Do the final processing of the message according to the OMA and S60
+ * requirements.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Store the new message to Messaging.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * @return None.
+ */
+ void StoreSIMessageL( TMsvId aMatchingEntryId );
+
+ /**
+ * Handle message order reception.
+ * NB: A received message with no creation date will be stored (unless
+ * its action is set to delete or the expiry condition is met). This
+ * means that the si-id in the message store will not be unique.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * It is changed only if the function returns EFalse (replace)!
+ * @return ETrue if the entry has to be discarded.
+ */
+ TBool HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId );
+
+ // conversion utilities
+
+ /**
+ * Convert UTC date time into native TTime format. Method can leave.
+ * @param aDateTime The UTC string representing the date and time.
+ * @param aConvertedDate Member date variable passed in to accept
+ * converted UTC date as TTime varaible.
+ * @return TBool indicates if conversion successful (ETrue) or
+ * conversion failed (EFalse)
+ */
+ TBool ConvertDateTimeL( const TDesC& aDateTime,
+ TTime& aConvertedDate ) const;
+
+ /**
+ * Convert OPAQUE data to UTC date time as specified in SI spec.
+ * @param aOpaque OPAQUE data.
+ * @return The UTC time.
+ */
+ HBufC* ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const;
+
+ /**
+ * Check given UTC time string conforms to expected format:
+ * YYYY-MM-DDTHH:MM:SSZ and strip out formatting characters
+ * then validate the remaining characters are all digits.
+ * If validated then add TTime formating character so final
+ * string returned will be of the format YYYYMMDD:HHMMSS.
+ * @param aDateTime UTC string which is validated and returned.
+ * @return boolean: indicates if given date is valid (ETrue)
+ * or not (EFalse)
+ */
+ TBool IsValidUTCTime( TDes& aDateTime ) const;
+
+ /**
+ * Convert OPAQUE or STRING attribute to TTime.
+ * @param aAttrHandle Handle to the attribute.
+ * @param aConvertedDate The resulted TTime.
+ * @return ETrue if the conversion succeeded.
+ */
+ TBool AttributeToTTimeL( NW_DOM_AttributeHandle_t& aAttrHandle,
+ TTime& aConvertedDate ) const;
+
+ // Attribute flags
+
+ /**
+ * Flag whether message has an action attribute
+ * @param aAction boolean to set flag to -
+ * ETrue for action attrib present
+ * EFalse for no action attrib.
+ */
+ inline void SetActionFlag( TBool aAction );
+
+ /**
+ * Check status of action flag to see if message has an action
+ * attribute.
+ * @return TBool ETrue - action attribute present in message
+ * EFalse - no action attribute.
+ */
+ inline TBool ActionFlag() const;
+
+ /**
+ * Flag whether message has a created date attribute.
+ * @param aCreated boolean to set flag to -
+ * ETrue for si-created attrib present
+ * EFalse for no si-created attrib
+ */
+ inline void SetCreatedFlag( TBool aCreated );
+
+ /**
+ * Check status of created flag to see if message has a si-created
+ * attribute.
+ * @return TBool ETrue - si-created attribute present in message
+ * EFalse - no si-created attribute
+ */
+ inline TBool CreatedFlag() const;
+
+ /**
+ * Flag whether message has a Href attribute
+ * @param aHref boolean to set flag to -
+ * ETrue for Href attrib present
+ * EFalse for no href attrib
+ */
+ inline void SetHrefFlag( TBool aHref );
+
+ /**
+ * Check status of href flag to see if message has an href attribute.
+ * @return TBool
+ * ETrue - href attribute present in message
+ * EFalse - no href attribute
+ */
+ inline TBool HrefFlag() const;
+
+ /**
+ * Flag whether message has an expiry date attribute (si-expires).
+ * @param aExpires boolean to set flag to -
+ * ETrue for si-expires present
+ * EFalse for no si-expires date
+ */
+ inline void SetExpiresFlag( TBool aExpires );
+
+ /**
+ * Check status of flag to see if message has an expiry date attribute.
+ * @return TBool
+ * ETrue - si-expires attribute present in message
+ * EFalse - no si-expires attribute
+ */
+ inline TBool ExpiresFlag() const;
+
+ /**
+ * Flag whether message has a si-id attribute
+ * @param aSiId boolean to set flag to -
+ * ETrue for si-id attrib present
+ * EFalse for no si-id attrib
+ */
+ inline void SetSiIdFlag( TBool aSiId );
+
+ /**
+ * Check status of flag to see if message has an si-id attribute.
+ * @return TBool
+ * ETrue - si-id attribute present in message
+ * EFalse - no si-id attribute
+ */
+ inline TBool SiIdFlag() const;
+
+ /**
+ * Flag whether message has a Data attribute (text)
+ * @param aData
+ * boolean to set flag to - ETrue for data attrib present
+ * EFalse for no data attrib
+ */
+ inline void SetDataFlag( TBool aData );
+
+ /**
+ * Check status of data flag to see if message has any data.
+ * @return TBool
+ * ETrue - data attribute present in message
+ * EFalse - no data attribute
+ */
+ inline TBool DataFlag() const;
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Terminates any activity
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Step through the various representative states for handling a message
+ * States:
+ * EGarbageCollecting - Deleting expired SI msgs from messaging
+ * EFilteringAndParsing - Filter push msg according to Service message
+ * settings and Parses SI push message (retrieving the
+ * attributes)
+ * EProcessing - Processing the current entry. OMA and S60 rules are
+ * applied, then save or update SI msg in the Msg store
+ * EDone - Clean up, complete observer
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error so clean up and
+ * return.
+ * @return Error code to scheduler.
+ */
+ TInt RunError(TInt aError);
+
+ private: // Data
+
+ enum
+ {
+ EAction = 0x01,
+ ECreated = 0x02,
+ EHref = 0x04,
+ EExpires = 0x08,
+ ESiId = 0x10,
+ EData = 0x20
+ };
+
+ enum TState
+ {
+ EGarbageCollecting,
+ EFilteringAndParsing,
+ EProcessing,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the message saved.
+ TUint32 iAttributes; ///< Attribute indication (set or not).
+ TInt iPushMsgAction; ///< Action attribute
+ HBufC* iHrefBuf; ///< Href attribute. Has.
+ HBufC* iSiIdBuf; ///< Si-id attribute. Has.
+ TTime iExpiresTime; ///< Expiration attribute.
+ TTime iCreatedTime; ///< Created attribute.
+ HBufC* iData; ///< Message text. Has.
+
+ NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
+
+ //
+ CCnvCharacterSetConverter* iCharacterSetConverter; ///< Owned.
+ CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iCharacterSetsAvailable; ///< Owned.
+ };
+
+#include "CSIContentHandler.inl"
+
+#endif // __CSICONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSIContentHandler.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline functions.
+*
+*/
+
+
+
+inline void CSIContentHandler::SetActionFlag(TBool aAction)
+ {
+ if ( aAction )
+ {
+ iAttributes |= EAction;
+ }
+ else
+ {
+ iAttributes &=~ EAction;
+ }
+ }
+
+inline TBool CSIContentHandler::ActionFlag() const
+ {
+ return iAttributes & EAction;
+ }
+
+inline void CSIContentHandler::SetCreatedFlag( TBool aCreated )
+ {
+ if ( aCreated )
+ {
+ iAttributes |= ECreated;
+ }
+ else
+ {
+ iAttributes &=~ ECreated;
+ }
+ }
+
+inline TBool CSIContentHandler::CreatedFlag() const
+ {
+ return iAttributes & ECreated;
+ }
+
+inline void CSIContentHandler::SetHrefFlag( TBool aHref )
+ {
+ if ( aHref )
+ {
+ iAttributes |= EHref;
+ }
+ else
+ {
+ iAttributes &=~ EHref;
+ }
+ }
+
+inline TBool CSIContentHandler::HrefFlag() const
+ {
+ return iAttributes & EHref;
+ }
+
+inline void CSIContentHandler::SetExpiresFlag( TBool aExpires )
+ {
+ if ( aExpires )
+ {
+ iAttributes |= EExpires;
+ }
+ else
+ {
+ iAttributes &=~ EExpires;
+ }
+ }
+
+inline TBool CSIContentHandler::ExpiresFlag() const
+ {
+ return iAttributes & EExpires;
+ }
+
+inline void CSIContentHandler::SetSiIdFlag( TBool aSiId )
+ {
+ if ( aSiId )
+ {
+ iAttributes |= ESiId;
+ }
+ else
+ {
+ iAttributes &=~ ESiId;
+ }
+ }
+
+inline TBool CSIContentHandler::SiIdFlag() const
+ {
+ return iAttributes & ESiId;
+ }
+
+inline void CSIContentHandler::SetDataFlag( TBool aData )
+ {
+ if ( aData )
+ {
+ iAttributes |= EData;
+ }
+ else
+ {
+ iAttributes &=~ EData;
+ }
+ }
+
+inline TBool CSIContentHandler::DataFlag() const
+ {
+ return iAttributes & EData;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSLContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1221 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CSLContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CSLContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushAuthenticationUtilities.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmAutoFetchOperation.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "sl_dict.h"
+#include "PushContentHandlerUtils.h"
+#include <push/cslpushmsgentry.h>
+#include <msvids.h>
+#include <apgtask.h>
+#include <apgcli.h>
+#include <w32std.h>
+#include <PushMtmUi.rsg>
+#include <nw_dom_node.h>
+#include <nw_dom_document.h>
+#include <nw_dom_element.h>
+#include <nw_dom_text.h>
+#include <nw_wbxml_dictionary.h>
+#include <nw_string_char.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+
+// CONSTANTS
+
+// sl attributes / elements
+_LIT8( KSl, "sl" );
+_LIT8( KHref, "href" );
+_LIT8( KAction, "action" );
+
+// action attribute literals
+_LIT8( KExecHigh,"execute-high" );
+_LIT8( KExecLow, "execute-low" );
+_LIT8( KCache, "cache" );
+
+// Text SL MIME type
+_LIT( KSlTextContentType, "text/vnd.wap.sl" );
+
+// Browser command to fetch an URL. See Browser API Specification!
+_LIT( KBrowserCmdFetchUrl, "4 " );
+const TUid KBrowserAppUid = { 0x10008D39 };
+
+const TInt KNoOfDictArrays = 1;
+
+/// Autofetch time delay in seconds.
+const TInt KAutofetchDelayInSec = 5;
+
+// file monitored by browser
+_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CSLContentHandler::NewL
+// ---------------------------------------------------------
+//
+CSLContentHandler* CSLContentHandler::NewL()
+ {
+ CSLContentHandler* self = new (ELeave) CSLContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::~CSLContentHandler
+// ---------------------------------------------------------
+//
+CSLContentHandler::~CSLContentHandler()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::~CSLContentHandler")
+
+ Cancel();
+ delete iFetchOp;
+ delete iHrefBuf;
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::~CSLContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CSLContentHandler
+// ---------------------------------------------------------
+//
+CSLContentHandler::CSLContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId ),
+ iPushMsgAction( KErrNotFound ),
+ iSaveAsRead( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ConstructL")
+
+ CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( PushSL );
+ User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
+ CleanupStack::PopAndDestroy( PushSL );
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+ PUSHLOG_LEAVEFN("CSLContentHandler::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+ if(iPushSLEnabled)
+ iState = EFilteringAndParsing;
+ else
+ iState = EDone;
+
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::CollectGarbageL")
+ }
+
+
+// ---------------------------------------------------------
+// CSLContentHandler::ParsePushMsgL
+// Note that cXML parser dosn't do any validation!
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ParsePushMsgL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ParsePushMsgL")
+
+ TPtrC8 bodyPtr;
+ iMessage->GetMessageBody( bodyPtr );
+ // If there is no body in the message leave with an error
+ if ( bodyPtr.Size() == 0 )
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: Empty body")
+ User::Leave( KErrCorrupt );
+ }
+
+ TPtrC contentType;
+ iMessage->GetContentType( contentType );
+ PUSHLOG_WRITE_FORMAT(" Content type <%S>",&contentType)
+
+ // Add SL dictionary.
+ NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
+ { (NW_WBXML_Dictionary_t*)&NW_SL_WBXMLDictionary };
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ RWbxmlDictionary wbxmlDict;
+ wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
+ CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
+
+ NW_TinyDom_Handle_t domHandle;
+ NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
+ NW_Int32 length = (NW_Int32)bodyPtr.Size();
+ NW_Bool encoded = ( contentType.CompareF( KSlTextContentType ) == 0 ) ?
+ NW_FALSE : NW_TRUE;
+ NW_Uint32 publicID = NW_SL_PublicId;
+ NW_Bool extTNotStringTable = NW_FALSE; // What is this?
+ NW_DOM_NodeType_t type = 0;
+ /**********************************
+ * Root of DOM
+ ***********************************/
+ CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
+ CleanupStack::PushL( docTreeOwner );
+ NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
+ (
+ &domHandle,
+ buffer,
+ length,
+ encoded,
+ publicID,
+ extTNotStringTable
+ );
+ if (!domNode)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: domNode is Null")
+ }
+ User::LeaveIfNull( domNode );
+ docTreeOwner->SetDocTree( domNode );
+
+ type = NW_DOM_Node_getNodeType( domNode );
+ if ( type != NW_DOM_DOCUMENT_NODE )
+ {
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not Document node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
+
+ /**********************************
+ * ELEMENT sl
+ ***********************************/
+ // first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
+ TBool domNodeHasChildNodes = EFalse;
+ domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
+ if (!domNodeHasChildNodes)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: No SL element present in the dom tree. Message corrupted.")
+ User::Leave( KErrCorrupt );
+ }
+
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: before calling getDocumentElement")
+ NW_DOM_ElementNode_t* slElement =
+ NW_DOM_DocumentNode_getDocumentElement( domNode );
+ if (!slElement)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: slElement is Null")
+ }
+ User::LeaveIfNull( slElement );
+
+ type = NW_DOM_Node_getNodeType( slElement );
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* name = NW_String_new();
+ User::LeaveIfNull( name );
+ stringOwner->SetString( name );
+ stat = NW_DOM_Node_getNodeName( slElement, name );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* nameBuf = NW_String_getStorage( name );
+ NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
+ TPtrC8 namePtr( nameBuf, nameLen );
+
+ if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSl ) != 0 )
+ {
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not sl element node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ /**********************************
+ * Attributes of ELEMENT sl
+ ***********************************/
+ if ( NW_DOM_ElementNode_hasAttributes( slElement ) )
+ {
+ NW_DOM_AttributeListIterator_t attrIter;
+ stat = NW_DOM_ElementNode_getAttributeListIterator
+ ( slElement, &attrIter );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+ NW_DOM_AttributeHandle_t attrHandle;
+ while( NW_DOM_AttributeListIterator_getNextAttribute
+ ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
+ {
+ ParseSlAttributeL( attrHandle );
+ }
+ }
+
+ // Cleanup.
+ CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
+
+ // if 'action' attribute not specified, the value 'execute-low' is used.
+ if ( !ActionFlag() )
+ {
+ iPushMsgAction = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" Defaulting to ActionFlag: %d",iPushMsgAction)
+ }
+
+ iState = EProcessing;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::ParsePushMsgL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ParseSlAttributeL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ParseSlAttributeL
+ ( NW_DOM_AttributeHandle_t& aAttrHandle )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ParseSlAttributeL")
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ CStringOwner* attrNameOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( attrNameOwner );
+
+ NW_String_t* attrName = NW_String_new();
+ User::LeaveIfNull( attrName );
+ attrNameOwner->SetString( attrName );
+
+ // Get the name of the attribute.
+ stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* attrNameBuf = NW_String_getStorage( attrName );
+ NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
+ TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
+
+ if ( attrNamePtr.CompareF( KHref ) == 0 )
+ {
+ if ( !HrefFlag() )
+ {
+ HBufC* tempHrefBuf = NULL;
+
+ CStringOwner* valOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( valOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ valOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
+ {
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 prefixPtr( storage, length );
+ tempHrefBuf = HBufC::NewMaxL( length );
+ // No leavable after it!!! until...
+ tempHrefBuf->Des().Copy( prefixPtr );
+ }
+
+ CleanupStack::PopAndDestroy( valOwner ); // valOwner
+
+ if ( tempHrefBuf )
+ {
+ if ( tempHrefBuf->Length() == 0 )
+ {
+ // Zero length Href is considered as nothing.
+ PUSHLOG_WRITE(" Zero length HrefFlag");
+ }
+ else
+ {
+ iHrefBuf = tempHrefBuf; // ...until here.
+ SetHrefFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
+ }
+ }
+ }
+ }
+ else if ( attrNamePtr.CompareF( KAction ) == 0 )
+ {
+ if ( !ActionFlag() )
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 actionPtr( storage, length );
+
+ iPushMsgAction = ConvertActionString( actionPtr );
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
+
+ CleanupStack::PopAndDestroy( stringOwner );
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ ContHandPanic( EPushContHandPanUnexpSlToken ) );
+ }
+
+ CleanupStack::PopAndDestroy( attrNameOwner ); // attrNameOwner
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::ParseSlAttributeL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ConvertActionString
+// ---------------------------------------------------------
+//
+TUint CSLContentHandler::ConvertActionString
+ ( const TDesC8& aActionString ) const
+ {
+ const TInt KMatchFound = 0;
+
+ // if 'action' attribute not specified, the value 'execute-low' is used.
+ TUint actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+
+ if ( aActionString.Compare( KExecHigh ) == KMatchFound )
+ {
+ actionValue = CSLPushMsgEntry::ESLPushMsgExecuteHigh;
+ }
+ else if ( aActionString.Compare( KExecLow ) == KMatchFound )
+ {
+ actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+ }
+ else if ( aActionString.Compare( KCache ) == KMatchFound )
+ {
+ actionValue = CSLPushMsgEntry::ESLPushMsgExecuteCache;
+ }
+
+ return actionValue;
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::SetSlPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::SetSlPushMsgEntryFieldsL( CSLPushMsgEntry&
+ aSlPushMsgEntry ) const
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
+
+ // Set URL and Action fields.
+ if ( HrefFlag() )
+ {
+ aSlPushMsgEntry.SetUrlL( *iHrefBuf );
+ }
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSlAction ) );
+ if ( ActionFlag() )
+ {
+ aSlPushMsgEntry.SetAction( iPushMsgAction );
+ }
+ else // if not specified, the value 'execute-low' is used.
+ {
+ aSlPushMsgEntry.SetAction( CSLPushMsgEntry::ESLPushMsgExecuteLow );
+ }
+
+ // Set all the relevant header fields.
+ TPtrC8 msgHeaderPtr;
+ iMessage->GetHeader( msgHeaderPtr );
+ aSlPushMsgEntry.SetHeaderL( msgHeaderPtr );
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aSlPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aSlPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aSlPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ // Read from resource.
+ HBufC* description =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_INBOX_SERV_MSG );
+ aSlPushMsgEntry.SetMsgDescriptionL( *description );
+ CleanupStack::PopAndDestroy( description );
+
+ // ******** Push MTM specific processing *********
+
+ /*
+ * Unfortunately in CPushMsgEntryBase there is no such functionality
+ * with which we can reach TMsvEntry as non-const, but we have to
+ * modify the entry's iMtmData2 member somehow. We can do it
+ * with either casting or with modifying and saving the entry
+ * manually after it has been saved by CSLPushMsgEntry. The latter
+ * solution is more expensive so we choose the first.
+ */
+ TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSlPushMsgEntry.Entry() );
+ if ( HrefFlag() )
+ {
+ CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+ else
+ {
+ CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+
+ // Indication is required if the entry is saved as 'read' (delete &
+ // replacement notification). It can happen only in case of SL message.
+ // Otherwise the flag has to be cleared!
+ if ( !iSaveAsRead )
+ {
+ // Saving as unread & new.
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+ CPushMtmUtil::ResetAttrs( tEntry, EPushMtmReadButContentChanged );
+ }
+ else
+ {
+ // Saving as read.
+ tEntry.SetNew( EFalse );
+ tEntry.SetUnread( EFalse );
+ CPushMtmUtil::SetAttrs( tEntry, EPushMtmReadButContentChanged );
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ProcessingPushMsgEntryL")
+
+ TBool discardPushMsg( EFalse );
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSlAction ) );
+
+ // S60 requirement: if the href is empty then delete (discard) the msg.
+ if ( HrefFlag() == EFalse )
+ {
+ PUSHLOG_WRITE(" No SL Href.")
+ discardPushMsg = ETrue;
+ }
+ else
+ {
+ __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
+ ContHandPanic( EPushContHandPanUnspecSlHref ) );
+
+ // The message will not be discarded
+ discardPushMsg = EFalse;
+
+ CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
+ ( *iHrefBuf, KUidWapPushMsgSL );
+ TInt matchingListCount = matchingUrlList->Count();
+ PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
+
+ // Only one SL is allowed with the same Url, so leave the first and
+ // delete the others.
+ if ( 1 < matchingListCount )
+ {
+ for ( TInt count = 1; count < matchingListCount; ++count )
+ {
+ iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
+ }
+ matchingListCount = 1; // Only one remains.
+ }
+
+ if ( 0 < matchingListCount )
+ {
+ // Find msg of the same href and discard it if it has a lower or
+ // the same action value.
+ CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( matchingSl );
+
+ const TMsvId matchingId = matchingUrlList->At(0);
+ matchingSl->RetrieveL( *iMsvSession, matchingId );
+
+ if ( iPushMsgAction <= matchingSl->Action() )
+ {
+ PUSHLOG_WRITE(" SL: not higher action")
+ discardPushMsg = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( matchingSl ); // matchingSl,
+ }
+
+ CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
+ }
+
+ if ( discardPushMsg )
+ {
+ // Nothing to do.
+ PUSHLOG_WRITE(" SL discarded.")
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ iState = HandleServiceInvocationL();
+ IdleComplete();
+ }
+
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanSlMsgIdSet ) );
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleServiceInvocationL
+// ---------------------------------------------------------
+//
+TInt CSLContentHandler::HandleServiceInvocationL() const
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::HandleServiceInvocationL")
+
+ TInt nextState = ESavePushMsgEntry;
+
+ if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+ {
+ PUSHLOG_WRITE(" SL cache");
+ TBool isAuthenticated = TPushAuthenticationUtil::
+ AuthenticateMsgL( *iMtmSettings, *iMessage );
+ if ( !isAuthenticated )
+ {
+ PUSHLOG_WRITE(" Not authenticated");
+ // The message is placed to Inbox.
+ nextState = ESavePushMsgEntry;
+ }
+ else
+ {
+ // Authenticated. Fetch SL-cache.
+ nextState = EFetching;
+ }
+ }
+
+ else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteLow )
+ {
+ PUSHLOG_WRITE(" SL execute-low")
+ // It is independent from Automatic/Manual setting and WL
+ // authentication is not applied. The message is placed to Inbox
+ // for manual downloading.
+ nextState = ESavePushMsgEntry;
+ }
+
+ else // ESLPushMsgExecuteHigh
+ {
+ PUSHLOG_WRITE(" SL execute-high");
+ // If the settings is Manual or it does not pass the WL authentication
+ // then it is placed to Inbox for manual downloading.
+ // If the setting is Automatic and it passes the WL authentication,
+ // the Browser is started standalone to download the URL without any
+ // user interaction.
+ if ( iMtmSettings->ServiceLoadingType() ==
+ CPushMtmSettings::EManual )
+ {
+ PUSHLOG_WRITE(" Manual setting")
+ // The message is placed to Inbox.
+ nextState = ESavePushMsgEntry;
+ }
+ else // Automatic loading
+ {
+ PUSHLOG_WRITE(" Automatic setting");
+ // Authenticate the message.
+ TBool isAuthenticated = TPushAuthenticationUtil::
+ AuthenticateMsgL( *iMtmSettings, *iMessage );
+ if ( !isAuthenticated )
+ {
+ PUSHLOG_WRITE(" Not authenticated");
+ // The message is placed to Inbox.
+ nextState = ESavePushMsgEntry;
+ }
+ else
+ {
+ // Authenticated - start downloading.
+ nextState = EFetching;
+ }
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::HandleServiceInvocationL")
+ return nextState;
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::FetchPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::FetchPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::FetchPushMsgEntryL")
+
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+ __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
+ ContHandPanic( EPushContHandPanUnspecSlHref ) );
+
+ /*
+ * In case of execute-high use the Browser to download the service.
+ * In case of cache use the fetch operation to download the service
+ * silently.
+ */
+
+ if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteHigh )
+ {
+ PUSHLOG_WRITE(" Start Browser")
+ // Launch the Browser with the URI, then save the message.
+ // Trap errors. If Browser's launching fails, then save the
+ // message as 'unread'. In case of an error, it is not forwarded.
+ TRAPD( err, StartBrowserL() );
+ iState = ESavePushMsgEntry;
+ // Mark it 'read' after succesfull Browser startup.
+ iSaveAsRead = err ? EFalse : ETrue;
+ IdleComplete();
+ }
+ else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+ {
+ // Fetch the service inside the content handler.
+ iStatus = KRequestPending;
+ SetActive();
+ __ASSERT_DEBUG( !iFetchOp,
+ ContHandPanic( EPushContHandPanFetchAlreadyInit ) );
+
+ iFetchOp = CPushMtmAutoFetchOperation::NewL( *iHrefBuf,
+ KAutofetchDelayInSec,
+ iStatus );
+ iFetchOp->StartL();
+ PUSHLOG_WRITE(" Fetch op started")
+ iState = EFetchCompleted; // Next state.
+ // Fetch completes it.
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ ContHandPanic( EPushContHandPanBadActionValue ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::FetchPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::StartBrowserL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::StartBrowserL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::StartBrowserL")
+
+ // Parameters are separated by space
+ // 1st parameter: type of the further parameters
+ // 2nd parameter: URL
+ //
+ HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() +
+ iHrefBuf->Length() );
+ TPtr paramPtr = param->Des();
+ paramPtr.Copy( KBrowserCmdFetchUrl );
+ paramPtr.Append( *iHrefBuf );
+
+ RWsSession wsSession;
+ User::LeaveIfError( wsSession.Connect() );
+ CleanupClosePushL<RWsSession>( wsSession );
+ TApaTaskList taskList( wsSession );
+ TApaTask task = taskList.FindApp( KBrowserAppUid );
+
+ if ( task.Exists() )
+ {
+ PUSHLOG_WRITE("CSLContentHandler Browser::SendMessage")
+
+ RFs rfs;
+ RFile file;
+ TPtrC8 param8Ptr;
+ // 8-bit buffer is required.
+ HBufC8* param8 = HBufC8::NewLC( param->Length() );
+ param8->Des().Copy( *param );
+ param8Ptr.Set(param8->Des());
+
+ // Open the file.
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ // Replace file if exists or Create file if not exist yet
+ User::LeaveIfError( file.Replace( rfs, KPushMtmUrl, EFileWrite | EFileShareExclusive ) );
+ CleanupClosePushL(file);
+
+ // Write to file
+ User::LeaveIfError( file.Write( param8Ptr ) );
+
+ // Clean up.
+ CleanupStack::PopAndDestroy(/*file*/);
+ CleanupStack::PopAndDestroy(/*rfs*/);
+ CleanupStack::PopAndDestroy( /*param8*/ );
+ }
+ else
+ {
+ PUSHLOG_WRITE("CSLContentHandler Browser::StartDocument")
+ RApaLsSession appArcSession;
+ User::LeaveIfError( appArcSession.Connect() );
+ CleanupClosePushL<RApaLsSession>( appArcSession );
+ TThreadId id;
+ User::LeaveIfError
+ (
+ appArcSession.StartDocument( *param, KBrowserAppUid, id )
+ );
+ CleanupStack::PopAndDestroy( &appArcSession );
+ }
+
+ CleanupStack::PopAndDestroy( &wsSession );
+ CleanupStack::PopAndDestroy( param );
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::StartBrowserL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::FetchCompletedL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::FetchCompletedL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::FetchCompletedL")
+
+ __ASSERT_DEBUG( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache,
+ ContHandPanic( EPushContHandPanBadActionValue ) );
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+ __ASSERT_DEBUG( iFetchOp, ContHandPanic( EPushContHandPanNoFetchOp ) );
+
+ const TInt fetchRes = iStatus.Int();
+ PUSHLOG_WRITE_FORMAT(" fetchRes <%d>",fetchRes)
+
+ if ( fetchRes != KErrNone )
+ {
+ // Downloading failed. Save the message.
+ iState = ESavePushMsgEntry;
+ }
+ else
+ {
+ // Silent fetching has completed successfully.
+ // The message should not be saved.
+ iState = EDone;
+ }
+
+ // Next state set. Complete.
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::FetchCompletedL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::SavePushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::SavePushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::SavePushMsgEntryL")
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSlAction ) );
+ __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
+ ContHandPanic( EPushContHandPanUnspecSlHref ) );
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+
+ CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
+ ( *iHrefBuf, KUidWapPushMsgSL );
+ TInt matchingListCount = matchingUrlList->Count();
+ PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
+
+ // Only one SL is allowed with the same Url, so leave the first and
+ // delete the others.
+ __ASSERT_DEBUG( matchingListCount <= 1,
+ ContHandPanic( EPushContHandPanTooManySl ) );
+ if ( 1 < matchingListCount )
+ {
+ for ( TInt count = 1; count < matchingListCount; ++count )
+ {
+ iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
+ }
+ matchingListCount = 1; // Only one remains.
+ }
+
+ TBool saveNewMsg = ETrue; // Save by default.
+ TMsvId matchingEntryId = KMsvNullIndexEntryId;
+
+ // Apply reception rules.
+ if ( matchingListCount == 0 )
+ {
+ // Nothing to do.
+ saveNewMsg = ETrue;
+ }
+ else
+ {
+ CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( matchingSl );
+
+ matchingEntryId = matchingUrlList->At(0);
+ matchingSl->RetrieveL( *iMsvSession, matchingEntryId );
+
+ if ( iPushMsgAction <= matchingSl->Action() )
+ {
+ // Discard the new SL: it does not have higher
+ // action value as the existing.
+ PUSHLOG_WRITE(" SL not higher action - discarded")
+ saveNewMsg = EFalse;
+ }
+ else
+ {
+ // The new has greater action attribute.
+ // Update the old SL with the new data.
+ saveNewMsg = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( matchingSl ); // matchingSl
+ }
+
+ CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
+
+ // Store message if not marked for deletion.
+ if ( saveNewMsg )
+ {
+ StoreSLMessageL( matchingEntryId );
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::SavePushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::StoreSLMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::StoreSLMessageL( TMsvId aMatchingEntryId )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::StoreSLMessageL")
+
+ CSLPushMsgEntry* slEntry = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( slEntry );
+
+ if ( aMatchingEntryId == KMsvNullIndexEntryId )
+ {
+ PUSHLOG_WRITE(" No matching SL")
+ // Save new to Inbox.
+ SetSlPushMsgEntryFieldsL( *slEntry );
+ iSavedMsgId =
+ slEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
+ // Set the entry to read and *not* new state depending on iSaveAsRead.
+ if ( !iSaveAsRead )
+ {
+ // Do nothing SaveL saves it as unread.
+ }
+ else
+ {
+ // SaveL owerrides the read settings (iEntry.SetUnread(ETrue);)
+ // that we set in SetSlPushMsgEntryFieldsL, thus the read status
+ // has to be reset manually here:
+ iWapPushUtils->MarkServiceUnreadL( iSavedMsgId, EFalse );
+ }
+ }
+ else
+ {
+ PUSHLOG_WRITE(" Matching SL")
+ slEntry->RetrieveL( *iMsvSession, aMatchingEntryId );
+ SetSlPushMsgEntryFieldsL( *slEntry );
+
+ slEntry->UpdateL( *iMsvSession );
+ iSavedMsgId = aMatchingEntryId;
+ // Note that UpdateL does not change the read/unread status.
+
+ // Move the updated msg back to Inbox.
+ TMsvId parentId = slEntry->Entry().Parent();
+ if ( parentId != KMsvGlobalInBoxIndexEntryId )
+ {
+ PUSHLOG_WRITE(" Moving back to Inbox")
+ CMsvEntry* cParent = iMsvSession->GetEntryL( parentId );
+ CleanupStack::PushL( cParent );
+ cParent->MoveL( iSavedMsgId, KMsvGlobalInBoxIndexEntryId );
+ CleanupStack::PopAndDestroy( cParent ); // cParent
+ }
+ }
+
+#ifdef __TEST_LOG__
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ TTime recDateTime = slEntry->ReceivedDate();
+ recDateTime.FormatL( dateHolder, KDateFormat );
+ recDateTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+
+ CleanupStack::PopAndDestroy( slEntry ); // slEntry
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::StoreSLMessageL")
+ }
+
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 2")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 2")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 1")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 1")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CSLContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::DoCancel")
+ // TODO Cancel outstanding requests!
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CSLContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::RunL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::RunL")
+
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT(" iStatus.Int(): %d",iStatus.Int())
+
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+
+
+ case EFilteringAndParsing:
+ {
+ if(iPushSLEnabled)
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ TInt ret = KErrNone;
+ PUSHLOG_WRITE("CSLContentHandler::RunL : before trapping parsing.")
+ TRAP(ret, ParsePushMsgL());
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunL : after trapping parsing. ret = %d", ret)
+ if ( ret != KErrNone)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::RunL : Parsing failed. discarding message.")
+ iState = EDone;
+ IdleComplete();
+ }
+ }
+ }
+ break;
+ }
+
+ case EProcessing:
+ {
+ if(iPushSLEnabled)
+ ProcessingPushMsgEntryL();
+ break;
+ }
+
+ case EFetching:
+ {
+ if(iPushSLEnabled)
+ FetchPushMsgEntryL();
+ break;
+ }
+
+ case EFetchCompleted:
+ {
+ if(iPushSLEnabled)
+ FetchCompletedL();
+ break;
+ }
+
+ case ESavePushMsgEntry:
+ {
+ if(iPushSLEnabled)
+ SavePushMsgEntryL();
+ break;
+ }
+
+
+ case EDone:
+ {
+ PUSHLOG_WRITE("CSLContentHandler EDone")
+ Complete( KErrNone );
+ break;
+ }
+ default:
+ {
+ // JIC.
+ PUSHLOG_WRITE("CSLContentHandler default EDone")
+ Complete( KErrNone );
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::RunL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CSLContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSLContentHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CSLContentHandler.
+*
+*/
+
+
+
+#ifndef __CSLCONTENTHANDLER_H__
+#define __CSLCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+#include <nw_dom_attribute.h>
+
+// CONSTANTS
+
+const TUid KUidPushSLContentHandler = { EUidPushSLContentHandler };
+_LIT( KSLContentHandlerData, "text/vnd.wap.sl||application/vnd.wap.slc" );
+
+// FORWARD DECLARATIONS
+
+class CSLPushMsgEntry;
+class CPushMtmAutoFetchOperation;
+
+// CLASS DECLARATION
+
+/**
+* CSLContentHandler Handles Service Loading Content
+*
+* This handler takes ownership of the SL message and processes it
+* according to the Reception rules
+* [WAP Service Loading version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* NB. If __SERIES60_PUSH_SL is not defined, then all SL push messages are
+* discarded!
+*/
+class CSLContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CSLContentHandler* NewL();
+
+ /**
+ * D'tor.
+ */
+ virtual ~CSLContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CSLContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously when a new message arrives.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+
+ /**
+ * Parse the Push SL message using XML parser.
+ * If Push Message is an SLC then convert it first to text using
+ * CWbxmlConverterUtil class.
+ * @return None.
+ */
+ void ParsePushMsgL();
+
+ /**
+ * Parse an attribute of the sl element.
+ * @param aAttrHandle The attribute to be parsed.
+ * @return None.
+ */
+ void ParseSlAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+ /**
+ * Convert the action string to a representative numeric value to
+ * facilitate storing the message.
+ * @param aActionString The attribute value indicating the action level
+ * eg 'execute-high'
+ * @return TUint: a value representing the action type.
+ */
+ TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+ /**
+ * Set SL entry fields prior to storing message.
+ * @param aSlPushMsgEntry Entry represents message format to use when
+ * storing it.
+ * @return None.
+ */
+ void SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& aSlPushMsgEntry ) const;
+
+ /**
+ * Check if the message has to be discarded due to empty Href or
+ * there is a message with higher acton value.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Handle Service invocation: decide what to do next according to
+ * action value and push settings.
+ * @return Next state.
+ */
+ TInt HandleServiceInvocationL() const;
+
+ /**
+ * Download the indicated content.
+ * In case of execute-high use the Browser to download the service.
+ * In case of cache use the fetch operation to download the service
+ * silently.
+ * @return None.
+ */
+ void FetchPushMsgEntryL();
+
+ /**
+ * Start the Browser and instruct it to download the content
+ * indicated by the Sl's URI.
+ * @return None.
+ */
+ void StartBrowserL();
+
+ /**
+ * Check the result of the SL-cache downloading. If it fails, save the
+ * message. If it succeeds, discard the message.
+ * @return None.
+ */
+ void FetchCompletedL();
+
+ /**
+ * Apply reception rules and save the push message.
+ * If a message already exists with the same URL,
+ * it is saved only if it has a higher action value.
+ * @return None.
+ */
+ void SavePushMsgEntryL();
+
+ /**
+ * Store the new message to Messaging.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * @return None.
+ */
+ void StoreSLMessageL( TMsvId aMatchingEntryId );
+
+ // Attribute flags
+
+ /**
+ * Flag whether message has an action attribute
+ * @param aAction boolean to set flag to -
+ * ETrue for action attrib present
+ * EFalse for no action attrib.
+ */
+ inline void SetActionFlag( TBool aAction );
+
+ /**
+ * Check status of action flag to see if message has an action
+ * attribute.
+ * @return TBool ETrue - action attribute present in message
+ * EFalse - no action attribute.
+ */
+ inline TBool ActionFlag() const;
+
+ /**
+ * Flag whether message has a Href attribute
+ * @param aHref boolean to set flag to -
+ * ETrue for Href attrib present
+ * EFalse for no href attrib
+ */
+ inline void SetHrefFlag( TBool aHref );
+
+ /**
+ * Check status of href flag to see if message has an href attribute.
+ * @return TBool
+ * ETrue - href attribute present in message
+ * EFalse - no href attribute
+ */
+ inline TBool HrefFlag() const;
+
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL(CPushMessage* aPushMsg);
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Terminates any activity.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Step through the various representative states for handling a
+ * message.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error so clean up and
+ * return.
+ * @return Error code to scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ enum
+ {
+ EAction = 0x01,
+ EHref = 0x02
+ };
+
+ enum TState ///< States of this state machine.
+ {
+ EGarbageCollecting,
+ EFilteringAndParsing,
+ EProcessing,
+ EFetching,
+ EFetchCompleted,
+ ESavePushMsgEntry,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the saved message.
+ TUint32 iAttributes; ///< Attribute indication (set or not).
+ TInt iPushMsgAction; ///< SL action.
+ HBufC* iHrefBuf; ///< Href attribute. Has.
+
+ /// Asynchronous fetch operation that downloads the SL-cache. Owned.
+ CPushMtmAutoFetchOperation* iFetchOp;
+
+ NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
+ TBool iSaveAsRead; ///< Mark the message 'read' after saving.
+ TInt iPushSLEnabled;
+ };
+
+#include "CSLContentHandler.inl"
+
+#endif // __CSLCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSLContentHandler.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline functions.
+*
+*/
+
+
+
+
+inline void CSLContentHandler::SetActionFlag( TBool aAction )
+ {
+ if ( aAction )
+ {
+ iAttributes |= EAction;
+ }
+ else
+ {
+ iAttributes &=~ EAction;
+ }
+ }
+
+inline TBool CSLContentHandler::ActionFlag() const
+ {
+ return iAttributes & EAction;
+ }
+
+inline void CSLContentHandler::SetHrefFlag( TBool aHref )
+ {
+ if ( aHref )
+ {
+ iAttributes |= EHref;
+ }
+ else
+ {
+ iAttributes &=~ EHref;
+ }
+ }
+
+inline TBool CSLContentHandler::HrefFlag() const
+ {
+ return iAttributes & EHref;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,694 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CUnknownContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CUnknownContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "StringResourceReader.h"
+#include <msvids.h>
+#ifdef __SERIES60_PUSH_SP
+#include <CUnknownPushMsgEntry.h>
+#include <BioDB.h> // BIO Message Database and message query methods
+#include <gsmubuf.h> // CSmsBuffer class
+#include <gsmumsg.h> // CSmsMessage class
+#include <smuthdr.h> // CSmsHeader class
+#include <smut.h> // TSmsUtilities class
+#include <txtrich.h> // CRichText class
+#include <biouids.h> // KUidBioMessageTypeMtm const
+#include <apgcli.h>
+#include <apmrec.h>
+#include <DocumentHandler.h>
+#include <Uri16.h>
+#include <UriUtils.h>
+#include <msvuids.h> // KUidMsvMessageEntry const
+#include <PushMtmUi.rsg>
+
+// SMUT Unbranch
+#include <csmsgetdetdescinterface.h>
+
+#endif // __SERIES60_PUSH_SP
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::NewL
+// ---------------------------------------------------------
+//
+CUnknownContentHandler* CUnknownContentHandler::NewL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::NewL")
+
+ CUnknownContentHandler* self = new (ELeave) CUnknownContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::~CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::~CUnknownContentHandler()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::~CUnknownContentHandler")
+
+ Cancel();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::~CUnknownContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::CUnknownContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId )
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::ConstructL")
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::ConstructL")
+ }
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+ iState = EFilteringAndProcessing;
+#else // __SERIES60_PUSH_SP
+ // Do nothing - message is discarded.
+ iState = EDone;
+#endif // __SERIES60_PUSH_SP
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::CollectGarbageL")
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+
+ const TBool bioMsg( BioMessageTypeL() );
+ if ( bioMsg )
+ {
+ PUSHLOG_WRITE(" BIO message");
+ // convert to bio format & save
+ SaveBioMessageEntryL();
+ }
+ else
+ {
+ PUSHLOG_WRITE(" Not BIO message");
+
+ // Check if the received content is supported.
+ RApaLsSession apaLs;
+ User::LeaveIfError( apaLs.Connect() );
+ CleanupClosePushL<RApaLsSession>( apaLs );
+
+ // Try to find out the data type.
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+ HBufC8* contentT8 = HBufC8::NewMaxLC( contentTypePtr.Length() );
+ contentT8->Des().Copy( contentTypePtr );
+ TDataRecognitionResult result;
+ User::LeaveIfError( apaLs.RecognizeData( KNullDesC(),
+ *contentT8,
+ result ) );
+ CleanupStack::PopAndDestroy( contentT8 ); // contentT8
+
+ CDocumentHandler* docHandler = CDocumentHandler::NewLC( NULL );
+ TBool supported = docHandler->CanOpenL( result.iDataType );
+
+ CleanupStack::PopAndDestroy( 2, &apaLs ); // docHandler, apaLs
+
+ // Save only supported msg.
+ if ( supported )
+ {
+ // create unknown push message entry and save
+ SaveUnknownPushMsgEntryL();
+ }
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::BioMessageTypeL
+// ---------------------------------------------------------
+//
+TBool CUnknownContentHandler::BioMessageTypeL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::BioMessageTypeL")
+
+ // need to create local RFs for BIO otherwise raises exception
+ RFs localFS;
+ CleanupClosePushL( localFS );
+ User::LeaveIfError( localFS.Connect() );
+ CBIODatabase* bioDB = CBIODatabase::NewLC( localFS );
+
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+
+ iBioMsgUID = KNullUid;
+ TBool isBio = EFalse;
+ // IsBioMessageL returns KErrNone if found or KErrNotFound if not found
+ if ( bioDB->IsBioMessageL( EBioMsgIdIana,
+ contentTypePtr,
+ NULL,
+ iBioMsgUID ) == KErrNone )
+ {
+ isBio = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // bioDB, localFS
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::BioMessageTypeL")
+ return isBio;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveBioMessageEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveBioMessageEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SaveBioMessageEntryL")
+
+ // create sms message from CPushMessage and then save message
+ RFs fileSession;
+ User::LeaveIfError(fileSession.Connect());
+ CleanupClosePushL(fileSession);
+ CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
+ CleanupStack::PushL(smsBuffer);
+
+ CSmsMessage* smsMessage = CSmsMessage::NewL( fileSession,
+ CSmsPDU::ESmsDeliver,
+ smsBuffer );
+ CleanupStack::PushL( smsMessage );
+
+ smsMessage->SmsPDU().SetAlphabet( TSmsDataCodingScheme::ESmsAlphabet8Bit );
+
+ TPtrC8 fieldValue;
+
+ if ( iMessage->GetBinaryHeaderField( EHttpFrom, fieldValue ) ||
+ iMessage->GetBinaryHeaderField( EHttpXWapInitiatorURI, fieldValue ) ||
+ iMessage->GetBinaryHeaderField( EHttpContentLocation, fieldValue ) )
+ {
+ // Convert 8 bit to 16 bit
+ HBufC* tempAddr = HBufC::NewLC( fieldValue.Length() );
+ tempAddr->Des().Copy( fieldValue );
+
+ smsMessage->SmsPDU().SetToFromAddressL( *tempAddr );
+ CleanupStack::PopAndDestroy( tempAddr );
+ }
+
+ if ( iMessage->GetMessageBody( fieldValue ) )
+ {
+ HBufC* tempBody = HBufC::NewLC( fieldValue.Length() );
+ tempBody->Des().Copy( fieldValue );
+
+ smsBuffer->InsertL( 0, *tempBody );
+ CleanupStack::PopAndDestroy( tempBody );
+ }
+
+ CleanupStack::Pop( 2 ); //smsBuffer, smsMessage
+
+ StoreMsgL( smsMessage ); // destroys CSmsMessage (contains smsBuffer)
+ CleanupStack::PopAndDestroy( &fileSession );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveBioMessageEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::StoreMsgL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::StoreMsgL( CSmsMessage* aSmsMsg )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::StoreMsgL")
+
+ CleanupStack::PushL( aSmsMsg );
+
+ // Create a CSmsHeader based on this message. smsHdr takes ownership of aSmsMsg
+ CSmsHeader* smsHdr = CSmsHeader::NewL( aSmsMsg );
+ CleanupStack::Pop( aSmsMsg );
+ CleanupStack::PushL( smsHdr );
+
+ // get root entry
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+ CleanupStack::PushL( msvEntry );
+
+ // create an invisible blank entry
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.SetVisible( EFalse );
+ entry.SetInPreparation( ETrue );
+ entry.SetReadOnly( EFalse );
+ entry.SetUnread( ETrue );
+
+ TMsvId serviceId = SetBioServiceIdL();
+ TBuf<KSmsDescriptionLength> description;
+
+// SMUT Unbranch
+ CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
+ CleanupStack::PushL( smsPlugin );
+
+ if ( iBioMsgUID != KNullUid )
+ {
+ // sets entry with values passed in
+ TSmsUtilities::PopulateMsgEntry( entry,
+ *aSmsMsg,
+ serviceId,
+ KUidBIOMessageTypeMtm );
+ entry.iBioType = iBioMsgUID.iUid;
+
+ // Look up and set the description
+ TInt index;
+ CBIODatabase* bioDB = CBIODatabase::NewLC( msvEntry->Session().FileSession() );
+ bioDB->GetBioIndexWithMsgIDL( iBioMsgUID, index );
+ description.Copy( bioDB->BifReader(index).Description() );
+ entry.iDescription.Set( description );
+ CleanupStack::PopAndDestroy(); // bioDB
+ }
+ else
+ {
+ // sets entry with values passed in
+ TSmsUtilities::PopulateMsgEntry( entry, *aSmsMsg, serviceId );
+
+ // Look up and set the description
+// SMUT Unbranch
+ smsPlugin->GetDescription( *aSmsMsg, description );
+ entry.iDescription.Set( description );
+ }
+
+ // Set the details
+ TBuf<KSmsDetailsLength> details;
+ TInt err = smsPlugin->GetDetails( msvEntry->Session().FileSession(),
+ *aSmsMsg,
+ details );
+ if ( !err )
+ {
+ entry.iDetails.Set( details );
+ }
+
+// SMUT Unbranch
+ CleanupStack::PopAndDestroy( smsPlugin );
+
+ // Store entry in inbox
+ msvEntry->SetEntryL( KMsvGlobalInBoxIndexEntryId );
+ msvEntry->CreateL( entry );
+ msvEntry->Session().CleanupEntryPushL( entry.Id() );
+ msvEntry->SetEntryL( entry.Id() );
+
+ // Save the message
+ CMsvStore* store = msvEntry->EditStoreL();
+ CleanupStack::PushL( store );
+
+ // Save off the CSmsHdr
+ smsHdr->StoreL( *store );
+
+ // Save the body
+
+ // Create and fill a CRichText object to save to store..
+ CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+ CleanupStack::PushL( paraFormatLayer );
+ CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL( charFormatLayer );
+ CRichText* richText = CRichText::NewL( paraFormatLayer, charFormatLayer );
+ CleanupStack::PushL( richText );
+ HBufC* bufBody=HBufC::NewLC( aSmsMsg->Buffer().Length() );
+ TPtr bufBodyPtr = bufBody->Des();
+ aSmsMsg->Buffer().Extract( bufBodyPtr, 0, aSmsMsg->Buffer().Length() );
+ richText->InsertL( 0, bufBodyPtr );
+ store->StoreBodyTextL( *richText );
+ CleanupStack::PopAndDestroy( 4 ); //bufBody, richText, charFormatLayer, paraFormatLayer
+
+ store->CommitL();
+ entry.SetReadOnly( ETrue );
+ entry.SetVisible( ETrue );
+ entry.SetInPreparation( EFalse );
+ msvEntry->ChangeL( entry );
+
+ CleanupStack::PopAndDestroy(); //store
+ msvEntry->Session().CleanupEntryPop(); //entry
+ CleanupStack::PopAndDestroy( 2 ); //msvEntry, smsHdr
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::StoreMsgL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetBioServiceIdL
+// ---------------------------------------------------------
+//
+TMsvId CUnknownContentHandler::SetBioServiceIdL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SetBioServiceIdL")
+
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+
+ CleanupStack::PushL( msvEntry );
+
+ TMsvId serviceId = KMsvNullIndexEntryId;
+ TRAPD( err, TSmsUtilities::ServiceIdL( *msvEntry,
+ serviceId,
+ KUidBIOMessageTypeMtm ) );
+ if ( err == KErrNotFound )
+ {
+ serviceId = KMsvLocalServiceIndexEntryId;
+ err = KErrNone;
+ }
+
+ CleanupStack::PopAndDestroy(); //msvEntry
+ User::LeaveIfError( err );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SetBioServiceIdL")
+ return serviceId;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveUnknownPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveUnknownPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+
+ CUnknownPushMsgEntry* unknownPushMsgEntry =
+ CUnknownPushMsgEntry::NewL();
+ CleanupStack::PushL( unknownPushMsgEntry );
+
+ SetUnknownPushMsgEntryFieldsL( *unknownPushMsgEntry );
+
+ iSavedMsgId = unknownPushMsgEntry->SaveL( *iMsvSession,
+ KMsvGlobalInBoxIndexEntryId );
+
+ CleanupStack::PopAndDestroy( unknownPushMsgEntry ); // unknownPushMsgEntry
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+ ( CUnknownPushMsgEntry& aUnknownPushMsgEntry )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+
+ // Set all the relevant fields
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aUnknownPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+ aUnknownPushMsgEntry.SetContentTypeL( contentTypePtr );
+
+ TPtrC8 msgBodyPtr;
+ iMessage->GetMessageBody( msgBodyPtr );
+ aUnknownPushMsgEntry.SetMessageDataL( msgBodyPtr );
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aUnknownPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aUnknownPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ TPtrC8 contentUriPtr;
+ iMessage->GetBinaryHeaderField( EHttpXWapContentURI, contentUriPtr );
+ // Copy the 8-bit descriptor into a unicode one.
+ HBufC* contentUri = HBufC::NewMaxLC( contentUriPtr.Length() );
+ contentUri->Des().Copy( contentUriPtr );
+ // Extract file name from X-wap-content-uri.
+ HBufC* fileName = FileNameFromUriL( *contentUri );
+ CleanupStack::PopAndDestroy( contentUri ); // contentUri
+ CleanupStack::PushL( fileName );
+
+ if ( fileName->Length() == 0 )
+ {
+ // TODO: Read from resource.
+ //"Unknown content type" qtn_wap_push_msg_content_not_supported
+ }
+ else
+ {
+ aUnknownPushMsgEntry.SetMsgDescriptionL( *fileName );
+ }
+
+ CleanupStack::PopAndDestroy( fileName ); // fileName
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::FileNameFromUriL
+// ---------------------------------------------------------
+//
+HBufC* CUnknownContentHandler::FileNameFromUriL( const TDesC& aUri ) const
+ {
+ TUriParser pars;
+ User::LeaveIfError( pars.Parse( aUri ) );
+
+ HBufC* res = NULL;
+ if ( pars.IsPresent( EUriPath ) )
+ {
+ TPtrC path = pars.Extract( EUriPath );
+ // Extract the remaining text after the last slash character.
+ // If the path contains a file name, then it has to contain
+ // a slash also, so if there is no slash then it's sure that there
+ // is no file name in it.
+ TInt index = path.LocateReverse( TChar('/') );
+ if ( index < 0 )
+ {
+ // No file name.
+ }
+ else if ( ++index < path.Length() ) // If not at the end...
+ {
+ // Last slash found. Extract the text after the slash.
+ res = path.Mid( index ).AllocL();
+ }
+ }
+
+ if ( !res )
+ {
+ res = KNullDesC().AllocL();
+ }
+
+ return res;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+ iState = EGarbageCollecting;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CancelHandleMessage()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::CancelHandleMessage")
+ Cancel();
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::CancelHandleMessage")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::DoCancel")
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::RunL()
+ {
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+ User::LeaveIfError( iStatus.Int() );
+
+ // use active state machine routine to manage activites:
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ case EFilteringAndProcessing:
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ ProcessingPushMsgEntryL();
+ }
+ break;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ default:
+ {
+ PUSHLOG_WRITE("CUnknownContentHandler default EDone")
+ Complete( KErrNone );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CUnknownContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CUnknownContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CUnknownContentHandler.
+*
+*/
+
+
+
+#ifndef __CUNKNOWNCONTENTHANDLER_H__
+#define __CUNKNOWNCONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+
+// CONSTANTS
+
+const TUid KUidPushUnknownContentHandler = { EUidPushUnknownContentHandler };
+_LIT( KUnknownContentHandlerData, "*" );
+
+// FORWARD DECLARATIONS
+
+class CSmsMessage;
+class CUnknownPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* CUnknownContentHandler provides the default plugin when the
+* specific plugin for a data type cannot be matched.
+*
+* If the feature flag __SERIES60_PUSH_SP is defined, then all this
+* kind of messages are discarded on reception.
+*/
+class CUnknownContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CUnknownContentHandler* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUnknownContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CUnknownContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+
+ /**
+ * Create/Saving Push Msg Entry in the appropriate message store.
+ * First query the type of push message to check if it is a known BIO
+ * message type:
+ * If it is then
+ * save Push Message as appropriate BIO message
+ * else
+ * save as UnknownPushMsgEntry.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Check if the given Push Message, which is now owned by the handler,
+ * is a BIO Messsage (setting the member variable iBioMsgUID if it is)
+ * and returning a boolean to indicate success (ETrue) or EFalse otherwise.
+ * @return TBool
+ * ETrue - push message is a BIO message
+ * EFalse - push message is not BIO message
+ */
+ TBool BioMessageTypeL();
+
+ /**
+ * Save CPushMessage as the relevant BIO message type.
+ * Firstly create SMS message and use CPushMessage as
+ * source to populate SMS. Then save SMS message.
+ * @return None.
+ */
+ void SaveBioMessageEntryL();
+
+ /**
+ * Create CMsvEntry for sms messsage, stores the entry and
+ * then delete entry once done.
+ * @param aMessage CSmsMessage which embodies details of CPushMessage.
+ */
+ void StoreMsgL( CSmsMessage* aSmsMsg );
+
+ /**
+ * Set the service id for Bio messaging
+ * @return TMsvId The service id for the message store.
+ */
+ TMsvId SetBioServiceIdL();
+
+ /**
+ * Save CPushMessage as a CUnknownPushMsgEntry
+ * @return None.
+ */
+ void SaveUnknownPushMsgEntryL();
+
+ /**
+ * Sets the Unknown Push Message Entry Fields from the data in
+ * the received CPushMessage:
+ * @param aUnknownPushMsgEntry CUnknownPushMsgEntry to populate with
+ * CPushMessage details.
+ */
+ void SetUnknownPushMsgEntryFieldsL( CUnknownPushMsgEntry&
+ aUnknownPushMsgEntry );
+
+ /**
+ * Extract the file name from the URI.
+ * @param aUri The URI.
+ * @return The file name part or an empty string.
+ */
+ HBufC* FileNameFromUriL( const TDesC& aUri ) const;
+
+#endif // __SERIES60_PUSH_SP
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Cancels the handling of the message and revokes the active status
+ * of the handler
+ */
+ void DoCancel();
+
+ /**
+ * Handler States:
+ * EFilteringAndProcessing - Filter new msg according to Service
+ * message settings and Convert CPushMessage to a
+ * format to save and save the message (either as Bio
+ * msg or UnknownPushMsgEntry)
+ * EDone - Clean up, complete observer
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error.
+ * Cleans up and returns.
+ * @param aError Error passed into this function
+ */
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ enum TState
+ {
+ EGarbageCollecting,
+ EFilteringAndProcessing,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the saved message.
+ TUid iBioMsgUID; ///< BIO msg UID.
+ };
+
+#endif // __CUNKNOWNCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushContentHandlerDef.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Macro definitions and enums for the Push Content Handlers.
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERDEF_HRH
+#define PUSHCONTENTHANDLERDEF_HRH
+
+
+/// PushContentHandler DLL.
+#define EUidPushContentHandlerDll 0x101F854C
+
+/// Implementation UIDs.
+#define EUidPushUnknownContentHandler 0x101F854D
+#define EUidPushSIContentHandler 0x101F854E
+#define EUidPushSLContentHandler 0x101F854F
+#define EUidPushCOContentHandler 0x10008D47
+#define EUidPushMultiPartMixedContentHandler 0x101F8550
+#define EUidPushMultiPartRelAndAltContentHandler 0x101F8551
+
+/** PushContentHandler Interface UID (defined by Symbian).
+* See CContentHandlerBase.h, KUidPushContentHandlerBase. */
+#define EUidPushContentHandlerBase 0x101F3E5E
+
+
+#endif // PUSHCONTENTHANDLERDEF_HRH
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Proxy definition.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerDef.hrh"
+#include "CUnknownContentHandler.h"
+#include "CSIContentHandler.h"
+#include "CSLContentHandler.h"
+#include "CCOContentHandler.h"
+#include "CMultiPartMixedContentHandler.h"
+#include "CMultiPartRelAndAltContentHandler.h"
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushUnknownContentHandler, CUnknownContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushSIContentHandler, CSIContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushSLContentHandler, CSLContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushCOContentHandler, CCOContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartMixedContentHandler, CMultiPartMixedContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartRelAndAltContentHandler, CMultiPartRelAndAltContentHandler::NewL )
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+ return ImplementationTable;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerPanic.h"
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT( KContHandPanicString, "PushContentHandler(MTM)" );
+
+// ---------------------------------------------------------
+// ContHandPanic
+// ---------------------------------------------------------
+//
+GLDEF_C void ContHandPanic( TPushContentHandlerPanic aReason )
+ {
+ User::Panic( KContHandPanicString, aReason );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERPANIC_H
+#define PUSHCONTENTHANDLERPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushContentHandlerPanic
+ {
+ EPushContHandPanCommandNotSupported = 1, ///< Not supported command.
+ EPushContHandPanBadType, ///< Unsupported message type for an operation.
+ EPushContHandPanFoldersNotSupported, ///< MTM loaded with bad message entry.
+ EPushContHandPanEmptySelection, ///< Entry selection is empty.
+ EPushContHandPanNotInitUrl,
+ EPushContHandPanNoContext,
+ EPushContHandPanAlreadyInitialized,
+ EPushContHandPanBadActionValue,
+ EPushContHandPanBadState,
+ EPushContHandPanNoFetchOp,
+ EPushContHandPanBadTransaction,
+ EPushContHandPanNoSiIdAttr,
+ EPushContHandPanNoCreatedAttr,
+ EPushContHandPanNoActionAttr,
+ EPushContHandPanTooManySi,
+ EPushContHandPanTooManySl,
+ EPushContHandPanMsgNull,
+ EPushContHandPanBadCreatedType,
+ EPushContHandPanExpiresNotOpaque,
+ EPushContHandPanHrefNotString,
+ EPushContHandPanClassTokenReached,
+ EPushContHandPanUnexpHrefAttrVal,
+ EPushContHandPanUnexpSiToken,
+ EPushContHandPanUnexpSlToken,
+ EPushContHandPanUnspecSiAction,
+ EPushContHandPanUnspecSlAction,
+ EPushContHandPanUnexpectedTimeType,
+ EPushContHandPanBadExpiresType,
+ EPushContHandPanBadTTimeLength,
+ EPushContHandPanNoSiIdOrHrefAttr,
+ EPushContHandPanUnspecSiHref,
+ EPushContHandPanUnspecSlHref,
+ EPushContHandPanSlMsgIdSet,
+ EPushContHandPanSlMsgIdNotSet,
+ EPushContHandPanFetchAlreadyInit,
+ EPushContHandPanAutBadState,
+ EPushContHandPanSiResNotOnStack,
+ EPushContHandPanNullCharSetId,
+ EPushContHandPanNullUcs2Buf
+ };
+
+GLREF_C void ContHandPanic( TPushContentHandlerPanic aReason );
+
+#endif // PUSHCONTENTHANDLERPANIC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Utilities
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerUtils.h"
+#include <e32std.h>
+#include <nw_dom_document.h>
+
+// ---------------------------------------------------------
+// NwxStatusToErrCode
+// ---------------------------------------------------------
+//
+TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode )
+ {
+ TInt ret( KErrGeneral );
+
+ switch ( aNwxErrorCode )
+ {
+ case NW_STAT_SUCCESS:
+ {
+ ret = KErrNone;
+ break;
+ }
+ case NW_STAT_OUT_OF_MEMORY:
+ {
+ ret = KErrNoMemory;
+ break;
+ }
+ case NW_STAT_CANCELLED:
+ case NW_STAT_CONN_CANCELLED:
+ {
+ ret = KErrCancel;
+ break;
+ }
+ default:
+ {
+ ret = KErrGeneral;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// RWbxmlDictionary::InitializeL
+// ---------------------------------------------------------
+//
+void RWbxmlDictionary::InitializeL( NW_Int32 aCount,
+ NW_WBXML_Dictionary_t* aDictArray[] )
+ {
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ stat = NW_WBXML_Dictionary_initialize( aCount, aDictArray );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ }
+
+// ---------------------------------------------------------
+// RWbxmlDictionary::Close
+// ---------------------------------------------------------
+//
+void RWbxmlDictionary::Close()
+ {
+ NW_WBXML_Dictionary_destroy();
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::CDocumentTreeOwner()
+: iDocTree( NULL )
+ {
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree )
+: iDocTree( aDocTree )
+ {
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::~CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::~CDocumentTreeOwner()
+ {
+ if ( iDocTree )
+ {
+ NW_DOM_DocumentNode_Delete( iDocTree );
+ }
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::SetDocTree
+// ---------------------------------------------------------
+//
+void CDocumentTreeOwner::SetDocTree( NW_DOM_DocumentNode_t* aDocTree )
+ {
+ iDocTree = aDocTree;
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::CStringOwner()
+: iString( NULL )
+ {
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::CStringOwner( NW_String_t* aString )
+: iString( aString )
+ {
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::~CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::~CStringOwner()
+ {
+ if ( iString )
+ {
+ NW_String_delete( iString );
+ }
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::SetString
+// ---------------------------------------------------------
+//
+void CStringOwner::SetString( NW_String_t* aString )
+ {
+ iString = aString;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Utilities
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERUTILS_H
+#define PUSHCONTENTHANDLERUTILS_H
+
+// INCLUDE FILES
+
+#include <e32def.h>
+#include <e32base.h>
+#include <nwx_status.h>
+#include <nw_wbxml_dictionary.h>
+#include <nw_encoder_stringtable.h>
+#include <nw_string_string.h>
+
+/**
+* Convert cXML status code to Symbian OS error code.
+* @param aNwxErrorCode cXML status.
+* @return Symbian OS error code.
+*/
+TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode );
+
+/*
+* The following tiny classes have been introduced to help putting C-style
+* Browser Engine structures to the Cleanup Stack, so that we can implement
+* a LEAVE-safe code.
+*/
+
+/**
+* Encapsulate WBXML dictionary initialization.
+*/
+class RWbxmlDictionary
+ {
+ public:
+ void InitializeL( NW_Int32 aCount, NW_WBXML_Dictionary_t* aDictArray[] );
+ void Close();
+ };
+
+/**
+* Encapsulate a WBXML document tree.
+*/
+class CDocumentTreeOwner : public CBase
+ {
+ public:
+ CDocumentTreeOwner();
+ CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree );
+ ~CDocumentTreeOwner();
+ public:
+ void SetDocTree( NW_DOM_DocumentNode_t* aDocTree );
+ private:
+ NW_DOM_DocumentNode_t* iDocTree; ///< Owned.
+ };
+
+/**
+* Encapsulate an NW_String_t.
+*/
+class CStringOwner : public CBase
+ {
+ public:
+ CStringOwner();
+ CStringOwner( NW_String_t* aString );
+ ~CStringOwner();
+ public:
+ void SetString( NW_String_t* aString );
+ private:
+ NW_String_t* iString; ///< Owned.
+ };
+
+#endif // PUSHCONTENTHANDLERUTILS_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmAutoFetchOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmAutoFetchOperation.h"
+#include "PushMtmFetchOperation.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmLog.h"
+
+// CONSTANTS
+
+/// Max retry.
+LOCAL_D const TInt KMaxTry = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation* CPushMtmAutoFetchOperation::NewL
+ (
+ const TDesC& aRequestedUrl,
+ TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus
+ )
+ {
+ CPushMtmAutoFetchOperation* op =
+ new (ELeave) CPushMtmAutoFetchOperation
+ ( aTimeDelayInSec, aObserverRequestStatus );
+ CleanupStack::PushL( op );
+ op->ConstructL( aRequestedUrl );
+ CleanupStack::Pop(); // op
+ return op;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation()
+ {
+ Cancel();
+ delete iFetchOp;
+ delete iRequestedUrl;
+ iTimer.Close();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::StartL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::StartL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::StartL")
+
+ Cancel();
+
+ iTry = 0;
+ iState = EFetch;
+
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::StartL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
+
+ (
+ TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus
+ )
+: CActive( EPriorityStandard ),
+ iObserver( aObserverRequestStatus ),
+ iState( EInit ),
+ iTimeDelayInSec( aTimeDelayInSec )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::ConstructL( const TDesC& aRequestedUrl )
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::ConstructL")
+
+ iRequestedUrl = HBufC::NewMaxL( aRequestedUrl.Length() );
+ iRequestedUrl->Des().Copy( aRequestedUrl );
+
+ User::LeaveIfError( iTimer.CreateLocal() );
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::FetchL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::FetchL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::FetchL")
+
+ delete iFetchOp;
+ iFetchOp = NULL;
+ iStatus = KRequestPending;
+ SetActive();
+ iFetchOp = CPushMtmFetchOperation::NewL( *iRequestedUrl, iStatus );
+ PUSHLOG_WRITE(" Fetch op created")
+
+ ++iTry; // Increase indicator.
+ PUSHLOG_WRITE_FORMAT(" Try: %d",iTry)
+ iFetchOp->StartL();
+ iState = ECheck; // Next state.
+ PUSHLOG_WRITE(" Fetch op started")
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::FetchL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::DoCancel()
+ {
+ if ( iFetchOp )
+ {
+ iFetchOp->Cancel();
+ }
+
+ iTimer.Cancel();
+
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, KErrCancel );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::RunL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::RunL")
+
+ __ASSERT_DEBUG( iState != EInit && iState != EDone,
+ ContHandPanic( EPushContHandPanAutBadState ) );
+
+ switch ( iState )
+ {
+ case EFetch:
+ {
+ PUSHLOG_WRITE(" EFetch")
+ FetchL();
+ break;
+ }
+
+ case ECheck:
+ {
+ PUSHLOG_WRITE_FORMAT2(" ECheck: %d,%d",iStatus.Int(),iTry)
+ if ( iStatus.Int() != KErrNone && iTry < KMaxTry )
+ {
+ // Wait and Retry.
+ iTimer.Cancel();
+ iStatus = KRequestPending;
+ SetActive();
+ TTimeIntervalMicroSeconds32 delayInMSec =
+ iTimeDelayInSec * 1000000;
+ iTimer.After( iStatus, delayInMSec );
+ iState = EFetch;
+ }
+ else
+ {
+ // No error or no more trial allowed.
+ iState = EDone;
+ PUSHLOG_WRITE_FORMAT(" SignalObs: %d",iStatus.Int());
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, iStatus.Int() );
+ }
+ break;
+ }
+
+ default:
+ {
+ PUSHLOG_WRITE(" default")
+ // JIC.
+ iState = EDone;
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, KErrNone );
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::RunL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmAutoFetchOperation::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmAutoFetchOperation::RunError <%d>",aError);
+
+ // Signal the observer that a leave has occured.
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, aError );
+
+ return KErrNone;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of PushMtmAutoFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMAUTOFETCHOPERATION_H
+#define PUSHMTMAUTOFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmFetchOperation;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that runs in silent mode and in addition to the
+* services of CPushMtmFetchOperation it retries downloading of the indicated
+* service if the first try fails.
+*/
+class CPushMtmAutoFetchOperation : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aRequestedUrl The requested URL.
+ * @param aTimeDelayInSec Time delay between fetches in seconds.
+ * @param aObserverRequestStatus Completion status.
+ * @return The constructed client.
+ */
+ static CPushMtmAutoFetchOperation* NewL
+ (
+ const TDesC& aRequestedUrl,
+ TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmAutoFetchOperation();
+
+ public: // Functions from base classes
+
+ /**
+ * Start or restart the operation.
+ */
+ void StartL();
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aTimeDelayInSec Time delay between fetches in seconds.
+ * @param aObserverRequestStatus Completion status.
+ */
+ CPushMtmAutoFetchOperation( TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Second phase constructor.
+ * @param aRequestedUrl The requested URL.
+ */
+ void ConstructL( const TDesC& aRequestedUrl );
+
+ protected: // New functions
+
+ /**
+ * Issue fetching.
+ */
+ void FetchL();
+
+ protected: // Functions from base classes
+
+ /**
+ * Cancel fetching.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Start fetching and make an entry into the operation mapper.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // Data
+
+ TRequestStatus& iObserver; ///< Observer's status.
+ HBufC* iRequestedUrl; ///< Request URI or NULL. Owned.
+
+ enum TState ///< State.
+ {
+ EInit, ///< Initial state.
+ EFetch, ///< Fetch.
+ ECheck, ///< Check the result of the fetching.
+ EDone ///< Operation done.
+ };
+
+ TState iState; ///< Current state of the state machine.
+
+ /// The operation that does downloading. Owned.
+ CPushMtmFetchOperation* iFetchOp;
+ RTimer iTimer; ///< Timer for waiting.
+ TInt iTimeDelayInSec; ///< Time delay between downloadings in seconds.
+ TInt iTry; ///< How many times we have tried downloading so far?
+ };
+
+#endif // PUSHMTMAUTOFETCHOPERATION_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Data supplier for responses loaded from cache
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "PushMtmCacheDataSupplier.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier(
+ HBufC8* aBody )
+ : iBody( aBody )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheDataSupplier* CPushMtmCacheDataSupplier::NewL(
+ HBufC8* aBody )
+ {
+ CPushMtmCacheDataSupplier* self = new(ELeave) CPushMtmCacheDataSupplier( aBody );
+ return self;
+ }
+
+// Destructor
+CPushMtmCacheDataSupplier::~CPushMtmCacheDataSupplier()
+ {
+ ReleaseData();
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::GetNextDataPart
+// Return the next chunk of response body from the Cache
+// -----------------------------------------------------------------------------
+//
+TBool CPushMtmCacheDataSupplier::GetNextDataPart(
+ TPtrC8 &aDataChunk )
+ {
+ aDataChunk.Set( *iBody );
+ return ETrue;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+/*
+* ==============================================================================
+* Name : PushMtmCacheDataSupplier.h
+* Part of : PushMtm
+* Interface :
+* Description :
+* Version : 3.1
+*/
+
+
+#ifndef CPUSHMTMCACHEDATASUPPLIER_H
+#define CPUSHMTMCACHEDATASUPPLIER_H
+
+// INCLUDES
+#include <http/MHTTPDataSupplier.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+ * Data supplier to supply response body if the url is loaded
+ * from cache
+ *
+ * @lib
+ * @since 3.1
+ */
+class CPushMtmCacheDataSupplier : public CBase, public MHTTPDataSupplier
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CPushMtmCacheDataSupplier* NewL( HBufC8* aBody );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmCacheDataSupplier();
+
+ public: // from MHTTPDataSupplier
+
+ /**
+ * From MHTTPDataSupplier. Free the data chunk that was requested.
+ * @since 2.0
+ */
+ virtual void ReleaseData() { delete iBody; iBody = NULL;}
+
+ /**
+ * From MHTTPDataSupplier. It is not possible to know
+ * the data size, so return KErrNotFound
+ * @since 2.0
+ */
+ virtual TInt OverallDataSize () { return KErrNotFound; }
+
+ /**
+ * From MHTTPDataSupplier. Get the next data part of the response body
+ * @since 2.0
+ */
+ virtual TBool GetNextDataPart( TPtrC8& aDataPart );
+
+ /**
+ * From MHTTPDataSupplier. Not Supported
+ * @since 2.0
+ */
+ virtual TInt Reset() { return KErrNotFound; }
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CPushMtmCacheDataSupplier( HBufC8* aBody );
+
+ private: // Data
+
+ //owned by datasupplier and is destroyed
+ //when the releasedata function is called
+ HBufC8* iBody;
+ };
+
+#endif // CPUSHMTMCACHEDATASUPPLIER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,363 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmCacheSupply
+*
+*/
+
+
+// INCLUDE FILES
+#include "PushMtmCacheSupply.h"
+#include "httpcachemanager.h"
+#include "PushMtmCacheDataSupplier.h"
+
+#include <http/RHTTPTransaction.h>
+#include <http/mhttpdatasupplier.h>
+#include <http/rhttpsession.h>
+#include <httperr.h>
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KResponseTimeout = 0;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::CPushMtmCacheSupply
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheSupply::CPushMtmCacheSupply(MCacheSupplyCallbacks* aCacheSupplyCallbacks ):
+ // closed by default
+ iReponseState( THTTPEvent::EClosed )
+ {
+ iCacheEntry.iCacheHandler = NULL;
+ iCacheEntry.iCacheEntry = NULL;
+ iCacheSupplyCallbacks = aCacheSupplyCallbacks;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::ConstructL(CHttpCacheManager* aCacheMgr)
+ {
+ iCacheManager = aCacheMgr;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheSupply* CPushMtmCacheSupply::NewL(CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks )
+ {
+ CPushMtmCacheSupply* self = new( ELeave ) CPushMtmCacheSupply( aCacheSupplyCallbacks);
+
+ CleanupStack::PushL( self );
+ self->ConstructL(aCacheMgr);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// Destructor
+CPushMtmCacheSupply::~CPushMtmCacheSupply()
+ {
+ delete iDataSupplier;
+ CloseRequest();
+ if (iResponseTimer)
+ {
+ iResponseTimer->Cancel();
+ }
+ delete iResponseTimer;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::StartRequestL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPushMtmCacheSupply::StartRequestL( )
+ {
+ TInt status;
+
+ status = iCacheManager->RequestL( *(iCacheSupplyCallbacks->Transaction()),
+ TBrCtlDefs::ECacheModeNormal , iCacheEntry );
+ // start a timer that feeds the content to the transaction
+ if( status == KErrNone )
+ {
+ iClosed = EFalse;
+ // set response state. start with the http headers.
+ iReponseState = THTTPEvent::EGotResponseHeaders;
+ //
+ iResponseTimer = CPeriodic::NewL( CActive::EPriorityHigh );
+ iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
+ }
+ return status;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::CloseRequest
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::CloseRequest()
+ {
+ if( !iClosed )
+ {
+ iCacheManager->RequestClosed( (iCacheSupplyCallbacks->Transaction()), iCacheEntry );
+ iClosed = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::HeadersReceived
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::HeadersReceivedL()
+ {
+ // do not cache content we just sent off
+ if( iReponseState == THTTPEvent::EClosed )
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ iCacheManager->ReceivedResponseHeadersL( *(iCacheSupplyCallbacks->Transaction()), iCacheEntry );
+ //
+ iNotModified = trans->Response().StatusCode() == HTTPStatus::ENotModified;
+ if( iNotModified )
+ {
+ // change from 304 to 200 -otherwise trans exits with EFailed
+ trans->Response().SetStatusCode( HTTPStatus::EOk );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::BodyReceivedL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::BodyReceivedL()
+ {
+ // do not cache content we just sent off
+ if( iReponseState == THTTPEvent::EClosed )
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ MHTTPDataSupplier* supplier = trans->Response().Body();
+ //
+ iCacheManager->ReceivedResponseBodyDataL( *trans, *supplier, iCacheEntry );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResponseComplete
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::ResponseCompleteL()
+ {
+ if( iReponseState == THTTPEvent::EClosed )
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ // not modified needs body before response complete
+ if( iNotModified )
+ {
+ // use cache
+ // close response first
+ iCacheManager->ResponseComplete( *trans, iCacheEntry );
+ // request the item from cache
+ if( iCacheManager->RequestL( *trans, TBrCtlDefs::ECacheModeOnlyCache, iCacheEntry ) == KErrNone )
+ {
+ // ser
+ iReponseState = THTTPEvent::EGotResponseBodyData;
+ //
+ SendBodyL();
+ CloseRequest();
+ }
+ }
+ else
+ {
+ // normal response complete
+ iCacheManager->ResponseComplete( *trans, iCacheEntry );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResponseCallbackL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPushMtmCacheSupply::ResponseCallbackL(
+ TAny* aAny )
+ {
+ //
+ CPushMtmCacheSupply* thisObj = (CPushMtmCacheSupply*)aAny;
+ thisObj->SupplyResponseL();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::SupplyResponseL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::SupplyResponseL()
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ //
+ switch( iReponseState )
+ {
+ case THTTPEvent::EGotResponseHeaders:
+ {
+ //
+ iFailed = EFalse;
+ if( iCacheManager->RequestHeadersL( *trans, iCacheEntry ) == KErrNone )
+ {
+ //
+ trans->Response().SetStatusCode( HTTPStatus::EOk );
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseHeaders );
+ // move to the next state
+ iReponseState = THTTPEvent::EGotResponseBodyData;
+ }
+ else
+ {
+ // move to the next state
+ iFailed = ETrue;
+ // move to the next state
+ iReponseState = THTTPEvent::EResponseComplete;
+ }
+ break;
+ }
+ case THTTPEvent::EGotResponseBodyData:
+ {
+ //
+ SendBodyL();
+ // move to the next state
+ iReponseState = THTTPEvent::EResponseComplete;
+ break;
+ }
+ case THTTPEvent::EResponseComplete:
+ {
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EResponseComplete );
+ // move to the next state
+ iReponseState = !iFailed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
+ break;
+ }
+ case THTTPEvent::ESucceeded:
+ {
+ // move to the next state
+ iReponseState = THTTPEvent::EClosed;
+ // cancel timer
+ iResponseTimer->Cancel();
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::ESucceeded );
+ // this obj is destroyed at this point
+ break;
+ }
+ case THTTPEvent::EFailed:
+ {
+ // move to the next state
+ iReponseState = THTTPEvent::EClosed;
+ // cancel timer
+ iResponseTimer->Cancel();
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EFailed );
+ // this obj is destroyed at this point
+ break;
+ }
+ default:
+ {
+ //
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::SendBodyL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::SendBodyL()
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ //
+ TBool lastChunk;
+ // currently it is always the last chunk
+ HBufC8* body = iCacheManager->RequestNextChunkL( *trans, lastChunk, iCacheEntry );
+ if( body )
+ {
+ CleanupStack::PushL( body );
+ // create datasupplier and attach it to the transaction
+ if( !iDataSupplier )
+ iDataSupplier = CPushMtmCacheDataSupplier::NewL( body );
+ trans->Response().SetBody( *iDataSupplier );
+ CleanupStack::Pop(); // body
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseBodyData );
+ }
+ else
+ {
+ // move to the next state
+ iFailed = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::PauseSupply
+// -----------------------------------------------------------------------------
+void CPushMtmCacheSupply::PauseSupply()
+ {
+ if( iResponseTimer && iResponseTimer->IsActive() )
+ iResponseTimer->Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResumeSupply
+// -----------------------------------------------------------------------------
+void CPushMtmCacheSupply::ResumeSupply()
+ {
+ if( iResponseTimer && !iResponseTimer->IsActive() )
+ iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of CPushMtmCacheSupply
+*
+*/
+
+
+#ifndef CPUSHMTMCACHESUPPLY_H
+#define CPUSHMTMCACHESUPPLY_H
+
+// INCLUDES
+#include <e32base.h>
+#include <brctldefs.h>
+#include "httpcachemanager.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CHttpTransaction;
+class CPeriodic;
+class CPushMtmCacheDataSupplier;
+
+// CLASS DECLARATION
+
+
+
+class MCacheSupplyCallbacks
+ {
+ public:
+ virtual RHTTPTransaction* Transaction() = 0;
+ virtual void HandleEventL(THTTPEvent aEvent) = 0;
+ };
+
+
+/**
+* This class handles http transactions.
+* @lib PushMtmContentHandler
+* @since 3.1
+*/
+class CPushMtmCacheSupply : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param
+ * @param
+ * @param
+ * @return Http cache object.
+ */
+ static CPushMtmCacheSupply* NewL( CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmCacheSupply();
+
+ public: // new functions
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ TInt StartRequestL( );
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void CloseRequest();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void HeadersReceivedL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void BodyReceivedL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void ResponseCompleteL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ TInt ResponseState() const { return iReponseState;}
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ TBool IsSupplying() { return iResponseTimer!=0; }
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void PauseSupply();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void ResumeSupply();
+
+ private:
+
+ /**
+ * Construct.
+ * @param
+ * @param
+ * @parem
+ * @return
+ */
+ CPushMtmCacheSupply( MCacheSupplyCallbacks* aCacheSupplyCallbacks );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(CHttpCacheManager* aCacheMgr);
+
+ private: //
+
+ /**
+ * Callback for async response
+ * @since 3.1
+ * @param aAny this pinter
+ * @return TInt KErrNone
+ */
+ static TInt ResponseCallbackL( TAny* aAny );
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void SupplyResponseL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void SendBodyL();
+
+ private: // Data
+
+ //
+ CHttpCacheManager* iCacheManager; // not owned
+ //
+ TInt iReponseState;
+ //
+ CPeriodic* iResponseTimer; // owned
+ //
+ TBool iFailed;
+ //
+ TBool iNotModified;
+ //
+ THttpCacheEntry iCacheEntry;
+ // ETrue if the cache object is closed
+ TBool iClosed;
+
+ CPushMtmCacheDataSupplier* iDataSupplier;
+ MCacheSupplyCallbacks* iCacheSupplyCallbacks;
+ };
+
+#endif // CPUSHMTMCACHESUPPLY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,1043 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmFetchOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmFetchOperation.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmLog.h"
+#include <push/cslpushmsgentry.h>
+#include <Uri8.h>
+#include <SysUtil.h>
+#include <cookiefilterinterface.h>
+#include <uaproffilter_interface.h>
+#include <CommDbConnPref.h>
+#include <cdbcols.h>
+#include <browseruisdkcrkeys.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+#include <commdb.h>
+#include <ApDataHandler.h>
+#include <ApAccessPointItem.h>
+#include <ApUtils.h>
+#include <ApSelect.h>
+#include <httpfilteracceptheaderinterface.h>
+#include <httpfilteriopinterface.h>
+#include <httpfiltercommonstringsext.h>
+#include <deflatefilterinterface.h>
+#include <FeatMgr.h>
+
+// ================= MACROS =======================
+
+#ifdef _DEBUG
+ /// Guard "debug-only" argument name with this (expands to argument).
+ #define DEBUG_ONLY( argName ) argName
+#else /* not defined _DEBUG */
+ /// Guard "debug-only" argument name with this (expands to nothing).
+ #define DEBUG_ONLY( argName )
+#endif /* def _DEBUG */
+
+// ================= LOCAL CONSTANTS =======================
+
+_LIT8( KHttpProtString, "HTTP/TCP" );
+_LIT8( KUserAgent, "Push MTM" );
+
+/// Base HTTP error code. See Extended Error Handling UI Specification!
+LOCAL_C const TInt KPushMtmHttpErrorBase = -25000;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation* CPushMtmFetchOperation::NewL
+ (
+ const TDesC& aRequestedUrl,
+ TRequestStatus& aObserverRequestStatus
+ )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::NewL")
+
+ CPushMtmFetchOperation* op =
+ new (ELeave) CPushMtmFetchOperation( aObserverRequestStatus );
+ CleanupStack::PushL( op );
+ op->ConstructL( aRequestedUrl );
+ CleanupStack::Pop( op ); // op
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::NewL")
+ return op;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::~CPushMtmFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation::~CPushMtmFetchOperation()
+ {
+ Cancel();
+ delete ( iCacheMgr );
+ delete iCacheSupply;
+ iHttpTrans.Close();
+ iHttpSess.Close();
+ iConn.Close();
+ iSockServ.Close();
+ delete iRequestedUrl;
+ delete iSourceUri;
+ delete iBody;
+ FeatureManager::UnInitializeLib();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StartL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::StartL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartL")
+
+ Cancel();
+
+ iResult = KErrNone;
+ iState = EInit;
+
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CPushMtmFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation::CPushMtmFetchOperation
+ ( TRequestStatus& aObserverRequestStatus )
+: CActive( EPriorityStandard ),
+ iObserver( aObserverRequestStatus ),
+ iState( EInit ),
+ iResult( KErrNone )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::ConstructL( const TDesC& aRequestedUrl )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::ConstructL")
+
+ iRequestedUrl = HBufC8::NewMaxL( aRequestedUrl.Length() );
+ iRequestedUrl->Des().Copy( aRequestedUrl );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetDefaultInetAccessPointL
+// ---------------------------------------------------------
+//
+TBool CPushMtmFetchOperation::GetDefaultInetAccessPointL
+ ( TUint32& aIapId ) const
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
+
+ // Try to find the default AP.
+ // The Browser may stores the default AP in the shared data.
+ CRepository* repository = CRepository::NewL( KCRUidBrowser );
+ CleanupStack::PushL( repository );
+
+ TInt wapApId;
+ User::LeaveIfError
+ ( repository->Get( KBrowserDefaultAccessPoint, wapApId ) );
+ TUint32 wapApId32( wapApId );
+ TUint32 iapId32( 0 );
+
+ CleanupStack::PopAndDestroy( repository );
+ repository = 0;
+
+ CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+ CleanupStack::PushL( commsDb );
+ CApDataHandler* apDataHandler = CApDataHandler::NewLC( *commsDb );
+ CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
+ TRAPD( err, apDataHandler->AccessPointDataL( wapApId32, *apItem ) );
+ CApUtils* apUtils = CApUtils::NewLC( *commsDb );
+
+ TBool wapApFound( EFalse );
+ TBool iapFound( EFalse );
+
+ PUSHLOG_WRITE_FORMAT(" err: <%d>",err)
+ if ( err == KErrNone )
+ {
+ wapApFound = ETrue;
+ }
+ else // err != KErrNone
+ {
+ // The first valid access point has to be selected if exists
+ CApSelect* apSelect = CApSelect::NewLC
+ (
+ *commsDb,
+ KEApIspTypeAll,
+ EApBearerTypeAll,
+ KEApSortNameAscending
+ );
+ if ( apSelect->MoveToFirst() )
+ {
+ wapApFound = ETrue;
+ wapApId32 = apSelect->Uid();
+ }
+ CleanupStack::PopAndDestroy( apSelect ); // apSelect
+ }
+
+ if ( wapApFound )
+ {
+ // Get the IAP ID from the WAP AP ID.
+#ifndef __SERIES60_WSP
+ iapId32 = 0;
+ TRAPD( errTransl, iapId32 = apUtils->IapIdFromWapIdL( wapApId32 ) );
+ PUSHLOG_WRITE_FORMAT(" IapIdFromWapIdL errTransl: <%d>",errTransl)
+ if ( errTransl == KErrNone )
+ {
+ iapFound = ETrue;
+ }
+#else
+ iapId32 = wapApId32;
+ iapFound = ETrue;
+#endif // __SERIES60_WSP
+ }
+
+ CleanupStack::PopAndDestroy( 4 ); // apUtils, apItem,
+ // apDataHandler, commsDb
+
+ if ( iapFound )
+ {
+ aIapId = iapId32;
+ }
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
+ return iapFound;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::InitializeL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::InitializeL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::InitializeL")
+
+ User::LeaveIfError( iSockServ.Connect() );
+ PUSHLOG_WRITE("CPushMtmFetchOperation iSockServ.Connect() OK")
+ User::LeaveIfError( iConn.Open( iSockServ ) );
+ PUSHLOG_WRITE("CPushMtmFetchOperation iConn.Open() OK")
+
+ // Open the HTTP session.
+ iHttpSess.OpenL( KHttpProtString );
+ PUSHLOG_WRITE("CPushMtmFetchOperation iHttpSess.OpenL OK")
+
+ // Set our Socket Server handle and Connection as session properties.
+ iHttpSess.ConnectionInfo().SetPropertyL
+ (
+ StringF( HTTP::EHttpSocketServ ),
+ THTTPHdrVal( iSockServ.Handle() )
+ );
+ PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketServ set")
+ iHttpSess.ConnectionInfo().SetPropertyL
+ (
+ StringF( HTTP::EHttpSocketConnection ),
+ THTTPHdrVal( REINTERPRET_CAST( TInt, &iConn ) )
+ );
+ PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketConnection set")
+
+ // Open different string tables to the session. These are required
+ // by the Accept Header Filter.
+ iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetTable() );
+ PUSHLOG_WRITE("CPushMtmFetchOperation table 1 opened");
+ iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetLanguageTable() );
+ PUSHLOG_WRITE("CPushMtmFetchOperation table 2 opened");
+
+ // Install the very same set of filters that BrowserEngine installs.
+ // The following filters must not be installed:
+ // - Authentication Filter, because the fetch operation and the push mtm
+ // subsystem does not support credentials.
+ // - Conn Handler Filter, because the fetch operation let it to the HTTP
+ // core framework to create connection - it just sets the acces point.
+
+ // Install UAProf filter.
+ CHttpUAProfFilterInterface::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" UAProf installed")
+
+ // Install cookie filter.
+ CHttpCookieFilter::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" Cookie filter installed")
+
+ // Create cache manager
+ FeatureManager::InitializeLibL();
+ iCacheMgr = CHttpCacheManager::NewL();
+ PUSHLOG_WRITE(" Cache Manager installed")
+
+ // Install Accept Header Filter.
+ CHttpFilterAcceptHeaderInterface::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" Accept Header Filter installed")
+
+ // Install IOP Filter.
+ CHttpFilterIopInterface::InstallFilterL( iHttpSess, iopOptionHostHeader );
+ PUSHLOG_WRITE(" IOP Filter installed")
+
+ // Install Deflate Filter.
+ CHttpDeflateFilter::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" Deflate Filter installed");
+
+ TUint32 defIapId( 0 );
+ TBool defIapIdFound = EFalse;
+ TCommDbConnPref commPrefs;
+#ifndef __WINS__
+ // Use Browser default AP & comms db:
+ defIapIdFound = GetDefaultInetAccessPointL( defIapId );
+ PUSHLOG_WRITE_FORMAT(" defIapIdFound: <%d>",(TInt)defIapIdFound)
+ PUSHLOG_WRITE_FORMAT(" defIapId: <%d>",defIapId)
+ commPrefs.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
+ if ( defIapIdFound )
+ {
+ commPrefs.SetIapId( defIapId );
+ }
+#else // __WINS__
+ // Prompt the user to select access point
+ commPrefs.SetDialogPreference( ECommDbDialogPrefPrompt );
+#endif // __WINS__
+
+ iState = EStartRequest;
+
+ iStatus = KRequestPending;
+ SetActive();
+ iConn.Start( commPrefs, iStatus );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::InitializeL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StartRequestL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::StartRequestL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartRequestL")
+
+ // Create the transaction.
+ CreateTransactionL();
+
+ CheckCacheL();
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartRequestL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CheckCacheL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::CheckCacheL()
+
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::CheckCacheL")
+ iCacheSupply = CPushMtmCacheSupply::NewL(iCacheMgr, this);
+ TInt ret = iCacheSupply->StartRequestL();
+ iStatus = KRequestPending;
+ SetActive();
+ if (ret != KErrNone) // Not in cache
+ {
+ iState = ERequest;
+ iCachedResponse = ETrue;
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone);
+ }
+ else
+ {
+ iState = EDone;
+ iCachedResponse = EFalse;
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CheckCacheL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RequestL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::RequestL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::RequestL")
+
+ iState = EDone;
+
+ iStatus = KRequestPending;
+ SetActive();
+ SubmitTransactionL();
+ // Do not call InvokeRun(). Let MHFRunL to handle the request.
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::RequestL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::Done
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::Done()
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::Done iResult: <%d>",iResult);
+
+ delete iRequestedUrl;
+ iRequestedUrl = NULL;
+
+ // Notify parent.
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, iResult );
+// iState = EInit;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CreateTransactionL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::CreateTransactionL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::CreateTransactionL")
+
+ __ASSERT_DEBUG( iRequestedUrl,
+ ContHandPanic( EPushContHandPanNotInitUrl ) );
+
+ // Create the transaction.
+ TUriParser8 uri;
+ User::LeaveIfError( uri.Parse( *iRequestedUrl ) );
+ iHttpTrans =
+ iHttpSess.OpenTransactionL( uri, *this, StringF( HTTP::EGET ) );
+ PUSHLOG_WRITE("CPushMtmFetchOperation OpenTransactionL OK")
+
+ // Set request headers.
+ RHTTPHeaders hdr = iHttpTrans.Request().GetHeaderCollection();
+ SetHeaderL( hdr, HTTP::EUserAgent, KUserAgent );
+ SetHeaderL( hdr, HTTP::EAccept, HTTP::EAnyAny );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CreateTransactionL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SubmitTransactionL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SubmitTransactionL()
+ {
+ iHttpTrans.SubmitL();
+ PUSHLOG_WRITE("CPushMtmFetchOperation iHttpTrans.SubmitL OK")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::HandleResponseHeadersL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::HandleResponseHeadersL( RHTTPResponse aResponse )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::HandleResponseHeadersL")
+
+ TInt httpCode = aResponse.StatusCode();
+ PUSHLOG_WRITE_FORMAT(" HttpStatus: %d",httpCode)
+
+#ifdef __TEST_LOG__
+ LogHeadersL( aResponse.GetHeaderCollection() );
+#endif // __TEST_LOG__
+
+ if ( HTTPStatus::IsSuccessful( httpCode ) &&
+ ( httpCode != HTTPStatus::ENoContent ) )
+ {
+ // Successful GET.
+ PUSHLOG_WRITE(" Successful GET")
+ // Get content type.
+ iDataType = TDataType
+ ( GetContentTypeL( aResponse.GetHeaderCollection() ) );
+ // Get source URI.
+ HBufC8* buf = GetSourceUriL( iHttpTrans ).AllocL();
+ PUSHLOG_WRITE(" Source URI got")
+ delete iSourceUri;
+ iSourceUri = buf;
+ // No error:
+ iResult = KErrNone;
+ }
+ else
+ {
+ // See Extended Error Handling UI Specification!
+ iResult = KPushMtmHttpErrorBase - httpCode;
+ PUSHLOG_WRITE_FORMAT(" iResult: <%d>",iResult)
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::HandleResponseHeadersL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::VersionRetryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmFetchOperation::VersionRetryL()
+ {
+ TBool retryDone( EFalse );
+
+ // Check what http version we are using.
+ THTTPHdrVal val;
+ TBool exists = iHttpSess.ConnectionInfo().Property
+ (
+ StringF( HTTP::EHTTPVersion ),
+ val
+ );
+ if ( exists && TInt( val ) == HTTP::EHttp11 )
+ {
+ // Currently using HTTP/1.1. Cancel transaction and resubmit it using
+ // HTTP/1.0.
+ iHttpTrans.Cancel();
+ iHttpSess.ConnectionInfo().SetPropertyL
+ (
+ StringF( HTTP::EHTTPVersion ),
+ THTTPHdrVal( StringF( HTTP::EHttp10 ) )
+ );
+ SubmitTransactionL();
+ retryDone = ETrue;
+ }
+
+ return retryDone;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::AppendResponse
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::AppendResponse( const TDesC8& aDataChunk )
+ {
+ TInt err( KErrNone );
+ HBufC8* newBodyBuf = NULL;
+
+ if ( !iBody )
+ {
+ // iBody does not exist yet; allocate buffer for the first data chunk.
+ newBodyBuf = HBufC8::New( aDataChunk.Length() );
+ }
+ else
+ {
+ const TInt needed( iBody->Des().Length() + aDataChunk.Length() );
+ if ( iBody->Des().MaxLength() < needed )
+ {
+ // iBody exists, but small.
+ newBodyBuf = iBody->ReAlloc( needed );
+ iBody = NULL; // ReAlloc deleted it!
+ }
+ else
+ {
+ // iBody exists and the new chunk fits into it.
+ }
+ }
+
+ if ( newBodyBuf )
+ {
+ __ASSERT_DEBUG( iBody == NULL,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+ delete iBody; // Not necessary, JIC.
+ iBody = newBodyBuf;
+ }
+ else
+ {
+ if (aDataChunk.Length() > 0)
+ {
+ err = KErrNoMemory;
+ }
+ }
+
+ if ( !err )
+ {
+ iBody->Des().Append( aDataChunk );
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const TDesC8& aHdrValue )
+ {
+ RStringF valStr = iHttpSess.StringPool().OpenFStringL( aHdrValue );
+ CleanupClosePushL<RStringF>( valStr );
+ SetHeaderL( aHeaders, aHdrField, valStr );
+ CleanupStack::PopAndDestroy(); // close valStr
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ HTTP::TStrings aHdrValue )
+ {
+ SetHeaderL( aHeaders, aHdrField, StringF( aHdrValue ) );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const RStringF aHdrValue )
+ {
+ THTTPHdrVal val( aHdrValue );
+ aHeaders.SetFieldL( StringF( aHdrField ), val );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetContentTypeL
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmFetchOperation::GetContentTypeL( RHTTPHeaders aHeaders )
+ {
+ THTTPHdrVal hdrVal;
+ User::LeaveIfError
+ ( aHeaders.GetField( StringF( HTTP::EContentType ), 0, hdrVal ) );
+ if ( hdrVal.Type() != THTTPHdrVal::KStrFVal )
+ {
+ User::Leave( KErrArgument );
+ }
+ return hdrVal.StrF().DesC();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetSourceUriL
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmFetchOperation::GetSourceUriL
+ ( RHTTPTransaction aTransaction )
+ {
+ // TODO if redirected URI exists, how do we get it?
+ // For the moment request URI is used.
+ return aTransaction.Request().URI().UriDes();
+ }
+
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::LogHeadersL
+// ---------------------------------------------------------
+//
+#ifndef __TEST_LOG__
+
+void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders /*aHeaders*/ )
+ {
+ }
+
+#else // #ifdef __TEST_LOG__
+
+void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders aHeaders )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::LogHeadersL")
+
+ _LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
+
+ PUSHLOG_WRITE("Headers:");
+
+ RStringPool strP = iHttpTrans.Session().StringPool();
+ THTTPHdrFieldIter it = aHeaders.Fields();
+
+ while ( !it.AtEnd() )
+ {
+ RStringTokenF fieldName = it();
+ RStringF fieldNameStr = strP.StringF( fieldName );
+ THTTPHdrVal fieldVal;
+ if ( aHeaders.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
+ {
+ const TInt KMaxLogStrLen = 64;
+ TPtrC8 fieldName8 = fieldNameStr.DesC();
+ TInt fieldNameLen = fieldName8.Length();
+ fieldNameLen = ( KMaxLogStrLen < fieldNameLen ) ?
+ KMaxLogStrLen : fieldNameLen;
+ fieldName8.Set( fieldName8.Mid( 0, fieldNameLen ) );
+ HBufC* fieldNameHBufC = HBufC::NewMaxLC( fieldName8.Length() );
+ TPtr fieldName = fieldNameHBufC->Des();
+ fieldName.Copy( fieldName8 );
+
+ switch ( fieldVal.Type() )
+ {
+ case THTTPHdrVal::KTIntVal:
+ {
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%d)",&fieldName,fieldVal.Int())
+ break;
+ }
+
+ case THTTPHdrVal::KStrFVal:
+ {
+ RStringF fieldValStr = strP.StringF( fieldVal.StrF() );
+ TPtrC8 fieldVal8 = fieldValStr.DesC();
+ // Truncate if too long.
+ TInt fieldValLen = fieldVal8.Length();
+ fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ?
+ KMaxLogStrLen : fieldValLen;
+ fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
+ // Truncate end.
+ HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
+ TPtr fieldVal = fieldValHBufC->Des();
+ fieldVal.Copy( fieldVal8 );
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%S)",&fieldName,&fieldVal)
+ CleanupStack::PopAndDestroy( fieldValHBufC );
+ // fieldValHBufC
+ break;
+ }
+
+ case THTTPHdrVal::KStrVal:
+ {
+ RString fieldValStr = strP.String( fieldVal.Str() );
+ TPtrC8 fieldVal8 = fieldValStr.DesC();
+ // Truncate if too long.
+ TInt fieldValLen = fieldVal8.Length();
+ fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ?
+ KMaxLogStrLen : fieldValLen;
+ fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
+ // Truncate end.
+ HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
+ TPtr fieldVal = fieldValHBufC->Des();
+ fieldVal.Copy( fieldVal8 );
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%S)",&fieldName,&fieldVal)
+ CleanupStack::PopAndDestroy( fieldValHBufC );
+ // fieldValHBufC
+ break;
+ }
+
+ case THTTPHdrVal::KDateVal:
+ {
+ TDateTime date = fieldVal.DateTime();
+ TBuf<40> dateTimeString;
+ TTime t( date );
+ TRAP_IGNORE( t.FormatL( dateTimeString, KDateFormat ) );
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%S)",&fieldName,&dateTimeString)
+ break;
+ }
+
+ default:
+ {
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> unrecognised value type (%d)",
+ &fieldName,fieldVal.Type())
+ break;
+ }
+ }
+
+ // Display realm for WWW-Authenticate header.
+ RStringF wwwAuth = strP.StringF
+ ( HTTP::EWWWAuthenticate, RHTTPSession::GetTable() );
+ if ( fieldNameStr == wwwAuth )
+ {
+ PUSHLOG_WRITE(" fieldNameStr == wwwAuth")
+ // check the auth scheme is 'basic'
+ RStringF basic = strP.StringF
+ ( HTTP::EBasic, RHTTPSession::GetTable() );
+ RStringF realm = strP.StringF
+ ( HTTP::ERealm, RHTTPSession::GetTable() );
+ THTTPHdrVal realmVal;
+ if ( ( fieldVal.StrF() == basic ) &&
+ ( !aHeaders.GetParam( wwwAuth, realm, realmVal ) ) )
+ {
+ RStringF realmValStr = strP.StringF( realmVal.StrF() );
+ PUSHLOG_WRITE_FORMAT(" Realm <%S>",&realmValStr);
+ }
+ }
+
+ CleanupStack::PopAndDestroy( fieldNameHBufC ); // fieldNameHBufC
+ }
+ ++it;
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::LogHeadersL")
+ }
+
+#endif // __TEST_LOG__
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::DoCancel()
+ {
+ switch ( iState )
+ {
+ /*case EStartConnect:
+ {
+ // Complete ourselves - nothing is outstanding.
+ TRequestStatus* ownStatus = &iStatus;
+ User::RequestComplete( ownStatus, KErrCancel );
+ break;
+ }*/
+
+ /*case EConnect:
+ {
+ //__ASSERT_DEBUG( iConn, ContHandPanic( ECodInternal ) );
+ //iConn->Cancel(); // This will complete our status.
+ break;
+ }*/
+
+ case EStartRequest:
+ case ECheckCache:
+ case ERequest:
+ {
+ delete iCacheSupply;
+ iCacheSupply = NULL;
+
+ iHttpTrans.Close();
+ // Now the transaction has been closed. Closing it does not
+ // complete our status, so we do it manually.
+ TRequestStatus* status = &iStatus;
+ SetActive();
+ User::RequestComplete( status, iResult );
+ break;
+ }
+
+ case EInit:
+ default:
+ {
+ // No requests should be outstanding in these states.
+ //ContHandPanic( ECodInternal );
+ break;
+ }
+ }
+
+ iResult = KErrCancel;
+ Done();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::RunL()
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL status = %d", iState);
+ // Handle errors in RunError().
+ User::LeaveIfError( iStatus.Int() );
+
+ switch ( iState )
+ {
+ case EInit:
+ {
+ InitializeL();
+ break;
+ }
+
+ case EStartRequest:
+ {
+ StartRequestL();
+ break;
+ }
+
+ case ERequest:
+ {
+ RequestL();
+ break;
+ }
+
+ case EDone:
+ {
+ Done();
+ break;
+ }
+
+ default:
+ {
+ // JIC.
+ Done();
+ break;
+ }
+ }
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL moving to status = %d", iState);
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunError <%d>",aError)
+
+ iResult = aError;
+ delete iCacheSupply;
+ iCacheSupply = NULL;
+ iHttpTrans.Close();
+ Done();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::MHFRunL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::MHFRunL
+ (
+ RHTTPTransaction DEBUG_ONLY( aTransaction ),
+ const THTTPEvent& aEvent
+ )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::MHFRunL")
+ __ASSERT_DEBUG( aTransaction == iHttpTrans,
+ ContHandPanic( EPushContHandPanBadTransaction ) );
+ switch ( aEvent.iStatus )
+ {
+ case THTTPEvent::EGotResponseHeaders:
+ {
+ PUSHLOG_WRITE(" EGotResponseHeaders")
+ // pass headers to the cache first
+ TRAP_IGNORE( iCacheSupply->HeadersReceivedL() );
+ // Now we know that the request was processed by the server.
+ HandleResponseHeadersL( iHttpTrans.Response() );
+ break;
+ }
+
+ case THTTPEvent::EGotResponseBodyData:
+ {
+ PUSHLOG_WRITE(" EGotResponseBodyData")
+ // pass chunk to the cache first
+ TRAP_IGNORE( iCacheSupply->BodyReceivedL() );
+ // Get body data and save it.
+ TInt err( KErrNone );
+ MHTTPDataSupplier* body = iHttpTrans.Response().Body();
+ if ( !body )
+ {
+ PUSHLOG_WRITE(" NULL body")
+ }
+ else
+ {
+ TPtrC8 bodyPtr;
+ // Caution: no leaving between body->GetNextDataPart and
+ // body->ReleaseData calls! Data must always be released.
+#ifdef __TEST_LOG__
+ TBool isLast = body->GetNextDataPart( bodyPtr ); // No leave...
+ PUSHLOG_WRITE_FORMAT(" last? (%d)",(isLast?1:0))
+#else // ifndef __TEST_LOG__
+ (void)body->GetNextDataPart( bodyPtr ); // No leave...
+#endif // __TEST_LOG__
+ //if ( iHttpTrans.Request().Method() == StringF( HTTP::EGET ) )
+ err = AppendResponse( bodyPtr );
+ body->ReleaseData(); // ...until here.
+ PUSHLOG_WRITE_FORMAT(" err: (%d)",err)
+ User::LeaveIfError( err );
+ }
+ break;
+ }
+
+ case THTTPEvent::EResponseComplete:
+ {
+ // do not mix it up with the ESucceeded
+ // The transaction's response is complete. An incoming event.
+ TRAP_IGNORE( iCacheSupply->ResponseCompleteL() );
+ break;
+ }
+
+ case THTTPEvent::ERequestComplete:
+ {
+ // request is all set
+ iCacheSupply->CloseRequest();
+ break;
+ }
+
+ case THTTPEvent::EFailed:
+ {
+ PUSHLOG_WRITE(" EFailed")
+ // Safety code: we should already have an error code.
+ if ( iResult == KErrNone )
+ {
+ iResult = KErrGeneral;
+ }
+ // TODO. Fall through.
+ }
+
+ case THTTPEvent::ESucceeded:
+ {
+ PUSHLOG_WRITE(" ESucceeded")
+ delete iCacheSupply;
+ iCacheSupply = NULL;
+ iHttpTrans.Close();
+ // Transaction is finished, invoke RunL now.
+ TRequestStatus* status = &iStatus;
+ if (!IsActive())
+ {
+ SetActive();
+ }
+ User::RequestComplete( status, iResult );
+ break;
+ }
+
+ case THTTPEvent::ERedirectedPermanently:
+ {
+ PUSHLOG_WRITE(" ERedirectedPermanently")
+ // Do nothing just continue.
+ break;
+ }
+
+ default:
+ {
+ PUSHLOG_WRITE(" default case")
+ // Handle errors in MHFRunError.
+ User::LeaveIfError( aEvent.iStatus );
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::MHFRunL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::MHFRunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::MHFRunError
+ (
+ TInt aError,
+ RHTTPTransaction DEBUG_ONLY( aTransaction ),
+ const THTTPEvent& /*aEvent*/
+ )
+ {
+ __ASSERT_DEBUG( aTransaction == iHttpTrans,
+ ContHandPanic( EPushContHandPanBadTransaction ) );
+ iResult = aError;
+ iCacheSupply->CloseRequest();
+ iHttpTrans.Close();
+
+ // Transaction is finished, invoke RunL now.
+ // iResult contains the (error) code.
+ if ( !IsActive() )
+ {
+ SetActive();
+ }
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ return KErrNone;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_H
+#define PUSHMTMFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <e32base.h>
+#include <http.h>
+#include <stringpool.h>
+#include <apmstd.h>
+#include <es_sock.h>
+#include "httpcachemanager.h"
+#include "PushMtmCacheSupply.h"
+
+// FORWARD DECLARATIONS
+
+class CMsvEntry;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that downloads the service indicated by an SL
+* pushed service message.
+*
+* The operation can run in silent mode without requiring any user intervention.
+*/
+class CPushMtmFetchOperation : public CActive,
+ public MHTTPTransactionCallback,
+ public MCacheSupplyCallbacks
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aRequestedUrl The requested URL.
+ * @param aObserverRequestStatus Observer's status.
+ * @return The constructed operation.
+ */
+ static CPushMtmFetchOperation* NewL
+ (
+ const TDesC& aRequestedUrl,
+ TRequestStatus& aObserverRequestStatus
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmFetchOperation();
+
+ public: // Functions from base classes
+
+ /**
+ * Start or restart the operation.
+ */
+ void StartL();
+
+ RHTTPTransaction* Transaction(){ return &iHttpTrans; }
+ void HandleEventL(THTTPEvent aEvent) { MHFRunL(iHttpTrans, aEvent); }
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aObserverRequestStatus Observer's status.
+ */
+ CPushMtmFetchOperation( TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Second phase constructor.
+ * @param aRequestedUrl The requested URL.
+ * @return None.
+ */
+ void ConstructL( const TDesC& aRequestedUrl );
+
+ protected: // New functions
+
+ /**
+ * Get the ID of the defauld internet access point set in the Browser
+ * Preferences that is used for connection creation.
+ * @param aIapId The ID of the access point, if found. The value of
+ * this variable is not changed if no default ap can be found.
+ * @return Indicate if default ap could be found.
+ */
+ TBool GetDefaultInetAccessPointL( TUint32& aIapId ) const;
+
+ protected: // state machine parts
+
+ /**
+ * Initiate connecting.
+ */
+ void InitializeL();
+
+ /**
+ * StartRequestL
+ */
+ void StartRequestL();
+
+ /**
+ * CheckCacheL
+ */
+ void CheckCacheL();
+
+ /**
+ * Initiate connecting.
+ */
+ void RequestL();
+
+ /**
+ * Clean up and notify parent.
+ */
+ void Done();
+
+ /**
+ * Create transaction, set request headers (and body for POST request).
+ */
+ void CreateTransactionL();
+
+ /**
+ * Submit the transaction (make the HTTP request).
+ */
+ void SubmitTransactionL();
+
+ /**
+ * Handle response from server.
+ * @param aResponse Response from server.
+ */
+ void HandleResponseHeadersL( RHTTPResponse aResponse );
+
+ /**
+ * HTTP Version Not Supported. Resubmit transaction using HTTP/1.0.
+ * @return ETrue if transaction was resubmitted, EFalse if not (i.e
+ * we already use HTTP/1.0).
+ */
+ TBool VersionRetryL();
+
+ /**
+ * Append a new chunk of response data to the reponse buffer.
+ * @return KErrNone or KErrNoMemory.
+ */
+ TInt AppendResponse( const TDesC8& aDataChunk );
+
+ protected: // helpers
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const TDesC8& aHdrValue
+ );
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ HTTP::TStrings aHdrValue
+ );
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const RStringF aHdrValue
+ );
+
+ /**
+ * Helper function to get the Content-Type header value.
+ * @param aHeaders HTTP header set.
+ * @return Content-Type header value.
+ */
+ const TDesC8& GetContentTypeL( RHTTPHeaders aHeaders );
+
+ /**
+ * Helper function to get the source URI of a transaction.
+ * @param aTransaction Transaction.
+ * @return Source URI.
+ */
+ const TDesC8& GetSourceUriL( RHTTPTransaction aTransaction );
+
+ /**
+ * Get a shared string from the session stringpool.
+ * @param aId Id of string.
+ * @return Shared string from HTTP string table. No need to close.
+ */
+ inline RStringF StringF( HTTP::TStrings aId );
+
+ protected: // debug utilities
+
+ /**
+ * In debug build, log headers. In release build, do nothing.
+ * @param aHeaders Headers to log.
+ */
+ void LogHeadersL( RHTTPHeaders aHeaders );
+
+ protected: // Functions from base classes
+
+ /**
+ * Cancel fetching.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Start fetching and make an entry into the operation mapper.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // from MHTTPTransactionCallback
+
+ /**
+ * Handle transaction event.
+ * @param aTransaction The transaction that the event has occurred on.
+ * @param aEvent The event that has occurred.
+ */
+ void MHFRunL( RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ /**
+ * Handle errors occured in MHFRunL().
+ * @param aError The leave code that RunL left with.
+ * @param aTransaction The transaction that was being processed.
+ * @param aEvent The Event that was being processed.
+ * @return KErrNone.
+ */
+ TInt MHFRunError( TInt aError,
+ RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ protected: // Data
+
+ TRequestStatus& iObserver; ///< Observer's status.
+ HBufC8* iRequestedUrl; ///< Request URI or NULL. Owned.
+
+ enum TState ///< State.
+ {
+ EInit, ///< Initial state.
+ EStartRequest, ///< Create HTTP session & request
+ ECheckCache, ///< Check if content is in cache
+ ERequest, ///< HTTP request.
+ EDone
+ };
+
+ TState iState; ///< Current state.
+ TInt iResult; ///< Resulting error code.
+
+ RSocketServ iSockServ; ///< Socket Server session handle.
+ RConnection iConn; ///< Connection handle.
+
+ CHttpCacheManager* iCacheMgr;///< Cache Manager. Owned.
+
+ RHTTPSession iHttpSess; ///< HTTP session. Owned.
+ RHTTPTransaction iHttpTrans;///< Transaction. Owned.
+
+ HBufC8* iSourceUri; ///< Source URI. Owned.
+ HBufC8* iBody; ///< Response body. Owned.
+ TDataType iDataType; ///< Data type.
+ THttpCacheEntry iCacheEntry;///< Holds the cache entry
+ CPushMtmCacheSupply* iCacheSupply;
+ TBool iCachedResponse;
+ };
+
+#include "PushMtmFetchOperation.inl"
+
+#endif // PUSHMTMFETCHOPERATION_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.inl Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline method definitions of class CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_INL
+#define PUSHMTMFETCHOPERATION_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StringF
+// ---------------------------------------------------------
+//
+RStringF CPushMtmFetchOperation::StringF( HTTP::TStrings aId )
+ {
+ return iHttpSess.StringPool().StringF( aId, RHTTPSession::GetTable() );
+ }
+
+#endif /* def PUSHMTMFETCHOPERATION_INL */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/StringResourceReader.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CStringResourceReader
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "StringResourceReader.h"
+#include <f32file.h>
+#include <barsread.h>
+#include <bautils.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CStringResourceReader::CStringResourceReader
+// ---------------------------------------------------------
+//
+CStringResourceReader::CStringResourceReader
+ ( RFs& aFs, const TDesC& aRscFileWithPathAndDrive )
+: CBase(), iFs( aFs ), iInitialized( EFalse )
+ {
+ iRscFileName.Copy( aRscFileWithPathAndDrive );
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::~CStringResourceReader
+// ---------------------------------------------------------
+//
+CStringResourceReader::~CStringResourceReader()
+ {
+ iResourceFile.Close();
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::AllocReadResourceL
+// ---------------------------------------------------------
+//
+HBufC* CStringResourceReader::AllocReadResourceL( TInt aResId )
+ {
+ InitializeL();
+ //
+ HBufC8* buf8 = iResourceFile.AllocReadLC( aResId );
+#ifdef _UNICODE
+ const TPtrC buf( (const TUint16*)buf8->Ptr(), buf8->Size()/2 );
+#else
+ const TPtrC buf( buf8->Ptr(), buf8->Size() );
+#endif
+ HBufC* retBuf = buf.AllocL();
+ CleanupStack::PopAndDestroy( buf8 );
+
+ return retBuf;
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::AllocReadResourceLC
+// ---------------------------------------------------------
+//
+HBufC* CStringResourceReader::AllocReadResourceLC( TInt aResId )
+ {
+ HBufC* temp = AllocReadResourceL( aResId );
+ CleanupStack::PushL( temp );
+ return temp;
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::InitializeL
+// ---------------------------------------------------------
+//
+void CStringResourceReader::InitializeL()
+ {
+ if ( !iInitialized )
+ {
+ TFileName resourceFileName( iRscFileName );
+ BaflUtils::NearestLanguageFile( iFs, resourceFileName );
+ iResourceFile.OpenL( iFs, resourceFileName );
+ iResourceFile.ConfirmSignatureL( iResourceFile.SignatureL() );
+ iInitialized = ETrue;
+ }
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/StringResourceReader.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of CStringResourceReader.
+*
+*
+*/
+
+
+#ifndef STRINGRESOURCEREADER_H
+#define STRINGRESOURCEREADER_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32std.h>
+#include <barsc.h>
+
+// FORWARD DECLARATIONS
+
+class RFs;
+
+// CLASS DECLARATION
+
+/**
+* Utility class that helps reading string resources without CONE.
+* Not intended for derivation.
+*/
+class CStringResourceReader : public CBase
+ {
+ public: // Constructors and destructor
+
+ CStringResourceReader( RFs& aFs, const TDesC& aRscFileWithPathAndDrive );
+
+ ~CStringResourceReader();
+
+ public: // New functions
+
+ /**
+ * Return a given string from resource.
+ * @param aResId Resource ID.
+ * @return See above.
+ */
+ HBufC* AllocReadResourceL( TInt aResId );
+ HBufC* AllocReadResourceLC( TInt aResId );
+
+ private: // New functions
+
+ void InitializeL();
+
+ private: // Data members
+
+ RFs& iFs; ///< File server session.
+ TBuf<64> iRscFileName;
+ RResourceFile iResourceFile;
+ TBool iInitialized;
+ };
+
+#endif // STRINGRESOURCEREADER_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/si_dict.c Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * Dictionary = SI
+ * Public id = 5
+ * Doc Type = -//WAPFORUM//DTD SI 1.0//EN
+ */
+
+#include "si_dict.h"
+
+
+static const NW_Ucs2 NW_SI_ElementTag_si[] = {'s','i','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_indication[] = {'i','n','d','i','c','a','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_info[] = {'i','n','f','o','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_item[] = {'i','t','e','m','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * tag entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SI_tag_token_0[4] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_si},
+ {0x06, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_indication},
+ {0x07, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_info},
+ {0x08, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_item}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * tag entries - sorted by name
+ */
+static const
+NW_Byte NW_SI_tag_name_0[4] = {
+ 1,
+ 2,
+ 3,
+ 0,
+};
+
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_none[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','n','o','n','e','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_low[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','l','o','w','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_medium[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','m','e','d','i','u','m','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_high[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','h','i','g','h','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_delete[] = {'a','c','t','i','o','n','=','d','e','l','e','t','e','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_created[] = {'c','r','e','a','t','e','d','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href[] = {'h','r','e','f','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_si_expires[] = {'s','i','-','e','x','p','i','r','e','s','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_si_id[] = {'s','i','-','i','d','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_class[] = {'c','l','a','s','s','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * attribute entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SI_attribute_token_0[19] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_none},
+ {0x06, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_low},
+ {0x07, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_medium},
+ {0x08, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_high},
+ {0x09, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_delete},
+ {0x0a, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_created},
+ {0x0b, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href},
+ {0x0c, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___},
+ {0x0d, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___www_},
+ {0x0e, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___},
+ {0x0f, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___www_},
+ {0x10, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_expires},
+ {0x11, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_id},
+ {0x12, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_class},
+ {0x13, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action},
+ {0x85, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__com_},
+ {0x86, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__edu_},
+ {0x87, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__net_},
+ {0x88, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__org_}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * attribute entries - sorted by name
+ */
+static const
+NW_Byte NW_SI_attribute_name_0[19] = {
+ 15,
+ 16,
+ 17,
+ 18,
+ 14,
+ 4,
+ 3,
+ 1,
+ 2,
+ 0,
+ 13,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+};
+
+/*
+ * Tag codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SI_tag_codepages[1] = {
+ {4, (NW_WBXML_DictEntry_t*)&NW_SI_tag_token_0[0], (NW_Byte *)&NW_SI_tag_name_0[0]},
+};
+
+/*
+ * Attribute codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SI_attribute_codepages[1] = {
+ {19, (NW_WBXML_DictEntry_t*)&NW_SI_attribute_token_0[0], (NW_Byte *)&NW_SI_attribute_name_0[0]},
+};
+
+static const NW_Ucs2 NW_SI_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','I',' ','1','.','0','/','/','E','N','\0'};
+
+/*
+ * Dictionary
+ */
+const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary = {
+ NW_SI_PublicId,
+ (NW_Ucs2 *)NW_SI_docType,
+ 1, (NW_WBXML_Codepage_t*)&NW_SI_tag_codepages[0],
+ 1, (NW_WBXML_Codepage_t*)&NW_SI_attribute_codepages[0],
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/si_dict.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+#ifndef HEADER_GUARD_si_dict_h
+#define HEADER_GUARD_si_dict_h
+
+
+#include <nw_wbxml_dictionary.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define NW_SI_PublicId 5
+
+typedef enum NW_SI_ElementToken_0_e{
+ NW_SI_ElementToken_si = 0x0005,
+ NW_SI_ElementToken_indication = 0x0006,
+ NW_SI_ElementToken_info = 0x0007,
+ NW_SI_ElementToken_item = 0x0008
+}NW_SI_ElementToken_0_t;
+
+
+typedef enum NW_SI_AttributeToken_0_e{
+ NW_SI_AttributeToken_action_signal_none = 0x0005,
+ NW_SI_AttributeToken_action_signal_low = 0x0006,
+ NW_SI_AttributeToken_action_signal_medium = 0x0007,
+ NW_SI_AttributeToken_action_signal_high = 0x0008,
+ NW_SI_AttributeToken_action_delete = 0x0009,
+ NW_SI_AttributeToken_created = 0x000a,
+ NW_SI_AttributeToken_href = 0x000b,
+ NW_SI_AttributeToken_href_http___ = 0x000c,
+ NW_SI_AttributeToken_href_http___www_ = 0x000d,
+ NW_SI_AttributeToken_href_https___ = 0x000e,
+ NW_SI_AttributeToken_href_https___www_ = 0x000f,
+ NW_SI_AttributeToken_si_expires = 0x0010,
+ NW_SI_AttributeToken_si_id = 0x0011,
+ NW_SI_AttributeToken_class = 0x0012,
+ NW_SI_AttributeToken_action = 0x0013,
+ NW_SI_AttributeToken__com_ = 0x0085,
+ NW_SI_AttributeToken__edu_ = 0x0086,
+ NW_SI_AttributeToken__net_ = 0x0087,
+ NW_SI_AttributeToken__org_ = 0x0088
+}NW_SI_AttributeToken_0_t;
+
+extern const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary;
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/sl_dict.c Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * Dictionary = SL
+ * Public id = 6
+ * Doc Type = -//WAPFORUM//DTD SL 1.0//EN
+ */
+
+#include "sl_dict.h"
+
+
+static const NW_Ucs2 NW_SL_ElementTag_sl[] = {'s','l','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * tag entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SL_tag_token_0[1] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SL_ElementTag_sl}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * tag entries - sorted by name
+ */
+static const
+NW_Byte NW_SL_tag_name_0[1] = {
+ 0,
+};
+
+static const NW_Ucs2 NW_SL_AttributeTag_action_execute_low[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','l','o','w','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action_execute_high[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','h','i','g','h','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action_cache[] = {'a','c','t','i','o','n','=','c','a','c','h','e','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href[] = {'h','r','e','f','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * attribute entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SL_attribute_token_0[13] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_low},
+ {0x06, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_high},
+ {0x07, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_cache},
+ {0x08, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href},
+ {0x09, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___},
+ {0x0a, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___www_},
+ {0x0b, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___},
+ {0x0c, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___www_},
+ {0x0d, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action},
+ {0x85, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__com_},
+ {0x86, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__edu_},
+ {0x87, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__net_},
+ {0x88, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__org_}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * attribute entries - sorted by name
+ */
+static const
+NW_Byte NW_SL_attribute_name_0[13] = {
+ 9,
+ 10,
+ 11,
+ 12,
+ 8,
+ 2,
+ 1,
+ 0,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+};
+
+/*
+ * Tag codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SL_tag_codepages[1] = {
+ {1, (NW_WBXML_DictEntry_t*)&NW_SL_tag_token_0[0], (NW_Byte *)&NW_SL_tag_name_0[0]},
+};
+
+/*
+ * Attribute codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SL_attribute_codepages[1] = {
+ {13, (NW_WBXML_DictEntry_t*)&NW_SL_attribute_token_0[0], (NW_Byte *)&NW_SL_attribute_name_0[0]},
+};
+
+static const NW_Ucs2 NW_SL_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','L',' ','1','.','0','/','/','E','N','\0'};
+
+/*
+ * Dictionary
+ */
+const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary = {
+ NW_SL_PublicId,
+ (NW_Ucs2 *)NW_SL_docType,
+ 1, (NW_WBXML_Codepage_t*)&NW_SL_tag_codepages[0],
+ 1, (NW_WBXML_Codepage_t*)&NW_SL_attribute_codepages[0],
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/sl_dict.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+#ifndef HEADER_GUARD_sl_dict_h
+#define HEADER_GUARD_sl_dict_h
+
+#include <nw_wbxml_dictionary.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define NW_SL_PublicId 6
+
+typedef enum NW_SL_ElementToken_0_e{
+ NW_SL_ElementToken_sl = 0x0005
+}NW_SL_ElementToken_0_t;
+
+
+typedef enum NW_SL_AttributeToken_0_e{
+ NW_SL_AttributeToken_action_execute_low = 0x0005,
+ NW_SL_AttributeToken_action_execute_high = 0x0006,
+ NW_SL_AttributeToken_action_cache = 0x0007,
+ NW_SL_AttributeToken_href = 0x0008,
+ NW_SL_AttributeToken_href_http___ = 0x0009,
+ NW_SL_AttributeToken_href_http___www_ = 0x000a,
+ NW_SL_AttributeToken_href_https___ = 0x000b,
+ NW_SL_AttributeToken_href_https___www_ = 0x000c,
+ NW_SL_AttributeToken_action = 0x000d,
+ NW_SL_AttributeToken__com_ = 0x0085,
+ NW_SL_AttributeToken__edu_ = 0x0086,
+ NW_SL_AttributeToken__net_ = 0x0087,
+ NW_SL_AttributeToken__org_ = 0x0088
+}NW_SL_AttributeToken_0_t;
+
+extern const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary;
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapter.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Handles white list settings in provisioning.
+*
+*/
+
+
+#ifndef WHITELISTADAPTER_H
+#define WHITELISTADAPTER_H
+
+// INCLUDE FILES
+ // User includes
+#include "WhiteListAdapterDef.h"
+ // System includes
+#include <CWPAdapter.h>
+#include <msvapi.h>
+#include <MWPContextExtension.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmSettings;
+class CWPCharacteristic;
+class CWPParameter;
+class MWPPairVisitor;
+class TWhiteListAdapterItem;
+
+// CLASS DECLARATION
+
+/**
+* An ECOM adapter plug-in. It is responsible for maintaining data in a
+* WAP Provisioning pushed message : we get appropriate physical proxy
+* addresses from the message and store them in Push MTM settings. It is the
+* Push Content Handler that will use these addresses to filter out
+* unauthorized pushed SL messages.
+* Note : although an adapter should always be prepared for displaying the
+* processed and stored settings in the appropriate format, the stored items
+* in this specific adapter will _never_ be displayed. Thus, ItemCount,
+* SummaryTitle and SummaryText methods have been written considering this
+* approach.
+*/
+class CWhiteListAdapter : public CWPAdapter,
+ public MMsvSessionObserver,
+ public MWPContextExtension
+ {
+ public : // construction, destruction
+ /**
+ * Two-phased constructor.
+ */
+ static CWhiteListAdapter* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CWhiteListAdapter();
+
+ public : // from CWPAdapter
+
+ /**
+ * Check the number of settings items.
+ * @see CWPAdapter
+ */
+ /*virtual*/ TInt ItemCount() const;
+
+ /**
+ * Returns the title of the nth summary line.
+ * @see CWPAdapter
+ */
+ /*virtual*/ const TDesC16& SummaryTitle( TInt aIndex ) const;
+
+ /**
+ * Returns the text of the nth summary line.
+ * @see CWPAdapter
+ */
+ /*virtual*/ const TDesC16& SummaryText( TInt aIndex ) const;
+
+ /**
+ * Saves one setting handled by the adapter.
+ * @see CWPAdapter
+ */
+ /*virtual*/ void SaveL( TInt aItem );
+
+ /**
+ * Returns ETrue if the adapter can set the settings as default.
+ * @see CWPAdapter
+ */
+ /*virtual*/ TBool CanSetAsDefault( TInt aItem ) const;
+
+ /**
+ * Adapter sets the settings as default.
+ * @see CWPAdapter
+ */
+ /*virtual*/ void SetAsDefaultL( TInt aItem );
+
+ /**
+ * Calls the pair visitor for each detail line of an item.
+ * @see CWPAdapter
+ */
+ /*virtual*/ TInt DetailsL( TInt aItem, MWPPairVisitor& aVisitor );
+
+ /**
+ * Returns a pointer to a context extension.
+ * @param aExtension
+ * Contains a pointer to MWPContextExtension if supported.
+ * @return KErrNotSupported if not supported, KErrNone otherwise
+ */
+ /*virtual*/ TInt ContextExtension( MWPContextExtension*& aExtension );
+
+ public: // From MWPVisitor (inheritance is through CWPAdapter)
+
+ /**
+ * Called for each characteristic found.
+ * @see MWPVisitor
+ */
+ /*virtual*/ void VisitL( CWPCharacteristic& aCharacteristic );
+
+ /**
+ * Called for each parameter found.
+ * @see MWPVisitor
+ */
+ /*virtual*/ void VisitL( CWPParameter& aParameter );
+
+ /**
+ * Called for each link to a logical proxy or access point.
+ * @see MWPVisitor
+ */
+ /*virtual*/ void VisitLinkL( CWPCharacteristic& aCharacteristic );
+
+ public : // from MMsvSessionObserver
+ /**
+ * Indicates an event has occurred.
+ * @see MMsvSessionObserver
+ */
+ /*virtual*/ void HandleSessionEventL( TMsvSessionEvent aEvent,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3 );
+
+ private : // construction
+ /**
+ * Constructor.
+ */
+ CWhiteListAdapter();
+
+ /**
+ * Second-phase constructor.
+ */
+ void ConstructL();
+
+ private : // internal new methods
+ /**
+ * This method is for interpreting a string as push support.
+ * If the value of the string is '1', then push is enabled,
+ * if it's equal to '0', then push is disabled, otherwise the proxy
+ * does not care of push.
+ * @param aPushSupport String to be processed.
+ * @return TPushSupport enumeration value.
+ */
+ TPushSupport ResolvePushSupport( const TDesC& aPushSupport );
+
+ private: // From MWPContextExtension
+
+ /**
+ * Returns the data used for saving.
+ * @param aIndex The index of the data
+ * @return The data. Ownership is transferred.
+ */
+ const TDesC8& SaveDataL( TInt aIndex ) const;
+
+ /**
+ * Deletes a saved item.
+ * @param aSaveData The data used for saving
+ */
+ void DeleteL( const TDesC8& aSaveData );
+
+ /**
+ * Returns the UID of the adapter.
+ * @return UID
+ */
+ TUint32 Uid() const;
+
+ private : // data members
+
+ RPointerArray<TWhiteListAdapterItem> iItems; ///< Physical proxies
+
+ /**
+ * These items are parts of the current logical proxy and have not
+ * been added to the final item array (i.e. iItems array), because
+ * further processing is needed.
+ */
+ RPointerArray<TWhiteListAdapterItem> iItemsToBeAdded;
+
+ TPushSupport iLogicalProxyPushSupport;
+
+ TBool iPhysicalProxyIsVisited; ///< In order to differentiate
+ ///< if we are visiting a
+ ///< ph. or a log. proxy
+
+ TWhiteListAdapterItem* iCurrentItem; ///< Current physical proxy.
+ ///< Has.
+
+ CMsvSession* iMsvSession; ///< Session to the Message
+ ///< Server. Has.
+ CPushMtmSettings* iPushMtmSettings; ///< Push MTM Settings object.
+ ///< Has.
+ };
+
+#endif // WHITELISTADAPTER_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterDef.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Common constants for the White List Adapter plug-in.
+*
+*/
+
+
+
+#ifndef WHITELISTADAPTERDEF_H
+#define WHITELISTADAPTERDEF_H
+
+// DATA TYPES
+
+enum TPushSupport
+ {
+ EPushEnabled, ///< Explicitly set to enabled
+ EPushDisabled, ///< Explicitly set to disabled
+ EPushDontCare ///< Has not been set
+ };
+
+#endif // WHITELISTADAPTERDEF_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterItem.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Class the represents a physical proxy (in context of WAP Provisioning).
+*
+*/
+
+
+#ifndef WHITELISTADAPTERITEM_H
+#define WHITELISTADAPTERITEM_H
+
+// INCLUDE FILES
+
+ // User includes
+#include "PushInitiator.h"
+#include "WhiteListAdapterDef.h"
+ // System includes
+#include <e32std.h>
+
+// CLASS DECLARATION
+
+/**
+* This class encapsulates a proxy item found in a WAP Provisioning document.
+* It is designed for describing a particular White List address.
+*/
+class TWhiteListAdapterItem
+ {
+ public : // construction, destruction
+ /**
+ * Default constructor.
+ */
+ TWhiteListAdapterItem();
+
+ public : // getter/setter methods
+ /**
+ * Use this method to get the address.
+ * @return The stored proxy address.
+ */
+ const TDesC& Address() const;
+
+ /**
+ * Use this method to get the address type.
+ * @return The type of the stored proxy address.
+ */
+ CPushInitiator::TAddrType AddressType() const;
+
+ /**
+ * Tells the ID of the item.
+ * @return Item ID.
+ */
+ TUint32 Id() const;
+
+ /**
+ * Tells the ID of the item in a buffer.
+ * @return Item ID in a buffer.
+ */
+ const TDesC8& IdBuf() const;
+
+ /**
+ * Tells the push support.
+ * @return Push support.
+ */
+ TPushSupport PushSupport() const;
+
+ /**
+ * Sets the address.
+ * @param aAddress The proxy address to be set.
+ */
+ void SetAddress( const TDesC& aAddress );
+
+ /**
+ * Sets the address type.
+ * @param aAddressType The proxy address type to be set.
+ */
+ void SetAddressType( const TDesC& aAddressType );
+
+ /**
+ * Sets the ID of the item.
+ * @param aID The ID.
+ */
+ void SetId( TUint32 aId );
+
+ /**
+ * Sets the physical proxy ID.
+ * @param aProxyId The physical proxy identifier to be set.
+ */
+ void SetProxyId( const TDesC& aProxyId );
+
+ /**
+ * Sets whether or not the proxy address is push enabled.
+ * @param aPushEnabled If the value is 1, then push is enabled,
+ * otherwise (i.e. when the value is 0) the push is disabled.
+ */
+ void SetPushSupport( TPushSupport aPushSupport );
+
+ public : // other public methods
+
+ /**
+ * Tells whether the freshly initialized adapter item contains
+ * information about a valid proxy address. The proxy address is
+ * invalid if either it is not type of the correct address type
+ * or the proxy server is not push enabled.
+ * @return ETrue if the proxy address is valid, EFalse otherwise.
+ */
+ TBool Valid() const;
+
+ private : // data members
+
+ TPtrC iAddress; ///< Physical proxy gateway address
+
+ CPushInitiator::TAddrType iAddressType;
+
+ /// ID of the item after it has been added to MTM Settings.
+ TUint32 iId;
+ /// ID of the item packaged into a buffer pointer.
+ TPckgC<TUint32> iIdBufPtr;
+
+ TPtrC iProxyId; ///< Proxy identifier (or name)
+
+ TPushSupport iPushSupport;
+ };
+
+#endif // WHITELISTADAPTERITEM_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Logging macros for White List Adapter.
+*
+*
+*/
+
+
+#ifndef WHITELISTADAPTER_LOGGER_H
+#define WHITELISTADAPTER_LOGGER_H
+
+// INCLUDES
+
+#include <e32std.h>
+#include <e32def.h>
+#include <flogger.h>
+
+// TYPES
+
+enum TWhiteListAdapterLogMask ///< Log mask bits.
+ {
+ ELogOff = 0x00000000, ///< Don't log.
+ ELogBasic = 0x00000001, ///< Log only basic activities.
+ ELogDetailed = 0x00000002, ///< Detailed activities use this mask.
+ ELogAll = 0xFFFFFFFF ///< Log all.
+ };
+
+// MACROS
+
+// Determines what to log. Construct this from TWhiteListAdapterLogMask values.
+#define WHITELISTADAPTER_LOG_MASK ELogAll
+/// Determines log detail (0==basic level).
+#define WHITELISTADAPTER_LOG_LEVEL 5
+
+// CLASS DECLARATION
+
+/**
+* Logger class.
+*/
+class WhiteListAdapterLogger
+ {
+ public: // new methods
+
+ /**
+ * Write formatted log.
+ * @param aMask Log mask.
+ * @param aLevel Log level.
+ * @param aFmt Format string.
+ */
+ static void Write
+ ( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... );
+
+ /**
+ * Write formatted log.
+ * @param aMask Log mask.
+ * @param aLevel Log level.
+ * @param aFmt Format string.
+ * @param aList Variable argument list.
+ */
+ static void Write
+ (
+ TInt32 aMask,
+ TInt aLevel,
+ TRefByValue<const TDesC16> aFmt,
+ VA_LIST& aList
+ );
+
+ /**
+ * Write formatted log.
+ * @param aMask Log mask.
+ * @param aLevel Log level.
+ * @param aFmt Format string.
+ */
+ static void Write
+ ( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... );
+
+ /**
+ * Write formatted log.
+ * @param aMask Log mask.
+ * @param aLevel Log level.
+ * @param aFmt Format string.
+ * @param aList Variable argument list.
+ */
+ static void Write
+ (
+ TInt32 aMask,
+ TInt aLevel,
+ TRefByValue<const TDesC8> aFmt,
+ VA_LIST& aList
+ );
+
+ /**
+ * Write hex dump.
+ * @param aMask Log mask.
+ * @param aLevel Log level.
+ * @param aHeader Header string.
+ * @param aMargin Margin.
+ * @param aPtr Data.
+ * @param aLen Data length.
+ */
+ static void HexDump
+ (
+ TInt32 aMask,
+ TInt aLevel,
+ const TText* aHeader,
+ const TText* aMargin,
+ const TUint8* aPtr,
+ TInt aLen
+ );
+ };
+
+#ifdef __TEST_WHITELISTADAPTER_LOG__
+
+ /// Write formatted to log.
+ #define CLOG( body ) WhiteListAdapterLogger::Write body
+ /// Write hex dump.
+ #define CDUMP( body ) WhiteListAdapterLogger::HexDump body
+ /// Guard "log-only" argument name with this (expands to argument).
+ #define LOG_ONLY( argName ) argName
+
+#else /* not defined __TEST_WHITELISTADAPTER_LOG__ */
+
+ /// Do nothing (log disabled).
+ #define CLOG( body )
+ /// Do nothing (log disabled).
+ #define CDUMP( body )
+ /// Guard "log-only" argument name with this (expands to nothing).
+ #define LOG_ONLY( argName )
+
+
+#endif /* def __TEST_WHITELISTADAPTER_LOG__ */
+
+#endif /* def WHITELISTADAPTER_LOGGER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Panic handling for white list management.
+*
+*/
+
+
+#ifndef WHITELISTADAPTERPANIC_H
+#define WHITELISTADAPTERPANIC_H
+
+// INCLUDE FILES
+ // System includes
+#include <e32def.h>
+
+// DATA TYPES
+
+enum TWhiteListAdapterPanics
+ {
+ ENoItemsToBeDisplayed, ///< A UI control tries to display items
+ EArrayIndexOutOfBounds, ///< Self-explanatory
+ ENullProxy ///< Physicial proxy cannot be found
+ };
+
+// FUNCTION PROTOTYPES
+
+/**
+* Panic handling in White List Adapter module. It's role is centralizing
+* panics.
+* @param aPanic Panic code, defined in THermesProtocolPanic.
+*/
+void Panic( TInt aPanic );
+
+
+#endif // WHITELISTADAPTERPANIC_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterUids.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: UID definitions for the White List Adapter plug-in.
+*
+*/
+
+
+
+#ifndef WHITELISTADAPTERUIDS_H
+#define WHITELISTADAPTERUIDS_H
+
+// ================= UIDs ======================
+
+/// DLL UID
+#define KWhiteListAdapterDllUid 0x10008D3E
+
+// ECOM DLL implementation UID - White List Adapter
+#define KWhiteListAdapterImplementationUid 0x101F85EF
+
+// ECOM DLL interface UID
+#define KProvisioningAdapterInterfaceUid 0x101F84D5
+
+#endif // WHITELISTADAPTERUIDS_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,522 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Handles white list settings in provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+
+ // User includes
+#include "PushInitiator.h"
+#include "PushInitiatorList.h"
+#include "PushMtmSettings.h"
+#include "WhiteListAdapter.h"
+#include "WhiteListAdapterDef.h"
+#include "WhiteListAdapterItem.h"
+#include "WhiteListAdapterLogger.h"
+#include "WhiteListAdapterPanic.h"
+#include "WhiteListAdapterUids.h"
+ // System includes
+#include <CWPCharacteristic.h>
+#include <CWPParameter.h>
+
+// CONSTANTS
+
+// 'Push enabled' flag settings
+const TInt KPushEnabledFlagLength = 1;
+const TUint16 KPushEnabledFlagTrue = '1';
+const TUint16 KPushEnabledFlagFalse = '0';
+
+// Granularity value for dynamic arrays
+const TInt KDynamicArrayGranularity = 3;
+
+// ================= MEMBER FUNCTIONS ======================
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::CWhiteListAdapter
+// ---------------------------------------------------------
+//
+CWhiteListAdapter::CWhiteListAdapter() : CWPAdapter(),
+iItems( KDynamicArrayGranularity ),
+iItemsToBeAdded( KDynamicArrayGranularity ),
+iLogicalProxyPushSupport( EPushDontCare ), iPhysicalProxyIsVisited( EFalse )
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter c'tor" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ConstructL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::ConstructL()
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::ConstructL" ) ) );
+
+ iMsvSession = CMsvSession::OpenSyncL( *this );
+ iPushMtmSettings = CPushMtmSettings::NewL();
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::ConstructL" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::NewL
+// ---------------------------------------------------------
+//
+CWhiteListAdapter* CWhiteListAdapter::NewL()
+ {
+ CWhiteListAdapter* self = new (ELeave) CWhiteListAdapter;
+
+ CleanupStack::PushL( self );
+
+ self->ConstructL();
+
+ CleanupStack::Pop(); // self
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::~CWhiteListAdapter
+// ---------------------------------------------------------
+//
+CWhiteListAdapter::~CWhiteListAdapter()
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter d'tor" ) ) );
+
+ delete iCurrentItem;
+
+ delete iPushMtmSettings; // It has to be deleted before iMsvSession,
+ // because it uses iMsvSession->FileSession().
+ delete iMsvSession;
+
+ CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter d'tor, iItemsToBeAdded.Count:%d" ),
+ iItemsToBeAdded.Count() ) );
+ iItemsToBeAdded.ResetAndDestroy();
+ iItemsToBeAdded.Close();
+
+ CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter d'tor, iItems.Count:%d" ), iItems.Count() ) );
+ iItems.ResetAndDestroy();
+ iItems.Close();
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter d'tor" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ItemCount
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::ItemCount() const
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::ItemCount %d" ), iItems.Count() ) );
+
+ return iItems.Count();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SummaryTitle
+// ---------------------------------------------------------
+//
+const TDesC16& CWhiteListAdapter::SummaryTitle( TInt /*aIndex*/ ) const
+ {
+ // As WL text will never be shown, we simply return an empty string here.
+ return KNullDesC16();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SummaryText
+// ---------------------------------------------------------
+//
+const TDesC16& CWhiteListAdapter::SummaryText( TInt /*aIndex*/ ) const
+ {
+ // As WL text will never be shown, we simply return an empty string here.
+ return KNullDesC16();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SaveL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::SaveL( TInt aItem )
+ {
+ __ASSERT_DEBUG( 0 <= aItem && aItem < iItems.Count(),
+ Panic( EArrayIndexOutOfBounds ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::SaveL %d" ), aItem ) );
+
+ CPushInitiator* pi = new (ELeave) CPushInitiator;
+ CleanupStack::PushL( pi );
+ pi->SetAddressL( iItems[aItem]->Address(),
+ iItems[aItem]->AddressType() );
+
+ TUint32 entryId = iPushMtmSettings->PushInitiatorList().AddL( pi );
+ CleanupStack::Pop( pi ); // pi, ownership taken over
+ // Save the ID of the added entry:
+ iItems[aItem]->SetId( entryId );
+
+ iPushMtmSettings->SaveL();
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::SaveL" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::CanSetAsDefault
+// ---------------------------------------------------------
+//
+TBool CWhiteListAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
+ {
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SetAsDefaultL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::SetAsDefaultL( TInt /*aItem*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::DetailsL
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::DetailsL( TInt /*aItem*/,
+ MWPPairVisitor& /*aVisitor*/ )
+ {
+ return KErrNotSupported;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ContextExtension
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::ContextExtension( MWPContextExtension*& aExtension )
+ {
+ aExtension = this;
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitL( CWPCharacteristic& aCharacteristic )
+ {
+ if ( aCharacteristic.Type() == KWPPxLogical )
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::VisitL PXLOGICAL" ) ) );
+
+ aCharacteristic.AcceptL( *this );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PXLOGICAL visited, push support is %d" ),
+ iLogicalProxyPushSupport ) );
+
+ // iItemsToBeAdded contains physical proxies whose push support
+ // is either PushEnabled or PushDontCare (i.e. PushDisabled proxies
+ // are not present in this array).
+ if ( iLogicalProxyPushSupport == EPushEnabled )
+ {
+ // Knowing that the logical proxy's push support is PushEnabled,
+ // we have to add each element of the above-mentioned array.
+ for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
+ {
+ // If addition fails, then we delete the item. Otherwise,
+ // the ownership has been taken over by iItems array.
+ if ( iItems.Append( iItemsToBeAdded[i] ) != KErrNone )
+ {
+ delete iItemsToBeAdded[i];
+ }
+ }
+ }
+ else
+ {
+ // We're here : logical proxy's push support is either PushDontCare
+ // or PushDisabled. In this case we have to add only those elements
+ // in the array whose push support is PushEnabled. This is because
+ // physical proxy's push support definition is stronger than the
+ // logical proxy's definition.
+ for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
+ {
+ TWhiteListAdapterItem* item = iItemsToBeAdded[i];
+ if ( item->PushSupport() == EPushEnabled )
+ {
+ // If addition fails, then we delete the item. Otherwise,
+ // the ownership has been taken over by iItems array.
+ if ( iItems.Append( item ) != KErrNone )
+ {
+ delete item;
+ }
+ }
+ else
+ {
+ delete item;
+ }
+ }
+ }
+
+ // There is only one thing we need to do here : reset the array.
+ // At this point, each element in the array is invalid : if the
+ // element happened to be valid, then the other array (iItems)
+ // took over the ownership. Otherwise (i.e. the element was
+ // invalid), the element got deleted manually.
+ // Thus, we can safely reset the array.
+ iItemsToBeAdded.Reset();
+
+ iLogicalProxyPushSupport = EPushDontCare;
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::VisitL PXLOGICAL" ) ) );
+ }
+ else if ( aCharacteristic.Type() == KWPPxPhysical )
+ {
+ // This deletion is for safety's sake : if one of the leaving methods
+ // in this section (below) has left, then it may happen that this
+ // method is called again and iCurrentItem is not NULL. If it is the
+ // case, we can avoid having an orphaned memory area by deleting the
+ // current item before allocating a new one.
+ // However, in most cases iCurrentItem will be NULL.
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
+
+ delete iCurrentItem;
+ iCurrentItem = NULL;
+ iCurrentItem = new (ELeave) TWhiteListAdapterItem();
+
+ iPhysicalProxyIsVisited = ETrue;
+
+ aCharacteristic.AcceptL( *this );
+
+ iPhysicalProxyIsVisited = EFalse;
+
+ if ( iCurrentItem->Valid() )
+ {
+ User::LeaveIfError( iItemsToBeAdded.Append( iCurrentItem ) );
+ iCurrentItem = NULL; // Ownership transferred.
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PXPHYSICAL valid & added" ) ) );
+ }
+ else
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PXPHYSICAL invalid" ) ) );
+ // invalid physical proxy (at least from our point of view)
+ delete iCurrentItem;
+ iCurrentItem = NULL;
+ }
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitL( CWPParameter& aParameter )
+ {
+ switch ( aParameter.ID() )
+ {
+ case EWPParameterPhysicalProxyID :
+ {
+ __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PhysicalProxyID" ) ) );
+
+ if ( iCurrentItem )
+ {
+ iCurrentItem->SetProxyId( aParameter.Value() );
+ }
+
+ break;
+ }
+ case EWPParameterPxAddr :
+ {
+ __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PxAddr" ) ) );
+
+ if ( iCurrentItem )
+ {
+ iCurrentItem->SetAddress( aParameter.Value() );
+ }
+
+ break;
+ }
+ case EWPParameterPxAddrType :
+ {
+ __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PxAddrType" ) ) );
+
+ if ( iCurrentItem )
+ {
+ iCurrentItem->SetAddressType( aParameter.Value() );
+ }
+
+ break;
+ }
+ case EWPParameterPushEnabled :
+ {
+ if ( iCurrentItem )
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL Physical PushEnabled" ) ) );
+
+ // it is a physical proxy
+ iCurrentItem->SetPushSupport
+ ( ResolvePushSupport( aParameter.Value() ) );
+ }
+ else
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL Logical PushEnabled" ) ) );
+
+ // it is a logical proxy
+ iLogicalProxyPushSupport =
+ ResolvePushSupport( aParameter.Value() );
+ }
+
+ break;
+ }
+ default :
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitLinkL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::HandleSessionEventL( TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/,
+ TAny* /*aArg2*/,
+ TAny* /*aArg3*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ResolvePushSupport
+// ---------------------------------------------------------
+//
+TPushSupport CWhiteListAdapter::ResolvePushSupport( const TDesC& aPushSupport )
+ {
+ TPushSupport support = EPushDontCare;
+
+ if ( aPushSupport.Length() == KPushEnabledFlagLength )
+ {
+ if ( aPushSupport[0] == KPushEnabledFlagTrue )
+ {
+ support = EPushEnabled;
+ }
+ else if ( aPushSupport[0] == KPushEnabledFlagFalse )
+ {
+ support = EPushDisabled;
+ }
+ }
+
+ return support;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SaveDataL
+// ---------------------------------------------------------
+//
+const TDesC8& CWhiteListAdapter::SaveDataL( TInt aIndex ) const
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::SaveDataL %d %d %d" ),
+ iItems.Count(), aIndex, iItems[aIndex]->Id() ) );
+ return ( iItems[aIndex]->IdBuf() );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::DeleteL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::DeleteL( const TDesC8& aSaveData )
+ {
+ // Copy source into a package buffer:
+ TPckgBuf<TUint32> entryIdBuf;
+ entryIdBuf.Copy( aSaveData );
+ // Extract the entry ID:
+ TUint32 entryId( entryIdBuf() );
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::DeleteL ID %d" ), entryId ) );
+
+ // Now entryId holds the ID - we can remove it from WL:
+ CPushInitiatorList& whiteList = iPushMtmSettings->PushInitiatorList();
+ // Find the index of the Initiator with the given ID.
+ TInt index( KErrNotFound );
+ // As the entries are unique in WL by the ID, it's enough
+ // to continue the loop until first hit.
+ const TInt count( whiteList.Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ const CPushInitiator& initiator = whiteList.At(i);
+ if ( initiator.EntryID() == entryId )
+ {
+ index = i;
+ // Found:
+ break;
+ }
+ }
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::DeleteL index %d" ), index ) );
+ if ( index != KErrNotFound )
+ {
+ whiteList.Delete( index );
+ // Commit changes.
+ iPushMtmSettings->SaveL();
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::DeleteL Saved..." ) ) );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::Uid
+// ---------------------------------------------------------
+//
+TUint32 CWhiteListAdapter::Uid() const
+ {
+ return (TUint32)KWhiteListAdapterImplementationUid;
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Table of plugins for ECom
+*
+*/
+
+
+
+// INCLUDE FILES
+ // System includes
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+ // User includes
+#include "WhiteListAdapter.h"
+#include "WhiteListAdapterUids.h"
+
+// CONSTANTS
+
+const TImplementationProxy KImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( KWhiteListAdapterImplementationUid, CWhiteListAdapter::NewL )
+ };
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+
+ return KImplementationTable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Handles white list settings in provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+ // User includes
+#include "WhiteListAdapterItem.h"
+
+// CONSTANTS
+
+_LIT( KIPv4AddressType, "IPV4" );
+_LIT( KIPv6AddressType, "IPV6" );
+_LIT( KE164AddressType, "E164" );
+_LIT( KAlphanumericAddressType, "ALPHA" );
+
+// ================= MEMBER FUNCTIONS ======================
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::TWhiteListAdapterItem
+// ---------------------------------------------------------
+//
+TWhiteListAdapterItem::TWhiteListAdapterItem()
+: iAddress( KNullDesC ),
+ iAddressType( CPushInitiator::ETypeE164 ),
+ iId( 0 ),
+ iIdBufPtr( iId ),
+ iProxyId( KNullDesC ),
+ iPushSupport( EPushDontCare )
+ {
+ iAddressType = CPushInitiator::ETypeIpv4;
+ iPushSupport = EPushDontCare;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Address
+// ---------------------------------------------------------
+//
+const TDesC& TWhiteListAdapterItem::Address() const
+ {
+ return iAddress;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::AddressType
+// ---------------------------------------------------------
+//
+CPushInitiator::TAddrType TWhiteListAdapterItem::AddressType() const
+ {
+ return iAddressType;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Id
+// ---------------------------------------------------------
+//
+TUint32 TWhiteListAdapterItem::Id() const
+ {
+ return iId;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::IdBuf
+// ---------------------------------------------------------
+//
+const TDesC8& TWhiteListAdapterItem::IdBuf() const
+ {
+ return iIdBufPtr;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::PushSupport
+// ---------------------------------------------------------
+//
+TPushSupport TWhiteListAdapterItem::PushSupport() const
+ {
+ return iPushSupport;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetAddress
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetAddress( const TDesC& aAddress )
+ {
+ iAddress.Set( aAddress );
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetAddressType
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetAddressType( const TDesC& aAddressType )
+ {
+ if ( !aAddressType.Compare( KIPv4AddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeIpv4;
+ }
+ else if ( !aAddressType.Compare( KIPv6AddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeIpv6;
+ }
+ else if ( !aAddressType.Compare( KE164AddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeE164;
+ }
+ else if ( !aAddressType.Compare( KAlphanumericAddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeAlpha;
+ }
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetId
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetId( TUint32 aId )
+ {
+ iId = aId;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetProxyId
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetProxyId( const TDesC& aProxyId )
+ {
+ iProxyId.Set( aProxyId );
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetPushSupport
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetPushSupport( TPushSupport aPushSupport )
+ {
+ iPushSupport = aPushSupport;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Valid
+// ---------------------------------------------------------
+//
+TBool TWhiteListAdapterItem::Valid() const
+ {
+ TBool valid = EFalse;
+
+ // TODO : checking IP address/phone number validity (MsgBioUtils?)
+
+ if ( ( iPushSupport == EPushEnabled || iPushSupport == EPushDontCare ) &&
+ ( iAddressType == CPushInitiator::ETypeE164 ) &&
+ ( 0 < iAddress.Length() ) )
+ {
+ valid = ETrue;
+ }
+
+ return valid;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of class WhiteListAdapterLogger.
+*
+*
+*/
+
+
+#ifdef __TEST_WHITELISTADAPTER_LOG__
+
+// INCLUDE FILES
+ // System includes
+#include <flogger.h>
+
+ // User includes
+#include "WhiteListAdapterLogger.h"
+
+// ================= CONSTANTS =======================
+
+/// White List Adapter logging directory.
+_LIT( KWhiteListAdapterLogDir, "WLA" );
+/// White List Adapter log file name.
+_LIT( KWhiteListAdapterLogFile, "Log.txt" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ list
+ );
+ VA_END( list );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, VA_LIST& aList )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ aList
+ );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ list
+ );
+ VA_END( list );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, VA_LIST& aList )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ aList
+ );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::HexDump()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::HexDump
+ (
+ TInt32 aMask,
+ TInt aLevel,
+ const TText* aHeader,
+ const TText* aMargin,
+ const TUint8* aPtr,
+ TInt aLen
+ )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ RFileLogger::HexDump
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aHeader,
+ aMargin,
+ aPtr,
+ aLen
+ );
+ }
+ }
+
+#endif // __TEST_WHITELISTADAPTER_LOG__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Panic handling for white list management.
+*
+*/
+
+
+// INCLUDE FILES
+ // System includes
+#include <e32std.h>
+
+ // User includes
+#include "WhiteListAdapterPanic.h"
+
+// CONSTANTS
+
+_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" );
+
+// External function(s)
+
+void Panic( TInt aPanic )
+ {
+ User::Panic( KWhiteListAdapterPanicString, aPanic );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Rom/PushMtm.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __PUSHMTM_IBY__
+#define __PUSHMTM_IBY__
+
+
+file=ABI_DIR\BUILD_DIR\PushMtmCliSrv.dll SHARED_LIB_DIR\PushMtmCliSrv.dll
+file=ABI_DIR\BUILD_DIR\PushMtmUi.dll SHARED_LIB_DIR\PushMtmUi.dll
+file=ABI_DIR\BUILD_DIR\PushMtmUtil.dll SHARED_LIB_DIR\PushMtmUtil.dll
+
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR, PushMtm)
+
+S60_APP_EXE(PushViewer)
+//This component doesn't have icon S60_APP_AIF_ICONS(PushViewer)
+S60_UPGRADABLE_APP_REG_RSC(PushViewer)
+
+ECOM_PLUGIN(PushMtmPushContentHandler.dll,101F854C.rsc)
+#ifdef __PUSH_WHITELIST
+ECOM_PLUGIN(PushMtmWhiteListAdapter.dll,10008D3E.rsc)
+#endif // __PUSH_WHITELIST
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Rom/PushMtmResources.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __PUSHMTM_RESOURCES_IBY__
+#define __PUSHMTM_RESOURCES_IBY__
+
+//Resource file(s) for PushMtm (PushMtm.iby)
+data=DATAZ_\MTM_INFO_FILE_DIR\PushRegistry.rsc MTM_INFO_FILE_DIR\PushRegistry.rsc
+data=DATAZ_\MTM_RESOURCE_DIR\PushMtmUi.rsc MTM_RESOURCE_DIR\PushMtmUi.rsc
+data=DATAZ_\APP_RESOURCE_DIR\PushViewer.rsc APP_RESOURCE_DIR\PushViewer.rsc
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Rom/S60SiSlWapPush.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __S60SISLWAPPUSH_IBY__
+#define __S60SISLWAPPUSH_IBY__
+
+REM This iby file puts Symbian components to ROM. It replaces sislwappush.iby.
+REM It does not put some components to ROM, that are put by sislwappush.iby.
+
+file=ABI_DIR\BUILD_DIR\sislpushmsgutils.dll System\Libs\sislpushmsgutils.dll
+
+data=ZRESOURCE\wappush\si.dtd RESOURCE\wappush\si.dtd
+data=ZRESOURCE\wappush\sl.dtd RESOURCE\wappush\sl.dtd
+data=ZRESOURCE\wappush\si10.tok RESOURCE\wappush\si10.tok
+data=ZRESOURCE\wappush\sl10.tok RESOURCE\wappush\sl10.tok
+
+#endif // __S60SISLWAPPUSH_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Rom/wappush.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __WAPPUSH_IBY__
+#define __WAPPUSH_IBY__
+
+REM This iby file puts Symbian components to ROM.
+REM It replaces Symbian wappush.iby.
+
+#include <WapPushSupport.iby>
+#include <miscpushutils.iby>
+
+file=ABI_DIR\BUILD_DIR\wappushutils.dll System\Libs\wappushutils.dll
+ECOM_PLUGIN(pushapphandler.dll,101f3e5b.rsc)
+ECOM_PLUGIN(pushsecurity.dll,101f3e57.rsc)
+#ifdef __WATCHER_API_V2__
+ECOM_PLUGIN(pushwatcher.dll, 10009145.rsc)
+#else
+file=ABI_DIR\BUILD_DIR\pushwatcher.dll System\Libs\watchers\pushwatcher.dll
+#endif // __WATCHER_API_V2__
+file=ABI_DIR\BUILD_DIR\pushmsgentry.dll System\Libs\pushmsgentry.dll
+
+#endif // __WAPPUSH_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewer.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: hrh file. Enums and defines.
+*
+*/
+
+
+
+#ifndef PUSHVIEWER_HRH
+#define PUSHVIEWER_HRH
+
+#include <uikon.hrh>
+#include <avkon.hrh>
+#include <MsgEditor.hrh>
+#include <bldvariant.hrh>
+
+
+enum TPushViewerCommand
+ {
+ // Application specific command ids.
+ //
+ EPushViewerCmdLoadService = 1, // The value 0 doesn't work, because it is EEikCmdCanceled.
+ EPushViewerCmdDelete,
+ EPushViewerCmdMessageInfo,
+ EPushViewerCmdPreviousMessage,
+ EPushViewerCmdNextMessage,
+ //
+ // Ui framework defined command ids.
+ //
+ EPushViewerCmdOptions = EAknSoftkeyOptions,// = 3000
+#ifdef __SERIES60_HELP
+ EPushViewerCmdHelp = EAknCmdHelp, // = 4003
+#endif //__SERIES60_HELP
+ EPushViewerCmdBack = EAknSoftkeyBack, // = 3001
+ EPushViewerCmdExit = EEikCmdExit, // = 0x100. Use in HandleCommanL.
+ EPushViewerCmdAknExit = EAknCmdExit // = 4011. Use in resources.
+ };
+
+enum TPushViewerControl
+ {
+ EPushViewerCntrlTab,
+ EMyMsgComponentIdBody = EMsgComponentIdFirstFreeEditorSpecificId
+ };
+
+
+#endif // PUSHVIEWER_HRH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewerApp.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of CPushViewerApplication.
+*
+*/
+
+
+
+#ifndef PUSHVIEWERAPP_H
+#define PUSHVIEWERAPP_H
+
+// INCLUDES
+
+#include <aknapp.h>
+
+// FORWARD DECLARATION
+
+class CApaAppServer;
+
+// CLASS DECLARATION
+
+/**
+* Push Viewer application
+*/
+class CPushViewerApplication : public CAknApplication
+ {
+ private: // Functions from base classes
+
+ /**
+ * From CApaApplication.
+ */
+ TUid AppDllUid() const;
+
+ /**
+ * From CEikApplication.
+ */
+ CApaDocument* CreateDocumentL();
+
+ /*
+ * From CEikApplication.
+ */
+ void NewAppServerL( CApaAppServer*& aAppServer );
+ };
+
+#endif // PUSHVIEWERAPP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewerAppServer.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+#ifndef PushViewerAppServer_H
+#define PushViewerAppServer_H
+
+// INCLUDES
+#include <AknServerApp.h>
+#include <ApaServerApp.h>
+
+
+// CLASS DECLARATION
+
+/**
+* ?one_line_short_description.
+* ?other_description_lines
+*
+* @lib ?library
+* @since Series ?XX ?SeriesXX_version
+*/
+class CPushViewerAppServer : public CAknAppServer
+ {
+ public: // Constructors and destructor
+
+ CPushViewerAppServer();
+
+ public: // from CAknAppServer
+
+ CApaAppServiceBase* CreateServiceL( TUid aServiceType ) const;
+
+ protected: // from CPolicyServer
+
+ virtual TCustomResult CustomFailureActionL( const RMessage2& aMsg,
+ TInt aAction,
+ const TSecurityInfo& aMissing );
+ };
+
+#endif // PushViewerAppServer_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewerDef.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Generic definition file. Internal usage only.
+*
+*/
+
+
+
+#ifndef PUSHVIEWERDEF_H
+#define PUSHVIEWERDEF_H
+
+// INCLUDE FILES
+
+#include "PushMtmDef.hrh"
+
+// CONSTANTS
+
+/// Push Viewer application UID.
+LOCAL_D const TUid KUidPushViewerApp = { EUidPushViewerApp };
+/// WML Browser releates figures.
+LOCAL_D const TUid KUidWmlBrowserApp = { 0x10008D39 };
+/// Other applications.
+LOCAL_D const TUid KUidNotepadApp = { 0x1000599d };
+/// Bitmap file.
+_LIT( KPushViewerMbm, "z:\\resource\\PushViewer.mbm");
+
+#endif // PUSHVIEWERDEF_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewerDoc.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushViewerDocument
+*
+*/
+
+
+
+#ifndef PUSHVIEWERDOC_H
+#define PUSHVIEWERDOC_H
+
+// INCLUDES
+
+#include <msgeditordocument.h>
+
+// CLASS DECLARATION
+
+/**
+* Push Viewer application's document.
+*/
+class CPushViewerDocument : public CMsgEditorDocument
+ {
+ public: // Constructors and destructor
+
+ static CPushViewerDocument* NewL( CEikApplication& aApp );
+
+ public: // New functions
+
+ /**
+ * Issue EPushMtmCmdLoadService to MTM UI.
+ * @return None.
+ */
+ void IssueLoadServiceL();
+
+ /**
+ * Issue KMtmUiFunctionMessageInfo to MTM UI.
+ * @return None.
+ */
+ void IssueMessageInfoL();
+
+ private: // Constructors and destructor
+
+ CPushViewerDocument( CEikApplication& aApp );
+
+ private: // Functions from base classes
+
+ /**
+ * From CEikDocument.
+ */
+ CEikAppUi* CreateAppUiL();
+
+ /**
+ * From CMsgEditorDocument
+ */
+ TMsvId DefaultMsgFolder() const;
+
+ /**
+ * From CMsgEditorDocument
+ */
+ TMsvId DefaultMsgService() const;
+
+ /**
+ * From CMsgEditorDocument
+ */
+ TMsvId CreateNewL( TMsvId aService, TMsvId aFolder );
+
+ /**
+ * From CMsgEditorDocument
+ */
+ void EntryChangedL();
+ };
+
+#endif // PUSHVIEWERDOC_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewerMsgEdAppUi.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Application Ui declaration.
+*
+*/
+
+
+
+#ifndef PUSHVIEWERMSGEDAPPUI_H
+#define PUSHVIEWERMSGEDAPPUI_H
+
+// INCLUDES
+
+#include <MsgEditorAppUi.h>
+#include <bldvariant.hrh>
+
+// FORWARD DECLARATIONS
+
+class CMsgEditorView;
+class CPushMsgEntryBase;
+class CPushViewerDocument;
+
+// CLASS DECLARATION
+
+/**
+* Push Viewer application's UI that creates a MsgEditor-based view.
+* This application uses a message server entry as a "model" or "context".
+*/
+class CPushViewerMsgEdAppUi : public CMsgEditorAppUi
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ CPushViewerMsgEdAppUi();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushViewerMsgEdAppUi();
+
+ public: // New functions
+
+ /**
+ * Return the model of the application that is a push message entry.
+ * @return The base class for all push entries.
+ */
+ CPushMsgEntryBase& Model() const;
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ * @return None.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Return the document of the application.
+ * @return The doc.
+ */
+ CPushViewerDocument& PushDoc() const;
+
+ /**
+ * Call CMsgEditorAppUi::UpdateNaviPaneL() with the right images.
+ * @return None.
+ */
+ void UpdateNaviPaneL();
+
+ /**
+ * Construct the view and make it visible.
+ * @return None.
+ */
+ void ConstructViewL();
+
+ /**
+ * Chect the expiration state of the context. It is SI specific.
+ * In case of other push messages it returns EFalse.
+ * @return ETrue or EFalse.
+ */
+ TBool IsExpired();
+
+ /**
+ * Show information note and terminate the application.
+ */
+ void NotifyAndExitL( TInt aResId );
+
+ /**
+ * Construct the two body text: one holds the message,
+ * the other holds the href. The order depends on the
+ * length of the message text.
+ * @param aBodyControl1 The first body control.
+ * @param aBodyControl2 The second body control.
+ * @return Index of the Href control or KErrNotFound if no href in the msg.
+ */
+ TInt ConstructBodyTextL( CMsgBodyControl& aBodyControl1,
+ CMsgBodyControl& aBodyControl2 ) const;
+
+ private: // Functions from base classes
+
+ /**
+ * Terminate the application with this method.
+ * @return None.
+ */
+ void DoMsgSaveExitL();
+
+ /**
+ * Construct the context, update the navi pane and construct the view.
+ * @return None.
+ */
+ void LaunchViewL();
+
+ /**
+ * This method is called when the context is changed.
+ * @return None.
+ */
+ void HandleEntryChangeL();
+
+ /**
+ * This method is called when the context is deleted.
+ * @return None.
+ */
+ void HandleEntryDeletedL();
+
+ /**
+ * We handle the Left/Right arrow here. Other event keys are
+ * handled by the view.
+ * @return EKeyWasConsumed.
+ */
+ TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Dynamically initialize the menu takin into consideration
+ * the current context.
+ * @return None.
+ */
+ void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane );
+
+ /**
+ * It's just an empty implementation.
+ * @return None.
+ */
+ void GetHelpContextForControl( TCoeHelpContext& aContext ) const;
+
+#ifdef __SERIES60_HELP
+ /**
+ * Get help context from the appui.
+ * @return Context.
+ */
+ CArrayFix<TCoeHelpContext>* HelpContextL() const;
+#endif // __SERIES60_HELP
+
+ /**
+ * Handle commands.
+ * @return None.
+ */
+ void HandleCommandL( TInt aCommand );
+
+ private: // Data members
+
+ CPushMsgEntryBase* iContext; ///< Message wrapper. Owned.
+ CMsgEditorView* iView; ///< MsgEditor style view. Owned.
+ };
+
+#endif // PUSHVIEWERMSGEDAPPUI_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerInc/PushViewerPanic.h Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+#ifndef PUSHVIEWERPANIC_H
+#define PUSHVIEWERPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushViewerPanic
+ {
+ EPushViewerPanCommandNotSupported = 1, ///< Not supported command.
+ EPushViewerPanBadType = 2, ///< Unsupported message type for an operation.
+ EPushViewerPanFoldersNotSupported = 3, ///< MTM loaded with bad message entry.
+ EPushViewerPanEmptySelection = 4, ///< Entry selection is empty.
+ EPushViewerPanBadItemType = 5,
+ EPushViewerPanNotInitialized = 6,
+ EPushViewerPanListBoxTooLarge = 7,
+ EPushViewerPanNull = 8,
+ EPushViewerPanIllegalArgument = 9,
+ EPushViewerPanBadPushType = 10,
+ EPushViewerPanBadMtmType = 11,
+ EPushViewerPanNotEmptyRichText = 12,
+ EPushViewerPanBadParaCount = 13,
+ EPushViewerPanSlEmptyHref = 14
+ };
+
+GLREF_C void ViewerPanic( TPushViewerPanic aReason );
+
+#endif // PUSHVIEWERPANIC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerSrc/PushViewerApp.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Application class declaration.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewerApp.h"
+#include "PushViewerDoc.h"
+#include "PushViewerDef.h"
+#include "PushViewerAppServer.h"
+#include <eikstart.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushViewerApplication::AppDllUid
+// ---------------------------------------------------------
+//
+TUid CPushViewerApplication::AppDllUid() const
+ {
+ return KUidPushViewerApp;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerApplication::CreateDocumentL
+// ---------------------------------------------------------
+//
+CApaDocument* CPushViewerApplication::CreateDocumentL()
+ {
+ return CPushViewerDocument::NewL( *this );
+ }
+
+// ---------------------------------------------------------
+// CPushViewerApplication::NewAppServerL
+// ---------------------------------------------------------
+//
+void CPushViewerApplication::NewAppServerL
+ ( CApaAppServer*& aAppServer )
+ {
+ aAppServer = new (ELeave) CPushViewerAppServer;
+ }
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+LOCAL_C CApaApplication* NewApplication()
+ {
+ return new CPushViewerApplication;
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ return EikStart::RunApplication( NewApplication );
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerSrc/PushViewerAppServer.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "PushViewerAppServer.h"
+#include <MuiuMsgEditorServiceSession.h>
+#include <MuiuMsgEditorServiceConst.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushViewerAppServer::CreateServiceL
+// -----------------------------------------------------------------------------
+//
+CApaAppServiceBase*
+CPushViewerAppServer::CreateServiceL( TUid aServiceType ) const
+ {
+ if ( aServiceType == TUid::Uid( KMuiuMsgEditorServiceUid ) )
+ {
+ return new (ELeave) CMuiuMsgEditorServiceSession;
+ }
+ else
+ {
+ return CAknAppServer::CreateServiceL( aServiceType );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushViewerAppServer::CPushViewerAppServer
+// -----------------------------------------------------------------------------
+//
+CPushViewerAppServer::CPushViewerAppServer( )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPushViewerAppServer::CustomFailureActionL
+// -----------------------------------------------------------------------------
+//
+CPolicyServer::TCustomResult
+CPushViewerAppServer::CustomFailureActionL( const RMessage2& /*aMsg*/,
+ TInt /*aAction*/,
+ const TSecurityInfo& /*aMissing*/ )
+ {
+ CPolicyServer::TCustomResult res( CPolicyServer::EPass );
+ return res;
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerSrc/PushViewerDoc.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushViewerDocument.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewerDoc.h"
+#include <bldvariant.hrh>
+#include "PushViewerMsgEdAppUi.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmDef.h"
+#include <msvuids.h>
+#include <MuiuMsvSingleOpWatcher.h>
+#include <msvstd.h>
+#include <mtmuibas.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushViewerDocument::NewL
+// ---------------------------------------------------------
+//
+CPushViewerDocument* CPushViewerDocument::NewL( CEikApplication& aApp )
+ {
+ CPushViewerDocument* doc = new (ELeave) CPushViewerDocument( aApp );
+ CleanupStack::PushL( doc );
+ doc->ConstructL();
+ CleanupStack::Pop();
+ return doc;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::IssueLoadServiceL
+// ---------------------------------------------------------
+//
+void CPushViewerDocument::IssueLoadServiceL()
+ {
+ CMsvSingleOpWatcher* opWatcher = CMsvSingleOpWatcher::NewLC( *this );
+
+ TBuf8<1> dummyPar;
+ CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( dummySel );
+
+ CMsvOperation* operation = MtmUi().InvokeAsyncFunctionL
+ ( EPushMtmCmdLoadService,
+ *dummySel,
+ opWatcher->iStatus,
+ dummyPar );
+
+ CleanupStack::PopAndDestroy( dummySel ); // dummySel
+
+ // Observe the operation.
+ AddSingleOperationL( operation, opWatcher );
+ CleanupStack::Pop( opWatcher ); // opWatcher
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::IssueMessageInfoL
+// ---------------------------------------------------------
+//
+void CPushViewerDocument::IssueMessageInfoL()
+ {
+ CMsvSingleOpWatcher* opWatcher = CMsvSingleOpWatcher::NewLC( *this );
+
+ TMessageInfoParam par;
+ par.iDontShowNotification = ETrue;
+ TMessageInfoParamBuf parBuf( par );
+
+ CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( dummySel );
+
+ CMsvOperation* operation = MtmUi().InvokeAsyncFunctionL
+ ( KMtmUiFunctionMessageInfo,
+ *dummySel,
+ opWatcher->iStatus,
+ parBuf );
+ CleanupStack::PopAndDestroy( dummySel ); // dummySel
+
+ // See MsgEditorDocument.cpp about the usage of the following
+ // method.
+ AddSingleOperationL( operation, opWatcher );
+ CleanupStack::Pop( opWatcher ); // opWatcher
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::CPushViewerDocument
+// ---------------------------------------------------------
+//
+CPushViewerDocument::CPushViewerDocument( CEikApplication& aApp )
+: CMsgEditorDocument( aApp )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::CreateAppUiL
+// ---------------------------------------------------------
+//
+CEikAppUi* CPushViewerDocument::CreateAppUiL()
+ {
+ // Create a MsgEditor based view.
+ return new (ELeave) CPushViewerMsgEdAppUi;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::DefaultMsgFolder
+// ---------------------------------------------------------
+//
+TMsvId CPushViewerDocument::DefaultMsgFolder() const
+ {
+ return KMsvDraftEntryIdValue;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::DefaultMsgService
+// ---------------------------------------------------------
+//
+TMsvId CPushViewerDocument::DefaultMsgService() const
+ {
+ return KMsvLocalServiceIndexEntryId;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::CreateNewL
+// ---------------------------------------------------------
+//
+TMsvId CPushViewerDocument::CreateNewL( TMsvId /*aService*/,
+ TMsvId /*aFolder*/ )
+ {
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerDocument::EntryChangedL
+// ---------------------------------------------------------
+//
+void CPushViewerDocument::EntryChangedL()
+ {
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerSrc/PushViewerMsgEdAppUi.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,677 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Application Ui member definitions.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewerMsgEdAppUi.h"
+#include "PushViewerDoc.h"
+#include "PushViewerDef.h"
+#include "PushViewerPanic.h"
+#include "PushMtmUtil.h"
+#include "PushViewer.hrh"
+#include "PushMtmLog.h"
+#include <push/CSIPushMsgEntry.h>
+#include <push/CSLPushMsgEntry.h>
+#include <PushViewer.rsg>
+#include <aknmessagequerydialog.h>
+#include <AknQueryDialog.h>
+#include <MsgEditorView.h>
+#include <MsgBodyControl.h>
+#include <txtrich.h>
+#include <txtfrmat.h>
+#include <txtfmlyr.h>
+#include <gdi.h>
+#include <bldvariant.hrh>
+#include <eikrted.h>
+#include <barsread.h>
+#include <AknNoteWrappers.h>
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <hlplch.h>
+#include <csxhelp/wpush.hlp.hrh>
+#endif // __SERIES60_HELP
+
+#include "eikon.hrh"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::CPushViewerMsgEdAppUi
+// ---------------------------------------------------------
+//
+CPushViewerMsgEdAppUi::CPushViewerMsgEdAppUi()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::~CPushViewerMsgEdAppUi
+// ---------------------------------------------------------
+//
+CPushViewerMsgEdAppUi::~CPushViewerMsgEdAppUi()
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::~CPushViewerMsgEdAppUi")
+ delete iView;
+ iView = NULL;
+ delete iContext;
+ iContext = NULL;
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::~CPushViewerMsgEdAppUi")
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::ConstructL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::ConstructL")
+
+ CMsgEditorAppUi::ConstructL();
+
+ if ( !iEikonEnv->StartedAsServerApp( ) )
+ {
+ // If the app was not started as server app,
+ // we can call PrepareLaunchL
+ Document()->PrepareToLaunchL( this );
+ }
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::ConstructBodyTextL
+// ---------------------------------------------------------
+//
+TInt CPushViewerMsgEdAppUi::ConstructBodyTextL
+ ( CMsgBodyControl& aBodyControl1, CMsgBodyControl& aBodyControl2 ) const
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::ConstructBodyTextL");
+
+ HBufC* staticText = iEikonEnv->AllocReadResourceLC
+ ( R_PUSHVIEWER_MAINPANE_TEXT );
+
+ TPtrC renderedTextPtr( *staticText ); // Static text by default.
+ TPtrC renderedHrefPtr( KNullDesC );
+
+ if ( Model().PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, &Model() );
+
+ const TPtrC text = si->Text();
+ if ( text.Length() )
+ {
+ renderedTextPtr.Set( text );
+ }
+ else
+ {
+ renderedTextPtr.Set( *staticText );
+ }
+
+ const TPtrC url = si->Url();
+ if ( url.Length() )
+ {
+ renderedHrefPtr.Set( url );
+ }
+ }
+ else if ( Model().PushMsgType() == KUidWapPushMsgSL.iUid )
+ {
+ CSLPushMsgEntry* sl = STATIC_CAST( CSLPushMsgEntry*, &Model() );
+
+ const TPtrC url = sl->Url();
+ if ( url.Length() )
+ {
+ renderedHrefPtr.Set( url );
+ }
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ // The message goes to the first body control by default, but
+ // if it does not fit into one screen, then first comes the href.
+
+ aBodyControl1.InsertTextL( renderedTextPtr );
+
+ CMsgBodyControl* controlContainingTheUrl = NULL;
+ TInt indexOfHrefControl = KErrNotFound;
+
+ // Add the href
+ if ( renderedHrefPtr.Length() == 0 )
+ {
+ // No href.
+ controlContainingTheUrl = NULL;
+ iAvkonAppUi->Cba()->SetCommandSetL( R_PUSHVIEWER_SOFTKEYS );
+ iAvkonAppUi->Cba()->DrawNow();
+ }
+ else
+ {
+ aBodyControl2.InsertTextL( renderedHrefPtr );
+ controlContainingTheUrl = &aBodyControl2;
+ indexOfHrefControl = 1; // Zero based.
+ }
+
+ aBodyControl1.SetPlainTextMode( ETrue );
+ aBodyControl2.SetPlainTextMode( ETrue );
+
+ // Switch on URL highlighting. We use FindItem for it -
+ // otherwise Find Item has no other role!
+ if ( controlContainingTheUrl != NULL )
+ {
+ if ( controlContainingTheUrl->ItemFinder() )
+ {
+ controlContainingTheUrl->
+ ItemFinder()->SetFindModeL( CItemFinder::EUrlAddress );
+ controlContainingTheUrl->
+ SetupAutomaticFindAfterFocusChangeL( ETrue );
+ }
+ controlContainingTheUrl->Editor().SetAlignment( EAknEditorAlignCenter );
+ }
+
+ CleanupStack::PopAndDestroy( staticText ); // staticText
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::ConstructBodyTextL");
+ return indexOfHrefControl;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::ConstructViewL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::ConstructViewL()
+ {
+ CMsgEditorView* newView = CMsgEditorView::NewL
+ ( *this, CMsgEditorView::EMsgReadOnly );
+ delete iView;
+ iView = newView;
+
+ // Let two body controls: one for the message text and one for the Href
+
+ // There is already one by default - get a pointer to it.
+ CMsgBodyControl* bodyControl1 = REINTERPRET_CAST( CMsgBodyControl*,
+ iView->ControlById( EMsgComponentIdBody ) );
+
+ // Create the second:
+ CMsgBodyControl* bodyControl2 = CMsgBodyControl::NewL( iView );
+ CleanupStack::PushL( bodyControl2 );
+ iView->AddControlL( bodyControl2,
+ /*aControlId*/EMyMsgComponentIdBody,
+ /*aIndex*/1,
+ /*aFormComponent*/EMsgBody );
+ CleanupStack::Pop( bodyControl2 ); // bodyControl2
+
+ TInt indexOfHrefControl = ConstructBodyTextL( *bodyControl1, *bodyControl2 );
+
+ // Construct the view.
+ TInt controlIdForFocus = indexOfHrefControl==1?EMyMsgComponentIdBody:EMsgComponentIdBody;
+ iView->ExecuteL( ClientRect(), controlIdForFocus );
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::HandleKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CPushViewerMsgEdAppUi::HandleKeyEventL
+ ( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushViewerMsgEdAppUi::HandleKeyEventL <%d>",aKeyEvent.iCode)
+ // Check for iView and iContext objects are created before Handle
+ if ( (NULL == iView) || (NULL == iContext) )
+ {
+ return (EKeyWasConsumed);
+ }
+
+ if ( aType == EEventKey )
+ {
+ switch ( aKeyEvent.iCode )
+ {
+
+ case EKeyDevice3:
+ {
+ // Selection key pressed. Behave as "Load service" if there is
+ // service to download.
+ const TMsvEntry& context = Model().Entry();
+ if ( CPushMtmUtil::Attrs( context ) & EPushMtmAttrHasHref )
+ {
+ HandleCommandL( EPushViewerCmdLoadService );
+ }
+ break;
+ }
+
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyLeftArrow: // West
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ HandleCommandL( EPushViewerCmdPreviousMessage );
+ break;
+ }
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ case EKeyRightArrow: // East
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ {
+ HandleCommandL( EPushViewerCmdNextMessage );
+ break;
+ }
+
+ case EKeyBackspace :
+ {
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ if ( dlg->ExecuteLD
+ ( R_PUSHVIEWER_ENTRY_DELETE_CONFIRM ) == EAknSoftkeyYes )
+ {
+ DeleteAndExitL();
+ }
+ break;
+ }
+
+ default:
+ {
+ iView->OfferKeyEventL( aKeyEvent, aType );
+ break;
+ }
+
+ }
+ }
+
+ return EKeyWasConsumed;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::DynInitMenuPaneL( TInt aMenuId,
+ CEikMenuPane* aMenuPane )
+ {
+ if ( aMenuId == R_PUSHVIEWER_OPTIONS_MENU_PANE )
+ {
+ // Remove EPushViewerCmdLoadService if the current message
+ // does not contain URL.
+ CPushMsgEntryBase& modelBase = Model();
+ if ( Model().PushMsgType() == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry& si = (CSIPushMsgEntry&)modelBase;
+ if ( !si.Url().Length() )
+ {
+ aMenuPane->DeleteMenuItem( EPushViewerCmdLoadService );
+ Cba()->SetCommandSetL( R_PUSHVIEWER_SOFTKEYS );
+ }
+ }
+ else if ( Model().PushMsgType() == KUidWapPushMsgSL.iUid )
+ {
+ CSLPushMsgEntry& sl = (CSLPushMsgEntry&)modelBase;
+ __ASSERT_DEBUG( sl.Url().Length() != 0,
+ ViewerPanic( EPushViewerPanSlEmptyHref ) );
+ if ( !sl.Url().Length() )
+ {
+ aMenuPane->DeleteMenuItem( EPushViewerCmdLoadService );
+ Cba()->SetCommandSetL( R_PUSHVIEWER_SOFTKEYS );
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::Model
+// ---------------------------------------------------------
+//
+CPushMsgEntryBase& CPushViewerMsgEdAppUi::Model() const
+ {
+ PUSHLOG_WRITE_FORMAT("CPushViewerMsgEdAppUi::Model <%x>",iContext)
+ return *iContext;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::PushDoc
+// ---------------------------------------------------------
+//
+CPushViewerDocument& CPushViewerMsgEdAppUi::PushDoc() const
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::PushDoc")
+ return REINTERPRET_CAST( CPushViewerDocument&, *Document() );
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::PushDoc")
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::UpdateNaviPaneL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::UpdateNaviPaneL()
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::UpdateNaviPaneL")
+
+ CEikImage* image = new (ELeave) CEikImage;
+ CleanupStack::PushL( image );
+
+ // Read image from resource.
+ //
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, R_PUSHVIEWER_NAVI_IMAGE );
+ image->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader
+
+ CMsgEditorAppUi::UpdateNaviPaneL( image->Bitmap(), image->Mask() );
+ image->SetPictureOwnedExternally( ETrue );
+
+ CleanupStack::PopAndDestroy(); // image
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::UpdateNaviPaneL")
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::IsExpired
+// ---------------------------------------------------------
+//
+TBool CPushViewerMsgEdAppUi::IsExpired()
+ {
+ TBool ret( EFalse );
+
+ if ( Document()->Entry().iBioType == KUidWapPushMsgSI.iUid )
+ {
+ CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, iContext );
+ // Check expiration if expiration time was set.
+ if ( si->Expires() != Time::NullTTime() )
+ {
+ TTime today;
+ today.UniversalTime();
+ if ( si->Expires() < today )
+ {
+ ret = ETrue;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::DoMsgSaveExitL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::DoMsgSaveExitL()
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::DoMsgSaveExitL");
+
+ Exit( EAknSoftkeyBack );
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::DoMsgSaveExitL")
+ };
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::NotifyAndExitL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::NotifyAndExitL( TInt aResId )
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::NotifyAndExitL");
+
+ HBufC* noteText = iCoeEnv->AllocReadResourceLC( aResId );
+ CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+ note->ExecuteLD( *noteText );
+ CleanupStack::PopAndDestroy( noteText ); // noteText
+
+ // Close the application.
+ if ( !IsAppShutterRunning() )
+ {
+ PUSHLOG_WRITE(" RunAppShutter")
+ RunAppShutter();
+ }
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::NotifyAndExitL");
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::LaunchViewL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::LaunchViewL()
+ {
+ __ASSERT_ALWAYS( Document()->Entry().iMtm == KUidMtmWapPush,
+ ViewerPanic( EPushViewerPanBadMtmType ) );
+
+ // Construct model.
+ CPushMsgEntryBase* newContext = NULL;
+ const TInt32 bioType( Document()->Entry().iBioType );
+
+ if ( bioType == KUidWapPushMsgSI.iUid )
+ {
+ newContext = CSIPushMsgEntry::NewL();
+ }
+ else if ( bioType == KUidWapPushMsgSL.iUid )
+ {
+ newContext = CSLPushMsgEntry::NewL();
+ }
+ else if ( bioType == KUidWapPushMsgMultiPart.iUid )
+ {
+#ifdef __TEST_MULTIPART_SUPP
+ newContext = CMultiPartPushMsgEntry::NewL();
+#else // __TEST_MULTIPART_SUPP
+ User::Leave( KErrNotSupported );
+#endif // __TEST_MULTIPART_SUPP
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, ViewerPanic( EPushViewerPanBadPushType ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ CleanupStack::PushL( newContext );
+ newContext->RetrieveL( Document()->Session(), Document()->Entry().Id() );
+ delete iContext;
+ iContext = NULL;
+ iContext = newContext;
+ CleanupStack::Pop( newContext ); // newContext
+
+ // Construct view.
+ UpdateNaviPaneL();
+ ConstructViewL();
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::HandleEntryChangeL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::HandleEntryChangeL()
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::HandleEntryChangeL");
+
+
+ // We have to act only in case of such changes where the content
+ // of the message changes, not only the unread/read flag.
+ // The content handlers and the Push subsystem behave so that
+ // the content is changed only when the entry becomes 'unread',
+ // except one case where the CH changes the content, but the
+ // message becomes 'read' (SL-execute-high). In this case
+ // a flag indicates that the content was changed.
+
+ // Get an up-to-date entry and check the necessary flags:
+ TMsvEntry tEntry;
+ TMsvId service;
+ TMsvId entryId = Document()->Entry().Id();
+ CMsvSession& msvSession = Document()->Session();
+ User::LeaveIfError( msvSession.GetEntry( entryId, service, tEntry ) );
+ TBool isChangeToUnread = tEntry.Unread();
+ TBool contentChangedFlagSet =
+ CPushMtmUtil::Attrs( tEntry ) & EPushMtmReadButContentChanged;
+
+ if ( !isChangeToUnread && !contentChangedFlagSet )
+ {
+ // Nothing to do. Somebody just set it as read.
+ PUSHLOG_WRITE(" Content not changed");
+ }
+ else
+ {
+ // Show note about the message changes & close the application.
+ NotifyAndExitL( R_PUSHVIEWER_INFO_REPLACED );
+ }
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::HandleEntryChangeL")
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::HandleEntryDeletedL
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::HandleEntryDeletedL()
+ {
+ PUSHLOG_ENTERFN("CPushViewerMsgEdAppUi::HandleEntryDeletedL");
+ // Check for iView and iContext objects are created before Handle
+ if ( (NULL == iView) || (NULL == iContext))
+ {
+ return;
+ }
+ // Show note about the message deletion & close the application.
+ NotifyAndExitL( R_PUSHVIEWER_INFO_DELETED );
+
+ PUSHLOG_LEAVEFN("CPushViewerMsgEdAppUi::HandleEntryDeletedL")
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::GetHelpContextForControl
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::GetHelpContextForControl
+ ( TCoeHelpContext& /*aContext*/ ) const
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::HandleCommandL
+// See DynInitMenuPaneL() to see which commands are valid
+// on a given type of item.
+// ---------------------------------------------------------
+//
+void CPushViewerMsgEdAppUi::HandleCommandL( TInt aCommand )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushViewerMsgEdAppUi::HandleCommandL <%d>",aCommand)
+ // Check for iView and iContext objects are created before Handle
+ if ( (NULL == iView) || (NULL == iContext))
+ {
+ return;
+ }
+ switch ( aCommand )
+ {
+ case EPushViewerCmdLoadService:
+ {
+ if ( IsExpired() )
+ {
+ // The entry is expired.
+ HBufC* value =
+ iCoeEnv->AllocReadResourceLC( R_PUSHVIEWER_EXPIRED_NOTE );
+ CAknInformationNote* note =
+ new (ELeave) CAknInformationNote( ETrue );
+ note->ExecuteLD( *value );
+ CleanupStack::PopAndDestroy( value ); // value
+
+ // Delete the expired message and exit.
+ DeleteAndExitL();
+ }
+ else
+ {
+ PushDoc().IssueLoadServiceL();
+ }
+ break;
+ }
+
+ case EPushViewerCmdDelete:
+ {
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ if ( dlg->ExecuteLD
+ ( R_PUSHVIEWER_ENTRY_DELETE_CONFIRM ) == EAknSoftkeyYes )
+ {
+ DeleteAndExitL();
+ }
+ break;
+ }
+
+ case EPushViewerCmdMessageInfo:
+ {
+ PushDoc().IssueMessageInfoL();
+ break;
+ }
+
+ case EPushViewerCmdPreviousMessage:
+ {
+ if ( IsNextMessageAvailableL( EFalse ) )
+ {
+ NextMessageL( EFalse );
+ }
+ break;
+ }
+
+ case EPushViewerCmdNextMessage:
+ {
+ if ( IsNextMessageAvailableL( ETrue ) )
+ {
+ NextMessageL( ETrue );
+ }
+ break;
+ }
+
+#ifdef __SERIES60_HELP
+
+ case EPushViewerCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL
+ ( iEikonEnv->WsSession(), AppHelpContextL() );
+ break;
+ }
+
+#endif //__SERIES60_HELP
+
+ case EPushViewerCmdBack:
+ case EPushViewerCmdExit:
+ {
+ DoMsgSaveExitL();
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+#ifdef __SERIES60_HELP
+
+// ---------------------------------------------------------
+// CPushViewerMsgEdAppUi::HelpContextL
+// ---------------------------------------------------------
+//
+CArrayFix<TCoeHelpContext>* CPushViewerMsgEdAppUi::HelpContextL() const
+ {
+ CArrayFix<TCoeHelpContext>* contexts = new (ELeave) CArrayFixFlat<TCoeHelpContext>( 1 );
+ CleanupStack::PushL( contexts );
+ TCoeHelpContext help( TUid::Uid( EUidPushViewerApp ), KWPUSH_HLP_VIEWER );
+ contexts->AppendL( help );
+ CleanupStack::Pop(); // contexts
+ return contexts;
+ }
+
+#endif // __SERIES60_HELP
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/ViewerSrc/PushViewerPanic.cpp Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewerPanic.h"
+
+
+_LIT( KViewerPanicString, "PushViewer" );
+
+GLDEF_C void ViewerPanic( TPushViewerPanic aReason )
+ {
+ User::Panic( KViewerPanicString, aReason );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/bwinscw/PUSHMTMCLISRVU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+ ?NewL@CPushMtmClient@@SAPAV1@AAVCRegisteredMtmDll@@AAVCMsvSession@@@Z @ 1 NONAME ; class CPushMtmClient * CPushMtmClient::NewL(class CRegisteredMtmDll &, class CMsvSession &)
+ ?NewL@CPushMtmServer@@SAPAV1@AAVCRegisteredMtmDll@@PAVCMsvServerEntry@@@Z @ 2 NONAME ; class CPushMtmServer * CPushMtmServer::NewL(class CRegisteredMtmDll &, class CMsvServerEntry *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/bwinscw/PUSHMTMUIU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+ ?NewL@CPushMtmUi@@SAPAV1@AAVCBaseMtm@@AAVCRegisteredMtmDll@@@Z @ 1 NONAME ; class CPushMtmUi * CPushMtmUi::NewL(class CBaseMtm &, class CRegisteredMtmDll &)
+ ?NewL@CPushMtmUiData@@SAPAV1@AAVCRegisteredMtmDll@@@Z @ 2 NONAME ; class CPushMtmUiData * CPushMtmUiData::NewL(class CRegisteredMtmDll &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/bwinscw/PUSHMTMUTILU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,68 @@
+EXPORTS
+ ??0CPushAsyncOpRunner@@IAE@AAVCMsvSession@@JAAVTRequestStatus@@@Z @ 1 NONAME ; CPushAsyncOpRunner::CPushAsyncOpRunner(class CMsvSession &, long, class TRequestStatus &)
+ ??0CPushInitiator@@QAE@XZ @ 2 NONAME ; CPushInitiator::CPushInitiator(void)
+ ??0CPushMtmOperation@@IAE@AAVCMsvSession@@JAAVTRequestStatus@@@Z @ 3 NONAME ; CPushMtmOperation::CPushMtmOperation(class CMsvSession &, long, class TRequestStatus &)
+ ??1CPushAsyncOpRunner@@MAE@XZ @ 4 NONAME ; CPushAsyncOpRunner::~CPushAsyncOpRunner(void)
+ ??1CPushInitiator@@UAE@XZ @ 5 NONAME ; CPushInitiator::~CPushInitiator(void)
+ ??1CPushInitiatorList@@UAE@XZ @ 6 NONAME ; CPushInitiatorList::~CPushInitiatorList(void)
+ ??1CPushMtmOperation@@UAE@XZ @ 7 NONAME ; CPushMtmOperation::~CPushMtmOperation(void)
+ ??1CPushMtmSettings@@UAE@XZ @ 8 NONAME ; CPushMtmSettings::~CPushMtmSettings(void)
+ ??1CPushMtmUtil@@UAE@XZ @ 9 NONAME ; CPushMtmUtil::~CPushMtmUtil(void)
+ ??8CPushInitiatorList@@QBEHABV0@@Z @ 10 NONAME ; int CPushInitiatorList::operator==(class CPushInitiatorList const &) const
+ ??9CPushInitiatorList@@QBEHABV0@@Z @ 11 NONAME ; int CPushInitiatorList::operator!=(class CPushInitiatorList const &) const
+ ?AddL@CPushInitiatorList@@QAEKABVCPushInitiator@@@Z @ 12 NONAME ; unsigned long CPushInitiatorList::AddL(class CPushInitiator const &)
+ ?AddL@CPushInitiatorList@@QAEKPAVCPushInitiator@@@Z @ 13 NONAME ; unsigned long CPushInitiatorList::AddL(class CPushInitiator *)
+ ?At@CPushInitiatorList@@QBEAAVCPushInitiator@@H@Z @ 14 NONAME ; class CPushInitiator & CPushInitiatorList::At(int) const
+ ?Attrs@CPushMtmUtil@@SAKABVTMsvEntry@@@Z @ 15 NONAME ; unsigned long CPushMtmUtil::Attrs(class TMsvEntry const &)
+ ?AuthenticateMsgL@TPushAuthenticationUtil@@SAHABVCPushMtmSettings@@ABVCPushMessage@@@Z @ 16 NONAME ; int TPushAuthenticationUtil::AuthenticateMsgL(class CPushMtmSettings const &, class CPushMessage const &)
+ ?AuthenticateMsgL@TPushAuthenticationUtil@@SAHABVCPushMtmSettings@@ABVCPushMsgEntryBase@@@Z @ 17 NONAME ; int TPushAuthenticationUtil::AuthenticateMsgL(class CPushMtmSettings const &, class CPushMsgEntryBase const &)
+ ?CancelObserveEntryEvent@CPushMtmOperation@@IAEXXZ @ 18 NONAME ; void CPushMtmOperation::CancelObserveEntryEvent(void)
+ ?ConvertDetailsL@CPushMtmUtil@@QBEPAVHBufC16@@ABVTDesC8@@@Z @ 19 NONAME ; class HBufC16 * CPushMtmUtil::ConvertDetailsL(class TDesC8 const &) const
+ ?ConvertUriToDisplayFormL@CPushMtmUtil@@SAPAVHBufC16@@ABVTDesC16@@@Z @ 20 NONAME ; class HBufC16 * CPushMtmUtil::ConvertUriToDisplayFormL(class TDesC16 const &)
+ ?Count@CPushInitiatorList@@QBEHXZ @ 21 NONAME ; int CPushInitiatorList::Count(void) const
+ ?Delete@CPushInitiatorList@@QAEXH@Z @ 22 NONAME ; void CPushInitiatorList::Delete(int)
+ ?DeleteEntryL@CPushMtmUtil@@QAEXJ@Z @ 23 NONAME ; void CPushMtmUtil::DeleteEntryL(long)
+ ?DeleteOperation@CPushAsyncOpRunner@@IAEXXZ @ 24 NONAME ; void CPushAsyncOpRunner::DeleteOperation(void)
+ ?DoCancel@CPushAsyncOpRunner@@MAEXXZ @ 25 NONAME ; void CPushAsyncOpRunner::DoCancel(void)
+ ?DoCancel@CPushMtmOperation@@MAEXXZ @ 26 NONAME ; void CPushMtmOperation::DoCancel(void)
+ ?Find@CPushInitiatorList@@QBEHABVCPushInitiator@@AAH@Z @ 27 NONAME ; int CPushInitiatorList::Find(class CPushInitiator const &, int &) const
+ ?FindMessagesL@CPushMtmUtil@@QAEPAVCMsvEntrySelection@@ABV2@VTUid@@@Z @ 28 NONAME ; class CMsvEntrySelection * CPushMtmUtil::FindMessagesL(class CMsvEntrySelection const &, class TUid)
+ ?FindMessagesL@CPushMtmUtil@@QAEPAVCMsvEntrySelection@@JVTUid@@H@Z @ 29 NONAME ; class CMsvEntrySelection * CPushMtmUtil::FindMessagesL(long, class TUid, int)
+ ?FindMessagesL@CPushMtmUtil@@QAEPAVCMsvEntrySelection@@VTUid@@@Z @ 30 NONAME ; class CMsvEntrySelection * CPushMtmUtil::FindMessagesL(class TUid)
+ ?FindPushFoldersL@CPushMtmUtil@@QAEPAVCMsvEntrySelection@@XZ @ 31 NONAME ; class CMsvEntrySelection * CPushMtmUtil::FindPushFoldersL(void)
+ ?FindSiIdLC@CPushMtmUtil@@QAEPAVCMsvEntrySelection@@ABVTDesC16@@@Z @ 32 NONAME ; class CMsvEntrySelection * CPushMtmUtil::FindSiIdLC(class TDesC16 const &)
+ ?FindUrlLC@CPushMtmUtil@@QAEPAVCMsvEntrySelection@@ABVTDesC16@@VTUid@@@Z @ 33 NONAME ; class CMsvEntrySelection * CPushMtmUtil::FindUrlLC(class TDesC16 const &, class TUid)
+ ?HandleEntryEventL@CPushMtmOperation@@MAEXW4TMsvEntryEvent@MMsvEntryObserver@@PAX11@Z @ 34 NONAME ; void CPushMtmOperation::HandleEntryEventL(enum MMsvEntryObserver::TMsvEntryEvent, void *, void *, void *)
+ ?InvokeRun@CPushMtmOperation@@IAEXXZ @ 35 NONAME ; void CPushMtmOperation::InvokeRun(void)
+ ?LoadL@CPushMtmSettings@@QAEXXZ @ 36 NONAME ; void CPushMtmSettings::LoadL(void)
+ ?MarkServiceUnreadL@CPushMtmUtil@@QAEXJH@Z @ 37 NONAME ; void CPushMtmUtil::MarkServiceUnreadL(long, int)
+ ?NewL@CPushInitiatorList@@SAPAV1@XZ @ 38 NONAME ; class CPushInitiatorList * CPushInitiatorList::NewL(void)
+ ?NewL@CPushMtmSettings@@SAPAV1@XZ @ 39 NONAME ; class CPushMtmSettings * CPushMtmSettings::NewL(void)
+ ?NewL@CPushMtmUtil@@SAPAV1@AAVCMsvSession@@@Z @ 40 NONAME ; class CPushMtmUtil * CPushMtmUtil::NewL(class CMsvSession &)
+ ?NewLC@CPushMtmSettings@@SAPAV1@XZ @ 41 NONAME ; class CPushMtmSettings * CPushMtmSettings::NewLC(void)
+ ?ObserveEntryEventL@CPushMtmOperation@@IAEXXZ @ 42 NONAME ; void CPushMtmOperation::ObserveEntryEventL(void)
+ ?OnRunLActionL@CPushAsyncOpRunner@@MAEHAAH@Z @ 43 NONAME ; int CPushAsyncOpRunner::OnRunLActionL(int &)
+ ?OnStartupL@CPushAsyncOpRunner@@MAEHAAH@Z @ 44 NONAME ; int CPushAsyncOpRunner::OnStartupL(int &)
+ ?Operation@CPushAsyncOpRunner@@IAEAAVCMsvOperation@@XZ @ 45 NONAME ; class CMsvOperation & CPushAsyncOpRunner::Operation(void)
+ ?ProgressL@CPushAsyncOpRunner@@UAEABVTDesC8@@XZ @ 46 NONAME ; class TDesC8 const & CPushAsyncOpRunner::ProgressL(void)
+ ?ProgressL@CPushMtmOperation@@UAEABVTDesC8@@XZ @ 47 NONAME ; class TDesC8 const & CPushMtmOperation::ProgressL(void)
+ ?PushInitiatorList@CPushMtmSettings@@QBEAAVCPushInitiatorList@@XZ @ 48 NONAME ; class CPushInitiatorList & CPushMtmSettings::PushInitiatorList(void) const
+ ?ResetAndDestroy@CPushInitiatorList@@QAEXXZ @ 49 NONAME ; void CPushInitiatorList::ResetAndDestroy(void)
+ ?ResetAttrs@CPushMtmUtil@@SAXAAVTMsvEntry@@K@Z @ 50 NONAME ; void CPushMtmUtil::ResetAttrs(class TMsvEntry &, unsigned long)
+ ?RestoreFactorySettingsL@CPushMtmSettings@@QAEXXZ @ 51 NONAME ; void CPushMtmSettings::RestoreFactorySettingsL(void)
+ ?RunError@CPushAsyncOpRunner@@MAEHH@Z @ 52 NONAME ; int CPushAsyncOpRunner::RunError(int)
+ ?RunError@CPushMtmOperation@@MAEHH@Z @ 53 NONAME ; int CPushMtmOperation::RunError(int)
+ ?RunL@CPushAsyncOpRunner@@MAEXXZ @ 54 NONAME ; void CPushAsyncOpRunner::RunL(void)
+ ?RunL@CPushMtmOperation@@MAEXXZ @ 55 NONAME ; void CPushMtmOperation::RunL(void)
+ ?SaveL@CPushMtmSettings@@QAEXH@Z @ 56 NONAME ; void CPushMtmSettings::SaveL(int)
+ ?ServiceLoadingType@CPushMtmSettings@@QBE?AW4TServiceLoading@1@XZ @ 57 NONAME ; enum CPushMtmSettings::TServiceLoading CPushMtmSettings::ServiceLoadingType(void) const
+ ?ServiceReception@CPushMtmSettings@@QBEHXZ @ 58 NONAME ; int CPushMtmSettings::ServiceReception(void) const
+ ?SetAddressL@CPushInitiator@@QAEXABVTDesC16@@W4TAddrType@1@@Z @ 59 NONAME ; void CPushInitiator::SetAddressL(class TDesC16 const &, enum CPushInitiator::TAddrType)
+ ?SetAttrs@CPushMtmUtil@@SAXAAVTMsvEntry@@K@Z @ 60 NONAME ; void CPushMtmUtil::SetAttrs(class TMsvEntry &, unsigned long)
+ ?SetOperation@CPushAsyncOpRunner@@IAEXPAVCMsvOperation@@@Z @ 61 NONAME ; void CPushAsyncOpRunner::SetOperation(class CMsvOperation *)
+ ?SetServiceLoadingType@CPushMtmSettings@@QAEXW4TServiceLoading@1@@Z @ 62 NONAME ; void CPushMtmSettings::SetServiceLoadingType(enum CPushMtmSettings::TServiceLoading)
+ ?SetServiceReception@CPushMtmSettings@@QAEXH@Z @ 63 NONAME ; void CPushMtmSettings::SetServiceReception(int)
+ ?SignalObserver@CPushMtmOperation@@IAEXH@Z @ 64 NONAME ; void CPushMtmOperation::SignalObserver(int)
+ ?StartL@CPushAsyncOpRunner@@UAEXXZ @ 65 NONAME ; void CPushAsyncOpRunner::StartL(void)
+ ?StartL@CPushMtmOperation@@UAEXXZ @ 66 NONAME ; void CPushMtmOperation::StartL(void)
+
Binary file pushmtm/cenrep/keys_pushmtm.xls has changed
Binary file pushmtm/conf/pushmtm.confml has changed
Binary file pushmtm/conf/pushmtm_10008D42.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/eabi/PUSHMTMCLISRVU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+ _ZN14CPushMtmClient4NewLER17CRegisteredMtmDllR11CMsvSession @ 1 NONAME
+ _ZN14CPushMtmServer4NewLER17CRegisteredMtmDllP15CMsvServerEntry @ 2 NONAME
+ _ZTI14CPushMtmClient @ 3 NONAME ; #<TI>#
+ _ZTI14CPushMtmServer @ 4 NONAME ; #<TI>#
+ _ZTI19CPushMtmGcOperation @ 5 NONAME ; #<TI>#
+ _ZTV14CPushMtmClient @ 6 NONAME ; #<VT>#
+ _ZTV14CPushMtmServer @ 7 NONAME ; #<VT>#
+ _ZTV19CPushMtmGcOperation @ 8 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/eabi/PUSHMTMUIU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,20 @@
+EXPORTS
+ _ZN10CPushMtmUi4NewLER8CBaseMtmR17CRegisteredMtmDll @ 1 NONAME
+ _ZN14CPushMtmUiData4NewLER17CRegisteredMtmDll @ 2 NONAME
+ _ZTI10CPushMtmUi @ 3 NONAME ; #<TI>#
+ _ZTI14CPushMtmUiData @ 4 NONAME ; #<TI>#
+ _ZTI18CPushLoadServiceOp @ 5 NONAME ; #<TI>#
+ _ZTI18CPushMessageInfoOp @ 6 NONAME ; #<TI>#
+ _ZTI18CPushViewMessageOp @ 7 NONAME ; #<TI>#
+ _ZTI19CPushMtmUiOperation @ 8 NONAME ; #<TI>#
+ _ZTI19CPushSettingsDialog @ 9 NONAME ; #<TI>#
+ _ZTI22CPushMessageInfoDialog @ 10 NONAME ; #<TI>#
+ _ZTV10CPushMtmUi @ 11 NONAME ; #<VT>#
+ _ZTV14CPushMtmUiData @ 12 NONAME ; #<VT>#
+ _ZTV18CPushLoadServiceOp @ 13 NONAME ; #<VT>#
+ _ZTV18CPushMessageInfoOp @ 14 NONAME ; #<VT>#
+ _ZTV18CPushViewMessageOp @ 15 NONAME ; #<VT>#
+ _ZTV19CPushMtmUiOperation @ 16 NONAME ; #<VT>#
+ _ZTV19CPushSettingsDialog @ 17 NONAME ; #<VT>#
+ _ZTV22CPushMessageInfoDialog @ 18 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/eabi/PUSHMTMUTILU_EKA2U.def Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,98 @@
+EXPORTS
+ _ZN12CPushMtmUtil10FindSiIdLCERK7TDesC16 @ 1 NONAME
+ _ZN12CPushMtmUtil10ResetAttrsER9TMsvEntrym @ 2 NONAME
+ _ZN12CPushMtmUtil12DeleteEntryLEl @ 3 NONAME
+ _ZN12CPushMtmUtil13FindMessagesLE4TUid @ 4 NONAME
+ _ZN12CPushMtmUtil13FindMessagesLERK18CMsvEntrySelection4TUid @ 5 NONAME
+ _ZN12CPushMtmUtil13FindMessagesLEl4TUidi @ 6 NONAME
+ _ZN12CPushMtmUtil16FindPushFoldersLEv @ 7 NONAME
+ _ZN12CPushMtmUtil18MarkServiceUnreadLEli @ 8 NONAME
+ _ZN12CPushMtmUtil24ConvertUriToDisplayFormLERK7TDesC16 @ 9 NONAME
+ _ZN12CPushMtmUtil4NewLER11CMsvSession @ 10 NONAME
+ _ZN12CPushMtmUtil5AttrsERK9TMsvEntry @ 11 NONAME
+ _ZN12CPushMtmUtil8SetAttrsER9TMsvEntrym @ 12 NONAME
+ _ZN12CPushMtmUtil9FindUrlLCERK7TDesC164TUid @ 13 NONAME
+ _ZN12CPushMtmUtilD0Ev @ 14 NONAME
+ _ZN12CPushMtmUtilD1Ev @ 15 NONAME
+ _ZN12CPushMtmUtilD2Ev @ 16 NONAME
+ _ZN14CPushInitiator11SetAddressLERK7TDesC16NS_9TAddrTypeE @ 17 NONAME
+ _ZN14CPushInitiatorC1Ev @ 18 NONAME
+ _ZN14CPushInitiatorC2Ev @ 19 NONAME
+ _ZN14CPushInitiatorD0Ev @ 20 NONAME
+ _ZN14CPushInitiatorD1Ev @ 21 NONAME
+ _ZN14CPushInitiatorD2Ev @ 22 NONAME
+ _ZN16CPushMtmSettings19SetServiceReceptionEi @ 23 NONAME
+ _ZN16CPushMtmSettings21SetServiceLoadingTypeENS_15TServiceLoadingE @ 24 NONAME
+ _ZN16CPushMtmSettings23RestoreFactorySettingsLEv @ 25 NONAME
+ _ZN16CPushMtmSettings4NewLEv @ 26 NONAME
+ _ZN16CPushMtmSettings5LoadLEv @ 27 NONAME
+ _ZN16CPushMtmSettings5NewLCEv @ 28 NONAME
+ _ZN16CPushMtmSettings5SaveLEi @ 29 NONAME
+ _ZN16CPushMtmSettingsD0Ev @ 30 NONAME
+ _ZN16CPushMtmSettingsD1Ev @ 31 NONAME
+ _ZN16CPushMtmSettingsD2Ev @ 32 NONAME
+ _ZN17CPushMtmOperation14SignalObserverEi @ 33 NONAME
+ _ZN17CPushMtmOperation17HandleEntryEventLEN17MMsvEntryObserver14TMsvEntryEventEPvS2_S2_ @ 34 NONAME
+ _ZN17CPushMtmOperation18ObserveEntryEventLEv @ 35 NONAME
+ _ZN17CPushMtmOperation23CancelObserveEntryEventEv @ 36 NONAME
+ _ZN17CPushMtmOperation4RunLEv @ 37 NONAME
+ _ZN17CPushMtmOperation6StartLEv @ 38 NONAME
+ _ZN17CPushMtmOperation8DoCancelEv @ 39 NONAME
+ _ZN17CPushMtmOperation8RunErrorEi @ 40 NONAME
+ _ZN17CPushMtmOperation9InvokeRunEv @ 41 NONAME
+ _ZN17CPushMtmOperation9ProgressLEv @ 42 NONAME
+ _ZN17CPushMtmOperationC1ER11CMsvSessionlR14TRequestStatus @ 43 NONAME
+ _ZN17CPushMtmOperationC2ER11CMsvSessionlR14TRequestStatus @ 44 NONAME
+ _ZN17CPushMtmOperationD0Ev @ 45 NONAME
+ _ZN17CPushMtmOperationD1Ev @ 46 NONAME
+ _ZN17CPushMtmOperationD2Ev @ 47 NONAME
+ _ZN18CPushAsyncOpRunner10OnStartupLERi @ 48 NONAME
+ _ZN18CPushAsyncOpRunner12SetOperationEP13CMsvOperation @ 49 NONAME
+ _ZN18CPushAsyncOpRunner13OnRunLActionLERi @ 50 NONAME
+ _ZN18CPushAsyncOpRunner15DeleteOperationEv @ 51 NONAME
+ _ZN18CPushAsyncOpRunner4RunLEv @ 52 NONAME
+ _ZN18CPushAsyncOpRunner6StartLEv @ 53 NONAME
+ _ZN18CPushAsyncOpRunner8DoCancelEv @ 54 NONAME
+ _ZN18CPushAsyncOpRunner8RunErrorEi @ 55 NONAME
+ _ZN18CPushAsyncOpRunner9OperationEv @ 56 NONAME
+ _ZN18CPushAsyncOpRunner9ProgressLEv @ 57 NONAME
+ _ZN18CPushAsyncOpRunnerC1ER11CMsvSessionlR14TRequestStatus @ 58 NONAME
+ _ZN18CPushAsyncOpRunnerC2ER11CMsvSessionlR14TRequestStatus @ 59 NONAME
+ _ZN18CPushAsyncOpRunnerD0Ev @ 60 NONAME
+ _ZN18CPushAsyncOpRunnerD1Ev @ 61 NONAME
+ _ZN18CPushAsyncOpRunnerD2Ev @ 62 NONAME
+ _ZN18CPushInitiatorList15ResetAndDestroyEv @ 63 NONAME
+ _ZN18CPushInitiatorList4AddLEP14CPushInitiator @ 64 NONAME
+ _ZN18CPushInitiatorList4AddLERK14CPushInitiator @ 65 NONAME
+ _ZN18CPushInitiatorList4NewLEv @ 66 NONAME
+ _ZN18CPushInitiatorList6DeleteEi @ 67 NONAME
+ _ZN18CPushInitiatorListD0Ev @ 68 NONAME
+ _ZN18CPushInitiatorListD1Ev @ 69 NONAME
+ _ZN18CPushInitiatorListD2Ev @ 70 NONAME
+ _ZN23TPushAuthenticationUtil16AuthenticateMsgLERK16CPushMtmSettingsRK12CPushMessage @ 71 NONAME
+ _ZN23TPushAuthenticationUtil16AuthenticateMsgLERK16CPushMtmSettingsRK17CPushMsgEntryBase @ 72 NONAME
+ _ZNK12CPushMtmUtil15ConvertDetailsLERK6TDesC8 @ 73 NONAME
+ _ZNK16CPushMtmSettings16ServiceReceptionEv @ 74 NONAME
+ _ZNK16CPushMtmSettings17PushInitiatorListEv @ 75 NONAME
+ _ZNK16CPushMtmSettings18ServiceLoadingTypeEv @ 76 NONAME
+ _ZNK18CPushInitiatorList2AtEi @ 77 NONAME
+ _ZNK18CPushInitiatorList4FindERK14CPushInitiatorRi @ 78 NONAME
+ _ZNK18CPushInitiatorList5CountEv @ 79 NONAME
+ _ZNK18CPushInitiatorListeqERKS_ @ 80 NONAME
+ _ZNK18CPushInitiatorListneERKS_ @ 81 NONAME
+ _ZTI12CPushMtmUtil @ 82 NONAME ; #<TI>#
+ _ZTI14CPushInitiator @ 83 NONAME ; #<TI>#
+ _ZTI16CPushMtmSettings @ 84 NONAME ; #<TI>#
+ _ZTI17CPushMtmOperation @ 85 NONAME ; #<TI>#
+ _ZTI18CPushAsyncOpRunner @ 86 NONAME ; #<TI>#
+ _ZTI18CPushInitiatorList @ 87 NONAME ; #<TI>#
+ _ZTI19CWhiteListConverter @ 88 NONAME ; #<TI>#
+ _ZTV12CPushMtmUtil @ 89 NONAME ; #<VT>#
+ _ZTV14CPushInitiator @ 90 NONAME ; #<VT>#
+ _ZTV16CPushMtmSettings @ 91 NONAME ; #<VT>#
+ _ZTV17CPushMtmOperation @ 92 NONAME ; #<VT>#
+ _ZTV18CPushAsyncOpRunner @ 93 NONAME ; #<VT>#
+ _ZTV18CPushInitiatorList @ 94 NONAME ; #<VT>#
+ _ZTV19CWhiteListConverter @ 95 NONAME ; #<VT>#
+ _ZThn48_N17CPushMtmOperation17HandleEntryEventLEN17MMsvEntryObserver14TMsvEntryEventEPvS2_S2_ @ 96 NONAME ; #<thunk>#
+
Binary file pushmtm/help/data/xhtml.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/help/group/bld.inf Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+*
+* Description:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+#if !defined(__PLATFORM_VERSION_32__) && !defined(__PLATFORM_VERSION_5250__) && !defined(__PLATFORM_VERSION_S60_50__)
+
+PRJ_EXPORTS
+:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite
+
+../inc/wpush.hlp.hrh APP_LAYER_PLATFORM_EXPORT_PATH(csxhelp/wpush.hlp.hrh)
+../rom/pushmtmhelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(pushmtmhelps_variant.iby)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/help/inc/wpush.hlp.hrh Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,15 @@
+//
+// wpush.hlp.hrh
+//
+
+//
+// File generated by CSXHelp Utilities on 2009-04-17
+//
+
+#ifndef __WPUSH_HLP_HRH__
+#define __WPUSH_HLP_HRH__
+
+_LIT(KWPUSH_HLP_SETTINGS, "WPUSH_HLP_SETTINGS"); //
+_LIT(KWPUSH_HLP_VIEWER, "WPUSH_HLP_VIEWER"); //
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/help/rom/pushmtmhelps_variant.iby Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: IBY file for PushMtmHelps
+*
+*/
+
+#ifndef __PUSHMTMHELPS_VARIANT_IBY__
+#define __PUSHMTMHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE) && defined(__PUSHMTM_USED)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D3C\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D3C\contents.zip)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D3C\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D3C\index.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D3C\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D3C\keywords.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10008D3C\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10008D3C\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/loc/PushMtmUi.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is a localisation file.
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+// d: Command in options list in Mce.
+// d: Opens Message info dialog
+// d: Visible when one message selected.
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_info "Message info"
+
+// d: Command in options list in Mce.
+// d: View a message
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_open_to_brow "View Service"
+
+// d: Command in options list in Mce.
+// d: Load a message
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_fetch "Load Service"
+
+// d: Item in settings list in Mce.
+// l: list_double_pane_t1
+//
+#define qtn_mce_settings_push "Service message"
+
+//=============================================================================
+//
+// Push Settings Dialog related resources
+//
+//=============================================================================
+
+// d:Title
+// l:title_pane_t2/opt9
+//
+#define qtn_mce_title_settings_push "Service Settings"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_change "Change"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_delete "Delete"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_exit "Exit"
+
+// d:Setting item title
+// l:list_setting_pane_t1
+//
+#define qtn_mce_settings_push_recept "Service reception"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_recep_on "On"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_recep_off "Off"
+
+// d:Setting item title
+// l:list_setting_pane_t1
+//
+#define qtn_mce_settings_push_loading "Download messages"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_load_autom "Automatically"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_load_man "Manually"
+
+// d:Setting confirmation query
+// l:popup_note_window
+//
+#define qtn_wml_push_sttng_autom_conf_q "Messages will be downloaded automatically when connection is active. Continue?"
+
+//=============================================================================
+//
+// Push Message Info Dialog related resources
+//
+//=============================================================================
+
+// d:Title of the Message info window
+// l:heading_pane_t1
+//
+#define qtn_wml_push_title_msginfo "Message info"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_from "From"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_url "Address"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_body "Message"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_type "Type"
+
+// d:Message type in Message info.
+// d:Note that Message info dialog will wrap it!
+// d:The string can be whatever long!
+// l:list_single_heading_pane_t1_cp2
+//
+#define qtn_wml_push_msgnfo_type_srv_msg "Service message"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msg_content_type "Content type"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_created "Created"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_expires "Expires"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_size "Size"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_rcvd "Received"
+
+//=============================================================================
+//
+// Push Load Service related resources
+//
+//=============================================================================
+
+// d:Setting confirmation query
+// l:popup_note_image_window
+//
+#define qtn_wml_push_note_msg_expired "The service is no longer available - this message will be deleted."
+
+// d:Automatic fetching is on and not authenticated SL execute-high is opened.
+// l:popup_note_window
+//
+#define qtn_service_inbox_sl_not_trusted "The message came from an untrusted source. Download it anyway?"
+
+// d:SL Cache is not authenticated and is opened.
+// l:popup_note_window
+//
+#define qtn_service_inbox_sl_cache_not_trusted "The message came from an untrusted source and will be downloaded to cache. Download it anyway?"
+
+//=============================================================================
+//
+// Misc
+//
+//=============================================================================
+
+// d:First line of the Inbox list item
+// l:list_double_graphic_pane_t1
+//
+#define qtn_mce_push_inbox_sender_unkw "Unknown"
+
+// d:Second line of the Inbox list item
+// l:list_double_graphic_pane_t2
+//
+#define qtn_mce_push_inbox_message "Service message"
+
+// d:Message type in Messages/Settings
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_type_srv_msg "Service message"
+
+//=============================================================================
+//
+// Service reception
+//
+//=============================================================================
+
+// d:Shown in CAknInformationNote
+// l:popup_note_window
+//
+#define qtn_service_inbox_updating_message_received "There are newer service message available, message will be replaced."
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/loc/PushViewer.loc Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is a localisation file.
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+// d:Application title
+// l:title_pane_t2/opt9
+//
+#define qtn_wml_push_title_viewer "Service Message"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_inbox_open "Open"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_inbox_fetch "Load service"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_delete "Delete"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_info "Message info"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_exit "Exit"
+
+// d:List item text
+// l:list_double2_large_graphic_pane
+//
+#define qtn_wml_push_w_not_loaded "Content not loaded"
+
+// d:List item text
+// l:list_double_large_graphic_pane_t1_cp2
+//
+#define qtn_wml_push_w_attach "Content"
+
+// d:List item text
+// l:list_double_large_graphic_pane_t1_cp2
+//
+#define qtn_wap_push_w_wml_page "Wml page"
+
+// d:List item text
+// l:list_double2_large_graphic_pane
+//
+#define qtn_mail_lds1_size "Size: %N kB"
+
+// d: Header of the Simple text viewer
+// l: heading_pane_t1
+//
+#define qtn_wml_push_txt_pop_heading "Message:"
+
+// d:Delete confirmation query
+// l:popup_note_image_window
+//
+#define qtn_wml_push_view_query_del "Delete message?"
+
+// d:Shown on the main pane of PushViewer
+// l:msg_body_pane_t1
+//
+#define qtn_service_inbox_push_viewer_view_text "Download service message content by selecting Options - Download."
+
+// End of File