1 /* |
|
2 * Copyright (c) 2009 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: ?Description |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <glxeffectengine.h> |
|
20 #include "glxeffectpluginbase.h" |
|
21 #include "glxforwardtransitionplugin.h" |
|
22 #include "glxbackwardtransitionplugin.h" |
|
23 #include "glxfadeplugin.h" |
|
24 #include <QDebug> |
|
25 |
|
26 #include <xqsettingsmanager.h> |
|
27 #include <xqsettingskey.h> |
|
28 #include <QStringList> |
|
29 const TUint32 KGlxTransitionEffect = 0x1; |
|
30 const TUint32 KGlxTransitionDelay = 0x2; |
|
31 const TUint32 KGlxSlow = 0x3; |
|
32 const TUint32 KGlxMeduim = 0x4; |
|
33 const TUint32 KGlxFast = 0x5; |
|
34 const TUint32 KGlxWaveEffect = 0x6; |
|
35 const TUint32 KGlxFadeEffect = 0x7; |
|
36 const TUint32 KGlxZoomToFaceEffect = 0x8; |
|
37 const TUint32 KCRUidGallery = 0x20007194; |
|
38 GlxSlideShowSetting::GlxSlideShowSetting( int slideDelayTime, GlxEffect effect, GlxSlideShowMoveDir moveDir ) |
|
39 : mSlideDelayTime(slideDelayTime), |
|
40 mEffect ( effect), |
|
41 mMoveDir ( moveDir) |
|
42 { |
|
43 mSettingsManager = new XQSettingsManager(); |
|
44 mTransitionEffectCenrepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxTransitionEffect); |
|
45 mTransitionDelayCenrepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxTransitionDelay); |
|
46 mSlowCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxSlow); |
|
47 mMediumCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxMeduim); |
|
48 mFastCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxFast); |
|
49 |
|
50 mWaveEffectCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxWaveEffect ); |
|
51 mFadeEffectCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxFadeEffect); |
|
52 mZoomEffectCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxZoomToFaceEffect ); |
|
53 } |
|
54 |
|
55 GlxSlideShowSetting::~GlxSlideShowSetting( ) |
|
56 { |
|
57 delete mFastCenRepKey; |
|
58 delete mMediumCenRepKey; |
|
59 delete mSlowCenRepKey; |
|
60 delete mZoomEffectCenRepKey; |
|
61 delete mFadeEffectCenRepKey; |
|
62 delete mWaveEffectCenRepKey; |
|
63 delete mTransitionDelayCenrepKey; |
|
64 delete mTransitionEffectCenrepKey; |
|
65 delete mSettingsManager; |
|
66 } |
|
67 int GlxSlideShowSetting::slideShowDelayIndex() |
|
68 { |
|
69 QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionDelayCenrepKey); |
|
70 return effectvalue.toInt(); |
|
71 } |
|
72 void GlxSlideShowSetting::setSlideShowDelayIndex( int index ) |
|
73 { |
|
74 mSettingsManager->writeItemValue(*mTransitionDelayCenrepKey, index); |
|
75 } |
|
76 QStringList GlxSlideShowSetting::slideShowEffectList() |
|
77 { |
|
78 if(mSettingsManager->readItemValue(*mWaveEffectCenRepKey).toInt() == WAVE_EFFECT) |
|
79 mEffectList<<"Flip"; |
|
80 if(mSettingsManager->readItemValue(*mFadeEffectCenRepKey).toInt() == SMOOTH_FADE) |
|
81 mEffectList<<"Fade"; |
|
82 if(mSettingsManager->readItemValue(*mZoomEffectCenRepKey).toInt() == ZOOM_TO_FACE) |
|
83 mEffectList<<"Zoom to face"; |
|
84 return mEffectList; |
|
85 } |
|
86 int GlxSlideShowSetting::slideShowEffectIndex() |
|
87 { |
|
88 QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionEffectCenrepKey); |
|
89 return effectvalue.toInt(); |
|
90 } |
|
91 void GlxSlideShowSetting::setslideShowEffectIndex( int index ) |
|
92 { |
|
93 mEffect = ( GlxEffect ) ( index + 1 ) ; |
|
94 mSettingsManager->writeItemValue(*mTransitionEffectCenrepKey, index); |
|
95 } |
|
96 void GlxSlideShowSetting::readSlideShowSetting() |
|
97 { |
|
98 //To:Do read from the file system |
|
99 QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionDelayCenrepKey); |
|
100 switch (effectvalue.toInt()) { |
|
101 case SLOW: |
|
102 mSlideDelayTime = mSettingsManager->readItemValue(*mSlowCenRepKey).toInt(); |
|
103 break; |
|
104 case MEDIUM: |
|
105 mSlideDelayTime = mSettingsManager->readItemValue(*mMediumCenRepKey).toInt(); |
|
106 break; |
|
107 case FAST: |
|
108 mSlideDelayTime = mSettingsManager->readItemValue(*mFastCenRepKey).toInt(); |
|
109 break; |
|
110 default: |
|
111 mSlideDelayTime = 3000; |
|
112 break; |
|
113 } |
|
114 mEffect = ( GlxEffect ) ( mSettingsManager->readItemValue(*mTransitionEffectCenrepKey).toInt() + 1 ) ; |
|
115 mMoveDir = MOVE_FORWARD; |
|
116 qDebug("GlxSlideShowSetting::readSlideShowSetting() slide delay time %d effect %d move direction %d", mSlideDelayTime, mEffect, mMoveDir); |
|
117 } |
|
118 |
|
119 |
|
120 GlxTransitionEffectSetting::GlxTransitionEffectSetting(GlxEffect effect): mEffect(effect), mTransitionLater(false), mItem(0) |
|
121 { |
|
122 qDebug("GlxTransitionEffectSetting::GlxTransitionEffectSetting() effect id %d ", effect); |
|
123 mEffectFileList.clear(); |
|
124 mItemType.clear(); |
|
125 mEventType.clear(); |
|
126 init(); |
|
127 } |
|
128 |
|
129 void GlxTransitionEffectSetting::init() |
|
130 { |
|
131 qDebug("GlxTransitionEffectSetting::init() effect id %d ", mEffect); |
|
132 |
|
133 switch( mEffect ) { |
|
134 case GRID_TO_FULLSCREEN : |
|
135 mEffectFileList.append( QString(":/data/gridtofullscreenhide.fxml")); |
|
136 mItemType.append( QString("HbGridViewItem") ); |
|
137 mEventType.append(QString("click1") ); |
|
138 |
|
139 mEffectFileList.append( QString(":/data/gridtofullscreenshow.fxml")); |
|
140 mItemType.append( QString("HbView") ); |
|
141 mEventType.append(QString("click2") ); |
|
142 break; |
|
143 |
|
144 case FULLSCREEN_TO_GRID : |
|
145 mEffectFileList.append( QString(":/data/fullscreentogrid.fxml")); |
|
146 mItemType.append( QString("HbGridView") ); |
|
147 mEventType.append(QString("click3") ); |
|
148 break; |
|
149 |
|
150 case GRID_TO_ALBUMLIST: |
|
151 mEffectFileList.append( QString(":/data/gridtoalbumlisthide.fxml")); |
|
152 mItemType.append( QString("HbView") ); |
|
153 mEventType.append(QString("click4") ); |
|
154 |
|
155 mEffectFileList.append( QString(":/data/gridtoalbumlist.fxml")); |
|
156 mItemType.append( QString("HbListView") ); |
|
157 mEventType.append(QString("click5") ); |
|
158 break; |
|
159 |
|
160 case ALBUMLIST_TO_GRID: |
|
161 mEffectFileList.append( QString(":/data/albumlisttogrid.fxml")); |
|
162 mItemType.append( QString("HbListView") ); |
|
163 mEventType.append(QString("click6") ); |
|
164 |
|
165 mEffectFileList.append( QString(":/data/albumlisttogridshow.fxml")); |
|
166 mItemType.append( QString("HbView") ); |
|
167 mEventType.append(QString("click7") ); |
|
168 break; |
|
169 |
|
170 case FULLSCREEN_TO_DETAIL : |
|
171 mEffectFileList.append( QString(":/data/view_flip_hide.fxml")); |
|
172 mItemType.append( QString("HbView") ); |
|
173 mEventType.append(QString("click8") ); |
|
174 |
|
175 mEffectFileList.append( QString(":/data/view_flip_show.fxml")); |
|
176 mItemType.append( QString("HbView") ); |
|
177 mEventType.append(QString("click9") ); |
|
178 mTransitionLater = true; |
|
179 break; |
|
180 |
|
181 case DETAIL_TO_FULLSCREEN : |
|
182 mEffectFileList.append( QString(":/data/view_flip_hide.fxml")); |
|
183 mItemType.append( QString("HbView") ); |
|
184 mEventType.append(QString("click10") ); |
|
185 |
|
186 mEffectFileList.append( QString(":/data/view_flip_show.fxml")); |
|
187 mItemType.append( QString("HbView") ); |
|
188 mEventType.append(QString("click11") ); |
|
189 mTransitionLater = true; |
|
190 break; |
|
191 |
|
192 default : |
|
193 break; |
|
194 } |
|
195 } |
|
196 |
|
197 GlxTransitionEffectSetting::~GlxTransitionEffectSetting() |
|
198 { |
|
199 qDebug("GlxTransitionEffectSetting::~GlxTransitionEffectSetting() effect id %d ", mEffect); |
|
200 mEffectFileList.clear(); |
|
201 mItemType.clear(); |
|
202 mEventType.clear(); |
|
203 } |
|
204 |
|
205 |
|
206 GlxSlideShowEffectEngine::GlxSlideShowEffectEngine( ) : mNbrEffectRunning( 0 ), |
|
207 mEffectPlugin(NULL), |
|
208 mTransitionEffect(NO_EFFECT) |
|
209 { |
|
210 qDebug("GlxSlideShowEffectEngine::GlxSlideShowEffectEngine()"); |
|
211 mTransitionEffectList.clear(); |
|
212 } |
|
213 |
|
214 GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine() |
|
215 { |
|
216 qDebug("GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine()"); |
|
217 delete mEffectPlugin; |
|
218 mEffectPlugin = NULL; |
|
219 |
|
220 cleanTransitionEfffect(); |
|
221 } |
|
222 |
|
223 void GlxSlideShowEffectEngine::registerEffect(const QString &itemType) |
|
224 { |
|
225 effectPluginResolver(); |
|
226 QList <QString > effectPathList = mEffectPlugin->getEffectFileList(); |
|
227 |
|
228 qDebug("GlxSlideShowEffectEngine::registerEffect() item type %s file path %s", itemType.utf16(), effectPathList[0].utf16()); |
|
229 for ( int i = 0; i < effectPathList.count() ; ++i ) { |
|
230 HbEffect::add(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i)); |
|
231 } |
|
232 } |
|
233 |
|
234 void GlxSlideShowEffectEngine::deRegisterEffect(const QString &itemType) |
|
235 { |
|
236 qDebug("GlxSlideShowEffectEngine::deRegisterEffect() item type %s", itemType.utf16()); |
|
237 QList <QString > effectPathList = mEffectPlugin->getEffectFileList(); |
|
238 for ( int i = 0; i < effectPathList.count() ; ++i ) { |
|
239 HbEffect::remove(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i)); |
|
240 } |
|
241 delete mEffectPlugin ; |
|
242 mEffectPlugin = NULL; |
|
243 } |
|
244 |
|
245 void GlxSlideShowEffectEngine::registerTransitionEffect() |
|
246 { |
|
247 qDebug("GlxSlideShowEffectEngine::registerTransitionEffect()"); |
|
248 initTransitionEffect(); |
|
249 } |
|
250 |
|
251 void GlxSlideShowEffectEngine::deregistertransitionEffect() |
|
252 { |
|
253 qDebug("GlxSlideShowEffectEngine::deregisterTransitionEffect()"); |
|
254 cleanTransitionEfffect(); |
|
255 } |
|
256 |
|
257 void GlxSlideShowEffectEngine::runEffect(QGraphicsItem * item, const QString & itemType ) |
|
258 { |
|
259 qDebug("GlxSlideShowEffectEngine::runEffect()1 item type %s", itemType.utf16()); |
|
260 HbEffect::start(item, itemType, QString( "Click1" ), this, "slideShowEffectFinished"); |
|
261 ++mNbrEffectRunning; |
|
262 } |
|
263 |
|
264 void GlxSlideShowEffectEngine::runEffect(QList< QGraphicsItem * > & items, const QString & itemType ) |
|
265 { |
|
266 qDebug("GlxSlideShowEffectEngine::runEffect()2 item Type %s", itemType.utf16()); |
|
267 mEffectPlugin->setUpItems(items); |
|
268 for ( int i = 0; i < items.count() ; ++i ) { |
|
269 if ( mEffectPlugin->isAnimationLater(i) == FALSE ) { |
|
270 HbEffect::start(items.at(i), itemType, QString( "Click%1").arg(i), this, "slideShowEffectFinished"); |
|
271 } |
|
272 ++mNbrEffectRunning; |
|
273 } |
|
274 } |
|
275 |
|
276 void GlxSlideShowEffectEngine::runEffect(QList< QGraphicsItem * > & items, GlxEffect transitionEffect) |
|
277 { |
|
278 qDebug("GlxSlideShowEffectEngine::runEffect()3 effect type %d ", transitionEffect); |
|
279 |
|
280 GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect ); |
|
281 |
|
282 if ( effectSetting == NULL || items.count() != effectSetting->count() ) { |
|
283 return; |
|
284 } |
|
285 |
|
286 mTransitionEffect = transitionEffect; |
|
287 for ( int i = 0; i < effectSetting->count() ; ++i) { |
|
288 ++mNbrEffectRunning; |
|
289 if ( ( i == effectSetting->count() -1) && effectSetting->isTransitionLater() ) |
|
290 { |
|
291 effectSetting->setAnimationItem( items.at(i) ); |
|
292 items.at(i)->hide(); |
|
293 } |
|
294 else { |
|
295 HbEffect::start(items.at(i), effectSetting->itemType().at(i), effectSetting->eventType().at(i), this, "transitionEffectFinished"); |
|
296 } |
|
297 } |
|
298 } |
|
299 |
|
300 void GlxSlideShowEffectEngine::cancelEffect(QGraphicsItem * item) |
|
301 { |
|
302 if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) { |
|
303 HbEffect::cancel( item, QString( "Click1" ) ); |
|
304 } |
|
305 } |
|
306 |
|
307 void GlxSlideShowEffectEngine::cancelEffect(const QList< QGraphicsItem * > & items) |
|
308 { |
|
309 for ( int i = 0; i < items.count() ; ++i ) { |
|
310 if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) { |
|
311 HbEffect::cancel( items.at(i), QString( "Click%1").arg(i) ); |
|
312 } |
|
313 } |
|
314 } |
|
315 |
|
316 void GlxSlideShowEffectEngine::cancelEffect(QList< QGraphicsItem * > & items, GlxEffect transitionEffect) |
|
317 { |
|
318 GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect ); |
|
319 |
|
320 if ( effectSetting == NULL || items.count() != effectSetting->count() ) { |
|
321 return; |
|
322 } |
|
323 |
|
324 for ( int i = 0; i < effectSetting->count() ; ++i) { |
|
325 HbEffect::cancel(items.at(i), effectSetting->eventType().at(i) ); |
|
326 } |
|
327 } |
|
328 |
|
329 bool GlxSlideShowEffectEngine::isEffectRuning(QGraphicsItem * item) |
|
330 { |
|
331 if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) { |
|
332 return true; |
|
333 } |
|
334 return false; |
|
335 } |
|
336 |
|
337 bool GlxSlideShowEffectEngine::isEffectRuning(const QList< QGraphicsItem * > & items) |
|
338 { |
|
339 for ( int i = 0; i < items.count() ; ++i ) { |
|
340 if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) { |
|
341 return true; |
|
342 } |
|
343 } |
|
344 return false; |
|
345 } |
|
346 |
|
347 void GlxSlideShowEffectEngine::slideShowEffectFinished( const HbEffect::EffectStatus &status ) |
|
348 { |
|
349 Q_UNUSED( status ) |
|
350 qDebug("GlxSlideShowEffectEngine::slideShowEffectFinished() number of effect %d ", mNbrEffectRunning); |
|
351 |
|
352 --mNbrEffectRunning; |
|
353 |
|
354 if ( mEffectPlugin->isAnimationLater( mNbrEffectRunning) ) { |
|
355 HbEffect::start( mEffectPlugin->animationItem(), mEffectPlugin->ItemType(), QString( "Click%1").arg(mNbrEffectRunning), this, "slideShowEffectFinished"); |
|
356 } |
|
357 |
|
358 if (mNbrEffectRunning == 0) { |
|
359 emit effectFinished(); |
|
360 } |
|
361 } |
|
362 |
|
363 void GlxSlideShowEffectEngine::transitionEffectFinished( const HbEffect::EffectStatus &status ) |
|
364 { |
|
365 Q_UNUSED( status ) |
|
366 qDebug("GlxSlideShowEffectEngine::transitionEffectFinished() number of effect %d status %d", mNbrEffectRunning, status.reason); |
|
367 |
|
368 --mNbrEffectRunning; |
|
369 if ( mNbrEffectRunning == 1 ) { |
|
370 GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( mTransitionEffect ); |
|
371 if ( effectSetting->isTransitionLater() ){ |
|
372 effectSetting->animationItem()->show(); |
|
373 HbEffect::start( effectSetting->animationItem(), effectSetting->itemType().at(1), effectSetting->eventType().at(1), this, "transitionEffectFinished"); |
|
374 mTransitionEffect = NO_EFFECT; |
|
375 } |
|
376 } |
|
377 |
|
378 if (mNbrEffectRunning == 0) { |
|
379 emit effectFinished(); |
|
380 } |
|
381 } |
|
382 |
|
383 void GlxSlideShowEffectEngine::effectPluginResolver() |
|
384 { |
|
385 //TO:DO improved the code by using factory design pattern |
|
386 |
|
387 delete mEffectPlugin; |
|
388 mEffectPlugin = NULL; |
|
389 |
|
390 switch ( mSlideShowSetting.effect() ) { |
|
391 case WAVE_EFFECT : |
|
392 mEffectPlugin = new GlxForwardTransitionPlugin(); |
|
393 break ; |
|
394 |
|
395 /*case TRANSITION_EFFECT : |
|
396 if ( slideShowMoveDir() == MOVE_FORWARD ) { |
|
397 mEffectPlugin = new GlxForwardTransitionPlugin(); |
|
398 } |
|
399 else { |
|
400 mEffectPlugin = new GlxBackwardTransitionPlugin(); |
|
401 } |
|
402 break;*/ |
|
403 |
|
404 case SMOOTH_FADE : |
|
405 mEffectPlugin = new GlxFadePlugin(); |
|
406 break; |
|
407 |
|
408 default : |
|
409 mEffectPlugin = new GlxFadePlugin(); |
|
410 break; |
|
411 } |
|
412 } |
|
413 |
|
414 void GlxSlideShowEffectEngine::initTransitionEffect() |
|
415 { |
|
416 GlxTransitionEffectSetting *effectSetting = NULL; |
|
417 |
|
418 effectSetting = new GlxTransitionEffectSetting(GRID_TO_FULLSCREEN); |
|
419 for ( int i = 0; i < effectSetting->count(); ++i ) { |
|
420 HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ; |
|
421 } |
|
422 mTransitionEffectList[GRID_TO_FULLSCREEN] = effectSetting; |
|
423 |
|
424 effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_GRID ); |
|
425 for ( int i = 0; i < effectSetting->count(); ++i ) { |
|
426 HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ; |
|
427 } |
|
428 mTransitionEffectList[FULLSCREEN_TO_GRID] = effectSetting; |
|
429 |
|
430 effectSetting = new GlxTransitionEffectSetting( GRID_TO_ALBUMLIST ); |
|
431 for ( int i = 0; i < effectSetting->count(); ++i ) { |
|
432 HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ; |
|
433 } |
|
434 mTransitionEffectList[GRID_TO_ALBUMLIST] = effectSetting; |
|
435 |
|
436 effectSetting = new GlxTransitionEffectSetting( ALBUMLIST_TO_GRID ); |
|
437 for ( int i = 0; i < effectSetting->count(); ++i ) { |
|
438 HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ; |
|
439 } |
|
440 mTransitionEffectList[ALBUMLIST_TO_GRID] = effectSetting; |
|
441 |
|
442 effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_DETAIL ); |
|
443 for ( int i = 0; i < effectSetting->count(); ++i ) { |
|
444 HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ; |
|
445 } |
|
446 mTransitionEffectList[FULLSCREEN_TO_DETAIL] = effectSetting; |
|
447 |
|
448 effectSetting = new GlxTransitionEffectSetting( DETAIL_TO_FULLSCREEN ); |
|
449 for ( int i = 0; i < effectSetting->count(); ++i ) { |
|
450 HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ; |
|
451 } |
|
452 mTransitionEffectList[DETAIL_TO_FULLSCREEN] = effectSetting; |
|
453 } |
|
454 |
|
455 void GlxSlideShowEffectEngine::cleanTransitionEfffect() |
|
456 { |
|
457 qDebug("GlxSlideShowEffectEngine::cleanTrnastionEfffect()"); |
|
458 |
|
459 foreach( GlxTransitionEffectSetting *list, mTransitionEffectList) { |
|
460 for ( int i = 0; i < list->count(); ++i ) { |
|
461 HbEffect::remove( list->itemType().at(i), list->effectFileList().at(i), list->eventType().at(i)) ; |
|
462 } |
|
463 delete list; |
|
464 } |
|
465 mTransitionEffectList.clear(); |
|
466 |
|
467 } |
|
468 |
|