13 * |
13 * |
14 * Description: Device status plugin interface. |
14 * Description: Device status plugin interface. |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 |
18 // System includes |
19 #include <ecom/ecom.h> |
19 #include <ecom/ecom.h> |
20 #include <ecom/implementationproxy.h> |
20 #include <ecom/implementationproxy.h> |
21 #include <coemain.h> |
21 #include <coemain.h> |
22 #include <data_caging_path_literals.hrh> |
22 #include <data_caging_path_literals.hrh> |
23 #include <bautils.h> |
23 #include <bautils.h> |
24 #include <aiutility.h> |
24 #include <aiutility.h> |
25 #include <featmgr.h> |
25 #include <featmgr.h> |
|
26 |
|
27 // User includes |
26 #include "aidevicestatusplugin.h" |
28 #include "aidevicestatusplugin.h" |
27 #include "aidevicestatuspluginengine.h" |
29 #include "aidevicestatuspluginengine.h" |
28 #include "aipublishprioritizer.h" |
30 #include "aipublishprioritizer.h" |
29 #include "aidevicestatuscontentmodel.h" |
31 #include "aidevicestatuscontentmodel.h" |
30 #include "aimulticontentobserver.h" |
32 #include "aimulticontentobserver.h" |
31 #include "aipluginsettings.h" |
33 #include "aipluginsettings.h" |
32 #include "ainetworkinfolistener.h" |
34 #include "ainetworkinfolistener.h" |
33 |
35 |
|
36 // Constants |
34 _LIT( KResourceDrive, "Z:" ); |
37 _LIT( KResourceDrive, "Z:" ); |
35 _LIT( KResourceFile, "aidevstaplgres.rsc" ); |
38 _LIT( KResourceFile, "aidevstaplgres.rsc" ); |
36 #define KResourcePath KDC_APP_RESOURCE_DIR |
39 |
|
40 #define KResourcePath KDC_RESOURCE_FILES_DIR |
37 |
41 |
38 // ECOM implementation table |
42 // ECOM implementation table |
39 const TImplementationProxy KImplementationTable[] = |
43 const TImplementationProxy KImplementationTable[] = |
40 { |
44 { |
41 IMPLEMENTATION_PROXY_ENTRY(KImplUidDevStaPlugin, CAiDeviceStatusPlugin::NewL) |
45 IMPLEMENTATION_PROXY_ENTRY(KImplUidDevStaPlugin, CAiDeviceStatusPlugin::NewL) |
42 }; |
46 }; |
43 |
47 |
44 |
48 |
45 // ======== MEMBER FUNCTIONS ======== |
49 // ======== MEMBER FUNCTIONS ======== |
46 |
50 // ---------------------------------------------------------------------------- |
47 CAiDeviceStatusPlugin::CAiDeviceStatusPlugin() : |
51 // CAiDeviceStatusPlugin::CAiDeviceStatusPlugin |
48 iResourceOffset( KErrNotFound ) |
52 // |
49 { |
53 // ---------------------------------------------------------------------------- |
50 } |
54 // |
51 |
55 CAiDeviceStatusPlugin::CAiDeviceStatusPlugin() |
52 |
56 : iResourceOffset( KErrNotFound ) |
|
57 { |
|
58 } |
|
59 |
|
60 // ---------------------------------------------------------------------------- |
|
61 // CAiDeviceStatusPlugin::ConstructL |
|
62 // |
|
63 // ---------------------------------------------------------------------------- |
|
64 // |
53 void CAiDeviceStatusPlugin::ConstructL() |
65 void CAiDeviceStatusPlugin::ConstructL() |
54 { |
66 { |
55 iInfo.iUid.iUid = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_DEVSTAPLUGIN; |
|
56 |
|
57 FeatureManager::InitializeLibL(); |
67 FeatureManager::InitializeLibL(); |
58 |
68 |
59 // Create master instance to prevent deletion on Stop() |
69 // Create master instance to prevent deletion on Stop() |
60 iListener = CAiNetworkInfoListener::InstanceL(); |
70 iListener = CAiNetworkInfoListener::InstanceL(); |
61 |
71 |
62 //Create content here since this is needed in optimization phase. |
72 //Create content here since this is needed in optimization phase. |
63 iContent = AiUtility::CreateContentItemArrayIteratorL( KAiDeviceStatusContent ); |
73 iContent = AiUtility::CreateContentItemArrayIteratorL( KAiDeviceStatusContent ); |
64 iResources = AiUtility::CreateContentItemArrayIteratorL( KAiDeviceStatusResources ); |
74 iResources = AiUtility::CreateContentItemArrayIteratorL( KAiDeviceStatusResources ); |
|
75 |
65 iContentObservers = CAiMultiContentObserver::NewL(); |
76 iContentObservers = CAiMultiContentObserver::NewL(); |
|
77 |
66 iPrioritizer = CAiPublishPrioritizer::NewL( *iContentObservers, *this ); |
78 iPrioritizer = CAiPublishPrioritizer::NewL( *iContentObservers, *this ); |
67 } |
79 } |
68 |
80 |
69 |
81 // ---------------------------------------------------------------------------- |
|
82 // CAiDeviceStatusPlugin::NewL |
|
83 // |
|
84 // ---------------------------------------------------------------------------- |
|
85 // |
70 CAiDeviceStatusPlugin* CAiDeviceStatusPlugin::NewL() |
86 CAiDeviceStatusPlugin* CAiDeviceStatusPlugin::NewL() |
71 { |
87 { |
72 CAiDeviceStatusPlugin* self = CAiDeviceStatusPlugin::NewLC(); |
88 CAiDeviceStatusPlugin* self = CAiDeviceStatusPlugin::NewLC(); |
73 CleanupStack::Pop( self ); |
89 CleanupStack::Pop( self ); |
74 return self; |
90 return self; |
75 } |
91 } |
76 |
92 |
77 |
93 // ---------------------------------------------------------------------------- |
|
94 // CAiDeviceStatusPlugin::NewLC |
|
95 // |
|
96 // ---------------------------------------------------------------------------- |
|
97 // |
78 CAiDeviceStatusPlugin* CAiDeviceStatusPlugin::NewLC() |
98 CAiDeviceStatusPlugin* CAiDeviceStatusPlugin::NewLC() |
79 { |
99 { |
80 CAiDeviceStatusPlugin* self = new( ELeave ) CAiDeviceStatusPlugin; |
100 CAiDeviceStatusPlugin* self = new( ELeave ) CAiDeviceStatusPlugin; |
81 CleanupStack::PushL( self ); |
101 CleanupStack::PushL( self ); |
82 self->ConstructL(); |
102 self->ConstructL(); |
83 return self; |
103 return self; |
84 } |
104 } |
85 |
105 |
86 |
106 // ---------------------------------------------------------------------------- |
|
107 // CAiDeviceStatusPlugin::~CAiDeviceStatusPlugin |
|
108 // |
|
109 // ---------------------------------------------------------------------------- |
|
110 // |
87 CAiDeviceStatusPlugin::~CAiDeviceStatusPlugin() |
111 CAiDeviceStatusPlugin::~CAiDeviceStatusPlugin() |
88 { |
112 { |
89 delete iPrioritizer; |
113 delete iPrioritizer; |
|
114 |
90 FreeResources(); |
115 FreeResources(); |
|
116 |
91 delete iContentObservers; |
117 delete iContentObservers; |
|
118 |
92 Release( iResources ); |
119 Release( iResources ); |
93 Release( iContent ); |
120 Release( iContent ); |
|
121 |
94 FeatureManager::UnInitializeLib(); |
122 FeatureManager::UnInitializeLib(); |
|
123 |
95 if( iListener ) |
124 if( iListener ) |
96 { |
125 { |
97 iListener->Release(); |
126 iListener->Release(); |
98 } |
127 } |
99 } |
128 } |
100 |
129 |
101 |
130 // ---------------------------------------------------------------------------- |
102 /** |
131 // CAiDeviceStatusPlugin::AllocateResourcesL |
103 * Allocates all resourcers required for plug-in operation. |
132 // |
104 */ |
133 // ---------------------------------------------------------------------------- |
|
134 // |
105 void CAiDeviceStatusPlugin::AllocateResourcesL() |
135 void CAiDeviceStatusPlugin::AllocateResourcesL() |
106 { |
136 { |
107 //create engine |
137 //create engine |
108 if( !iEngine ) |
138 if( !iEngine ) |
109 { |
139 { |
110 iEngine = CAiDeviceStatusPluginEngine::NewL( *iContentObservers, |
140 iEngine = CAiDeviceStatusPluginEngine::NewL( |
111 *this, |
141 *iContentObservers, *this, *iPrioritizer ); |
112 *iPrioritizer); |
|
113 } |
142 } |
114 |
143 |
115 if( iResourceOffset < 0 ) |
144 if( iResourceOffset < 0 ) |
116 { |
145 { |
117 CCoeEnv* coe = CCoeEnv::Static(); |
146 CCoeEnv* coe( CCoeEnv::Static() ); |
118 |
147 |
119 if( !coe ) |
148 if ( coe ) |
120 { |
149 { |
121 User::Leave( KErrNotReady ); |
150 //Add resource file to cone |
|
151 TFullName resourceFile( KResourceDrive ); |
|
152 resourceFile.Append( KResourcePath ); |
|
153 resourceFile.Append( KResourceFile ); |
|
154 BaflUtils::NearestLanguageFile( coe->FsSession(), resourceFile ); |
|
155 iResourceOffset = coe->AddResourceFileL( resourceFile ); |
122 } |
156 } |
123 |
|
124 //Add resource file to cone |
|
125 TFullName resourceFile( KResourceDrive ); |
|
126 resourceFile.Append( KResourcePath ); |
|
127 resourceFile.Append( KResourceFile ); |
|
128 BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), resourceFile ); |
|
129 iResourceOffset = coe->AddResourceFileL( resourceFile ); |
|
130 } |
157 } |
131 } |
158 } |
132 |
159 |
133 |
160 // ---------------------------------------------------------------------------- |
134 /** |
161 // CAiDeviceStatusPlugin::FreeResources |
135 * Frees all allocated resources. |
162 // |
136 */ |
163 // ---------------------------------------------------------------------------- |
|
164 // |
137 void CAiDeviceStatusPlugin::FreeResources() |
165 void CAiDeviceStatusPlugin::FreeResources() |
138 { |
166 { |
139 if( iResourceOffset >= 0 ) |
167 if( iResourceOffset >= 0 ) |
140 { |
168 { |
141 CCoeEnv* coe = CCoeEnv::Static(); |
169 CCoeEnv* coe = CCoeEnv::Static(); |
151 |
179 |
152 delete iEngine; |
180 delete iEngine; |
153 iEngine = NULL; |
181 iEngine = NULL; |
154 } |
182 } |
155 |
183 |
156 |
184 // ---------------------------------------------------------------------------- |
157 void CAiDeviceStatusPlugin::Resume(TAiTransitionReason aReason) |
185 // CAiDeviceStatusPlugin::Start |
158 { |
186 // |
159 if( IgnoreReason( aReason ) ) |
187 // ---------------------------------------------------------------------------- |
160 { |
188 // |
161 return; |
189 void CAiDeviceStatusPlugin::Start( TStartReason aReason ) |
162 } |
190 { |
163 // resume all publishers only in startup |
191 if ( aReason == EPageStartup || aReason == ESystemStartup ) |
164 if( iEngine ) |
192 { |
165 { |
193 iRequirePublish = ETrue; |
166 if ( aReason == EAiIdleForeground || aReason == EAiKeylockDisabled ) |
194 } |
167 { |
195 } |
168 // not much can be done if some publisher cannot be refreshed |
196 |
169 TRAP_IGNORE( iEngine->RefreshPublishersL( |
197 // ---------------------------------------------------------------------------- |
170 EAiDeviceStatusContentNetworkIdentity, ETrue ) ); |
198 // CAiDeviceStatusPlugin::Stop |
171 |
199 // |
172 TRAP_IGNORE( iEngine->RefreshPublishersL( |
200 // ---------------------------------------------------------------------------- |
173 EAiDeviceStatusContentCUGMCNIndicator, ETrue ) ); |
201 // |
174 } |
202 void CAiDeviceStatusPlugin::Stop( TStopReason /*aReason*/ ) |
175 // if layout changed republish some information |
203 { |
176 else if ( aReason == EAiScreenLayoutChanged ) |
204 } |
|
205 |
|
206 // ---------------------------------------------------------------------------- |
|
207 // CAiDeviceStatusPlugin::Resume |
|
208 // |
|
209 // ---------------------------------------------------------------------------- |
|
210 // |
|
211 void CAiDeviceStatusPlugin::Resume( TResumeReason aReason ) |
|
212 { |
|
213 if ( aReason == EForeground ) |
|
214 { |
|
215 if ( iRequirePublish ) |
177 { |
216 { |
178 TRAP_IGNORE( iEngine->RefreshPublishersL( EAiDeviceStatusContentDate, ETrue )); |
217 TRAP_IGNORE( DoResumeL() ); |
179 TRAP_IGNORE( iEngine->RefreshPublishersL( EAiDeviceStatusContentCUGMCNIndicator, ETrue )); |
218 |
180 TRAP_IGNORE( iEngine->RefreshPublishersL( EAiDeviceStatusContentVHZText, ETrue )); |
219 iRequirePublish = EFalse; |
181 TRAP_IGNORE( iEngine->RefreshPublishersL( EAiDeviceStatusContentNetworkIdentity, ETrue )); |
220 } |
182 } |
221 } |
183 return; |
222 } |
184 } |
223 |
185 // If engine has been deleted. create it again. |
224 // ---------------------------------------------------------------------------- |
186 else |
225 // CAiDeviceStatusPlugin::Suspend |
187 { |
226 // |
188 iContentObservers->StartTransaction( KImplUidDevStaPlugin ); |
227 // ---------------------------------------------------------------------------- |
189 |
228 // |
190 TRAPD( err, DoResumeL(aReason) ); |
229 void CAiDeviceStatusPlugin::Suspend( TSuspendReason /*aReason*/ ) |
191 |
230 { |
192 if( err == KErrNone ) |
231 } |
193 { |
232 |
194 iContentObservers->Commit( KImplUidDevStaPlugin ); |
233 // ---------------------------------------------------------------------------- |
195 } |
234 // CAiDeviceStatusPlugin::SubscribeL |
196 else |
235 // |
197 { |
236 // ---------------------------------------------------------------------------- |
198 iContentObservers->CancelTransaction( KImplUidDevStaPlugin ); |
237 // |
199 } |
238 void CAiDeviceStatusPlugin::SubscribeL( MAiContentObserver& aObserver ) |
200 } |
239 { |
201 } |
240 iContentObservers->AddObserverL( aObserver ); |
202 |
241 } |
203 |
242 |
204 void CAiDeviceStatusPlugin::DoResumeL(TAiTransitionReason /*aReason*/) |
243 // ---------------------------------------------------------------------------- |
205 { |
244 // CAiDeviceStatusPlugin::ConfigureL |
206 AllocateResourcesL( ); |
245 // |
|
246 // ---------------------------------------------------------------------------- |
|
247 // |
|
248 void CAiDeviceStatusPlugin::ConfigureL( RAiSettingsItemArray& aSettings ) |
|
249 { |
|
250 aSettings.ResetAndDestroy(); |
|
251 |
|
252 AllocateResourcesL(); |
|
253 } |
|
254 |
|
255 // ---------------------------------------------------------------------------- |
|
256 // CAiDeviceStatusPlugin::GetProperty |
|
257 // |
|
258 // ---------------------------------------------------------------------------- |
|
259 // |
|
260 TAny* CAiDeviceStatusPlugin::GetProperty( TProperty aProperty ) |
|
261 { |
|
262 if ( aProperty == EPublisherContent ) |
|
263 { |
|
264 return static_cast< MAiContentItemIterator* >( iContent ); |
|
265 } |
|
266 else if ( aProperty == EPublisherResources ) |
|
267 { |
|
268 return static_cast< MAiContentItemIterator* >( iResources ); |
|
269 } |
|
270 else if ( aProperty == EContentRequest ) |
|
271 { |
|
272 return static_cast< MAiContentRequest* >( this ); |
|
273 } |
|
274 |
|
275 return NULL; |
|
276 } |
|
277 |
|
278 // ---------------------------------------------------------------------------- |
|
279 // CAiDeviceStatusPlugin::DoResumeL |
|
280 // |
|
281 // ---------------------------------------------------------------------------- |
|
282 // |
|
283 void CAiDeviceStatusPlugin::DoResumeL() |
|
284 { |
207 iEngine->ResumePublishersL(); |
285 iEngine->ResumePublishersL(); |
208 iEngine->RefreshPublishersL( EFalse ); |
286 iEngine->RefreshPublishersL( EFalse ); |
209 } |
287 } |
210 |
288 |
211 |
289 // ---------------------------------------------------------------------------- |
212 TBool CAiDeviceStatusPlugin::IgnoreReason( TAiTransitionReason aReason ) |
290 // CAiDeviceStatusPlugin::RefreshContent |
213 { |
291 // |
214 switch( aReason ) |
292 // ---------------------------------------------------------------------------- |
215 { |
293 // |
216 case EAiBacklightOff: |
|
217 return ETrue; |
|
218 } |
|
219 return EFalse; |
|
220 } |
|
221 |
|
222 |
|
223 void CAiDeviceStatusPlugin::Stop(TAiTransitionReason /*aReason*/) |
|
224 { |
|
225 FreeResources(); |
|
226 } |
|
227 |
|
228 |
|
229 void CAiDeviceStatusPlugin::Suspend(TAiTransitionReason /*aReason*/) |
|
230 { |
|
231 } |
|
232 |
|
233 |
|
234 void CAiDeviceStatusPlugin::SubscribeL(MAiContentObserver& aObserver) |
|
235 { |
|
236 iContentObservers->AddObserverL( aObserver ); |
|
237 } |
|
238 |
|
239 |
|
240 TAny* CAiDeviceStatusPlugin::Extension(TUid aUid) |
|
241 { |
|
242 //Access to extensions |
|
243 if( aUid == KExtensionUidProperty ) |
|
244 { |
|
245 return static_cast<MAiPropertyExtension*>(this); |
|
246 } |
|
247 |
|
248 return NULL; |
|
249 } |
|
250 |
|
251 |
|
252 void CAiDeviceStatusPlugin::ConfigureL(RAiSettingsItemArray& aSettings) |
|
253 { |
|
254 aSettings.ResetAndDestroy(); |
|
255 } |
|
256 |
|
257 TAny* CAiDeviceStatusPlugin::GetPropertyL(TInt aProperty) |
|
258 { |
|
259 //Return properties. |
|
260 switch (aProperty) |
|
261 { |
|
262 case EAiPublisherInfo: |
|
263 return &iInfo; |
|
264 |
|
265 case EAiPublisherContent: |
|
266 return static_cast<MAiContentItemIterator*>(iContent); |
|
267 |
|
268 case EAiPublisherResources: |
|
269 return static_cast<MAiContentItemIterator*>(iResources); |
|
270 |
|
271 case EAiContentRequest: |
|
272 return static_cast<MAiContentRequest*>(this); |
|
273 } |
|
274 |
|
275 return NULL; |
|
276 } |
|
277 |
|
278 void CAiDeviceStatusPlugin::SetPropertyL(TInt aProperty, TAny* aValue) |
|
279 { |
|
280 if( aProperty == EAiPublisherInfo ) |
|
281 { |
|
282 ASSERT( aValue ); |
|
283 |
|
284 const TAiPublisherInfo* info( |
|
285 static_cast<const TAiPublisherInfo*>( aValue ) ); |
|
286 |
|
287 iInfo = *info; |
|
288 } |
|
289 } |
|
290 |
|
291 TBool CAiDeviceStatusPlugin::RefreshContent( TInt aContentId ) |
294 TBool CAiDeviceStatusPlugin::RefreshContent( TInt aContentId ) |
292 { |
295 { |
293 TBool result = EFalse; |
296 TBool result( EFalse ); |
294 |
297 |
295 TRAP_IGNORE( result = iEngine->RefreshPublishersL( aContentId, EFalse ) ); |
298 TRAP_IGNORE( result = iEngine->RefreshPublishersL( aContentId, EFalse ) ); |
|
299 |
296 return result; |
300 return result; |
297 } |
301 } |
298 |
302 |
299 |
303 // ---------------------------------------------------------------------------- |
300 /** |
304 // CAiDeviceStatusPlugin::SuspendContent |
301 * ECom component entry point. |
305 // |
302 */ |
306 // ---------------------------------------------------------------------------- |
303 EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) |
307 // |
304 { |
308 TBool CAiDeviceStatusPlugin::SuspendContent( TInt aContentId ) |
305 aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy); |
309 { |
|
310 TBool result( EFalse ); |
|
311 |
|
312 TRAP_IGNORE( result = iEngine->SuspendPublishersL( aContentId, EFalse ) ); |
|
313 |
|
314 return result; |
|
315 } |
|
316 |
|
317 // ======== GLOBAL FUNCTIONS ======== |
|
318 // ---------------------------------------------------------------------------- |
|
319 // ImplementationGroupProxy |
|
320 // |
|
321 // ---------------------------------------------------------------------------- |
|
322 // |
|
323 EXPORT_C const TImplementationProxy* ImplementationGroupProxy( |
|
324 TInt& aTableCount ) |
|
325 { |
|
326 aTableCount = sizeof(KImplementationTable) / sizeof( TImplementationProxy ); |
|
327 |
306 return KImplementationTable; |
328 return KImplementationTable; |
307 } |
329 } |
|
330 |
|
331 // End of file |