13 * |
13 * |
14 * Description: Wallpaper view. |
14 * Description: Wallpaper view. |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 |
18 // System includes |
19 // INCLUDE FILES |
|
20 #include "xnwallpaperview.h" |
|
21 #include "xnwallpapercontainer.h" |
|
22 #include "xnuiengine.h" |
|
23 #include "xnappuiadapter.h" |
|
24 #include "xnviewadapter.h" |
|
25 #include "xnbackgroundmanager.h" |
|
26 #include <xnuiengine.rsg> |
|
27 |
|
28 // SYSTEM INCLUDE FILES |
|
29 #include <aknappui.h> |
19 #include <aknappui.h> |
30 #include <eikbtgpc.h> |
20 #include <eikbtgpc.h> |
31 #include <avkon.rsg> |
21 #include <avkon.rsg> |
32 #include <AknsWallpaperUtils.h> |
22 #include <AknsWallpaperUtils.h> |
33 #include <MGFetch.h> |
23 #include <MGFetch.h> |
34 #include <aknnotewrappers.h> |
24 #include <aknnotewrappers.h> |
35 #include <StringLoader.h> |
25 #include <StringLoader.h> |
36 #include <caf/caf.h> |
26 #include <caf/caf.h> |
|
27 #include <bautils.h> |
|
28 #include <data_caging_path_literals.hrh> |
|
29 |
|
30 // User includes |
|
31 #include <xnwallpaperview.rsg> |
|
32 #include "xnwallpaperview.h" |
|
33 #include "xnwallpapercontainer.h" |
|
34 #include "xnuiengine.h" |
|
35 #include "xnappuiadapter.h" |
|
36 #include "xnviewadapter.h" |
|
37 #include "xnbackgroundmanager.h" |
|
38 #include "xneffectmanager.h" |
|
39 #include "xnviewmanager.h" |
|
40 |
|
41 // Constants |
|
42 _LIT( KResourceDrive, "z:" ); |
|
43 _LIT( KResourceFile, "xnwallpaperview.rsc" ); |
37 |
44 |
38 _LIT8( KMulti, "multi" ); |
45 _LIT8( KMulti, "multi" ); |
39 const TInt KFileArrayGranularity = 6; |
46 |
|
47 const TInt KFileArrayGranularity( 6 ); |
40 |
48 |
41 // ============================ MEMBER FUNCTIONS =============================== |
49 // ============================ MEMBER FUNCTIONS =============================== |
42 |
50 |
43 // ----------------------------------------------------------------------------- |
51 // ----------------------------------------------------------------------------- |
44 // C++ default constructor. |
52 // C++ default constructor. |
45 // ----------------------------------------------------------------------------- |
53 // ----------------------------------------------------------------------------- |
46 // |
54 // |
47 CXnWallpaperView::CXnWallpaperView( CXnUiEngine& aEngine ) : |
55 CXnWallpaperView::CXnWallpaperView( CXnUiEngine& aEngine ) |
48 iEngine( aEngine ) |
56 : iEngine( aEngine ), iAppUi( iEngine.AppUiAdapter() ) |
49 { |
57 { |
50 } |
58 } |
51 |
59 |
52 // ----------------------------------------------------------------------------- |
60 // ----------------------------------------------------------------------------- |
53 // Symbian 2nd phase constructor. |
61 // Symbian 2nd phase constructor. |
54 // ----------------------------------------------------------------------------- |
62 // ----------------------------------------------------------------------------- |
55 // |
63 // |
56 void CXnWallpaperView::ConstructL() |
64 void CXnWallpaperView::ConstructL() |
57 { |
65 { |
58 BaseConstructL(); |
66 TFileName resFile; |
|
67 resFile.Append( KResourceDrive ); |
|
68 resFile.Append( KDC_APP_RESOURCE_DIR ); |
|
69 resFile.Append( KResourceFile ); |
|
70 |
|
71 CCoeEnv* env( CCoeEnv::Static() ); |
|
72 |
|
73 BaflUtils::NearestLanguageFile( env->FsSession(), resFile ); |
|
74 |
|
75 iResourceOffset = env->AddResourceFileL( resFile ); |
|
76 |
|
77 BaseConstructL( R_WALLPAPER_VIEW ); |
|
78 |
59 iTimer = CPeriodic::NewL( CActive::EPriorityIdle ); |
79 iTimer = CPeriodic::NewL( CActive::EPriorityIdle ); |
60 } |
80 } |
61 |
81 |
62 // ----------------------------------------------------------------------------- |
82 // ----------------------------------------------------------------------------- |
63 // Two-phased constructor. |
83 // Two-phased constructor. |
97 |
115 |
98 // ----------------------------------------------------------------------------- |
116 // ----------------------------------------------------------------------------- |
99 // CXnWallpaperView::DoActivateL |
117 // CXnWallpaperView::DoActivateL |
100 // ----------------------------------------------------------------------------- |
118 // ----------------------------------------------------------------------------- |
101 // |
119 // |
102 void CXnWallpaperView::DoActivateL( |
120 void CXnWallpaperView::DoActivateL( const TVwsViewId& aPrevViewId, |
103 const TVwsViewId& aPrevViewId, |
121 TUid /*aCustomMessageId*/, const TDesC8& aCustomMessage ) |
104 TUid /*aCustomMessageId*/, |
122 { |
105 const TDesC8& aCustomMessage ) |
123 // switch layout |
106 { |
124 CEikStatusPane* sp( iAppUi.StatusPane() ); |
107 iAvkonAppUi->StatusPane()->SwitchLayoutL( |
125 |
108 R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); |
126 sp->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); |
109 iAvkonAppUi->StatusPane()->DrawNow(); |
127 sp->ApplyCurrentSettingsL(); |
|
128 |
|
129 // disable transparancy |
|
130 if ( sp->IsTransparent() ) |
|
131 { |
|
132 sp->EnableTransparent( EFalse ); |
|
133 } |
|
134 |
|
135 sp->DrawNow(); |
|
136 |
|
137 // update cba |
|
138 CEikButtonGroupContainer* bgc( Cba() ); |
|
139 CEikCba* cba = static_cast< CEikCba* >( bgc->ButtonGroup() ); |
|
140 |
|
141 if ( cba ) |
|
142 { |
|
143 bgc->SetBoundingRect( TRect() ); |
|
144 cba->DrawNow(); |
|
145 } |
|
146 |
110 if ( !iContainer ) |
147 if ( !iContainer ) |
111 { |
148 { |
112 iContainer = CXnWallpaperContainer::NewL(); |
149 iContainer = CXnWallpaperContainer::NewL(); |
113 iAvkonAppUi->AddToStackL( *this, iContainer ); |
150 iAppUi.AddToStackL( *this, iContainer ); |
114 iContainer->ActivateL(); |
151 iContainer->ActivateL(); |
115 iContainer->DrawNow(); |
152 iContainer->DrawNow(); |
116 } |
153 } |
117 |
154 |
118 iData.iAppUid = aPrevViewId.iAppUid; |
155 iData.iAppUid = aPrevViewId.iAppUid; |
119 iData.iViewUid = aPrevViewId.iViewUid; |
156 iData.iViewUid = aPrevViewId.iViewUid; |
120 iData.iMultiple = EFalse; |
157 iData.iMultiple = EFalse; |
121 iData.iTimer = iTimer; |
158 |
122 |
159 if ( aCustomMessage == KMulti ) |
123 if( aCustomMessage == KMulti ) |
|
124 { |
160 { |
125 iData.iMultiple = ETrue; |
161 iData.iMultiple = ETrue; |
126 } |
162 } |
127 |
163 |
128 // Run image selection dialog asynchronously |
164 // Run image selection dialog asynchronously |
129 if ( iTimer->IsActive() ) |
165 iTimer->Cancel(); |
130 { |
166 iTimer->Start( 0, 1000, TCallBack( TimerCallbackL, this ) ); |
131 iTimer->Cancel(); |
167 |
132 } |
168 iAppUi.EffectManager()->UiRendered(); |
133 iTimer->Start( 0, 1000, TCallBack( TimerCallbackL, &iData ) ); |
|
134 } |
169 } |
135 |
170 |
136 // ----------------------------------------------------------------------------- |
171 // ----------------------------------------------------------------------------- |
137 // CXnWallpaperView::DoActivateL |
172 // CXnWallpaperView::DoActivateL |
138 // ----------------------------------------------------------------------------- |
173 // ----------------------------------------------------------------------------- |
139 // |
174 // |
140 void CXnWallpaperView::DoDeactivate() |
175 void CXnWallpaperView::DoDeactivate() |
141 { |
176 { |
142 if ( iContainer ) |
177 if ( iContainer ) |
143 { |
178 { |
144 iAvkonAppUi->RemoveFromStack( iContainer ); |
179 iAppUi.RemoveFromStack( iContainer ); |
145 delete iContainer; |
180 delete iContainer; |
146 iContainer = NULL; |
181 iContainer = NULL; |
147 } |
182 } |
|
183 |
|
184 iAppUi.EffectManager()->UiRendered(); |
148 } |
185 } |
149 |
186 |
150 // ----------------------------------------------------------------------------- |
187 // ----------------------------------------------------------------------------- |
151 // CXnWallpaperView::TimerCallback |
188 // CXnWallpaperView::TimerCallback |
152 // ----------------------------------------------------------------------------- |
189 // ----------------------------------------------------------------------------- |
153 // |
190 // |
154 TInt CXnWallpaperView::TimerCallbackL(TAny *aPtr) |
191 TInt CXnWallpaperView::TimerCallbackL( TAny *aPtr ) |
155 { |
192 { |
156 TInt errAddWallpaper = KErrNone; |
193 CXnWallpaperView* self = reinterpret_cast< CXnWallpaperView* >( aPtr ); |
157 |
194 self->iTimer->Cancel(); |
158 TXnWallpaperViewData* data = reinterpret_cast<TXnWallpaperViewData*>( aPtr ); |
|
159 data->iTimer->Cancel(); |
|
160 |
195 |
161 CDesCArrayFlat* files = |
196 CDesCArrayFlat* files = |
162 new (ELeave) CDesCArrayFlat( KFileArrayGranularity ); |
197 new (ELeave) CDesCArrayFlat( KFileArrayGranularity ); |
163 CleanupStack::PushL( files ); |
198 CleanupStack::PushL( files ); |
164 TBool selected = EFalse; |
199 |
165 |
200 TInt err( KErrNone ); |
166 TRAPD( err, selected = MGFetch::RunL( *files, EImageFile, data->iMultiple ) ); |
201 TBool selected( EFalse ); |
167 if ( err == KErrNone && |
202 |
168 selected && |
203 TXnWallpaperViewData& data( self->iData ); |
169 files->MdcaCount() > 0 ) |
204 |
170 { |
205 CXnBackgroundManager& bg( self->iAppUi.ViewAdapter().BgManager() ); |
171 // set wallpaper. |
206 |
|
207 TRAPD( fetch, selected = MGFetch::RunL( *files, EImageFile, data.iMultiple ) ); |
|
208 |
|
209 if ( fetch == KErrNone && selected && files->MdcaCount() > 0 ) |
|
210 { |
|
211 // set wallpaper |
172 if( files->MdcaCount() == 1 ) |
212 if( files->MdcaCount() == 1 ) |
173 { |
213 { |
174 CXnAppUiAdapter* appui = static_cast< CXnAppUiAdapter* >( iAvkonAppUi ); |
214 err = bg.AddWallpaperL( files->MdcaPoint( 0 ) ); |
175 CXnBackgroundManager& bgManager = appui->ViewAdapter().BgManager(); |
|
176 errAddWallpaper = bgManager.AddWallpaperL( files->MdcaPoint( 0 ) ); |
|
177 } |
215 } |
178 } |
216 } |
|
217 |
179 CleanupStack::PopAndDestroy( files ); |
218 CleanupStack::PopAndDestroy( files ); |
180 |
219 |
181 if( errAddWallpaper == KErrCACorruptContent ) |
220 if ( err == KErrCACorruptContent ) |
182 { |
221 { |
183 //load message text |
222 //load message text |
184 HBufC* msg = StringLoader::LoadLC( R_QTN_HS_CORRUPTED_IMAGE_NOTE ); |
223 HBufC* msg = StringLoader::LoadLC( R_QTN_HS_CORRUPTED_IMAGE_NOTE ); |
185 //ensure that dialog will not disappear immediatelly - by const. param |
224 //ensure that dialog will not disappear immediatelly - by const. param |
186 CAknErrorNote* dialog = new (ELeave) CAknErrorNote( true ); |
225 CAknErrorNote* dialog = new (ELeave) CAknErrorNote( true ); |