24 #include "logsdefs.h" |
24 #include "logsdefs.h" |
25 #include "logslogger.h" |
25 #include "logslogger.h" |
26 #include "logsservicehandler.h" |
26 #include "logsservicehandler.h" |
27 #include "logsservicehandlerold.h" |
27 #include "logsservicehandlerold.h" |
28 #include "logsmainwindow.h" |
28 #include "logsmainwindow.h" |
|
29 #include "logsapplication.h" |
29 |
30 |
30 //SYSTEM |
31 //SYSTEM |
31 #include <hbmainwindow.h> |
32 #include <hbmainwindow.h> |
32 #include <hbview.h> |
33 #include <hbview.h> |
33 #include <QApplication> |
34 #include <QApplication> |
34 #include <hblineedit.h> |
35 #include <hblineedit.h> |
35 #include <dialpad.h> |
36 #include <dialpad.h> |
36 #include <hbactivitymanager.h> |
37 #include <hbactivitymanager.h> |
37 #include <hbapplication.h> |
38 #include <hbapplication.h> |
|
39 #include <tstasksettings.h> |
38 |
40 |
39 // ----------------------------------------------------------------------------- |
41 // ----------------------------------------------------------------------------- |
40 // LogsViewManager::LogsViewManager |
42 // LogsViewManager::LogsViewManager |
41 // ----------------------------------------------------------------------------- |
43 // ----------------------------------------------------------------------------- |
42 // |
44 // |
95 // ----------------------------------------------------------------------------- |
97 // ----------------------------------------------------------------------------- |
96 // |
98 // |
97 void LogsViewManager::changeRecentViewViaService( |
99 void LogsViewManager::changeRecentViewViaService( |
98 XQService::LogsViewIndex view, bool showDialpad, QString dialpadText) |
100 XQService::LogsViewIndex view, bool showDialpad, QString dialpadText) |
99 { |
101 { |
100 closeEmbeddedApplication(); |
102 QVariant args(view); |
101 mMainWindow.bringAppToForeground(); |
103 activateViewViaService(LogsRecentViewId, showDialpad, dialpadText, args); |
102 mComponentsRepository->dialpad()->editor().setText(dialpadText); |
|
103 changeRecentView(view, showDialpad); |
|
104 } |
104 } |
105 |
105 |
106 // ----------------------------------------------------------------------------- |
106 // ----------------------------------------------------------------------------- |
107 // LogsViewManager::changeMatchesViewViaService |
107 // LogsViewManager::changeMatchesViewViaService |
108 // ----------------------------------------------------------------------------- |
108 // ----------------------------------------------------------------------------- |
109 // |
109 // |
110 void LogsViewManager::changeMatchesViewViaService(QString dialpadText) |
110 void LogsViewManager::changeMatchesViewViaService(QString dialpadText) |
111 { |
111 { |
112 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::changeMatchesView()" ); |
112 activateViewViaService(LogsMatchesViewId, true, dialpadText); |
113 closeEmbeddedApplication(); |
|
114 mMainWindow.bringAppToForeground(); |
|
115 mComponentsRepository->dialpad()->editor().setText(dialpadText); |
|
116 doActivateView(LogsMatchesViewId, true, QVariant()); |
|
117 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::changeMatchesView()" ); |
|
118 } |
113 } |
119 |
114 |
120 // ----------------------------------------------------------------------------- |
115 // ----------------------------------------------------------------------------- |
121 // LogsViewManager::changeRecentView |
116 // LogsViewManager::changeRecentView |
122 // ----------------------------------------------------------------------------- |
117 // ----------------------------------------------------------------------------- |
359 // ----------------------------------------------------------------------------- |
357 // ----------------------------------------------------------------------------- |
360 // |
358 // |
361 bool LogsViewManager::loadActivity() |
359 bool LogsViewManager::loadActivity() |
362 { |
360 { |
363 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::loadActivity()" ); |
361 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::loadActivity()" ); |
|
362 HbApplication* hbApp = static_cast<HbApplication*>(qApp); |
|
363 QString activityId = hbApp->activateId(); |
|
364 return doLoadActivity(activityId); |
|
365 } |
|
366 |
|
367 // ----------------------------------------------------------------------------- |
|
368 // |
|
369 // ----------------------------------------------------------------------------- |
|
370 // |
|
371 LogsAppViewId LogsViewManager::checkMatchesViewTransition( |
|
372 LogsAppViewId viewId, const QString& dialpadText) |
|
373 { |
|
374 if ( !dialpadText.isEmpty() ){ |
|
375 mComponentsRepository->dialpad()->editor().setText(dialpadText); |
|
376 } |
|
377 |
|
378 if ( viewId == LogsMatchesViewId ){ |
|
379 LogsModel* model = mComponentsRepository->model(); |
|
380 if ( model && model->predictiveSearchStatus() != logsContactSearchEnabled ){ |
|
381 LOGS_QDEBUG( "logs [UI] contact search disabled, go to recent view" ); |
|
382 viewId = LogsRecentViewId; |
|
383 } |
|
384 } |
|
385 return viewId; |
|
386 } |
|
387 |
|
388 // ----------------------------------------------------------------------------- |
|
389 // |
|
390 // ----------------------------------------------------------------------------- |
|
391 // |
|
392 void LogsViewManager::handleFirstActivation() |
|
393 { |
|
394 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::handleFirstActivation()" ); |
|
395 LogsApplication* app = static_cast<LogsApplication*>(qApp); |
|
396 Hb::ActivationReason reason = app->activateReason(); |
|
397 bool isStartedByService( |
|
398 mService.isStartedUsingService() || mServiceOld.isStartedUsingService() ); |
|
399 if ( !app->logsFeaturePreloadingEnabled() || |
|
400 reason == Hb::ActivationReasonActivity || |
|
401 isStartedByService ){ |
|
402 // Start immediately using all possible resources |
|
403 mComponentsRepository->model()->refreshData(); |
|
404 } |
|
405 |
|
406 if ( reason == Hb::ActivationReasonActivity && loadActivity() ){ |
|
407 LOGS_QDEBUG( "logs [UI] loaded saved activity" ); |
|
408 mMainWindow.bringAppToForeground(); |
|
409 } else if ( mFirstActivation && !isStartedByService ) { |
|
410 changeRecentView( XQService::LogsViewAll, false ); |
|
411 mMainWindow.bringAppToForeground(); |
|
412 } |
|
413 |
|
414 clearActivities(); |
|
415 |
|
416 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::handleFirstActivation()" ); |
|
417 } |
|
418 |
|
419 // ----------------------------------------------------------------------------- |
|
420 // |
|
421 // ----------------------------------------------------------------------------- |
|
422 // |
|
423 LogsBaseView* LogsViewManager::createView(LogsAppViewId viewId) |
|
424 { |
|
425 LogsBaseView* newView = 0; |
|
426 if ( viewId == LogsRecentViewId ){ |
|
427 newView = mComponentsRepository->recentCallsView(); |
|
428 mMainWindow.addView(newView); |
|
429 } else if ( viewId == LogsMatchesViewId ) { |
|
430 newView = mComponentsRepository->matchesView(); |
|
431 mMainWindow.addView(newView); |
|
432 } else if ( viewId == LogsDetailsViewId ) { |
|
433 newView = mComponentsRepository->detailsView(); |
|
434 mMainWindow.addView(newView); |
|
435 } |
|
436 return newView; |
|
437 } |
|
438 |
|
439 // ----------------------------------------------------------------------------- |
|
440 // |
|
441 // ----------------------------------------------------------------------------- |
|
442 // |
|
443 void LogsViewManager::closeEmbeddedApplication() |
|
444 { |
|
445 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::closeEmbeddedApplication()" ); |
|
446 if (mViewStack.count()) { |
|
447 mViewStack.at(0)->cancelServiceRequest(); |
|
448 } |
|
449 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::closeEmbeddedApplication()" ); |
|
450 } |
|
451 |
|
452 // ----------------------------------------------------------------------------- |
|
453 // If application comes back to foreground while exit is pending due unfinished |
|
454 // operations, finising of those operations does not cause anymore real exit. |
|
455 // ----------------------------------------------------------------------------- |
|
456 // |
|
457 void LogsViewManager::appGainedForeground() |
|
458 { |
|
459 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::appGainedForeground()" ); |
|
460 foreach ( LogsBaseView* view, mViewStack ){ |
|
461 disconnect( view, SIGNAL(exitAllowed()), this, SLOT(proceedExit()) ); |
|
462 } |
|
463 |
|
464 if ( static_cast<LogsApplication*>( qApp )->logsFeatureFakeExitEnabled() || |
|
465 static_cast<LogsApplication*>( qApp )->logsFeaturePreloadingEnabled() ){ |
|
466 mComponentsRepository->model()->refreshData(); |
|
467 TsTaskSettings taskSettings; |
|
468 taskSettings.setVisibility(true); |
|
469 } |
|
470 |
|
471 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::appGainedForeground()" ); |
|
472 } |
|
473 |
|
474 // ----------------------------------------------------------------------------- |
|
475 // |
|
476 // ----------------------------------------------------------------------------- |
|
477 // |
|
478 void LogsViewManager::activityRequested(const QString &activityId) |
|
479 { |
|
480 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::activityRequested()" ); |
|
481 if ( doLoadActivity(activityId) ){ |
|
482 clearActivities(); |
|
483 mMainWindow.bringAppToForeground(); |
|
484 } |
|
485 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::activityRequested()" ); |
|
486 } |
|
487 |
|
488 // ----------------------------------------------------------------------------- |
|
489 // |
|
490 // ----------------------------------------------------------------------------- |
|
491 // |
|
492 void LogsViewManager::doFakeExit() |
|
493 { |
|
494 saveActivity(); |
|
495 HbActivityManager* activityManager = |
|
496 static_cast<HbApplication*>(qApp)->activityManager(); |
|
497 connect( activityManager, SIGNAL(activityRequested(QString)), |
|
498 this, SLOT(activityRequested(QString)), Qt::UniqueConnection ); |
|
499 mComponentsRepository->model()->compressData(); |
|
500 TsTaskSettings taskSettings; |
|
501 taskSettings.setVisibility(false); |
|
502 } |
|
503 |
|
504 // ----------------------------------------------------------------------------- |
|
505 // |
|
506 // ----------------------------------------------------------------------------- |
|
507 // |
|
508 bool LogsViewManager::doLoadActivity(const QString& activityId) |
|
509 { |
|
510 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::doLoadActivity()" ); |
364 bool loaded = false; |
511 bool loaded = false; |
365 HbApplication* hbApp = static_cast<HbApplication*>(qApp); |
512 HbApplication* hbApp = static_cast<HbApplication*>(qApp); |
366 QString activityId = hbApp->activateId(); |
|
367 LOGS_QDEBUG_2( "logs [UI] activity id:", activityId ); |
513 LOGS_QDEBUG_2( "logs [UI] activity id:", activityId ); |
368 bool ok = hbApp->activityManager()->waitActivity(); |
514 bool ok = hbApp->activityManager()->waitActivity(); |
369 if ( !ok ){ |
515 if ( !ok ){ |
370 LOGS_QDEBUG( "logs [UI] Activity reschedule failed" ); |
516 LOGS_QDEBUG( "logs [UI] Activity reschedule failed" ); |
371 } |
517 } |
397 |
543 |
398 QByteArray serializedActivity = hbApp->activateData().toByteArray(); |
544 QByteArray serializedActivity = hbApp->activateData().toByteArray(); |
399 QDataStream stream(&serializedActivity, QIODevice::ReadOnly); |
545 QDataStream stream(&serializedActivity, QIODevice::ReadOnly); |
400 |
546 |
401 QVariant args = matchingView->loadActivity(activityId, stream, params); |
547 QVariant args = matchingView->loadActivity(activityId, stream, params); |
402 loaded = doActivateView( matchingView->viewId(), showDialpad, args, dialpadText ); |
548 loaded = doActivateView( |
403 } |
549 matchingView->viewId(), showDialpad, args, dialpadText, true ); |
404 LOGS_QDEBUG_2( "logs [UI] <- LogsViewManager::loadActivity() loaded:", loaded ); |
550 } |
|
551 |
|
552 LOGS_QDEBUG_2( "logs [UI] <- LogsViewManager::doLoadActivity() loaded:", loaded ); |
405 return loaded; |
553 return loaded; |
406 } |
554 } |
407 |
555 |
408 // ----------------------------------------------------------------------------- |
556 // ----------------------------------------------------------------------------- |
409 // |
557 // |
410 // ----------------------------------------------------------------------------- |
558 // ----------------------------------------------------------------------------- |
411 // |
559 // |
412 LogsAppViewId LogsViewManager::checkMatchesViewTransition( |
560 void LogsViewManager::clearActivities() |
413 LogsAppViewId viewId, const QString& dialpadText) |
561 { |
414 { |
562 HbApplication* hbApp = static_cast<HbApplication*>(qApp); |
415 if ( !dialpadText.isEmpty() ){ |
563 HbActivityManager* activityManager = hbApp->activityManager(); |
416 mComponentsRepository->dialpad()->editor().setText(dialpadText); |
|
417 } |
|
418 |
|
419 if ( viewId == LogsMatchesViewId ){ |
|
420 LogsModel* model = mComponentsRepository->model(); |
|
421 if ( model && model->predictiveSearchStatus() != logsContactSearchEnabled ){ |
|
422 LOGS_QDEBUG( "logs [UI] contact search disabled, go to recent view" ); |
|
423 viewId = LogsRecentViewId; |
|
424 } |
|
425 } |
|
426 return viewId; |
|
427 } |
|
428 |
|
429 // ----------------------------------------------------------------------------- |
|
430 // |
|
431 // ----------------------------------------------------------------------------- |
|
432 // |
|
433 void LogsViewManager::handleFirstActivation() |
|
434 { |
|
435 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::handleFirstActivation()" ); |
|
436 bool useSavedActivity( static_cast<HbApplication*>(qApp)->activateReason() == |
|
437 Hb::ActivationReasonActivity ); |
|
438 |
|
439 if ( useSavedActivity && loadActivity() ){ |
|
440 LOGS_QDEBUG( "logs [UI] loaded saved activity" ); |
|
441 mMainWindow.bringAppToForeground(); |
|
442 } else if ( mFirstActivation && !mService.isStartedUsingService() && |
|
443 !mServiceOld.isStartedUsingService()) { |
|
444 changeRecentView( XQService::LogsViewAll, false ); |
|
445 mMainWindow.bringAppToForeground(); |
|
446 } |
|
447 |
|
448 // Clear previously stored activations |
|
449 |
|
450 HbActivityManager* activityManager = static_cast<HbApplication*>(qApp)->activityManager(); |
|
451 foreach ( LogsBaseView* view, mViewStack ){ |
564 foreach ( LogsBaseView* view, mViewStack ){ |
452 view->clearActivity(*activityManager); |
565 view->clearActivity(*activityManager); |
453 } |
566 } |
454 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::handleFirstActivation()" ); |
567 disconnect( activityManager, SIGNAL(activityRequested(QString)), |
455 } |
568 this, SLOT(activityRequested(QString)) ); |
456 |
569 } |
457 // ----------------------------------------------------------------------------- |
570 |
458 // |
571 // ----------------------------------------------------------------------------- |
459 // ----------------------------------------------------------------------------- |
572 // |
460 // |
573 // ----------------------------------------------------------------------------- |
461 LogsBaseView* LogsViewManager::createView(LogsAppViewId viewId) |
574 // |
462 { |
575 void LogsViewManager::activateViewViaService( |
463 LogsBaseView* newView = 0; |
576 LogsAppViewId viewId, bool showDialpad, |
464 if ( viewId == LogsRecentViewId ){ |
577 const QString& dialpadText, const QVariant& args) |
465 newView = mComponentsRepository->recentCallsView(); |
578 { |
466 mMainWindow.addView(newView); |
579 LOGS_QDEBUG_2( "logs [UI] -> LogsViewManager::activateViewViaService()", viewId ); |
467 } else if ( viewId == LogsMatchesViewId ) { |
580 clearActivities(); |
468 newView = mComponentsRepository->matchesView(); |
581 closeEmbeddedApplication(); |
469 mMainWindow.addView(newView); |
582 mMainWindow.bringAppToForeground(); |
470 } else if ( viewId == LogsDetailsViewId ) { |
583 Dialpad* dpad = mComponentsRepository->dialpad(); |
471 newView = mComponentsRepository->detailsView(); |
584 if ( !showDialpad ){ |
472 mMainWindow.addView(newView); |
585 dpad->closeDialpad(); |
473 } |
586 } |
474 return newView; |
587 dpad->editor().setText(dialpadText); |
475 } |
588 doActivateView(viewId, showDialpad, args, QString(), true); |
476 |
589 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::activateViewViaService()" ); |
477 // ----------------------------------------------------------------------------- |
590 } |
478 // |
|
479 // ----------------------------------------------------------------------------- |
|
480 // |
|
481 void LogsViewManager::closeEmbeddedApplication() |
|
482 { |
|
483 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::closeEmbeddedApplication()" ); |
|
484 if (mViewStack.count()) { |
|
485 mViewStack.at(0)->cancelServiceRequest(); |
|
486 } |
|
487 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::closeEmbeddedApplication()" ); |
|
488 } |
|
489 |
|
490 // ----------------------------------------------------------------------------- |
|
491 // If application comes back to foreground while exit is pending due unfinished |
|
492 // operations, finising of those operations does not cause anymore real exit. |
|
493 // ----------------------------------------------------------------------------- |
|
494 // |
|
495 void LogsViewManager::appGainedForeground() |
|
496 { |
|
497 LOGS_QDEBUG( "logs [UI] -> LogsViewManager::appGainedForeground()" ); |
|
498 foreach ( LogsBaseView* view, mViewStack ){ |
|
499 disconnect( view, SIGNAL(exitAllowed()), this, SLOT(proceedExit()) ); |
|
500 } |
|
501 LOGS_QDEBUG( "logs [UI] <- LogsViewManager::appGainedForeground()" ); |
|
502 } |
|