|
1 /* |
|
2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: This is the implementation of the API used by theme server |
|
15 * to control transition appearance. |
|
16 * |
|
17 */ |
|
18 |
|
19 |
|
20 |
|
21 #include "alftransitionservercontroller.h" |
|
22 #include "alftransitionserver.h" |
|
23 #include "alftfxserverdef.h" |
|
24 #include "alfpsobserver.h" |
|
25 |
|
26 #include <e32property.h> |
|
27 #include <avkondomainpskeys.h> |
|
28 #include <pslninternalcrkeys.h> |
|
29 #include <centralrepository.h> |
|
30 |
|
31 #include <alf/alfclientbase.h> |
|
32 #include <alflogger.h> |
|
33 // --------------------------------------------------------------------------- |
|
34 // --------------------------------------------------------------------------- |
|
35 // |
|
36 CAlfTransitionServerController* CAlfTransitionServerController::NewL(RWsSession& /*aWsSession*/) |
|
37 { |
|
38 __ALFFXLOGSTRING("CAlfTransitionServerController::NewL >>"); |
|
39 CAlfTransitionServerController* self = new (ELeave) CAlfTransitionServerController(); |
|
40 CleanupStack::PushL(self); |
|
41 self->ConstructL(); |
|
42 CleanupStack::Pop(); |
|
43 __ALFFXLOGSTRING("CAlfTransitionServerController::NewL <<"); |
|
44 return self; |
|
45 } |
|
46 |
|
47 CAlfTransitionServerController::~CAlfTransitionServerController() |
|
48 { |
|
49 __ALFFXLOGSTRING("CAlfTransitionServerController::~CAlfTransitionServerController >>"); |
|
50 delete iTimer; |
|
51 delete iPsObserver; |
|
52 |
|
53 if(ServerRunning()) |
|
54 { |
|
55 StopTransitionServer(); |
|
56 } |
|
57 |
|
58 delete iRepository; |
|
59 __ALFFXLOGSTRING("CAlfTransitionServerController::~CAlfTransitionServerController <<"); |
|
60 } |
|
61 |
|
62 CAlfTransitionServerController::CAlfTransitionServerController() |
|
63 { |
|
64 } |
|
65 |
|
66 // --------------------------------------------------------------------------- |
|
67 // --------------------------------------------------------------------------- |
|
68 // |
|
69 void CAlfTransitionServerController::ConstructL() |
|
70 { |
|
71 __ALFFXLOGSTRING("CAlfTransitionServerController::ConstructL >>"); |
|
72 iRepository = CRepository::NewL( KCRUidThemes ); |
|
73 TInt err = iRepository->Get( KThemesTransitionEffects, iEffectValue ); |
|
74 if ( err != 0 ) |
|
75 { |
|
76 // Clean the value just to be sure it did not get messed up |
|
77 iEffectValue = 0; |
|
78 } |
|
79 __ALFFXLOGSTRING("CAlfTransitionServerController::ConstructL <<"); |
|
80 } |
|
81 |
|
82 |
|
83 // --------------------------------------------------------------------------- |
|
84 // --------------------------------------------------------------------------- |
|
85 // |
|
86 TInt CAlfTransitionServerController::StartTransitionServer() |
|
87 { |
|
88 return StartTransitionServer(KDefaultMaxBytesOngoing, KDefaultMaxBytesBetween); |
|
89 } |
|
90 |
|
91 // --------------------------------------------------------------------------- |
|
92 // --------------------------------------------------------------------------- |
|
93 // |
|
94 TInt CAlfTransitionServerController::StopTransitionServer() |
|
95 { |
|
96 __ALFFXLOGSTRING("CAlfTransitionServerController::StopTransitionServer >>"); |
|
97 //Shutting down. |
|
98 //Set property to "server not running" |
|
99 TInt val = 0; |
|
100 |
|
101 RProperty::Get(KPSUidAvkonDomain, KAknTfxServerStatus, val); |
|
102 iTransitionControlValue = val & ~ETfxSrvRunning; |
|
103 RProperty::Set(KPSUidAvkonDomain, KAknTfxServerStatus, iTransitionControlValue); |
|
104 __ALFFXLOGSTRING("CAlfTransitionServerController::StopTransitionServer <<"); |
|
105 return KErrNone; |
|
106 } |
|
107 |
|
108 // --------------------------------------------------------------------------- |
|
109 // --------------------------------------------------------------------------- |
|
110 // |
|
111 TBool CAlfTransitionServerController::ServerRunning() |
|
112 { |
|
113 __ALFFXLOGSTRING("CAlfTransitionServerController::ServerRunning >>"); |
|
114 TInt value = 0; |
|
115 RProperty::Get(KPSUidAvkonDomain, KAknTfxServerStatus, value); |
|
116 __ALFFXLOGSTRING1("CAlfTransitionServerController::ServerRunning - return: %d <<", value & ETfxSrvRunning); |
|
117 return (value & ETfxSrvRunning); |
|
118 } |
|
119 |
|
120 // --------------------------------------------------------------------------- |
|
121 // --------------------------------------------------------------------------- |
|
122 // |
|
123 TInt CAlfTransitionServerController::StartTransitionServer(TInt32 /*aMaxBytesOngoing*/, |
|
124 TInt32 /*aMaxBytesBetween*/) |
|
125 { |
|
126 __ALFFXLOGSTRING("CAlfTransitionServerController::StartTransitionServer >>"); |
|
127 if( ServerRunning() ) |
|
128 { |
|
129 __ALFFXLOGSTRING("CAlfTransitionServerController::StartTransitionServer - return KErrAlreadyExists <<"); |
|
130 return KErrAlreadyExists; |
|
131 } |
|
132 |
|
133 TInt val = 0; |
|
134 TInt err = KErrNone; |
|
135 |
|
136 |
|
137 err = RProperty::Get(KPSUidAvkonDomain, KAknTfxServerStatus, val ); |
|
138 if ( err != KErrNone ) |
|
139 { |
|
140 err = RProperty::Define(KPSUidAvkonDomain, KAknTfxServerStatus, RProperty::EInt, TSecurityPolicy(TSecurityPolicy::EAlwaysPass),TSecurityPolicy(TSecurityPolicy::EAlwaysPass)); |
|
141 // make sure the value is cleared if this is the first time the property is defined |
|
142 val = 0; |
|
143 } |
|
144 |
|
145 if ( err == KErrAlreadyExists ) |
|
146 { |
|
147 // if our publish/subscribe variable already exists, all is well |
|
148 err = KErrNone; |
|
149 } |
|
150 |
|
151 if( err != KErrNone ) |
|
152 { |
|
153 __ALFFXLOGSTRING1("CAlfTransitionServerController::StartTransitionServer - return: %d <<", err); |
|
154 return err; |
|
155 } |
|
156 |
|
157 //Set property to "server running" |
|
158 iTransitionControlValue = val | ETfxSrvRunning; |
|
159 // if the plugin has already been loaded, don't mess up with the value |
|
160 RProperty::Set( KPSUidAvkonDomain, KAknTfxServerStatus, val | ETfxSrvRunning ); |
|
161 |
|
162 if ( !iPsObserver ) |
|
163 { |
|
164 iPsObserver = CAlfPsObserver::New( this, KPSUidAvkonDomain, KAknTfxServerStatus ); |
|
165 if( !iPsObserver ) |
|
166 { |
|
167 __ALFFXLOGSTRING("CAlfTransitionServerController::StartTransitionServer - return KErrNoMemory<<"); |
|
168 return KErrNoMemory; |
|
169 } |
|
170 } |
|
171 |
|
172 if ( !iIsConnected ) |
|
173 { |
|
174 err = iTfxServer.Open(); |
|
175 } |
|
176 |
|
177 if ( err == KErrNone ) |
|
178 { |
|
179 iIsConnected = ETrue; |
|
180 // We don't need the server, we only want to know if it is running. |
|
181 iTfxServer.Close(); |
|
182 } |
|
183 else |
|
184 { |
|
185 err = KErrNone; |
|
186 // start timer |
|
187 if ( !iTimer ) |
|
188 { |
|
189 iTimer = CPeriodic::New( CActive::EPriorityStandard ); |
|
190 if ( iTimer ) |
|
191 { |
|
192 iTimer->Start( 1000000, 1000000, |
|
193 TCallBack(CAlfTransitionServerController::ConnectionCallback, this ) ); |
|
194 } |
|
195 } |
|
196 } |
|
197 __ALFFXLOGSTRING1("CAlfTransitionServerController::StartTransitionServer - return: %d <<", err); |
|
198 return err; |
|
199 } |
|
200 |
|
201 // --------------------------------------------------------------------------- |
|
202 // --------------------------------------------------------------------------- |
|
203 // |
|
204 TInt CAlfTransitionServerController::ConnectionCallback( TAny* aParameter ) |
|
205 { |
|
206 __ALFFXLOGSTRING("CAlfTransitionServerController::ConnectionCallback"); |
|
207 CAlfTransitionServerController* me = ((CAlfTransitionServerController*)(aParameter)); |
|
208 return me->ConnectionAttempt(); |
|
209 } |
|
210 |
|
211 // --------------------------------------------------------------------------- |
|
212 // --------------------------------------------------------------------------- |
|
213 // |
|
214 TInt CAlfTransitionServerController::ConnectionAttempt() |
|
215 { |
|
216 __ALFFXLOGSTRING("CAlfTransitionServerController::ConnectionAttempt >>"); |
|
217 TInt err = iTfxServer.Open(); |
|
218 if ( err == KErrNone ) |
|
219 { |
|
220 iIsConnected = ETrue; |
|
221 __ALFFXLOGSTRING("CAlfTransitionServerController::ConnectionAttempt - Connected"); |
|
222 // We don't need the server, we only want to know if it is running. |
|
223 iTfxServer.Close(); |
|
224 delete iTimer; |
|
225 iTimer = NULL; |
|
226 err = iRepository->Get( KThemesTransitionEffects, iEffectValue ); |
|
227 if ( err != 0 ) |
|
228 { |
|
229 // Clean the value just to be sure it did not get messed up |
|
230 iEffectValue = 0; |
|
231 } |
|
232 iRepository->Set( KThemesTransitionEffects, KMaxTInt ); |
|
233 iRepository->Set( KThemesTransitionEffects, iEffectValue ); |
|
234 } |
|
235 __ALFFXLOGSTRING1("CAlfTransitionServerController::ConnectionAttempt - state: %d, but returning KErrNone <<", err); |
|
236 return KErrNone; |
|
237 } |
|
238 |
|
239 // --------------------------------------------------------------------------- |
|
240 // --------------------------------------------------------------------------- |
|
241 // |
|
242 void CAlfTransitionServerController::PsValueUpdated( const TUid /*aCategory*/, const TUint /*aKey*/, const TInt /*aVal*/ ) |
|
243 { |
|
244 // This may not be needed as we poll the starting of alf. |
|
245 } |
|
246 |
|
247 |
|
248 |
|
249 |
|
250 |