# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1273841561 -10800 # Node ID 7119b73b84d62213cb93cfa801e94383f4875db6 # Parent 4a5361db893725be3d34a9ce4873588fed30176a Revision: 201017 Kit: 201019 diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/inc/logsbaseview.h --- a/logsui/logsapp/inc/logsbaseview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/inc/logsbaseview.h Fri May 14 15:52:41 2010 +0300 @@ -20,6 +20,7 @@ #include #include #include "logsdefs.h" +#include "logscall.h" class LogsComponentRepository; class LogsAbstractViewManager; @@ -33,6 +34,7 @@ class QSignalMapper; class HbLabel; class HbListView; +class LogsAbstractModel; /** * @@ -63,6 +65,7 @@ public slots: virtual void handleExit(); + virtual void callKeyPressed(); void closeEmptyMenu(); signals: @@ -77,6 +80,7 @@ virtual void dialpadEditorTextChanged(); virtual void updateEmptyListWidgetsVisibility(); virtual void updateWidgetsSizeAndLayout(); + virtual void contactActionCompleted(bool modified); //slots bellow are used in *.docml void showFilterMenu(); @@ -84,6 +88,8 @@ void openContactsApp(); void notSupported(); void changeFilter(HbAction* action); + void addToContacts(); + void saveNumberInDialpadToContacts(); //other slots void showListItemMenu(HbAbstractViewItem* item, const QPointF& coords); @@ -93,7 +99,12 @@ void saveContact(); void updateEmptyListLabelVisibility(); void showCallDetails(); + void deleteEvent(); + virtual void deleteEventOkAnswer(); + + void videoCallToCurrentNum(); + void sendMessageToCurrentNum(); void handleOrientationChanged(); @@ -132,6 +143,10 @@ virtual QAbstractItemModel* model() const; + virtual LogsAbstractModel* logsModel() const; + + virtual HbListView* listView() const; + virtual void populateListItemMenu(HbMenu& menu); /** @@ -143,17 +158,31 @@ * Update call button state. */ virtual void updateCallButton(); + + /** + * Make call if dialpad is opened and contains inputted number. + * @return true if call was made + */ + bool tryCallToDialpadNumber( + LogsCall::CallType callType = LogsCall::TypeLogsVoiceCall); + bool tryMessageToDialpadNumber(); void activateEmptyListIndicator(QAbstractItemModel* model); void deactivateEmptyListIndicator(QAbstractItemModel* model); void addViewSwitchingEffects(); void toggleActionAvailability( HbAction* action, bool available ); - /* - * - */ - bool askConfirmation( QString heading , QString text ); - + + void askConfirmation( QString heading , QString text, QObject* receiver, + const char* okSlot = 0, const char* cancelSlot = 0 ); + + void updateContactSearchAction(); + bool isContactSearchEnabled() const; + bool isContactSearchPermanentlyDisabled() const; + void updateDialpadCallAndMessagingActions(); + bool tryMatchesViewTransition(); + bool isDialpadInput() const; + protected: LogsAppViewId mViewId; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/inc/logscomponentrepository.h --- a/logsui/logsapp/inc/logscomponentrepository.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/inc/logscomponentrepository.h Fri May 14 15:52:41 2010 +0300 @@ -34,6 +34,7 @@ class LogsComponentRepository : public HbDocumentLoader { friend class UT_LogsComponentRepository; + friend class UT_LogsViewManager; public: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/inc/logsdefs.h --- a/logsui/logsapp/inc/logsdefs.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/inc/logsdefs.h Fri May 14 15:52:41 2010 +0300 @@ -43,12 +43,13 @@ //action ids const char logsCommonVideoCallMenuActionId[] = "logs_act_video_call"; const char logsCommonMessageMenuActionId[] = "logs_act_create_message"; +const char logsCommonAddToContactsMenuActionId[] = "logs_act_add_to_contacts"; const char logsDetailsViewVoiceCallMenuActionId[] = "logs_act_voice_call"; const char logsDetailsViewInternetCallMenuActionId[] = "logs_act_internet_call"; -const char logsDetailsAddToContactsMenuActionId[] = "logs_act_add_to_contacts"; const char logsDetailsOpenContactMenuActionId[] = "logs_act_open_contact"; const char logsRecentViewClearListMenuActionId[] = "logs_act_clear_list"; +const char logsRecentViewContactSearchMenuActionId[] = "logs_act_contact_search"; const char logsShowFilterReceivedMenuActionId[] = "logs_act_received"; const char logsShowFilterDialledMenuActionId[] = "logs_act_dialled"; @@ -75,4 +76,8 @@ LogsMatchesViewId }; +const int logsContactSearchPermanentlyDisabled = 0; +const int logsContactSearchEnabled = 1; +const int logsContactSearchDisabled = 2; + #endif // LOGSDEFS_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/inc/logsdetailsview.h --- a/logsui/logsapp/inc/logsdetailsview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/inc/logsdetailsview.h Fri May 14 15:52:41 2010 +0300 @@ -52,20 +52,20 @@ void initiateVoiceCall(); void initiateVideoCall(); - void addToContacts(); + void sendMessage(); void openContact(); - void contactActionCompleted(bool modified); - void deleteEvent();//overrides base class implementation - void copyNumberToClipboard(); //from LogsBaseView virtual void handleBackSoftkey(); + virtual void deleteEventOkAnswer(); private: // from LogsBaseView virtual void initView(); virtual QAbstractItemModel* model() const; + virtual void dialpadEditorTextChanged(); virtual void updateWidgetsSizeAndLayout(); + virtual void contactActionCompleted(bool modified); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/inc/logsmatchesview.h --- a/logsui/logsapp/inc/logsmatchesview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/inc/logsmatchesview.h Fri May 14 15:52:41 2010 +0300 @@ -18,7 +18,6 @@ #define LOGSMATCHESVIEW_H #include "logsbaseview.h" -#include "logscall.h" class HbListView; class HbAction; @@ -44,13 +43,6 @@ virtual void activated(bool showDialer, QVariant args); virtual void deactivated(); - -public slots: - - void callKeyPressed(); - void saveNumberInDialpadToContacts(); - void videoCallToCurrentNum(); - void sendMessageToCurrentNum(); protected slots: //from LogsBaseView @@ -60,18 +52,21 @@ virtual void dialpadClosed(); virtual void updateWidgetsSizeAndLayout(); virtual void updateEmptyListWidgetsVisibility(); + +private slots: + void toggleContactSearch(); private: //from LogsBaseView virtual void initView(); virtual QAbstractItemModel* model() const; + virtual HbListView* listView() const; private: void initListWidget(); void updateModel(LogsMatchesModel* model); void updateMenu(); - void callToCurrentNum( LogsCall::CallType callType ); void updateAddContactButton(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/inc/logsrecentcallsview.h --- a/logsui/logsapp/inc/logsrecentcallsview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/inc/logsrecentcallsview.h Fri May 14 15:52:41 2010 +0300 @@ -57,7 +57,6 @@ public slots: void handleExit(); - void callKeyPressed(); void markingCompleted(int err); protected slots: // from LogsBaseView @@ -68,11 +67,12 @@ void changeFilter(HbAction* action); virtual void updateEmptyListWidgetsVisibility(); virtual void updateWidgetsSizeAndLayout(); - private slots: void clearList(); + void clearListOkAnswer(); + void toggleContactSearch(); void updateView(LogsServices::LogsView view); void leftFlick(); void rightFlick(); @@ -85,6 +85,8 @@ virtual void initView(); virtual QAbstractItemModel* model() const; + virtual LogsAbstractModel* logsModel() const; + virtual HbListView* listView() const; virtual void updateCallButton(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/logsapp.pro --- a/logsui/logsapp/logsapp.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/logsapp.pro Fri May 14 15:52:41 2010 +0300 @@ -61,7 +61,7 @@ symbian: { TARGET.UID2 = 0x100039CE TARGET.UID3 = 0x101F4CD5 - TARGET.CAPABILITY = CAP_APPLICATION AllFiles + TARGET.CAPABILITY = CAP_APPLICATION LIBS += -lxqservice -lxqserviceutil -llogsengine -ldialpad } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/logsapp.qrc --- a/logsui/logsapp/logsapp.qrc Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/logsapp.qrc Fri May 14 15:52:41 2010 +0300 @@ -7,7 +7,6 @@ resources/logs_view_fade_in_scale.fxml resources/logs_view_fade_out.fxml - resources/logs_default.qm resources/hblistviewitem.css diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/resources/detailsView.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsapp/resources/detailsView.docml Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/resources/logs_default.qm Binary file logsui/logsapp/resources/logs_default.qm has changed diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/resources/matchesView.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsapp/resources/matchesView.docml Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/resources/recentCallsView.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsapp/resources/recentCallsView.docml Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/logsbaseview.cpp --- a/logsui/logsapp/src/logsbaseview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/logsbaseview.cpp Fri May 14 15:52:41 2010 +0300 @@ -8,7 +8,6 @@ * * Initial Contributors: * Nokia Corporation - initial contribution. -* * Contributors: * * Description: @@ -24,6 +23,7 @@ #include "logsmessage.h" #include "logscontact.h" #include "logsabstractmodel.h" +#include "logsmodel.h" #include "logsdetailsmodel.h" //SYSTEM @@ -255,6 +255,25 @@ // // ----------------------------------------------------------------------------- // +LogsAbstractModel* LogsBaseView::logsModel() const +{ + return static_cast( model() ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HbListView* LogsBaseView::listView() const +{ + LOGS_QDEBUG( "logs [UI] <-> LogsBaseView::listView()" ); + return 0; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void LogsBaseView::handleExit() { LOGS_QDEBUG( "logs [UI] -> LogsBaseView::handleExit()" ); @@ -263,6 +282,24 @@ } // ----------------------------------------------------------------------------- +// LogsBaseView::callKeyPressed +// ----------------------------------------------------------------------------- +// +void LogsBaseView::callKeyPressed() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::callKeyPressed()" ); + // Call to topmost item in current list + if ( !tryCallToDialpadNumber() && listView() && model() && model()->hasIndex(0,0) ) { + LOGS_QDEBUG( "logs [UI] Call to topmost item in list" ); + QModelIndex topIndex = model()->index(0,0); + listView()->scrollTo( topIndex ); + listView()->setCurrentIndex( topIndex, QItemSelectionModel::Select ); + initiateCallback(topIndex); + } + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::callKeyPressed()" ); +} + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // @@ -282,10 +319,11 @@ mShowFilterMenu->setPreferredPos(pos,HbPopup::BottomRightCorner); LOGS_QDEBUG_2("logs [UI] menupos:", pos) - mShowFilterMenu->exec(); + mShowFilterMenu->open(); } LOGS_QDEBUG( "logs [UI] <- LogsBaseView::showFilterMenu()" ); } + // ----------------------------------------------------------------------------- // LogsBaseView::closeEmptyMenu() // ----------------------------------------------------------------------------- @@ -369,8 +407,10 @@ // void LogsBaseView::dialpadOpened() { - LOGS_QDEBUG( "logs [UI] -> LogsBaseView::dialpadOpened()" ); - updateWidgetsSizeAndLayout(); + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::dialpadOpened()" ); + if ( !tryMatchesViewTransition() ){ + updateWidgetsSizeAndLayout(); + } LOGS_QDEBUG( "logs [UI] <- LogsBaseView::dialpadOpened()" ); } @@ -381,7 +421,6 @@ void LogsBaseView::dialpadClosed() { LOGS_QDEBUG( "logs [UI] -> LogsBaseView::dialpadClosed()" ); - mDialpad->editor().setText(QString()); updateWidgetsSizeAndLayout(); LOGS_QDEBUG( "logs [UI] <- LogsBaseView::dialpadClosed()" ); } @@ -393,10 +432,8 @@ void LogsBaseView::dialpadEditorTextChanged() { LOGS_QDEBUG( "logs [UI] -> LogsBaseView::dialpadEditorTextChanged()" ); - if ( mDialpad->editor().text().length() > 0 ) { - mViewManager.activateView( LogsMatchesViewId, true, QVariant() ); - } else { - updateCallButton(); + if ( !tryMatchesViewTransition() ) { + updateCallButton(); } LOGS_QDEBUG( "logs [UI] <- LogsBaseView::dialpadEditorTextChanged()" ); } @@ -419,21 +456,71 @@ // // ----------------------------------------------------------------------------- // +void LogsBaseView::addToContacts() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::addToContacts()" ); + if ( isDialpadInput() ){ + saveNumberInDialpadToContacts(); + } else if ( mContact ){ + // Use async connection to ensure that model can handle + // contact operation completion before view + QObject::connect(mContact, SIGNAL(saveCompleted(bool)), + this, SLOT(contactActionCompleted(bool)), + Qt::QueuedConnection); + saveContact(); + } + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::addToContacts()" ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsBaseView::saveNumberInDialpadToContacts() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::saveNumberInDialpadToContacts()" ); + if (mDialpad->editor().text().length() > 0){ + delete mContact; + mContact = 0; + mContact = logsModel()->createContact(mDialpad->editor().text()); + saveContact(); + } + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::saveNumberInDialpadToContacts()" ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void LogsBaseView::showListItemMenu( HbAbstractViewItem* item, const QPointF& coords ) { - HbMenu itemContextMenu(0); - itemContextMenu.setDismissPolicy(HbMenu::TapAnywhere); - itemContextMenu.setTimeout(contextMenuTimeout); - + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::showListItemMenu()" ); + HbMenu* itemContextMenu = new HbMenu(); + itemContextMenu->setDismissPolicy(HbMenu::TapAnywhere); + itemContextMenu->setTimeout(contextMenuTimeout); + itemContextMenu->setAttribute(Qt::WA_DeleteOnClose); + updateListItemData(item->modelIndex()); - populateListItemMenu(itemContextMenu); + populateListItemMenu(*itemContextMenu); if (mDialpad->isOpen()) { mDialpad->closeDialpad(); } - if (itemContextMenu.actions().count() > 0) { - itemContextMenu.exec(coords); + if (itemContextMenu->actions().count() > 0) { + itemContextMenu->setPreferredPos(coords,HbPopup::TopLeftCorner); + itemContextMenu->open(); + //TODO: + //the hack below is needed since otherwise listbox will get mouse event + //and "activated" signal will be emitted (=>initiateCallback() called) + //Remove it, when something is done in platform code for that + if (scene()) { + QGraphicsItem *item = scene()->mouseGrabberItem(); + if (item) { + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::showListItemMenu() ungrabbing the mouse" ); + item->ungrabMouse(); + } + } } } @@ -535,6 +622,42 @@ { mDialpad->setCallButtonEnabled( !mDialpad->editor().text().isEmpty() ); } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LogsBaseView::tryCallToDialpadNumber( LogsCall::CallType callType ) +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::tryCallToDialpadNumber()" ); + bool called = false; + if ( isDialpadInput() ){ + // Call to inputted number + LogsCall::callToNumber( callType, mDialpad->editor().text() ); + called = true; + } + LOGS_QDEBUG_2( "logs [UI] <- LogsBaseView::tryCallToDialpadNumber(), called", + called ); + return called; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LogsBaseView::tryMessageToDialpadNumber() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::tryMessageToDialpadNumber()" ); + bool messageSent = false; + if ( isDialpadInput() ){ + // Message to inputted number + LogsMessage::sendMessageToNumber( mDialpad->editor().text() ); + messageSent = true; + } + LOGS_QDEBUG_2( "logs [UI] <- LogsBaseView::tryMessageToDialpadNumber(), sent", + messageSent ); + return messageSent; +} // ----------------------------------------------------------------------------- // @@ -599,7 +722,7 @@ QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical); HbPushButton* addButton = new HbPushButton(buttonWidget); - addButton->setOrientation(Qt::Horizontal); + addButton->setStretched(true); addButton->setText(hbTrId("txt_dial_list_save_as_a_new_contact")); HbIcon plusIcon("qtg_mono_plus"); addButton->setIcon(plusIcon); @@ -607,7 +730,7 @@ connect(addButton, SIGNAL(clicked()), mContact, SLOT(addNew())); HbPushButton* updateButton = new HbPushButton(buttonWidget); - updateButton->setOrientation(Qt::Horizontal); + updateButton->setStretched(true); updateButton->setText(hbTrId("txt_dial_list_update_existing_contact")); updateButton->setIcon(plusIcon); connect(updateButton, SIGNAL(clicked()), popup, SLOT(close())); @@ -620,7 +743,7 @@ buttonWidget->setLayout(layout); popup->setContentWidget(buttonWidget); - popup->exec(); + popup->open(); } LOGS_QDEBUG( "logs [UI] <- LogsBaseView::saveContact()" ); @@ -780,7 +903,6 @@ LOGS_QDEBUG( "logs [UI] <- LogsBaseView::showCallDetails()" ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -789,10 +911,10 @@ { LOGS_QDEBUG( "logs [UI] -> LogsBaseView::deleteEvent()" ); if ( mDetailsModel ) { - if ( askConfirmation( hbTrId("txt_dialer_ui_title_delete_event"), - hbTrId("txt_dialer_info_call_event_will_be_removed_from"))){ - mDetailsModel->clearEvent(); - } + askConfirmation(hbTrId("txt_dialer_ui_title_delete_event"), + hbTrId("txt_dialer_info_call_event_will_be_removed_from"), + this, + SLOT(deleteEventOkAnswer())); } LOGS_QDEBUG( "logs [UI] <- LogsBaseView::deleteEvent()" ); } @@ -801,11 +923,55 @@ // // ----------------------------------------------------------------------------- // +void LogsBaseView::deleteEventOkAnswer() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::deleteEventOkAnswer()" ); + if (mDetailsModel) { + mDetailsModel->clearEvent(); + } + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::deleteEventOkAnswer()" ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsBaseView::videoCallToCurrentNum() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::videoCallToCurrentNum()" ); + tryCallToDialpadNumber( LogsCall::TypeLogsVideoCall ); + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::videoCallToCurrentNum()" ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsBaseView::sendMessageToCurrentNum() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::sendMessageToCurrentNum()" ); + tryMessageToDialpadNumber(); + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::sendMessageToCurrentNum()" ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void LogsBaseView::updateWidgetsSizeAndLayout() { } // ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsBaseView::contactActionCompleted(bool modified) +{ + Q_UNUSED(modified); +} + +// ----------------------------------------------------------------------------- // Sets appropriate list widget layout using listView.setLayoutName() // ----------------------------------------------------------------------------- // @@ -892,18 +1058,113 @@ // // ----------------------------------------------------------------------------- // -bool LogsBaseView::askConfirmation( QString heading , QString text ) +void LogsBaseView::askConfirmation( QString heading , QString text, + QObject* receiver, const char* okSlot, const char* cancelSlot ) +{ + HbMessageBox* note = new HbMessageBox(text, HbMessageBox::MessageTypeQuestion); + note->setAttribute(Qt::WA_DeleteOnClose); + note->setHeadingWidget(new HbLabel( heading )); + //note->setText( text ); + note->setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"), note)); + note->setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), note)); + + if (receiver && okSlot) { + connect(note->primaryAction(), SIGNAL(triggered()), receiver, okSlot); + } + if (receiver && cancelSlot) { + connect(note->secondaryAction(), SIGNAL(triggered()), receiver, cancelSlot); + } + note->open(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsBaseView::updateContactSearchAction() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::updateContactSearchAction()" ); + HbAction* contactSearchAction = qobject_cast( + mRepository.findObject( logsRecentViewContactSearchMenuActionId ) ); + if ( contactSearchAction ) { + if ( isContactSearchPermanentlyDisabled() ){ + contactSearchAction->setVisible(false); + } else if ( isContactSearchEnabled() ){ + contactSearchAction->setIconText("Contact search off"); + contactSearchAction->setText(hbTrId("txt_dialer_ui_opt_contact_search_off")); + contactSearchAction->setVisible(mDialpad->isOpen()); + } else { + contactSearchAction->setIconText("Contact search on"); + contactSearchAction->setText(hbTrId("txt_dialer_ui_opt_contact_search_on")); + contactSearchAction->setVisible(mDialpad->isOpen()); + } + } + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::updateContactSearchAction()" ); +} + +// ----------------------------------------------------------------------------- +// LogsBaseView::isContactSearchEnabled +// ----------------------------------------------------------------------------- +// +bool LogsBaseView::isContactSearchEnabled() const { - bool result(false); - HbMessageBox *note = new HbMessageBox("", HbMessageBox::MessageTypeQuestion); - note->setHeadingWidget(new HbLabel( heading )); - note->setText( text ); - note->setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"), note)); - note->setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), note)); - HbAction *selected = note->exec(); - if (selected == note->primaryAction()){ - result = true; - } - delete note; - return result; + int currSetting = logsModel() ? + logsModel()->predictiveSearchStatus() : -1; + return ( currSetting == logsContactSearchEnabled ); +} + +// ----------------------------------------------------------------------------- +// LogsBaseView::isContactSearchPermanentlyDisabled +// ----------------------------------------------------------------------------- +// +bool LogsBaseView::isContactSearchPermanentlyDisabled() const +{ + int currSetting = logsModel() ? + logsModel()->predictiveSearchStatus() : -1; + return ( currSetting == logsContactSearchPermanentlyDisabled || + currSetting < 0 ); } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsBaseView::updateDialpadCallAndMessagingActions() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::updateDialpadCallAndMessagingActions()" ); + HbAction* videoCallAction = qobject_cast( + mRepository.findObject( logsCommonVideoCallMenuActionId ) ); + HbAction* sendMessageAction = qobject_cast( + mRepository.findObject( logsCommonMessageMenuActionId ) ); + + bool visible( isDialpadInput() ); + + toggleActionAvailability( videoCallAction, visible ); + toggleActionAvailability( sendMessageAction, visible ); + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::updateDialpadCallAndMessagingActions()" ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LogsBaseView::tryMatchesViewTransition() +{ + LOGS_QDEBUG( "logs [UI] -> LogsBaseView::tryMatchesViewTransition()" ); + bool viewChanged = false; + if ( mDialpad->editor().text().length() > 0 && isContactSearchEnabled() ) { + viewChanged = mViewManager.activateView( LogsMatchesViewId, true, QVariant() ); + } + LOGS_QDEBUG( "logs [UI] <- LogsBaseView::tryMatchesViewTransition()" ); + return viewChanged; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LogsBaseView::isDialpadInput() const +{ + return ( mDialpad->isOpen() && !mDialpad->editor().text().isEmpty() ); +} + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/logsdetailsview.cpp --- a/logsui/logsapp/src/logsdetailsview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/logsdetailsview.cpp Fri May 14 15:52:41 2010 +0300 @@ -14,7 +14,6 @@ * Description: * */ -//USER #include "logsdetailsview.h" #include "logsdetailsmodel.h" #include "logscall.h" @@ -31,6 +30,8 @@ #include #include #include +#include +#include Q_DECLARE_METATYPE(LogsDetailsModel*) @@ -118,7 +119,7 @@ void LogsDetailsView::callKeyPressed() { LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::callKeyPressed()" ); - if ( mCall ){ + if ( !tryCallToDialpadNumber() && mCall ){ mCall->initiateCallback(); } LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::callKeyPressed()" ); @@ -131,7 +132,7 @@ void LogsDetailsView::initiateVoiceCall() { LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::initiateVoiceCall()" ); - if ( mCall ){ + if ( !tryCallToDialpadNumber() && mCall ){ mCall->call(LogsCall::TypeLogsVoiceCall); } LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::initiateVoiceCall()" ); @@ -144,7 +145,7 @@ void LogsDetailsView::initiateVideoCall() { LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::initiateVideoCall()" ); - if ( mCall ){ + if ( !tryCallToDialpadNumber(LogsCall::TypeLogsVideoCall) && mCall ){ mCall->call(LogsCall::TypeLogsVideoCall); } LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::initiateVideoCall()" ); @@ -154,18 +155,13 @@ // // ----------------------------------------------------------------------------- // -void LogsDetailsView::addToContacts() +void LogsDetailsView::sendMessage() { - LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::addToContacts()" ); - if ( mContact ){ - // Use async connection to ensure that model can handle - // contact operation completion before view - QObject::connect(mContact, SIGNAL(saveCompleted(bool)), - this, SLOT(contactActionCompleted(bool)), - Qt::QueuedConnection); - this->saveContact(); + LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::sendMessage()" ); + if ( !tryMessageToDialpadNumber() && mMessage ){ + mMessage->sendMessage(); } - LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::addToContacts()" ); + LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::sendMessage()" ); } // ----------------------------------------------------------------------------- @@ -206,37 +202,6 @@ } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void LogsDetailsView::deleteEvent() -{ - LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::deleteEvent()" ); - if ( mDetailsModel ) { - if ( askConfirmation( hbTrId("txt_dialer_ui_title_delete_event"), - hbTrId("txt_dialer_info_call_event_will_be_removed_from"))){ - mDetailsModel->clearEvent(); - handleBackSoftkey(); - } - } - LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::deleteEvent()" ); -} - -// ----------------------------------------------------------------------------- -// LogsDetailsView::copyNumberToClipboard() -// ----------------------------------------------------------------------------- -// -void LogsDetailsView::copyNumberToClipboard() -{ - LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::copyNumberToClipboard()" ); - if ( mDetailsModel ) { - mDetailsModel->getNumberToClipboard(); - handleBackSoftkey(); - } - LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::copyNumberToClipboard()" ); -} - -// ----------------------------------------------------------------------------- // LogsDetailsView::handleBackSoftkey // ----------------------------------------------------------------------------- // @@ -246,6 +211,20 @@ } // ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsDetailsView::deleteEventOkAnswer() +{ + LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::deleteEventOkAnswer()" ); + if (mDetailsModel) { + mDetailsModel->clearEvent(); + handleBackSoftkey(); + } + LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::deleteEventOkAnswer()" ); +} + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // @@ -311,7 +290,7 @@ HbAction* messageAction = qobject_cast( mRepository.findObject( logsCommonMessageMenuActionId ) ); HbAction* addToContactsAction = qobject_cast( - mRepository.findObject( logsDetailsAddToContactsMenuActionId ) ); + mRepository.findObject( logsCommonAddToContactsMenuActionId ) ); HbAction* openContactAction = qobject_cast( mRepository.findObject( logsDetailsOpenContactMenuActionId ) ); @@ -330,7 +309,13 @@ bool contactCanBeAdded(false); bool contactCanBeOpened(false); - if (mContact){ + if ( isDialpadInput() ){ + // Contact addition will be done using input field number + contactCanBeAdded = true; + // No need for voice call option in options menu as voice dialling + // to dialpad num is possible from green button + voiceCallAvailable = false; + } else if (mContact){ if (mContact->allowedRequestType() == LogsContact::TypeLogsContactSave){ contactCanBeAdded = true; } @@ -350,6 +335,20 @@ } // ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsDetailsView::dialpadEditorTextChanged() +{ + LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::dialpadEditorTextChanged()" ); + if ( !tryMatchesViewTransition() ) { + updateMenu(); + updateCallButton(); + } + LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::dialpadEditorTextChanged()" ); +} + +// ----------------------------------------------------------------------------- // LogsDetailsView::updateWidgetsSizeAndLayout // ----------------------------------------------------------------------------- // @@ -357,6 +356,7 @@ { LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::updateWidgetsSizeAndLayout()" ); if ( mListView ) { + updateMenu(); updateListLayoutName(*mListView, true); updateListSize(); } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/logseffecthandler.cpp --- a/logsui/logsapp/src/logseffecthandler.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/logseffecthandler.cpp Fri May 14 15:52:41 2010 +0300 @@ -116,7 +116,7 @@ emit dissappearByFadingComplete(); } } - + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -127,6 +127,7 @@ 1.0, 0.0, logsEffectDissappearDurationInMs); initOpacityEffect(*mItemAppearByFadingAnimation, &effectTarget, 0.0, 1.0, logsEffectAppearDurationInMs); + mFadeGroup->stop(); mFadeGroup->start(); } @@ -158,6 +159,7 @@ initAppearByMovingEffect( static_cast(*group.animationAt(logsAppearByMovingIndex)), &effectTarget, !dissappearToLeft, origX); + group.stop(); group.start(); } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/logsmatchesview.cpp --- a/logsui/logsapp/src/logsmatchesview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/logsmatchesview.cpp Fri May 14 15:52:41 2010 +0300 @@ -24,7 +24,6 @@ #include "logsmatchesmodel.h" #include "logscall.h" #include "logscontact.h" -#include "logsmessage.h" //SYSTEM #include @@ -121,53 +120,12 @@ } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- // -void LogsMatchesView::callKeyPressed() -{ - LOGS_QDEBUG( "logs [UI] -> LogsMatchesView::callKeyPressed()" ); - - callToCurrentNum( LogsCall::TypeLogsVoiceCall ); - - LOGS_QDEBUG( "logs [UI] <- LogsMatchesView::callKeyPressed()" ); -} - -// ----------------------------------------------------------------------------- -// // ----------------------------------------------------------------------------- // -void LogsMatchesView::videoCallToCurrentNum() -{ - callToCurrentNum( LogsCall::TypeLogsVideoCall ); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void LogsMatchesView::sendMessageToCurrentNum() +HbListView* LogsMatchesView::listView() const { - LOGS_QDEBUG( "logs [UI] -> LogsMatchesView::sendMessageToCurrentNum()" ); - if ( mDialpad->editor().text().length() > 0 ){ - // Message to inputted number - LogsMessage::sendMessageToNumber( mDialpad->editor().text() ); - } - LOGS_QDEBUG( "logs [UI] <- LogsMatchesView::sendMessageToCurrentNum()" ); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void LogsMatchesView::saveNumberInDialpadToContacts() -{ - if (mDialpad->editor().text().length() > 0){ - delete mContact; - mContact = 0; - mContact = mModel->createContact(mDialpad->editor().text()); - this->saveContact(); - } + return mListView; } // ----------------------------------------------------------------------------- @@ -231,6 +189,8 @@ { LOGS_QDEBUG( "logs [UI] -> LogsMatchesView::::handleBackSoftkey()" ); + mDialpad->editor().setText(QString()); + if (mDialpad->isOpen()){ LOGS_QDEBUG( "logs [UI] -> LogsMatchesView::::handleBackSoftkey() closeDialpad" ); // Block aboutToClose signal to interfere with layout loading @@ -269,7 +229,7 @@ // void LogsMatchesView::dialpadOpened() { - LogsBaseView::dialpadOpened(); + updateWidgetsSizeAndLayout(); updateAddContactButton(); } @@ -311,37 +271,36 @@ } // ----------------------------------------------------------------------------- +// LogsMatchesView::toggleContactSearch +// ----------------------------------------------------------------------------- +// +void LogsMatchesView::toggleContactSearch() +{ + LOGS_QDEBUG( "logs [UI] -> LogsMatchesView::toggleContactSearch()" ); + + if ( isContactSearchEnabled() ){ + int result = mModel->setPredictiveSearch( false ); + LogsBaseView::handleBackSoftkey(); + } + LOGS_QDEBUG( "logs [UI] <- LogsMatchesView::toggleContactSearch()" ); +} + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void LogsMatchesView::updateMenu() { LOGS_QDEBUG( "logs [UI] -> LogsMatchesView::updateMenu()" ); - HbAction* videoCallAction = qobject_cast( - mRepository.findObject( logsCommonVideoCallMenuActionId ) ); - HbAction* sendMessageAction = qobject_cast( - mRepository.findObject( logsCommonMessageMenuActionId ) ); + + updateDialpadCallAndMessagingActions(); - bool visible( mDialpad->isOpen() && !mDialpad->editor().text().isEmpty() ); - - toggleActionAvailability( videoCallAction, visible ); - toggleActionAvailability( sendMessageAction, visible ); + updateContactSearchAction(); + LOGS_QDEBUG( "logs [UI] <- LogsMatchesView::updateMenu()" ); } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void LogsMatchesView::callToCurrentNum( LogsCall::CallType callType ) -{ - if ( mDialpad->editor().text().length() > 0 ){ - // Call to inputted number - LogsCall::callToNumber( callType, mDialpad->editor().text() ); - } -} - -// ----------------------------------------------------------------------------- // LogsMatchesView::updateAddContactButton // ----------------------------------------------------------------------------- // @@ -350,8 +309,6 @@ if (mAddToContactsButton) { LOGS_QDEBUG( "logs [UI] <-> LogsMatchesView::updateAddContactButton()" ); bool matchesFound(model() && (model()->rowCount() > 0)); - mAddToContactsButton->setVisible(!matchesFound - && mDialpad->isOpen() - && !mDialpad->editor().text().isEmpty()); + mAddToContactsButton->setVisible(!matchesFound && isDialpadInput()); } } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/logsrecentcallsview.cpp --- a/logsui/logsapp/src/logsrecentcallsview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/logsrecentcallsview.cpp Fri May 14 15:52:41 2010 +0300 @@ -27,6 +27,7 @@ #include "logseffecthandler.h" #include "logsmatchesmodel.h" #include "logspageindicator.h" +#include "logsconfigurationparams.h" //SYSTEM #include @@ -113,8 +114,6 @@ } activateEmptyListIndicator(mFilter); - mDialpad->editor().setText(QString()); - mPageIndicator->setActiveItemIndex(mConversionMap.value(mCurrentView)); if ( mResetted ){ @@ -210,20 +209,21 @@ } // ----------------------------------------------------------------------------- -// LogsRecentCallsView::callKeyPressed +// // ----------------------------------------------------------------------------- // -void LogsRecentCallsView::callKeyPressed() +LogsAbstractModel* LogsRecentCallsView::logsModel() const { - LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::callKeyPressed()" ); - // Call to topmost item in current list - if ( mListView && mFilter && mFilter->hasIndex(0,0) ) { - QModelIndex topIndex = mFilter->index(0,0); - mListView->scrollTo( topIndex ); - mListView->setCurrentIndex( topIndex, QItemSelectionModel::Select ); - initiateCallback(topIndex); - } - LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::callKeyPressed()" ); + return mModel; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HbListView* LogsRecentCallsView::listView() const +{ + return mListView; } // ----------------------------------------------------------------------------- @@ -266,12 +266,13 @@ void LogsRecentCallsView::dialpadEditorTextChanged() { LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::dialpadEditorTextChanged()" ); - if ( mDialpad->editor().text().length() > 0 ) { + if ( mDialpad->editor().text().length() > 0 && isContactSearchEnabled() ) { QVariant arg = qVariantFromValue( mMatchesModel ); if ( mViewManager.activateView( LogsMatchesViewId, true, arg ) ){ mMatchesModel = 0; // Ownership was given to matches view } } else { + updateMenu(); updateCallButton(); } LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::dialpadEditorTextChanged()" ); @@ -285,12 +286,50 @@ { LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::clearList()->" ); if ( mFilter ) { - if ( askConfirmation( hbTrId("txt_dialer_ui_title_clear_list"), - hbTrId("txt_dialer_ui_info_all_call_events_will_be_remo"))){ - mModel->clearList( mFilter->clearType() ); + askConfirmation(hbTrId("txt_dialer_ui_title_clear_list"), + hbTrId("txt_dialer_ui_info_all_call_events_will_be_remo"), + this, + SLOT(clearListOkAnswer())); + + } + LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::clearList()<-" ); +} + +// ----------------------------------------------------------------------------- +// LogsRecentCallsView::clearListOkAnswer +// ----------------------------------------------------------------------------- +// +void LogsRecentCallsView::clearListOkAnswer() +{ + LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::clearListOkAnswer()" ); + if (mFilter) { + mModel->clearList( mFilter->clearType() ); + } + LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::clearListAnswer()" ); +} + +// ----------------------------------------------------------------------------- +// LogsRecentCallsView::toggleContactSearch +// ----------------------------------------------------------------------------- +// +void LogsRecentCallsView::toggleContactSearch() +{ + LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::toggleContactSearch()" ); + + if ( isContactSearchPermanentlyDisabled() ){ + LOGS_QDEBUG( "logs [UI] permanently disabled" ); + } else if ( isContactSearchEnabled() ){ + mModel->setPredictiveSearch( false ); + updateMenu(); + } else { + mModel->setPredictiveSearch( true ); + updateMenu(); + if ( isDialpadInput() ){ + LogsRecentCallsView::dialpadEditorTextChanged(); } } - LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::clearList()<-" ); + + LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::toggleContactSearch()" ); } // ----------------------------------------------------------------------------- @@ -634,6 +673,14 @@ bool visible( model()->rowCount() > 0 ); action->setVisible( visible ); } + + HbAction* addToContactsAction = qobject_cast( + mRepository.findObject( logsCommonAddToContactsMenuActionId ) ); + toggleActionAvailability(addToContactsAction, isDialpadInput()); + + updateDialpadCallAndMessagingActions(); + updateContactSearchAction(); + LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::updateMenu()" ); } @@ -656,8 +703,20 @@ { LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::updateWidgetsSizeAndLayout()" ); if ( mListView ) { + updateMenu(); updateListLayoutName(*mListView); updateListSize(); + HbDeviceProfile deviceProf; + LogsConfigurationParams param; + QString testString = mListView->layoutName(); + //note: ListItemTextWidth values are currently hardcoded and + //they are taken from hblistviewitem.css "text-1" field + if (mListView->layoutName() == logsListLandscapeDialpadLayout) { + param.setListItemTextWidth( 38 * deviceProf.unitValue() ); + } else { + param.setListItemTextWidth( 40 * deviceProf.unitValue() ); + } + mModel->updateConfiguration(param); } LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::updateWidgetsSizeAndLayout()" ); } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/logsviewmanager.cpp --- a/logsui/logsapp/src/logsviewmanager.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/logsviewmanager.cpp Fri May 14 15:52:41 2010 +0300 @@ -128,9 +128,18 @@ // void LogsViewManager::changeMatchesView(QString dialpadText) { + LOGS_QDEBUG( "logs [UI] -> LogsViewManager::changeMatchesView()" ); Dialpad* dialpad = mComponentsRepository->dialpad(); dialpad->editor().setText(dialpadText); - doActivateView(LogsMatchesViewId, true, QVariant()); + LogsModel* model = mComponentsRepository->model(); + if ( model && model->predictiveSearchStatus() == logsContactSearchEnabled ){ + LOGS_QDEBUG( "logs [UI] contact search enabled, go to macthes view" ); + doActivateView(LogsMatchesViewId, true, QVariant()); + } else { + LOGS_QDEBUG( "logs [UI] contact search disabled, go to recent view" ); + doActivateView(LogsRecentViewId, true, QVariant()); + } + LOGS_QDEBUG( "logs [UI] <- LogsViewManager::changeMatchesView()" ); } // ----------------------------------------------------------------------------- diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/src/main.cpp --- a/logsui/logsapp/src/main.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/src/main.cpp Fri May 14 15:52:41 2010 +0300 @@ -41,9 +41,9 @@ QTranslator commontranslator; bool returncode = false; LOGS_QDEBUG("logs [UI] loading common strings translator"); - returncode = commontranslator.load( path + "common_" + lang + ".qm"); + returncode = commontranslator.load( path + "common_" + lang); if (returncode==false) { - LOGS_QDEBUG("logs [UI] unable to open file: " + path + "common_" + lang + ".qm"); + LOGS_QDEBUG("logs [UI] unable to open file: " + path + "common_" + lang); } else { app.installTranslator(&commontranslator); } @@ -51,22 +51,15 @@ //Load application-specific translator QTranslator translator; LOGS_QDEBUG("logs [UI] loading application strings translator"); - LOGS_QDEBUG("logs [UI] translation filename dialer_" + lang + ".qm"); - returncode = translator.load( path + "dialer_" + lang + ".qm"); + LOGS_QDEBUG("logs [UI] translation filename dialer_" + lang); + returncode = translator.load( path + "dialer_" + lang); if (returncode==false) { - LOGS_QDEBUG("logs [UI] .qm file not found from "+path); - path = ":/"; - returncode = translator.load( path + "logs_default.qm"); - LOGS_QDEBUG("logs [UI]: fallback to default language file logs_default.qm"); - } - - if (returncode==false) { - LOGS_QDEBUG( "logs [UI] .qm file not found from "+path); + LOGS_QDEBUG( "logs [UI] .qm file not found from " + path); } else { - LOGS_QDEBUG( "logs [UI] .qm loaded successfully from "+path); + LOGS_QDEBUG( "logs [UI] .qm loaded successfully from " + path); + app.installTranslator(&translator); } - app.installTranslator(&translator); HbStyleLoader::registerFilePath(":/logslayouts"); // Create service handler asap so that services are published fast. diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsbaseview.h --- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsbaseview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsbaseview.h Fri May 14 15:52:41 2010 +0300 @@ -58,6 +58,7 @@ void testOpenDialpad(); void testSetDialpadPostion(); void testDialpadClosed(); + void testDialpadOpened(); void testDialpadEditorTextChanged(); void testChangeFilter(); void testOpenContactsApp(); @@ -79,6 +80,11 @@ void testHandleOrientationChanged(); void testHandleExit(); void testIsExitAllowed(); + void testAddToContacts(); + void testSendMessageToCurrentNum(); + void testDeleteEvent(); + void testDeleteEventOkAnswer(); + void testAskConfirmation(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsdetailsview.h --- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsdetailsview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsdetailsview.h Fri May 14 15:52:41 2010 +0300 @@ -58,12 +58,13 @@ void testInitiateVoiceCall(); void testInitiateVideoCall(); void testUpdateMenu(); - void testDeleteEvent(); - void testCopyNumberToClipboard(); + void testDeleteEventOkAnswer(); void testChangeFilter(); void testContactActionCompleted(); void testModel(); void testUpdateWidgetsSizeAndLayout(); + void testDialpadEditorTextChanged(); + void testSendMessage(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsmatchesview.h --- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsmatchesview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsmatchesview.h Fri May 14 15:52:41 2010 +0300 @@ -65,6 +65,7 @@ void testHandleOrientationChanged(); void testUpdateEmptyListWidgetsVisibility(); void testUpdateAddContactButton(); + void testContactSearch(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsrecentcallsview.h --- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsrecentcallsview.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsrecentcallsview.h Fri May 14 15:52:41 2010 +0300 @@ -79,7 +79,10 @@ void testUpdateWidgetsSizeAndLayout(); void testDialpadClosed(); void testClearList(); + void testClearListOkAnswer(); void testIsExitAllowed(); + void testContactSearch(); + void testDialpadOpened(); private: //helper functions diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsabstractmodel.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsabstractmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsabstractmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -24,6 +24,7 @@ #include "logsengdefs.h" #include "logsmessage.h" + Q_DECLARE_METATYPE(LogsEvent *) Q_DECLARE_METATYPE(LogsCall *) Q_DECLARE_METATYPE(LogsMessage *) @@ -33,7 +34,8 @@ // // ----------------------------------------------------------------------------- // -LogsAbstractModel::LogsAbstractModel() : QAbstractListModel(), mDbConnector(0) +LogsAbstractModel::LogsAbstractModel() : + QAbstractListModel(), mDbConnector(0),mPredectiveSearchStatus(1) { LOGS_QDEBUG( "logs [ENG] -> LogsAbstractModel::LogsAbstractModel()" ) @@ -51,6 +53,47 @@ LOGS_QDEBUG( "logs [ENG] <- LogsAbstractModel::~LogsAbstractModel()" ) } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsContact* LogsAbstractModel::createContact(const QString& number) +{ + return new LogsContact(number); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LogsAbstractModel::predictiveSearchStatus() +{ + return mPredectiveSearchStatus; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LogsAbstractModel::setPredictiveSearch(bool enabled) +{ + int result = 0; + if ( mPredectiveSearchStatus == 0 ){ + result = -5; + } + else { + if ( enabled ){ + mPredectiveSearchStatus = 1; + } + else { + mPredectiveSearchStatus = 2; + } + } + + return result; +} + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsabstractmodel.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsabstractmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsabstractmodel.h Fri May 14 15:52:41 2010 +0300 @@ -25,6 +25,7 @@ class LogsEvent; class LogsDbConnector; class LogsModelItemContainer; +class LogsContact; /** * Abstract logs model. @@ -51,6 +52,30 @@ ~LogsAbstractModel(); + + /** + * Factory method for creating a new contact object. Transfers ownership. + */ + LogsContact* createContact(const QString& number); + + /** + * Returns cenrep key status of predictive search feature. + * @return 0 - feature is permanently off and can't be turned on, + * 1 - feature is on + * 2 - feature is temporarily off and can be turned on + * negative value indicates some error in fetching the key + */ + int predictiveSearchStatus(); + /** + * Allows to modify cenrep key value of predictive search features. + * However, this function can't be used if feature is set permanently off + * (see predictiveSearchStatus()) + * @param enabled, specify whether cenrep key will be set to 1 or 2 + * @ return 0 if cenrep key value modified succesfully, + * -1 in case of some error + */ + int setPredictiveSearch(bool enabled); + public: static QString directionIconName(const LogsEvent& event); @@ -70,6 +95,9 @@ LogsDbConnector* mDbConnector; +public: // test data + int mPredectiveSearchStatus; + private: friend class UT_LogsModel; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscall.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscall.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscall.cpp Fri May 14 15:52:41 2010 +0300 @@ -31,7 +31,7 @@ return logsCallToNumberCalled; } -QString LogsCall::lastCalledFuntion() +QString LogsCall::lastCalledFunction() { return logsLastCalledFunction; } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscall.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscall.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscall.h Fri May 14 15:52:41 2010 +0300 @@ -74,7 +74,7 @@ int mTestLastCallType; static bool isCallToNumberCalled(); - static QString lastCalledFuntion(); + static QString lastCalledFunction(); static void resetTestData(); }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscontact.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscontact.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscontact.cpp Fri May 14 15:52:41 2010 +0300 @@ -20,6 +20,7 @@ #include "logscontact.h" //SYSTEM +static LogsContact::RequestType logstTestRequestType = LogsContact::TypeLogsContactSave; // ----------------------------------------------------------------------------- // @@ -51,7 +52,7 @@ // LogsContact::RequestType LogsContact::allowedRequestType() { - return LogsContact::TypeLogsContactSave; + return logstTestRequestType; } // ---------------------------------------------------------------------------- @@ -80,3 +81,12 @@ { return false; } + +void LogsContact::setNextRequestType(LogsContact::RequestType type) +{ + logstTestRequestType = type; +} +void LogsContact::reset() +{ + logstTestRequestType = LogsContact::TypeLogsContactSave; +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscontact.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscontact.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logscontact.h Fri May 14 15:52:41 2010 +0300 @@ -80,7 +80,9 @@ public: //stub data - //LogsEvent& mEvent; + static void setNextRequestType(LogsContact::RequestType type); + static void reset(); + QString mNumber; }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.h Fri May 14 15:52:41 2010 +0300 @@ -62,6 +62,7 @@ static QString mLastCallName; //last called exported function name friend class UT_LogsDetailsView; + friend class UT_LogsBaseView; }; #endif //LOGSDETAILSMODEL_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -81,10 +81,6 @@ return QVariant(); } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void LogsMatchesModel::logsMatches( const QString& pattern ) { Q_UNUSED(pattern); @@ -95,15 +91,6 @@ // // ----------------------------------------------------------------------------- // -LogsContact* LogsMatchesModel::createContact(const QString& number) -{ - return new LogsContact(number); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// QString LogsMatchesModel::lastCall() { return mLastCall; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.h Fri May 14 15:52:41 2010 +0300 @@ -35,6 +35,7 @@ class LogsMatchesModel : public LogsAbstractModel { //Q_OBJECT + friend class UT_LogsMatchesView; public: @@ -44,11 +45,7 @@ ~LogsMatchesModel(); void logsMatches( const QString& pattern ); - - /** - * Factory method for creating a new contact object. Transfers ownership. - */ - LogsContact* createContact(const QString& number); + public: // From QAbstractItemModel diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmessage.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmessage.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmessage.cpp Fri May 14 15:52:41 2010 +0300 @@ -21,6 +21,7 @@ //SYSTEM bool logsTestMessageSent = false; +bool defaultMessageSent = false; // ----------------------------------------------------------------------------- // @@ -54,6 +55,7 @@ // bool LogsMessage::sendMessage() { + defaultMessageSent = true; return false; } @@ -79,7 +81,13 @@ void LogsMessage::resetTestData() { logsTestMessageSent = false; + defaultMessageSent = false; } - + +bool LogsMessage::isDefaultMessageSent() +{ + return defaultMessageSent; +} + // End of file diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmessage.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmessage.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmessage.h Fri May 14 15:52:41 2010 +0300 @@ -52,6 +52,7 @@ public: // test helpers static bool isMessageSent(); static void resetTestData(); + static bool isDefaultMessageSent(); private: friend class UT_LogsMessage; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -103,6 +103,7 @@ int LogsModel::refreshData() { mRefreshCalled = true; + return 0; } // ----------------------------------------------------------------------------- @@ -112,6 +113,7 @@ int LogsModel::compressData() { mCompressCalled = true; + return 0; } // ----------------------------------------------------------------------------- @@ -195,3 +197,13 @@ { mMatchesModelCreated = isCreated; } + + +// ----------------------------------------------------------------------------- +// LogsModel::updateConfiguration +// ----------------------------------------------------------------------------- +// +int LogsModel::updateConfiguration(LogsConfigurationParams& /*params*/) +{ + return 0; +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.h --- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.h Fri May 14 15:52:41 2010 +0300 @@ -23,6 +23,7 @@ #include class LogsMatchesModel; +class LogsConfigurationParams; /** * @@ -31,6 +32,8 @@ { public: + friend class UT_LogsRecentCallsView; + enum ClearType { TypeLogsClearAll = 0, TypeLogsClearReceived, @@ -54,6 +57,7 @@ bool markEventsSeen(LogsModel::ClearType cleartype); int refreshData(); int compressData(); + int updateConfiguration(LogsConfigurationParams& params); public: // From QAbstractItemModel diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp Fri May 14 15:52:41 2010 +0300 @@ -25,6 +25,7 @@ #include "logscontact.h" #include "hbstubs_helper.h" #include "logsrecentcallsview.h" +#include "logsdetailsmodel.h" //SYSTEM #include @@ -54,6 +55,7 @@ { mRepository = new LogsComponentRepository( *mViewManager ); mBaseView = new LogsBaseView( LogsRecentViewId, *mRepository, *mViewManager ); + HbStubHelper::reset(); } void UT_LogsBaseView::cleanup() @@ -155,23 +157,38 @@ { mBaseView->mDialpad->editor().setText( QString("hello") ); mBaseView->dialpadClosed(); - QVERIFY( mBaseView->mDialpad->editor().text().isEmpty() ); + QVERIFY( !mBaseView->mDialpad->editor().text().isEmpty() ); } +void UT_LogsBaseView::testDialpadOpened() +{ + // Base view impl never goes to matches view as logsModel is null + // + + mBaseView->mRepository.model()->setPredictiveSearch(false); + mBaseView->mDialpad->editor().setText( QString("hello") ); + mBaseView->dialpadOpened(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); + + mBaseView->mRepository.model()->setPredictiveSearch(true); + mBaseView->dialpadOpened(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); + + mViewManager->reset(); + mBaseView->mDialpad->editor().setText( "" ); + mBaseView->dialpadOpened(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); +} void UT_LogsBaseView::testDialpadEditorTextChanged() -{ - //text editor is one character long - mBaseView->mDialpad->editor().setText( QString("h") ); - mBaseView->dialpadEditorTextChanged(); - QVERIFY( mViewManager->mViewId == LogsMatchesViewId ); - +{ + // View does not change if contact search is off mViewManager->reset(); - mBaseView->mDialpad->mIsCallButtonEnabled = true; - mBaseView->mDialpad->editor().setText( QString("") ); + mBaseView->mDialpad->editor().setText( QString("2") ); + mBaseView->mRepository.model()->setPredictiveSearch(false); mBaseView->dialpadEditorTextChanged(); QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); - QVERIFY( !mBaseView->mDialpad->mIsCallButtonEnabled ); + QVERIFY( mBaseView->mDialpad->mIsCallButtonEnabled ); } void UT_LogsBaseView::testChangeFilter() @@ -203,7 +220,7 @@ //call can't be created QVERIFY( !mBaseView->mCall ); mBaseView->initiateCallback(QModelIndex()); - QVERIFY( LogsCall::lastCalledFuntion().isEmpty() ); + QVERIFY( LogsCall::lastCalledFunction().isEmpty() ); //call can be created should be tested in derived class } @@ -214,12 +231,12 @@ //no call QVERIFY( !mBaseView->mCall ); mBaseView->initiateCall(LogsCall::TypeLogsVoiceCall); - QVERIFY( LogsCall::lastCalledFuntion().isEmpty() ); + QVERIFY( LogsCall::lastCalledFunction().isEmpty() ); //call exists mBaseView->mCall = new LogsCall(); mBaseView->initiateCall(LogsCall::TypeLogsVideoCall); - QVERIFY( LogsCall::lastCalledFuntion() == QString("call") ); + QVERIFY( LogsCall::lastCalledFunction() == QString("call") ); QVERIFY( mBaseView->mCall->mTestLastCallType == LogsCall::TypeLogsVideoCall ); } @@ -432,3 +449,86 @@ { QVERIFY( mBaseView->isExitAllowed() ); } + +void UT_LogsBaseView::testAddToContacts() +{ + // Has dialpad input, contact is saved with that num + mBaseView->mDialpad->mIsOpen = true; + mBaseView->mDialpad->mLineEdit->setText("3344"); + mBaseView->addToContacts(); + QVERIFY( mBaseView->mContact->mNumber == "3344" ); + + // No dialpad input, contact saved using list item if such exists + mBaseView->mDialpad->mIsOpen = false; + mBaseView->mContact->mNumber = "1234"; + mBaseView->addToContacts(); + QVERIFY( mBaseView->mContact->mNumber == "1234" ); + + // No contact at all + delete mBaseView->mContact; + mBaseView->mContact = 0; + mBaseView->addToContacts(); + QVERIFY( !mBaseView->mContact ); +} + +void UT_LogsBaseView::testSendMessageToCurrentNum() +{ + // No input + LogsMessage::resetTestData(); + mBaseView->mDialpad->mIsOpen = false; + mBaseView->mDialpad->mLineEdit->setText(""); + mBaseView->sendMessageToCurrentNum(); + QVERIFY( !LogsMessage::isMessageSent() ); + + // Input + mBaseView->mDialpad->mIsOpen = true; + mBaseView->mDialpad->mLineEdit->setText("4546626262"); + mBaseView->sendMessageToCurrentNum(); + QVERIFY( LogsMessage::isMessageSent() ); +} + +void UT_LogsBaseView::testDeleteEvent() +{ + // No model, nothing happens + QVERIFY( !HbStubHelper::dialogShown() ); + QVERIFY( !mBaseView->mDetailsModel ); + mBaseView->deleteEvent(); + QVERIFY( !HbStubHelper::dialogShown() ); + + // Model exists, confirmation dialog is shown + mViewManager->reset(); + LogsDetailsModel* model = new LogsDetailsModel(); + mBaseView->mDetailsModel = model; + mBaseView->deleteEvent(); + QVERIFY( HbStubHelper::dialogShown() ); +} + +void UT_LogsBaseView::testDeleteEventOkAnswer() +{ + // No model, nothing happens + QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() ); + QVERIFY( !mBaseView->mDetailsModel ); + mBaseView->deleteEventOkAnswer(); + QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() ); + + // Model exists, call to delete event made and view is closed + mViewManager->reset(); + LogsDetailsModel* model = new LogsDetailsModel(); + mBaseView->mDetailsModel = model; + mBaseView->deleteEventOkAnswer(); + QVERIFY( LogsDetailsModel::mLastCallName == QLatin1String("clearEvent") ); + QVERIFY( !mViewManager->mPreviousActivated ); +} + +void UT_LogsBaseView::testAskConfirmation() +{ + // No receiver and slots specified + mBaseView->askConfirmation(QLatin1String("heading"), QLatin1String("text"), 0); + QVERIFY( HbStubHelper::dialogShown() ); + + // Receiver and slots specified + HbStubHelper::reset(); + mBaseView->askConfirmation(QLatin1String("heading"), QLatin1String("text"), this, + SLOT(""), SLOT("")); + QVERIFY( HbStubHelper::dialogShown() ); +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/src/ut_logsdetailsview.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsdetailsview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsdetailsview.cpp Fri May 14 15:52:41 2010 +0300 @@ -23,6 +23,7 @@ #include "logscall.h" #include "logsmessage.h" #include "logsdefs.h" +#include "logscontact.h" //SYSTEM #include @@ -198,40 +199,46 @@ QVERIFY( voiceCallAction->isVisible() ); QVERIFY( videoCallAction->isVisible() ); QVERIFY( messageAction->isVisible() ); + + // Input in dialpad, add to contacts visible and voice call invisible + LogsContact::setNextRequestType(LogsContact::TypeLogsContactOpen); + mDetailsView->mDialpad->mIsOpen = true; + mDetailsView->mDialpad->editor().setText( QString("3443535") ); + mDetailsView->updateMenu(); + HbAction* addToContactsAction = qobject_cast( + mRepository->findObject( logsCommonAddToContactsMenuActionId ) ); + HbAction* openContactAction = qobject_cast( + mRepository->findObject( logsDetailsOpenContactMenuActionId ) ); + QVERIFY( addToContactsAction->isVisible() ); + QVERIFY( !openContactAction->isVisible() ); + QVERIFY( !voiceCallAction->isVisible() ); + + // No input in dialpad, open contact visible and voice call visible + mDetailsView->mDialpad->mIsOpen = false; + mDetailsView->updateMenu(); + QVERIFY( !addToContactsAction->isVisible() ); + QVERIFY( openContactAction->isVisible() ); + QVERIFY( voiceCallAction->isVisible() ); + LogsContact::reset(); } -void UT_LogsDetailsView::testDeleteEvent() +void UT_LogsDetailsView::testDeleteEventOkAnswer() { // No model, nothing happens QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() ); QVERIFY( !mDetailsView->mDetailsModel ); - mDetailsView->deleteEvent(); + mDetailsView->deleteEventOkAnswer(); QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() ); // Model exists, call to delete event made and view is closed mViewManager->reset(); LogsDetailsModel* model = new LogsDetailsModel(); mDetailsView->mDetailsModel = model; - //simulate "Cancel" button press of messagebox - HbMessageBox().setText(tr("Cancel")); - mDetailsView->deleteEvent(); - QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() ); - - //simulate "Ok" button press of messagebox - HbMessageBox().setText(tr("Ok")); - mDetailsView->deleteEvent(); - QVERIFY( LogsDetailsModel::mLastCallName == QString("clearEvent") ); + mDetailsView->deleteEventOkAnswer(); + QVERIFY( LogsDetailsModel::mLastCallName == QLatin1String("clearEvent") ); QVERIFY( mViewManager->mPreviousActivated ); } -void UT_LogsDetailsView::testCopyNumberToClipboard() -{ - LogsDetailsModel* model = new LogsDetailsModel(); - mDetailsView->mDetailsModel = model; - mDetailsView->copyNumberToClipboard(); - QVERIFY( LogsDetailsModel::mLastCallName == QString("getNumberToClipboard") ); -} - void UT_LogsDetailsView::testChangeFilter() { mViewManager->reset(); @@ -287,3 +294,48 @@ QVERIFY( mDetailsView->mListView->layoutName() == logsListDefaultLayout ); QVERIFY( mDetailsView->mLayoutSectionName == logsViewLandscapeDialpadSection ); } + +void UT_LogsDetailsView::testDialpadEditorTextChanged() +{ + //text editor is one character long + LogsDetailsModel* model = new LogsDetailsModel(); + mDetailsView->mDetailsModel = model; + mDetailsView->mDetailsModel->setPredictiveSearch(true); + mDetailsView->mDialpad->editor().setText( QString("h") ); + mDetailsView->dialpadEditorTextChanged(); + QVERIFY( mViewManager->mViewId == LogsMatchesViewId ); + + mViewManager->reset(); + mDetailsView->mDialpad->mIsCallButtonEnabled = true; + mDetailsView->mDialpad->editor().setText( QString("") ); + mDetailsView->dialpadEditorTextChanged(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); + QVERIFY( !mDetailsView->mDialpad->mIsCallButtonEnabled ); + + // View does not change if contact search is off + mViewManager->reset(); + mDetailsView->mDialpad->editor().setText( QString("2") ); + mDetailsView->mDetailsModel->setPredictiveSearch(false); + mDetailsView->dialpadEditorTextChanged(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); + QVERIFY( mDetailsView->mDialpad->mIsCallButtonEnabled ); +} + +void UT_LogsDetailsView::testSendMessage() +{ + // No input, message sent using orig message + LogsMessage::resetTestData(); + LogsMessage* message = new LogsMessage; + mDetailsView->mMessage = message; + mDetailsView->sendMessage(); + QVERIFY( LogsMessage::isDefaultMessageSent() ); + QVERIFY( !LogsMessage::isMessageSent() ); + + // Message sent using input field num + LogsMessage::resetTestData(); + mDetailsView->mDialpad->mIsOpen = true; + mDetailsView->mDialpad->editor().setText( QString("3443535") ); + mDetailsView->sendMessage(); + QVERIFY( !LogsMessage::isDefaultMessageSent() ); + QVERIFY( LogsMessage::isMessageSent() ); +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/src/ut_logsmatchesview.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsmatchesview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsmatchesview.cpp Fri May 14 15:52:41 2010 +0300 @@ -145,7 +145,8 @@ mMatchesView->callKeyPressed(); QVERIFY( !LogsCall::isCallToNumberCalled() ); - // No any item where to call, but dial string exists + // No any item where to call, but dial string exists and dialpad is open + mMatchesView->mDialpad->mIsOpen = true; QString dial("12345"); mMatchesView->mDialpad->editor().setText( dial ); mMatchesView->callKeyPressed(); @@ -157,14 +158,28 @@ mMatchesView->mModel->mTextData.append("testdata2"); mMatchesView->callKeyPressed(); QVERIFY( LogsCall::isCallToNumberCalled() ); + + // If dialpad is closed and matches exist, call is made to first item in list + mMatchesView->mDialpad->mIsOpen = false; + LogsCall::resetTestData(); + mMatchesView->callKeyPressed(); + QVERIFY( !LogsCall::isCallToNumberCalled() ); + QVERIFY( LogsCall::lastCalledFunction() == "initiateCallback" ); } void UT_LogsMatchesView::testVideoCallToCurrentNum() { + // Dialpad not open, and no matches, not calling + mMatchesView->mDialpad->mIsOpen = false; LogsCall::resetTestData(); QString dial("12345"); mMatchesView->mDialpad->editor().setText( dial ); mMatchesView->videoCallToCurrentNum(); + QVERIFY( !LogsCall::isCallToNumberCalled() ); + + // Dialpad open, calling video call to num + mMatchesView->mDialpad->mIsOpen = true; + mMatchesView->videoCallToCurrentNum(); QVERIFY( LogsCall::isCallToNumberCalled() ); } @@ -175,9 +190,16 @@ mMatchesView->sendMessageToCurrentNum(); QVERIFY( !LogsMessage::isMessageSent() ); + // Not sent as dialpad is closed + mMatchesView->mDialpad->mIsOpen = false; QString dial("12345"); mMatchesView->mDialpad->editor().setText( dial ); mMatchesView->sendMessageToCurrentNum(); + QVERIFY( !LogsMessage::isMessageSent() ); + + // Sent as dialpad is opened + mMatchesView->mDialpad->mIsOpen = true; + mMatchesView->sendMessageToCurrentNum(); QVERIFY( LogsMessage::isMessageSent() ); } @@ -389,3 +411,25 @@ delete mMatchesView->mAddToContactsButton; mMatchesView->mAddToContactsButton = 0; } + +void UT_LogsMatchesView::testContactSearch() +{ + LogsMatchesView* view = mRepository->matchesView(); + LogsDbConnector* dbConnector = 0; + LogsMatchesModel* model1 = new LogsMatchesModel(*dbConnector); + QVariant arg = qVariantFromValue( model1 ); + view->activated( true, arg ); + int status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 1 ); + + //set contact search off, view changes and dialpad content is not cleared + mMatchesView->mDialpad->editor().setText( "1234" ); + mViewManager->reset(); + view->toggleContactSearch(); + status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 2 ); + QVERIFY( mViewManager->mViewId == LogsRecentViewId ); + QVERIFY( mMatchesView->mDialpad->editor().text() == "1234" ); + +} + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/src/ut_logsrecentcallsview.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsrecentcallsview.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsrecentcallsview.cpp Fri May 14 15:52:41 2010 +0300 @@ -149,7 +149,7 @@ view->activated(false, QVariant(LogsServices::ViewAll)); QVERIFY( view->mFilter->filterType() == LogsFilter::All ); VERIFY_CHECKED_ACTION( view, logsShowFilterRecentMenuActionId ) - QVERIFY( view->mDialpad->editor().text().isEmpty() ); + QVERIFY( !view->mDialpad->editor().text().isEmpty() ); QVERIFY( view->mListView->layoutName() == logsListLandscapeLayout ); QVERIFY( view->mLayoutSectionName == logsViewDefaultSection ); QVERIFY( !view->mResetted ); @@ -272,31 +272,59 @@ // Call cannot be constructed in model QModelIndex filterIndex; mRecentCallsView->initiateCallback(filterIndex); - QVERIFY( LogsCall::lastCalledFuntion().isEmpty() ); + QVERIFY( LogsCall::lastCalledFunction().isEmpty() ); // Call can be constructed in model filterIndex = makeValidFilterIndex(*mRecentCallsView); mRecentCallsView->initiateCallback(filterIndex); - QVERIFY( LogsCall::lastCalledFuntion() == QString("initiateCallback") ); + QVERIFY( LogsCall::lastCalledFunction() == QString("initiateCallback") ); } void UT_LogsRecentCallsView::testCallKeyPressed() -{ LogsRecentCallsView* view = mRepository->recentCallsView(); +{ + LogsRecentCallsView* view = mRepository->recentCallsView(); // Not ready for calling + LogsCall::resetTestData(); view->callKeyPressed(); + QVERIFY( LogsCall::lastCalledFunction() != "initiateCallback" ); // No any item where to call + LogsCall::resetTestData(); view->activated( false, QVariant(LogsServices::ViewAll) ); view->callKeyPressed(); + QVERIFY( LogsCall::lastCalledFunction() != "initiateCallback" ); - // Calling possible + // Calling possible to list item + LogsCall::resetTestData(); mRepository->model()->mTextData.append("testdata"); mRepository->model()->mTextData.append("testdata2"); view->mListView->setCurrentIndex( mRepository->model()->index( 1, 0 ), QItemSelectionModel::Select ); view->callKeyPressed(); QVERIFY( view->mListView->currentIndex().row() == 0 ); + QVERIFY( LogsCall::lastCalledFunction() == "initiateCallback" ); + + // Dialpad open but no input, call to first item in list + LogsCall::resetTestData(); + view->mDialpad->mIsOpen = true; + view->callKeyPressed(); + QVERIFY( LogsCall::lastCalledFunction() == "initiateCallback" ); + + // Dialpad open and text in input, call to number in input field + LogsCall::resetTestData(); + QString dial("12345"); + view->mDialpad->editor().setText( dial ); + view->callKeyPressed(); + QVERIFY( LogsCall::isCallToNumberCalled() ); + QVERIFY( LogsCall::lastCalledFunction() != "initiateCallback" ); + + // Dialpad closed but contains text, call to first item in the list + LogsCall::resetTestData(); + view->mDialpad->mIsOpen = false; + view->callKeyPressed(); + QVERIFY( !LogsCall::isCallToNumberCalled() ); + QVERIFY( LogsCall::lastCalledFunction() == "initiateCallback" ); } void UT_LogsRecentCallsView::testShowCallDetails() @@ -664,16 +692,28 @@ QObject* obj = mRepository->findObject( logsRecentViewClearListMenuActionId ); HbAction* action = qobject_cast( obj ); QVERIFY(action && action->isVisible()); + HbAction* addToContactsAction = qobject_cast( + mRepository->findObject( logsCommonAddToContactsMenuActionId ) ); + HbAction* contactsSearchAction = qobject_cast( + mRepository->findObject( logsRecentViewContactSearchMenuActionId ) ); + QVERIFY(addToContactsAction && addToContactsAction->isVisible()); delete view->mFilter; view->mFilter = 0; view->mFilter = new LogsFilter(); view->updateMenu(); QVERIFY(action && !action->isVisible()); + QVERIFY(addToContactsAction && !addToContactsAction->isVisible()); + QVERIFY(contactsSearchAction && !contactsSearchAction->isVisible()); - //menu is in repository, non-empty model => "Clear list" is visible + //menu is in repository, non-empty model and dialpad open with content => + // "Clear list", "Add to contacts", "Contact search on/off" visible + view->mDialpad->editor().setText("233141"); + view->mDialpad->mIsOpen = true; makeValidFilterIndex(*view); view->updateMenu(); QVERIFY(action && action->isVisible()); + QVERIFY(addToContactsAction && addToContactsAction->isVisible()); + QVERIFY(contactsSearchAction && contactsSearchAction->isVisible()); } @@ -696,16 +736,29 @@ QVERIFY( !mRecentCallsView->mListView ); mRecentCallsView->updateWidgetsSizeAndLayout(); + + //listView exists, layout and size updated, also menu is updated HbListView list; - //listView exists, layout and size updated - mRecentCallsView->mViewManager.mainWindow().setOrientation( Qt::Vertical ); - mRecentCallsView->mDialpad->closeDialpad(); - mRecentCallsView->mListView = &list; - mRecentCallsView->mListView->setLayoutName("dummy"); - mRecentCallsView->mLayoutSectionName = "dummy"; - mRecentCallsView->updateWidgetsSizeAndLayout(); - QVERIFY( mRecentCallsView->mListView->layoutName() == logsListDefaultLayout ); - QVERIFY( mRecentCallsView->mLayoutSectionName == logsViewDefaultSection ); + LogsRecentCallsView* view = mRepository->recentCallsView(); + view->mViewManager.mainWindow().setOrientation( Qt::Vertical ); + view->mDialpad->closeDialpad(); + view->mListView = &list; + view->mListView->setLayoutName("dummy"); + view->mLayoutSectionName = "dummy"; + view->updateWidgetsSizeAndLayout(); + QVERIFY( view->mListView->layoutName() == logsListDefaultLayout ); + QVERIFY( view->mLayoutSectionName == logsViewDefaultSection ); + QVERIFY( view->mListView->layoutName() == logsListDefaultLayout ); + QObject* obj = mRepository->findObject( logsCommonMessageMenuActionId ); + HbAction* action = qobject_cast( obj ); + QVERIFY(action && !action->isVisible()); + + // When dialpad is opened and has input, menu content is different + view->mDialpad->openDialpad(); + QString hello("hello"); + view->mDialpad->editor().setText( hello ); + view->updateWidgetsSizeAndLayout(); + QVERIFY(action && action->isVisible()); } void UT_LogsRecentCallsView::testDialpadClosed() @@ -719,31 +772,36 @@ QString hello("hello"); mRecentCallsView->mDialpad->editor().setText( hello ); mRecentCallsView->dialpadClosed(); - QVERIFY( mRecentCallsView->mDialpad->editor().text().isEmpty() ); + QVERIFY( !mRecentCallsView->mDialpad->editor().text().isEmpty() ); QVERIFY( mRecentCallsView->mLayoutSectionName == logsViewDefaultSection ); } void UT_LogsRecentCallsView::testClearList() { + // No filter, nothing happens + HbStubHelper::reset(); + QVERIFY( !HbStubHelper::dialogShown() ); + mRecentCallsView->clearList(); + QVERIFY( !HbStubHelper::dialogShown() ); - //check that without filter list is not cleared - mRecentCallsView->mModel->mIsCleared = false; - HbMessageBox().setText(tr("Ok")); - mRecentCallsView->clearList(); - QVERIFY( !mRecentCallsView->mModel->mIsCleared ); - + // Filter exists, confirmation dialog is shown mRecentCallsView->mFilter = new LogsFilter( LogsFilter::Missed ); - - //simulate "Ok" button press of messagebox - HbMessageBox().setText(tr("Ok")); mRecentCallsView->clearList(); - QVERIFY( mRecentCallsView->mModel->mIsCleared ); + QVERIFY( HbStubHelper::dialogShown() ); + +} - //simulate "Cancel" button press of messagebox +void UT_LogsRecentCallsView::testClearListOkAnswer() +{ + // No filter ,list is not cleared mRecentCallsView->mModel->mIsCleared = false; - HbMessageBox().setText(tr("Cancel")); - mRecentCallsView->clearList(); + mRecentCallsView->clearListOkAnswer(); QVERIFY( !mRecentCallsView->mModel->mIsCleared ); + + // Filter exists, list is cleared + mRecentCallsView->mFilter = new LogsFilter( LogsFilter::Missed ); + mRecentCallsView->clearListOkAnswer(); + QVERIFY( mRecentCallsView->mModel->mIsCleared ); } void UT_LogsRecentCallsView::testIsExitAllowed() @@ -771,3 +829,78 @@ QVERIFY( spy.count() == 1 ); QVERIFY( mRecentCallsView->isExitAllowed() ); } + +void UT_LogsRecentCallsView::testContactSearch() +{ + int status = mRecentCallsView->mModel->predictiveSearchStatus(); + QVERIFY( status == 1 ); + LogsRecentCallsView* view = mRepository->recentCallsView(); + view->mDialpad->mIsOpen = true; + view->mDialpad->editor().setText( "12344" ); + view->updateMenu(); + status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 1 ); + QObject* obj = mRepository->findObject( logsRecentViewContactSearchMenuActionId ); + HbAction* action = qobject_cast( obj ); + QVERIFY(action && action->isVisible()); + QVERIFY(action->text()== hbTrId("txt_dialer_ui_opt_contact_search_off")); + + //set contact search off + view->toggleContactSearch(); + status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 2 ); + obj = mRepository->findObject( logsRecentViewContactSearchMenuActionId ); + action = qobject_cast( obj ); + QVERIFY(action && action->isVisible()); + QVERIFY(action->text()== hbTrId("txt_dialer_ui_opt_contact_search_on")); + + //set contact search on + view->toggleContactSearch(); + status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 1 ); + + //set contact search permanently off + view->mModel->mPredectiveSearchStatus = 0; + view->toggleContactSearch(); + status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 0 ); + view->updateMenu(); + obj = mRepository->findObject( logsRecentViewContactSearchMenuActionId ); + action = qobject_cast( obj ); + QVERIFY(action && !action->isVisible()); + + view->mModel->mPredectiveSearchStatus = 2; + //set contact search on + view->toggleContactSearch(); + status = view->mModel->predictiveSearchStatus(); + QVERIFY( status == 1 ); + +} + +void UT_LogsRecentCallsView::testDialpadOpened() +{ + mRepository->recentCallsView(); + mRecentCallsView->activated( false, QVariant(LogsServices::ViewAll) ); + + // If contact search is disabled, opening dialpad containing input + // does not cause going to matches view + mViewManager->reset(); + mRecentCallsView->mDialpad->mIsOpen = true; + mRecentCallsView->mModel->setPredictiveSearch(false); + mRecentCallsView->mDialpad->editor().setText( QString("hello") ); + mRecentCallsView->dialpadOpened(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); + + // If contact search is enabled, opening dialpad containing input + // causes going to matches view + mRecentCallsView->mModel->setPredictiveSearch(true); + mRecentCallsView->dialpadOpened(); + QVERIFY( mViewManager->mViewId == LogsMatchesViewId ); + + // Nothing in input field, doe not cause transition to matches view + // causes going to matches view + mViewManager->reset(); + mRecentCallsView->mDialpad->editor().setText( "" ); + mRecentCallsView->dialpadOpened(); + QVERIFY( mViewManager->mViewId == LogsUnknownViewId ); +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/src/ut_logsviewmanager.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsviewmanager.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsviewmanager.cpp Fri May 14 15:52:41 2010 +0300 @@ -111,6 +111,12 @@ mLogsViewManager->changeMatchesView(QString("+123456")); QVERIFY( mLogsViewManager->mMainWindow.currentView() == mLogsViewManager->mComponentsRepository->matchesView() ); + + // Contact search disabled, go to recent calls view instead + mLogsViewManager->mComponentsRepository->mModel->mPredectiveSearchStatus = 0; + mLogsViewManager->changeMatchesView(QString("+123456777")); + QVERIFY( mLogsViewManager->mMainWindow.currentView() == + mLogsViewManager->mComponentsRepository->recentCallsView() ); } void UT_LogsViewManager::testExitApplication() diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs.cpp --- a/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs.cpp Fri May 14 15:52:41 2010 +0300 @@ -28,7 +28,8 @@ int actionCount = 0; Qt::Orientation windowOrientation = Qt::Vertical; -bool logsMenuShown = false; +bool testMenuShown = false; +bool testDialogShown = false; HbMainWindow* testWindow = 0; HbView* testView = 0; int testViewCount = 0; @@ -43,10 +44,11 @@ void HbStubHelper::reset() { actionCount = 0; - logsMenuShown = false; + testMenuShown = false; testSingleShotTimer = false; testQuitCalled = false; testIsWidgetRaised = false; + testDialogShown = false; } @@ -58,9 +60,15 @@ bool HbStubHelper::menuShown() { - return logsMenuShown; + return testMenuShown; } +bool HbStubHelper::dialogShown() +{ + return testDialogShown; +} + + bool HbStubHelper::singleShotTimerActive() { return testSingleShotTimer; @@ -139,21 +147,25 @@ // // ----------------------------------------------------------------------------- // -HbAction *HbMenu::exec(const QPointF &pos, HbAction *action ) +void HbMenu::open(QObject *receiver, const char *member) { - Q_UNUSED(action) - Q_UNUSED(pos) - logsMenuShown = true; - return 0; + Q_UNUSED(receiver) + Q_UNUSED(member) + testMenuShown = true; } -HbAction *HbMenu::exec(HbAction *action) +void HbDialog::open(QObject *receiver, const char *member) { - Q_UNUSED(action) - logsMenuShown = true; - return 0; + Q_UNUSED(receiver) + Q_UNUSED(member) + testDialogShown = true; } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void QGraphicsWidget::addAction(QAction *action) { Q_UNUSED(action) @@ -193,26 +205,6 @@ return QRectF(0, 0, 100,100); } -HbAction* HbMainWindow::softKeyAction(Hb::SoftKeyId key) const -{ - Q_UNUSED(key) - return testSoftkeyAction; -} - -void HbMainWindow::addSoftKeyAction(Hb::SoftKeyId key, HbAction *action) -{ - Q_UNUSED(key) - Q_UNUSED(action) - testSoftkeyAction = action; -} - -void HbMainWindow::removeSoftKeyAction(Hb::SoftKeyId key, HbAction *action) -{ - Q_UNUSED(key) - Q_UNUSED(action) - testSoftkeyAction = 0; -} - HbView *HbMainWindow::addView(QGraphicsWidget *widget) { Q_UNUSED(widget) diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs_helper.h --- a/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs_helper.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs_helper.h Fri May 14 15:52:41 2010 +0300 @@ -27,6 +27,7 @@ static void reset(); static int widgetActionsCount(); static bool menuShown(); + static bool dialogShown(); static bool singleShotTimerActive(); static bool quitCalled(); static void setGestureState(int state); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsapp/tsrc/ut_logsapp/ut_logsapp.pro --- a/logsui/logsapp/tsrc/ut_logsapp/ut_logsapp.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsapp/tsrc/ut_logsapp/ut_logsapp.pro Fri May 14 15:52:41 2010 +0300 @@ -58,6 +58,8 @@ HEADERS += ../../inc/logseffecthandler.h HEADERS += ../../inc/logspageindicator.h HEADERS += ../../inc/logspageindicatoritem.h +#HEADERS += ../../../logsengine/inc/logscommondata.h +HEADERS += ../../../logsengine/inc/logsconfigurationparams.h HEADERS += inc/ut_logsservicehandler.h HEADERS += logsengine_stub/logscontact.h HEADERS += logsengine_stub/logsforegroundwatcher.h @@ -81,6 +83,7 @@ SOURCES += logsengine_stub/logscontact.cpp SOURCES += logsengine_stub/logsmatchesmodel.cpp SOURCES += logsengine_stub/logsforegroundwatcher.cpp +SOURCES += ../../../logsengine/src/logsconfigurationparams.cpp SOURCES += src/ut_logsbaseview.cpp SOURCES += src/ut_logsrecentcallsview.cpp SOURCES += src/ut_logsdetailsview.cpp diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/inc/logscntentry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/inc/logscntentry.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LOGSCNTENTRY_H +#define LOGSCNTENTRY_H + +#include +#include +#include +#include + + +class LogsCntEntry; +typedef QObject LogsCntEntryHandle; + + +class LogsCntText +{ +public: + + inline LogsCntText() : mHighlights(0){} + inline const QString& text() const {return mText;} + inline int highlights() const {return mHighlights;} + LOGSCNTFINDER_EXPORT QString richText( QString startTag = QString(""), + QString endTag = QString("")) const; + + +private: + + QString mText; + QString mTranslatedText; + int mHighlights; + + friend class LogsCntEntry; + friend class UT_LogsCntEntry; + friend class UT_LogsCntFinder; +}; + +typedef QList LogsCntTextList; + +class LogsCntEntry +{ +public: + + enum EntryType { + EntryTypeHistory, + EntryTypeContact + }; + + LOGSCNTFINDER_EXPORT LogsCntEntry( LogsCntEntryHandle& handle, + quint32 cid ); + LogsCntEntry( quint32 cid ); + LogsCntEntry( const LogsCntEntry& entry ); + ~LogsCntEntry(); + LOGSCNTFINDER_EXPORT EntryType type() const; + LOGSCNTFINDER_EXPORT const LogsCntTextList& firstName() const; + LOGSCNTFINDER_EXPORT const LogsCntTextList& lastName() const; + LOGSCNTFINDER_EXPORT quint32 contactId() const; + LOGSCNTFINDER_EXPORT LogsCntEntryHandle* handle() const; + LOGSCNTFINDER_EXPORT void setFirstName( const QString& name ); + LOGSCNTFINDER_EXPORT void setLastName( const QString& name ); + LOGSCNTFINDER_EXPORT const LogsCntText& phoneNumber() const; + LOGSCNTFINDER_EXPORT const QString& avatarPath() const; + LOGSCNTFINDER_EXPORT void setPhoneNumber( const QString& number ); + LOGSCNTFINDER_EXPORT void setAvatarPath( const QString& avatarpath ); + LOGSCNTFINDER_EXPORT const QString& speedDial() const; + + bool isCached() const; + void setHighlights( const QString& pattern ); + void setSpeedDial( const QString& number ); + bool match( const QString& pattern ) const; + +private: + + void doSetText( const QString& text, LogsCntTextList& textlist ); + void doSetHighlights( const QString& pattern, LogsCntTextList& nameArray ); + void resetHighlights( LogsCntTextList& nameArray ); + bool doSimpleMatch( const QString& pattern ) const; + bool doComplexMatch( QStringList patternArray ) const; + + +private: + + EntryType mType; + quint32 mCid; + LogsCntTextList mFirstName; + LogsCntTextList mLastName; + bool mCached; + LogsCntEntryHandle* mHandle; + LogsCntText mPhoneNumber; + QString mAvatarPath; + QString mSpeedDial; + + friend class UT_LogsCntEntry; + friend class UT_LogsCntFinder; +}; + +typedef QList LogsCntEntryList; + + +#endif //LOGSCNTENTRY_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/inc/logscntfinder.h --- a/logsui/logscntfinder/inc/logscntfinder.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/inc/logscntfinder.h Fri May 14 15:52:41 2010 +0300 @@ -24,100 +24,14 @@ #include #include - -class LogsCntEntry; -typedef QObject LogsCntEntryHandle; - QTM_BEGIN_NAMESPACE class QContactManager; QTM_END_NAMESPACE QTM_USE_NAMESPACE -class LogsCntText -{ -public: - - inline LogsCntText() : mHighlights(0){} - inline const QString& text() const {return mText;} - inline int highlights() const {return mHighlights;} - LOGSCNTFINDER_EXPORT QString richText( QString startTag = QString(""), - QString endTag = QString("")) const; - - -private: - - QString mText; - QString mTranslatedText; - int mHighlights; - - friend class LogsCntEntry; - friend class UT_LogsCntEntry; - friend class UT_LogsCntFinder; -}; - -typedef QList LogsCntTextList; - -class LogsCntEntry -{ -public: +#include "logscntentry.h" - enum EntryType { - EntryTypeHistory, - EntryTypeContact - }; - - LOGSCNTFINDER_EXPORT LogsCntEntry( LogsCntEntryHandle& handle, - quint32 cid ); - LogsCntEntry( quint32 cid ); - LogsCntEntry( const LogsCntEntry& entry ); - ~LogsCntEntry(); - LOGSCNTFINDER_EXPORT EntryType type() const; - LOGSCNTFINDER_EXPORT const LogsCntTextList& firstName() const; - LOGSCNTFINDER_EXPORT const LogsCntTextList& lastName() const; - LOGSCNTFINDER_EXPORT quint32 contactId() const; - LOGSCNTFINDER_EXPORT LogsCntEntryHandle* handle() const; - LOGSCNTFINDER_EXPORT void setFirstName( const QString& name ); - LOGSCNTFINDER_EXPORT void setLastName( const QString& name ); - LOGSCNTFINDER_EXPORT const LogsCntText& phoneNumber() const; - LOGSCNTFINDER_EXPORT const QString& avatarPath() const; - LOGSCNTFINDER_EXPORT void setPhoneNumber( const QString& number ); - LOGSCNTFINDER_EXPORT void setAvatarPath( const QString& avatarpath ); - LOGSCNTFINDER_EXPORT const QString& speedDial() const; - - bool isCached() const; - void setHighlights( const QString& pattern ); - void setSpeedDial( const QString& number ); - bool match( const QString& pattern ) const; - -private: - - void doSetText( const QString& text, LogsCntTextList& textlist ); - QStringList tokens( const QString& source, const QChar& separ = ' ' ) const; - void doSetHighlights( const QString& pattern, LogsCntTextList& nameArray ); - void resetHighlights( LogsCntTextList& nameArray ); - bool doSimpleMatch( const QString& pattern ) const; - bool doComplexMatch( QStringList patternArray ) const; - void padWithZeros( QString& token, const QString& source, int padIndex ) const; - - -private: - - EntryType mType; - quint32 mCid; - LogsCntTextList mFirstName; - LogsCntTextList mLastName; - bool mCached; - LogsCntEntryHandle* mHandle; - LogsCntText mPhoneNumber; - QString mAvatarPath; - QString mSpeedDial; - - friend class UT_LogsCntEntry; - friend class UT_LogsCntFinder; -}; - -typedef QList LogsCntEntryList; /** * Log events and contacts finder @@ -199,12 +113,14 @@ void addResult( LogsCntEntry* entry ); void updateResult( LogsCntEntry* entry ); bool isProgressivePattern( const QString& pattern ) const; + void setCurrentPattern( const QString& pattern ); private: QString mCurrentPredictivePattern; + QString mCurrentInputPattern; LogsCntEntryList mResults; QContactManager* mContactManager; LogsCntEntryList mHistoryEvents; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/inc/logspredictive12keytranslator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/inc/logspredictive12keytranslator.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LOGSPREDICTIVE12KEYTRANSLATOR_H +#define LOGSPREDICTIVE12KEYTRANSLATOR_H + +#include +#include +#include + +#include "logspredictivetranslator.h" + + +/** + * abstract translator for ITU-T 12 keys keyboard + * + */ +class LogsPredictive12KeyTranslator : public LogsPredictiveTranslator +{ + +public: + + explicit LogsPredictive12KeyTranslator(); + ~LogsPredictive12KeyTranslator(); + +public: //from LogsPredictiveTranslator + + QStringList patternTokens( const QString& pattern ) const; + int hasPatternSeparators( const QString& pattern ) const; + const QChar translateChar( const QChar character ) const; + +private: + + void padWithZeros( QString& token, const QString& source, int padIndex ) const; + + +private: + + friend class UT_LogsPredictive12KeyTranslator; + +}; + +#endif //LOGSPREDICTIVE12KEYTRANSLATOR_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/inc/logspredictivelatin12keytranslator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/inc/logspredictivelatin12keytranslator.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LOGSPREDICTIVELATIN12KEYTRANSLATOR_H +#define LOGSPREDICTIVELATIN12KEYTRANSLATOR_H + +#include +#include +#include + +#include "logspredictive12keytranslator.h" + + +/** + * translator for Latin ITU-T 12 keys keyboard + * + */ +class LogsPredictiveLatin12KeyTranslator : public LogsPredictive12KeyTranslator +{ + +public: + + explicit LogsPredictiveLatin12KeyTranslator(); + ~LogsPredictiveLatin12KeyTranslator(); + +public: //from LogsPredictiveTranslator + + QStringList nameTokens( const QString& name ) const; + +public: //from LogsPredictive12KeyTranslator + + const QChar translateChar( const QChar character ) const; + + +private: + + QHash mSpecialKeyMap; + friend class UT_LogsPredictiveLatin12KeyTranslator; + +}; + +#endif //LOGSPREDICTIVELATIN12KEYTRANSLATOR_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/inc/logspredictivethai12keytranslator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/inc/logspredictivethai12keytranslator.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LOGSPREDICTIVETHAI12KEYTRANSLATOR_H +#define LOGSPREDICTIVETHAI12KEYTRANSLATOR_H + +#include +#include +#include + +#include "logspredictive12keytranslator.h" + +class HbKeymap; + + +/** + * translator for Thai ITU-T 12 keys keyboard + * + */ +class LogsPredictiveThai12KeyTranslator : public LogsPredictive12KeyTranslator +{ + +public: + + explicit LogsPredictiveThai12KeyTranslator(); + ~LogsPredictiveThai12KeyTranslator(); + +public: //from LogsPredictiveTranslator + + const QChar translateChar( const QChar character ) const; + QStringList nameTokens( const QString& name ) const; + +private: + + bool isIgnored( const QChar character ) const; + +private: + + friend class UT_LogsPredictiveThai12KeyTranslator; + +}; + +#endif //LOGSPREDICTIVETHAI12KEYTRANSLATOR_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/inc/logspredictivetranslator.h --- a/logsui/logscntfinder/inc/logspredictivetranslator.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/inc/logspredictivetranslator.h Fri May 14 15:52:41 2010 +0300 @@ -30,8 +30,6 @@ class LogsPredictiveTranslator : public QObject { - Q_OBJECT - public: static LogsPredictiveTranslator* instance(); @@ -40,20 +38,27 @@ ~LogsPredictiveTranslator(); const QString translate( const QString& name, int count = -1 ) const; - int startsWith( const QString& text, const QString& pattern, bool optimize = true ) const; + int startsWith( const QString& text, const QString& pattern, + bool optimize = true ) const; +public: //abstracts -private: - + virtual QStringList nameTokens( const QString& name ) const = 0; + virtual QStringList patternTokens( const QString& pattern ) const = 0; + virtual int hasPatternSeparators( const QString& pattern ) const = 0; + virtual const QChar translateChar( const QChar character ) const = 0; + +protected: + explicit LogsPredictiveTranslator(); - const QChar translate( const QChar character ) const; + +protected: + const HbKeymap* mKeyMap; private: static LogsPredictiveTranslator* mInstance; - const HbKeymap* mKeyMap; - friend class UT_LogsPredictiveTranslator; }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/logscntfinder.pro --- a/logsui/logscntfinder/logscntfinder.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/logscntfinder.pro Fri May 14 15:52:41 2010 +0300 @@ -29,11 +29,19 @@ # Input HEADERS += inc/logscntfinder.h +HEADERS += inc/logscntentry.h HEADERS += inc/logspredictivetranslator.h +HEADERS += inc/logspredictive12keytranslator.h +HEADERS += inc/logspredictivelatin12keytranslator.h +HEADERS += inc/logspredictivethai12keytranslator.h # Input SOURCES += src/logscntfinder.cpp +SOURCES += src/logscntentry.cpp SOURCES += src/logspredictivetranslator.cpp +SOURCES += src/logspredictive12keytranslator.cpp +SOURCES += src/logspredictivelatin12keytranslator.cpp +SOURCES += src/logspredictivethai12keytranslator.cpp # stub Input. comment out from real lib #SOURCES += tsrc/stubs/qtcontacts_stubs.cpp diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/src/logscntentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/src/logscntentry.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,417 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include + +#include "logscntentry.h" +#include "logspredictivetranslator.h" +#include "logslogger.h" + + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::richText() +// ----------------------------------------------------------------------------- +// +QString LogsCntText::richText( QString startTag, + QString endTag ) const +{ + QString str = text(); + if ( str.length() > 0 && highlights() > 0 ) { + str.insert( highlights() , endTag ); + str.insert( 0, startTag ); + } + + return str; + +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::LogsCntEntry() +// ----------------------------------------------------------------------------- +// +LogsCntEntry::LogsCntEntry( LogsCntEntryHandle& handle, + quint32 cid ) + : mType( EntryTypeHistory ), mCid( cid ), + mCached( true ),mHandle(&handle) +{ + LogsCntText empty; + mFirstName.append( empty ); + mLastName.append( empty ); + mAvatarPath = ""; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::LogsCntEntry() +// ----------------------------------------------------------------------------- +// +LogsCntEntry::LogsCntEntry( quint32 cid ) + : mType( EntryTypeContact ), mCid( cid ), + mCached( false ),mHandle(0) +{ + LogsCntText empty; + mFirstName.append( empty ); + mLastName.append( empty ); + mAvatarPath = ""; +} + +// ----------------------------------------------------------------------------- +// copy LogsCntEntry::LogsCntEntry() +// ----------------------------------------------------------------------------- +// +LogsCntEntry::LogsCntEntry( const LogsCntEntry& entry ) + : mType(entry.mType), + mCid(entry.mCid), + mFirstName(entry.mFirstName), + mLastName(entry.mLastName), + mCached(entry.mCached), + mHandle(entry.mHandle), + mPhoneNumber(entry.mPhoneNumber), + mAvatarPath(entry.mAvatarPath) +{ +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::~LogsCntEntry() +// ----------------------------------------------------------------------------- +// +LogsCntEntry::~LogsCntEntry() +{ +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::firstName() +// ----------------------------------------------------------------------------- +// +const LogsCntTextList& LogsCntEntry::firstName() const +{ + return mFirstName; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::lastName() +// ----------------------------------------------------------------------------- +// +const LogsCntTextList& LogsCntEntry::lastName() const +{ + return mLastName; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::avatarPath() +// ----------------------------------------------------------------------------- +// +const QString& LogsCntEntry::avatarPath() const +{ + return mAvatarPath; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::phoneNumber() +// ----------------------------------------------------------------------------- +// +const LogsCntText& LogsCntEntry::phoneNumber() const +{ + return mPhoneNumber; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::speedDial() +// ----------------------------------------------------------------------------- +// +const QString& LogsCntEntry::speedDial() const +{ + return mSpeedDial; +} + + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::contactId() +// ----------------------------------------------------------------------------- +// +quint32 LogsCntEntry::contactId() const +{ + return mCid; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::handle() +// ----------------------------------------------------------------------------- +// +LogsCntEntryHandle* LogsCntEntry::handle() const +{ + return mHandle; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::setFirstName() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::setFirstName( const QString& name ) +{ + mCached=true; + mFirstName.clear(); + doSetText( name, mFirstName ); +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::setLastName() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::setLastName( const QString& name ) +{ + mCached=true; + mLastName.clear(); + doSetText( name, mLastName ); +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::setAvatarPath() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::setAvatarPath( const QString& avatarpath ) +{ + mCached=true; + mAvatarPath.clear(); + mAvatarPath = avatarpath; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::setPhoneNumber() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::setPhoneNumber( const QString& number ) +{ + LogsPredictiveTranslator* translator = LogsPredictiveTranslator::instance(); + + mCached=true; + mPhoneNumber.mText = number; + mPhoneNumber.mTranslatedText = translator->translate( mPhoneNumber.mText ); + +} + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::doSetText() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::doSetText( const QString& text, LogsCntTextList& textlist ) +{ + LogsPredictiveTranslator* translator = LogsPredictiveTranslator::instance(); + + QListIterator iter( translator->nameTokens( text ) ); + + while( iter.hasNext() ) { + LogsCntText txt; + txt.mText = iter.next(); + txt.mTranslatedText = translator->translate( txt.mText ); + textlist.append( txt ); + } + if ( textlist.count() == 0 ) { + textlist.append( LogsCntText() ); + } +} + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::resetHighlights() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::resetHighlights( LogsCntTextList& nameArray ) +{ + QMutableListIterator names( nameArray ); + while( names.hasNext() ) { + names.next().mHighlights = 0; + } + +} + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::setHighlights() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::setHighlights( const QString& pattern ) +{ + resetHighlights( mFirstName ); + resetHighlights( mLastName ); + + mPhoneNumber.mHighlights = + mPhoneNumber.mTranslatedText.startsWith( pattern ) && + mPhoneNumber.mTranslatedText.length() >= pattern.length() ? + pattern.length(): 0; + + doSetHighlights( pattern, mFirstName ); + doSetHighlights( pattern, mLastName ); + +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::doSetHighlights() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::doSetHighlights( const QString& pattern, + LogsCntTextList& nameArray ) +{ + + LogsPredictiveTranslator* translator = LogsPredictiveTranslator::instance(); + QMutableListIterator names( nameArray ); + bool hasSeparators = translator->hasPatternSeparators( pattern ); + + //simple + while( names.hasNext() ) { + LogsCntText& nameItem = names.next(); + nameItem.mHighlights = + translator->startsWith( nameItem.mText, pattern, false ); + } + + //complex + QListIterator patternArray( translator->patternTokens( pattern ) ); + while( hasSeparators && patternArray.hasNext() ) { + QString patternItem = patternArray.next(); + names.toFront(); + while( names.hasNext() ) { + LogsCntText& nameItem = names.next(); + int matchSize = translator->startsWith( nameItem.mText, + patternItem, !hasSeparators ); + nameItem.mHighlights = matchSize > nameItem.mHighlights ? + matchSize : nameItem.mHighlights; + } + } +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::setSpeedDial() +// ----------------------------------------------------------------------------- +// +void LogsCntEntry::setSpeedDial( const QString& number ) +{ + mSpeedDial = number; +} + + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::match() +// ----------------------------------------------------------------------------- +// +bool LogsCntEntry::match( const QString& pattern ) const +{ + bool match = false; + LogsPredictiveTranslator* translator = LogsPredictiveTranslator::instance(); + + //direct match with phone number is enough + match = ( type() == EntryTypeHistory && + mPhoneNumber.mTranslatedText.startsWith( pattern ) ) || + doSimpleMatch( pattern ); + + match = !match && translator->hasPatternSeparators( pattern ) ? + doComplexMatch( translator->patternTokens( pattern) ) : match; + + return match; +} + +// ----------------------------------------------------------------------------- +// LogsCntEntry::doSimpleMatch() +// ----------------------------------------------------------------------------- +// +bool LogsCntEntry::doSimpleMatch( const QString& pattern ) const +{ + LogsCntTextList nameArray = mFirstName + mLastName; //with empties + QListIterator names( nameArray ); + int matchCount = 0; + + while( names.hasNext() && !matchCount ) { + matchCount = (int)names.next().mTranslatedText.startsWith( pattern ); + } + + return matchCount > 0; +} + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::doComplexMatch() +// ----------------------------------------------------------------------------- +// +bool LogsCntEntry::doComplexMatch( QStringList patternArray ) const +{ + const bool zero = false; + + LogsCntTextList nameArray = mFirstName + mLastName; //with empties + + int targetMatchCount = patternArray.count(); + int namesCount = nameArray.count(); + + //if pattern has more tokens than name(s), it is a missmatch + if ( namesCount < targetMatchCount ) { + return false; + } + + QListIterator names( nameArray ); + QListIterator patterns( patternArray ); + QVector matchVector(targetMatchCount, zero ); + int currentPattern = 0; + int matchCount = 0; + bool match = false; + + while( names.hasNext() && matchCount < targetMatchCount ) { + LogsCntText name = names.next(); + currentPattern = 0; + patterns.toFront(); + match = false; + while ( !name.mText.isEmpty() && + patterns.hasNext() && !match ) { + QString pattern = patterns.next(); + //unique match check + if ( !matchVector.at( currentPattern ) ) { + match = matchVector[ currentPattern ] + = name.mTranslatedText.startsWith( pattern ); + matchCount = match ? matchCount+1 : matchCount; + } + currentPattern++; + } + } + return matchCount >= targetMatchCount; + + } + + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::isCached() +// ----------------------------------------------------------------------------- +// +bool LogsCntEntry::isCached() const +{ + return mCached; +} + + +// ----------------------------------------------------------------------------- +// LogsCntEntry::type() +// ----------------------------------------------------------------------------- +// +LogsCntEntry::EntryType LogsCntEntry::type() const +{ + return mType; +} + + + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/src/logscntfinder.cpp --- a/logsui/logscntfinder/src/logscntfinder.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/src/logscntfinder.cpp Fri May 14 15:52:41 2010 +0300 @@ -15,446 +15,20 @@ * */ -#include - #include #include #include #include #include -#include +#include "logscntentry.h" #include "logscntfinder.h" #include "logspredictivetranslator.h" #include "logslogger.h" const int MaxPredSearchPatternLen = 15; -const QChar ZeroSepar('0'); - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::richText() -// ----------------------------------------------------------------------------- -// -QString LogsCntText::richText( QString startTag, - QString endTag ) const -{ - QString str = text(); - if ( str.length() > 0 && highlights() > 0 ) { - str.insert( highlights() , endTag ); - str.insert( 0, startTag ); - } - - return str; - -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::LogsCntEntry() -// ----------------------------------------------------------------------------- -// -LogsCntEntry::LogsCntEntry( LogsCntEntryHandle& handle, - quint32 cid ) - : mType( EntryTypeHistory ), mCid( cid ), - mCached( true ),mHandle(&handle) -{ - LogsCntText empty; - mFirstName.append( empty ); - mLastName.append( empty ); - mAvatarPath = ""; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::LogsCntEntry() -// ----------------------------------------------------------------------------- -// -LogsCntEntry::LogsCntEntry( quint32 cid ) - : mType( EntryTypeContact ), mCid( cid ), - mCached( false ),mHandle(0) -{ - LogsCntText empty; - mFirstName.append( empty ); - mLastName.append( empty ); - mAvatarPath = ""; -} - -// ----------------------------------------------------------------------------- -// copy LogsCntEntry::LogsCntEntry() -// ----------------------------------------------------------------------------- -// -LogsCntEntry::LogsCntEntry( const LogsCntEntry& entry ) - : mType(entry.mType), - mCid(entry.mCid), - mFirstName(entry.mFirstName), - mLastName(entry.mLastName), - mCached(entry.mCached), - mHandle(entry.mHandle), - mPhoneNumber(entry.mPhoneNumber), - mAvatarPath(entry.mAvatarPath) -{ -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::~LogsCntEntry() -// ----------------------------------------------------------------------------- -// -LogsCntEntry::~LogsCntEntry() -{ -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::firstName() -// ----------------------------------------------------------------------------- -// -const LogsCntTextList& LogsCntEntry::firstName() const -{ - return mFirstName; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::lastName() -// ----------------------------------------------------------------------------- -// -const LogsCntTextList& LogsCntEntry::lastName() const -{ - return mLastName; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::avatarPath() -// ----------------------------------------------------------------------------- -// -const QString& LogsCntEntry::avatarPath() const -{ - return mAvatarPath; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::phoneNumber() -// ----------------------------------------------------------------------------- -// -const LogsCntText& LogsCntEntry::phoneNumber() const -{ - return mPhoneNumber; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::speedDial() -// ----------------------------------------------------------------------------- -// -const QString& LogsCntEntry::speedDial() const -{ - return mSpeedDial; -} - - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::contactId() -// ----------------------------------------------------------------------------- -// -quint32 LogsCntEntry::contactId() const -{ - return mCid; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::handle() -// ----------------------------------------------------------------------------- -// -LogsCntEntryHandle* LogsCntEntry::handle() const -{ - return mHandle; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::setFirstName() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::setFirstName( const QString& name ) -{ - mCached=true; - mFirstName.clear(); - doSetText( name, mFirstName ); -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::setLastName() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::setLastName( const QString& name ) -{ - mCached=true; - mLastName.clear(); - doSetText( name, mLastName ); -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::setAvatarPath() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::setAvatarPath( const QString& avatarpath ) -{ - mCached=true; - mAvatarPath.clear(); - mAvatarPath = avatarpath; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::tokens() -// ----------------------------------------------------------------------------- -// -QStringList LogsCntEntry::tokens( const QString& source, - const QChar& separ ) const -{ - QStringList target = source.split( separ, QString::SkipEmptyParts ); - if ( target.length() > 1 && separ == ZeroSepar ) { - QString& first = target[0]; - QString& last = target[target.length()-1]; - padWithZeros( first, source, 0 ); - padWithZeros( last, source, last.length() ); - } - return target; - -} - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::padWithLeadingZeros() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::padWithZeros( QString& token, - const QString& source, int padIndex ) const -{ - const QChar* content = source.data(); - int index = !padIndex ? 0 : source.length()-1; - - while( index >= 0 && index < source.length() ) { - if ( content[ index ] == ZeroSepar ) { - token.insert( padIndex, ZeroSepar ); - index = !padIndex ? index+1 : index-1; - } else { - index = -1; - } - } -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::doSetText() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::doSetText( const QString& text, LogsCntTextList& textlist ) -{ - QListIterator iter( tokens( text ) ); - - while( iter.hasNext() ) { - LogsCntText txt; - txt.mText = iter.next(); - txt.mTranslatedText = - LogsPredictiveTranslator::instance()->translate( txt.mText ); - textlist.append( txt ); - } - if ( textlist.count() == 0 ) { - textlist.append( LogsCntText() ); - } -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::setPhoneNumber() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::setPhoneNumber( const QString& number ) -{ - mCached=true; - mPhoneNumber.mText = number; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::resetHighlights() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::resetHighlights( LogsCntTextList& nameArray ) -{ - QMutableListIterator names( nameArray ); - while( names.hasNext() ) { - names.next().mHighlights = 0; - } - -} - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::setHighlights() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::setHighlights( const QString& pattern ) -{ - resetHighlights( mFirstName ); - resetHighlights( mLastName ); - - mPhoneNumber.mHighlights = - mPhoneNumber.text().startsWith( pattern ) && - mPhoneNumber.text().length() >= pattern.length() ? - pattern.length(): 0; - - doSetHighlights( pattern, mFirstName ); - doSetHighlights( pattern, mLastName ); - -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::doSetHighlights() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::doSetHighlights( const QString& pattern, - LogsCntTextList& nameArray ) -{ - - LogsPredictiveTranslator* translator = - LogsPredictiveTranslator::instance(); - QMutableListIterator names( nameArray ); - bool hasZeros = pattern.contains( ZeroSepar ); - - //simple - while( names.hasNext() ) { - LogsCntText& nameItem = names.next(); - nameItem.mHighlights = - translator->startsWith( nameItem.mText, pattern, false ); - } - - //complex - QStringList tokenArray = tokens( pattern, ZeroSepar ); - QListIterator patternArray( tokenArray ); - while( hasZeros && patternArray.hasNext() ) { - QString patternItem = patternArray.next(); - names.toFront(); - while( names.hasNext() ) { - LogsCntText& nameItem = names.next(); - int matchSize = translator->startsWith( nameItem.mText, - patternItem, !hasZeros ); - nameItem.mHighlights = matchSize > nameItem.mHighlights ? - matchSize : nameItem.mHighlights; - } - } -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::setSpeedDial() -// ----------------------------------------------------------------------------- -// -void LogsCntEntry::setSpeedDial( const QString& number ) -{ - mSpeedDial = number; -} - - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::match() -// ----------------------------------------------------------------------------- -// -bool LogsCntEntry::match( const QString& pattern ) const -{ - bool match = false; - - //direct match with phone number is enough - match = mPhoneNumber.text().startsWith( pattern ) || - doSimpleMatch( pattern ); - - if ( !match && pattern.contains( ZeroSepar ) ) { - QStringList patternArray = tokens( pattern, ZeroSepar ); - match = doComplexMatch( patternArray ); - } - - return match; -} - -// ----------------------------------------------------------------------------- -// LogsCntEntry::doSimpleMatch() -// ----------------------------------------------------------------------------- -// -bool LogsCntEntry::doSimpleMatch( const QString& pattern ) const -{ - LogsCntTextList nameArray = mFirstName + mLastName; //with empties - QListIterator names( nameArray ); - int matchCount = 0; - - while( names.hasNext() && !matchCount ) { - matchCount = (int)names.next().mTranslatedText.startsWith( pattern ); - } - - return matchCount > 0; -} - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::doComplexMatch() -// ----------------------------------------------------------------------------- -// -bool LogsCntEntry::doComplexMatch( QStringList patternArray ) const -{ - const bool zero = false; - - LogsCntTextList nameArray = mFirstName + mLastName; //with empties - - int targetMatchCount = patternArray.count(); - int namesCount = nameArray.count(); - - //if pattern has more tokens than name(s), it is a missmatch - if ( namesCount < targetMatchCount ) { - return false; - } - - QListIterator names( nameArray ); - QListIterator patterns( patternArray ); - QVector matchVector(targetMatchCount, zero ); - int currentPattern = 0; - int matchCount = 0; - bool match = false; - - while( names.hasNext() && matchCount < targetMatchCount ) { - LogsCntText name = names.next(); - currentPattern = 0; - patterns.toFront(); - match = false; - while ( !name.mText.isEmpty() && - patterns.hasNext() && !match ) { - QString pattern = patterns.next(); - //unique match check - if ( !matchVector.at( currentPattern ) ) { - match = matchVector[ currentPattern ] - = name.mTranslatedText.startsWith( pattern ); - matchCount = match ? matchCount+1 : matchCount; - } - currentPattern++; - } - } - return matchCount >= targetMatchCount; - - } - - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::isCached() -// ----------------------------------------------------------------------------- -// -bool LogsCntEntry::isCached() const -{ - return mCached; -} - - -// ----------------------------------------------------------------------------- -// LogsCntEntry::type() -// ----------------------------------------------------------------------------- -// -LogsCntEntry::EntryType LogsCntEntry::type() const -{ - return mType; -} // ----------------------------------------------------------------------------- // LogsCntFinder::LogsCntFinder() @@ -511,7 +85,7 @@ //"" -> XXX not progressive //XX -> YY not progressive //XXX -> YY not progressive - int prevPatternLen = mCurrentPredictivePattern.length(); + int prevPatternLen = mCurrentInputPattern.length(); return prevPatternLen > 0 && pattern.length() - prevPatternLen > 0; } @@ -538,21 +112,26 @@ mCachedCounter == resultsCount(); bool nothingToDo = resultsCount() == 0 && patternIsProgressive; - + int patternSeparators = + LogsPredictiveTranslator::instance()->hasPatternSeparators( + mCurrentInputPattern ); + bool doCacheQuery = patternSeparators != mCurrentInputPattern.length() && + ( ( patternIsProgressive && resultsAreAllCached ) || nothingToDo ); + LOGS_QDEBUG_2( "logs [FINDER] patternIsProgressive = ", patternIsProgressive ) LOGS_QDEBUG_2( "logs [FINDER] resultsAreAllCached = ", resultsAreAllCached ) LOGS_QDEBUG_2( "logs [FINDER] nothingToDo = ", nothingToDo ) LOGS_QDEBUG_2( "logs [FINDER] cachedCounter = ", mCachedCounter ) + LOGS_QDEBUG_2( "logs [FINDER] patternSeparators = ", patternSeparators ) + LOGS_QDEBUG_2( "logs [FINDER] doCacheQuery = ", doCacheQuery ) - mCurrentPredictivePattern = pattern; + setCurrentPattern( pattern ); if ( mCurrentPredictivePattern.isEmpty() ) { qDeleteAll( mResults ); mResults.clear(); mCachedCounter = 0; - } else if ( ( patternIsProgressive && - resultsAreAllCached ) || - nothingToDo ) { + } else if ( doCacheQuery ) { doPredictiveCacheQuery(); } else { mCachedCounter = 0; @@ -598,7 +177,7 @@ QContactDetailFilter df; df.setDetailDefinitionName( QContactName::DefinitionName ); df.setMatchFlags( QContactFilter::MatchKeypadCollation ); - df.setValue( mCurrentPredictivePattern ); + df.setValue( mCurrentInputPattern ); QList cntIds; LOGS_QDEBUG( "logs [FINDER] about to call contacts manager" ) @@ -685,6 +264,20 @@ // ----------------------------------------------------------------------------- +// LogsCntFinder::setCurrentPattern() +// ----------------------------------------------------------------------------- +// +void LogsCntFinder::setCurrentPattern( const QString& pattern ) +{ + LogsPredictiveTranslator* translator = + LogsPredictiveTranslator::instance(); + + mCurrentInputPattern = pattern; + mCurrentPredictivePattern = translator->translate( mCurrentInputPattern ); + +} + +// ----------------------------------------------------------------------------- // LogsCntFinder::resultsCount // ----------------------------------------------------------------------------- // diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/src/logspredictive12keytranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/src/logspredictive12keytranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include +#include +#include +#include +#include +#include + +#include "logspredictive12keytranslator.h" +#include "logslogger.h" + +const QChar ZeroSepar('0'); + + +// ----------------------------------------------------------------------------- +// LogsPredictive12KeyTranslator::LogsPredictive12KeyTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictive12KeyTranslator::LogsPredictive12KeyTranslator() + : LogsPredictiveTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictive12KeyTranslator::\ +LogsPredictive12KeyTranslator()" ) + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictive12KeyTranslator::\ +LogsPredictive12KeyTranslator()" ) + +} + +// ----------------------------------------------------------------------------- +// LogsPredictive12KeyTranslator::~LogsPredictive12KeyTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictive12KeyTranslator::~LogsPredictive12KeyTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictive12KeyTranslator::\ +~LogsPredictive12KeyTranslator()" ) + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictive12KeyTranslator::\ +~LogsPredictive12KeyTranslator()" ) + +} + +// ----------------------------------------------------------------------------- +// LogsPredictive12KeyTranslator::LogsPredictive12KeyTranslator() +// ----------------------------------------------------------------------------- +// +QStringList LogsPredictive12KeyTranslator::patternTokens( const QString& pattern ) const +{ + QStringList target = pattern.split( ZeroSepar, QString::SkipEmptyParts ); + if ( target.length() > 1 ) { + QString& first = target[0]; + QString& last = target[target.length()-1]; + padWithZeros( first, pattern, 0 ); + padWithZeros( last, pattern, last.length() ); + } else if ( target.length() == 0 ) { + target.append( ZeroSepar ); + } + return target; +} + +// ----------------------------------------------------------------------------- +// LogsPredictive12KeyTranslator::hasPatternSeparators() +// ----------------------------------------------------------------------------- +// +int LogsPredictive12KeyTranslator::hasPatternSeparators( + const QString& pattern ) const +{ + return pattern.count( ZeroSepar ); + +} + +// ----------------------------------------------------------------------------- +// LogsPredictive12KeyTranslator::translateChar() +// ----------------------------------------------------------------------------- +// +const QChar LogsPredictive12KeyTranslator::translateChar( + const QChar character ) const +{ + const HbMappedKey* mappedKey = + mKeyMap->keyForCharacter( HbKeyboardVirtual12Key, character ); + return mappedKey ? mappedKey->keycode : QChar(); +} + + + +// ----------------------------------------------------------------------------- +// LogsPredictive12KeyTranslator::padWithLeadingZeros() +// ----------------------------------------------------------------------------- +// +void LogsPredictive12KeyTranslator::padWithZeros( QString& token, + const QString& source, int padIndex ) const +{ + const QChar* content = source.data(); + int index = !padIndex ? 0 : source.length()-1; + + while( index >= 0 && index < source.length() ) { + if ( content[ index ] == ZeroSepar ) { + token.insert( padIndex, ZeroSepar ); + index = !padIndex ? index+1 : index-1; + } else { + index = -1; + } + } +} + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/src/logspredictivelatin12keytranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/src/logspredictivelatin12keytranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include +#include +#include +#include +#include +#include + +#include "logspredictivelatin12keytranslator.h" +#include "logslogger.h" + +//mapping char,key(name) +const QChar SpecialMapping[] = {'+', '*', '*', '*','#','#'}; +const int SpecialsCount = 3; +const QChar SpaceSepar(' '); + + +// ----------------------------------------------------------------------------- +// LogsPredictiveLatin12KeyTranslator::LogsPredictiveLatin12KeyTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictiveLatin12KeyTranslator::LogsPredictiveLatin12KeyTranslator() + : LogsPredictive12KeyTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveLatin12KeyTranslator::\ +LogsPredictiveLatin12KeyTranslator()" ) + HbInputLanguage lang = + HbInputSettingProxy::instance()->globalInputLanguage(); + mKeyMap = HbKeymapFactory::instance()->keymap( lang.language(), + lang.variant() ); + + int index = 0; + int arraySize = SpecialsCount * 2; + while( index < arraySize ) { + QChar character = SpecialMapping[ index++ ]; + QChar keycode = SpecialMapping[ index++ ]; + mSpecialKeyMap[ character ] = keycode; + } + + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveLatin12KeyTranslator::\ +LogsPredictiveLatin12KeyTranslator()" ) +} + + +// ----------------------------------------------------------------------------- +// LogsPredictiveLatin12KeyTranslator::~LogsPredictiveLatin12KeyTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictiveLatin12KeyTranslator::~LogsPredictiveLatin12KeyTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveLatin12KeyTranslator::\ +~LogsPredictiveLatin12KeyTranslator()" ) + mSpecialKeyMap.clear(); + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveLatin12KeyTranslator::\ +~LogsPredictiveLatin12KeyTranslator()" ) + +} + +// ----------------------------------------------------------------------------- +// LogsPredictiveLatin12KeyTranslator::translateChar() +// ----------------------------------------------------------------------------- +// +const QChar LogsPredictiveLatin12KeyTranslator::translateChar( + const QChar character ) const +{ + QChar keycode = mSpecialKeyMap[ character ]; + if ( keycode.isNull() ) { + keycode = LogsPredictive12KeyTranslator::translateChar( character ); + if ( keycode.isNull() ) { + QString decomposed = character.decomposition(); + if (decomposed.isEmpty()) { + return keycode; + } + return translateChar (decomposed.at(0)); + } + } + return keycode; +} + + + +// ----------------------------------------------------------------------------- +// LogsPredictiveLatin12KeyTranslator::nameTokens() +// ----------------------------------------------------------------------------- +// +QStringList LogsPredictiveLatin12KeyTranslator::nameTokens( + const QString& name ) const +{ + return name.split( SpaceSepar, QString::SkipEmptyParts ); +} + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/src/logspredictivethai12keytranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/src/logspredictivethai12keytranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include +#include +#include +#include +#include + +#include "logspredictivethai12keytranslator.h" +#include "logslogger.h" + +const QChar IgnoreList[] = {'*', '#' }; +const int IgnoreCount = 2; + + +// ----------------------------------------------------------------------------- +// LogsPredictiveThai12KeyTranslator::LogsPredictiveThai12KeyTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictiveThai12KeyTranslator::LogsPredictiveThai12KeyTranslator() + : LogsPredictive12KeyTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveThai12KeyTranslator::\ +LogsPredictiveThai12KeyTranslator()" ) + HbInputLanguage lang = + HbInputSettingProxy::instance()->globalInputLanguage(); + ASSERT( lang.language() == QLocale::Thai ); + mKeyMap = HbKeymapFactory::instance()->keymap( lang.language(), + lang.variant() ); + + + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveThai12KeyTranslator::\ +LogsPredictiveThai12KeyTranslator()" ) +} + + +// ----------------------------------------------------------------------------- +// LogsPredictiveThai12KeyTranslator::~LogsPredictiveThai12KeyTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictiveThai12KeyTranslator::~LogsPredictiveThai12KeyTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveThai12KeyTranslator::\ +~LogsPredictiveThai12KeyTranslator()" ) + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveThai12KeyTranslator::\ +~LogsPredictiveThai12KeyTranslator()" ) + +} + +// ----------------------------------------------------------------------------- +// LogsPredictiveThai12KeyTranslator::translateChar() +// ----------------------------------------------------------------------------- +// +const QChar LogsPredictiveThai12KeyTranslator::translateChar( + const QChar character ) const +{ + QChar keycode; + if ( !isIgnored( character ) ) { + keycode = LogsPredictive12KeyTranslator::translateChar( character ); + keycode = !keycode.isNull() && !isIgnored( keycode ) ? + keycode : QChar(); + } + return keycode; +} + +// ----------------------------------------------------------------------------- +// LogsPredictiveThai12KeyTranslator::nameTokens() +// ----------------------------------------------------------------------------- +// +QStringList LogsPredictiveThai12KeyTranslator::nameTokens( + const QString& name ) const +{ + return QStringList( name ); +} + + + +// ----------------------------------------------------------------------------- +// LogsPredictiveThai12KeyTranslator::isIgnored() +// ----------------------------------------------------------------------------- +// +bool LogsPredictiveThai12KeyTranslator::isIgnored( const QChar character ) const +{ + bool found = false; + int index = 0; + while( index < IgnoreCount && !found ) { + found = IgnoreList[ index++ ] == character; + } + return found; +} + + + + + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/src/logspredictivetranslator.cpp --- a/logsui/logscntfinder/src/logspredictivetranslator.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/src/logspredictivetranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -16,11 +16,13 @@ */ #include #include -#include -#include +#include #include +#include #include "logspredictivetranslator.h" +#include "logspredictivelatin12keytranslator.h" +#include "logspredictivethai12keytranslator.h" #include "logslogger.h" LogsPredictiveTranslator* LogsPredictiveTranslator::mInstance = 0; @@ -33,7 +35,16 @@ LogsPredictiveTranslator* LogsPredictiveTranslator::instance() { if ( !mInstance ) { - mInstance = new LogsPredictiveTranslator(); + HbInputLanguage lang = + HbInputSettingProxy::instance()->globalInputLanguage(); + switch( lang.language() ) { + case QLocale::Thai: + mInstance = new LogsPredictiveThai12KeyTranslator(); + break; + default: + mInstance = new LogsPredictiveLatin12KeyTranslator(); + break; + } } return mInstance; } @@ -57,11 +68,6 @@ { LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ LogsPredictiveTranslator()" ) - HbInputLanguage lang = - HbInputSettingProxy::instance()->globalInputLanguage(); - mKeyMap = HbKeymapFactory::instance()->keymap( lang.language(), - lang.variant() ); - LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ LogsPredictiveTranslator()" ) } @@ -76,6 +82,7 @@ LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ ~LogsPredictiveTranslator()" ) mInstance = 0; + mKeyMap = 0; LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ ~LogsPredictiveTranslator()" ) @@ -85,25 +92,6 @@ // LogsPredictiveTranslator::translate() // ----------------------------------------------------------------------------- // -const QChar LogsPredictiveTranslator::translate( const QChar character ) const -{ - const HbMappedKey* mappedKey = mKeyMap->keyForCharacter( HbKeyboardVirtual12Key, - character ); - if (!mappedKey) { - QString decomposed = character.decomposition(); - if (decomposed.isEmpty()) { - return character; - } - return translate (decomposed.at(0)); - } - return mappedKey->keycode; -} - - -// ----------------------------------------------------------------------------- -// LogsPredictiveTranslator::translate() -// ----------------------------------------------------------------------------- -// const QString LogsPredictiveTranslator::translate( const QString& name, int count ) const { @@ -114,10 +102,13 @@ QString result; const QChar* content = name.data(); int index = 0; - while( index < name.length() && index < count ) { - result.insert( index++, translate( *content++ ) ); + while( index < count ) { + QChar ch = translateChar( *content++ ); + if ( !ch.isNull() ) { + result.append( ch ); + } + index++; } - LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" ) return result; } @@ -141,7 +132,7 @@ QString translatedText = translate( text, pattern.length() ); matchCount = translatedText == pattern ? matchCount : 0; } else { - matchCount = translate( *text.data() ) == *pattern.data() ? + matchCount = translateChar( *text.data() ) == *pattern.data() ? matchCount : 0; } } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.cpp --- a/logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.cpp Fri May 14 15:52:41 2010 +0300 @@ -80,6 +80,7 @@ void ContactQueryResults::reset() { mDB.clear(); + mQuery.clear(); } @@ -203,8 +204,11 @@ { } -void QContactDetailFilter::setValue(const QVariant& /*value*/) +void QContactDetailFilter::setValue(const QVariant& value ) { + ContactQueryResults* resultSet = ContactQueryResults::instance(); + resultSet->filterValueSet( value.toString() ); + } QVariant QContactDetailFilter::value() const diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.h --- a/logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.h Fri May 14 15:52:41 2010 +0300 @@ -39,6 +39,8 @@ const QString& lastNameAt( int index ) const; int contacts() const; inline void allResultsAdded() {emit resultsAdded();} + inline void filterValueSet( const QString& value ) { mQuery = value;} + inline const QString& query() { return mQuery; } signals: @@ -53,7 +55,7 @@ static ContactQueryResults* mInstance; QStringList mDB; - + QString mQuery; }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logscntentry.h --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logscntentry.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logscntentry.h Fri May 14 15:52:41 2010 +0300 @@ -18,6 +18,7 @@ #define UT_LOGSCNTENTRY_H #include +#include class LogsCntEntry; @@ -46,17 +47,23 @@ void testConstructor(); void testSetName(); - void testSetHighlights(); + void testSetPhoneNumber(); void testSetAvatarPath(); - void testRichText(); - void testSetPhoneNumber(); void testSetSpeedDial(); - void testMatch(); + //with latin 12 keys + void testSetHighlights_latin12k(); + void testRichText_latin12k(); + void testMatch_latin12k(); + //with thai 12 keys + void testMatch_thai12k(); + void testSetHighlights_thai12k(); private: LogsCntEntry* mEntry; + HbInputLanguage mOrigLang; + }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logscntfinder.h --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logscntfinder.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logscntfinder.h Fri May 14 15:52:41 2010 +0300 @@ -46,11 +46,12 @@ private slots: //test methods void testConstructor(); - void testPredictiveSearchQuery(); - void testResultAt(); void testInsertEntry(); void testDeleteEntry(); void testGetEntry(); + //with latin 12 keys + void testPredictiveSearchQuery_latin12k(); + void testResultAt_latin12k(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictive12keytranslator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictive12keytranslator.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LOGSPREDICTIV12KEYTRANSLATOR_H +#define UT_LOGSPREDICTIV12KEYTRANSLATOR_H + +#include +#include + +class LogsPredictive12KeyTranslator; + +class UT_LogsPredictive12KeyTranslator : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testConstructor(); + void testPatternTokens(); + void testHasPatternSeparators(); + void testTranslateChar(); + +private: + + LogsPredictive12KeyTranslator* mTranslator; + HbInputLanguage mOrigLang; + +}; + + +#endif //UT_LOGSPREDICTIV12KEYTRANSLATOR_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivelatin12keytranslator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivelatin12keytranslator.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LOGSPREDICTIVELATIN12KEYTRANSLATOR_H +#define UT_LOGSPREDICTIVELATIN12KEYTRANSLATOR_H + +#include + +class LogsPredictiveLatin12KeyTranslator; + +class UT_LogsPredictiveLatin12KeyTranslator : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testConstructor(); + void testTranslate(); + void testTranslateChar(); + +private: + + LogsPredictiveLatin12KeyTranslator* mTranslator; +}; + + +#endif //UT_LOGSPREDICTIVELATIN12KEYTRANSLATOR_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivethai12keytranslator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivethai12keytranslator.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LOGSPREDICTIVETHAI12KEYTRANSLATOR_H +#define UT_LOGSPREDICTIVETHAI12KEYTRANSLATOR_H + +#include +#include + +class LogsPredictiveThai12KeyTranslator; + +class UT_LogsPredictiveThai12KeyTranslator : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testConstructor(); + void testTranslate(); + void testTranslateChar(); + +private: + + HbInputLanguage mOrigLang; + LogsPredictiveThai12KeyTranslator* mTranslator; +}; + + +#endif //UT_LOGSPREDICTIVETHAI12KEYTRANSLATOR_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivetranslator.h --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivetranslator.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/inc/ut_logspredictivetranslator.h Fri May 14 15:52:41 2010 +0300 @@ -18,6 +18,7 @@ #define UT_LOGSPREDICTIVETRANSLATOR_H #include +#include class LogsPredictiveTranslator; @@ -46,12 +47,12 @@ void testConstructor(); void testTranslate(); - void testTranslateChar(); - void testStartsWith(); + void testStartsWith(); private: - LogsPredictiveTranslator* mTranslator; + HbInputLanguage mOrigLang; + LogsPredictiveTranslator* mTranslator; }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/main.cpp --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/src/main.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/main.cpp Fri May 14 15:52:41 2010 +0300 @@ -20,11 +20,24 @@ #include "ut_logscntfinder.h" #include "ut_logspredictivetranslator.h" +#include "ut_logspredictive12keytranslator.h" +#include "ut_logspredictivelatin12keytranslator.h" +#include "ut_logspredictivethai12keytranslator.h" #include "ut_logscntentry.h" #include "testresultxmlparser.h" +#define UTEST_CLASS( tc )\ + tc tc##_instance;\ + QStringList tc##_args( #tc );\ + resultFileName = QString("c:/") + QString( #tc ) + QString(".xml");\ + tc##_args << "-xml" << "-o" << resultFileName;\ + QTest::qExec(&tc##_instance, tc##_args);\ + parser.parseAndPrintResults(resultFileName,true) + + + int main(int argc, char *argv[]) { bool promptOnExit(true); @@ -42,27 +55,14 @@ app = new QApplication(argc, argv); TestResultXmlParser parser; - - UT_LogsCntFinder ut_logsCntFinder; - QString resultFileName = "c:/ut_logs_logsCntFinder.xml"; - QStringList args_logsCntFinder( "ut_logsCntFinder"); - args_logsCntFinder << "-xml" << "-o" << resultFileName; - QTest::qExec(&ut_logsCntFinder, args_logsCntFinder); - parser.parseAndPrintResults(resultFileName,true); + QString resultFileName; - UT_LogsPredictiveTranslator ut_logsPredictiveTranslator; - resultFileName = "c:/ut_logs_logsPredictiveTranslator.xml"; - QStringList args_logsCntFinder1( "ut_LogsPredictiveTranslator" ); - args_logsCntFinder1 << "-xml" << "-o" << resultFileName; - QTest::qExec(&ut_logsPredictiveTranslator, args_logsCntFinder1); - parser.parseAndPrintResults(resultFileName,true); - - UT_LogsCntEntry ut_logscntentry; - resultFileName = "c:/ut_logs_logscntentry.xml"; - QStringList args_logsCntFinder2( "ut_logscntentry" ); - args_logsCntFinder2 << "-xml" << "-o" << resultFileName; - QTest::qExec(&ut_logscntentry, args_logsCntFinder2); - parser.parseAndPrintResults(resultFileName,true); + UTEST_CLASS( UT_LogsPredictiveTranslator ); + UTEST_CLASS( UT_LogsPredictive12KeyTranslator ); + UTEST_CLASS( UT_LogsPredictiveLatin12KeyTranslator ); + UTEST_CLASS( UT_LogsPredictiveThai12KeyTranslator ); + UTEST_CLASS( UT_LogsCntEntry ); + UTEST_CLASS( UT_LogsCntFinder ); if (promptOnExit) { printf("Press any key...\n"); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logscntentry.cpp --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logscntentry.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logscntentry.cpp Fri May 14 15:52:41 2010 +0300 @@ -14,19 +14,28 @@ * Description: * */ +#include + #include "ut_logscntentry.h" -#include "logscntfinder.h" +#include "logscntentry.h" #include "logspredictivetranslator.h" #include +#define PATTERN( pattern )\ + LogsPredictiveTranslator::instance()->translate( QString( pattern ) ) + void UT_LogsCntEntry::initTestCase() { + mOrigLang = HbInputSettingProxy::instance()->globalInputLanguage(); + } void UT_LogsCntEntry::cleanupTestCase() { + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + } @@ -40,6 +49,8 @@ delete mEntry; mEntry = 0; LogsPredictiveTranslator::deleteInstance(); + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + } void UT_LogsCntEntry::testConstructor() @@ -53,7 +64,7 @@ QVERIFY( mEntry->avatarPath() == QString("") ); QVERIFY( mEntry->handle() == 0 ); QVERIFY( mEntry->speedDial() == QString("") ); - + mEntry->setFirstName( QString( "foo" )); mEntry->setLastName( QString( "bar" )); @@ -65,6 +76,7 @@ QVERIFY( e->firstName()[0].text() == mEntry->firstName()[0].text() ); QVERIFY( e->lastName()[0].text() == mEntry->lastName()[0].text() ); QVERIFY( e->phoneNumber().text() == mEntry->phoneNumber().text() ); + QVERIFY( e->phoneNumber().mTranslatedText == mEntry->phoneNumber().mTranslatedText ); QVERIFY( e->mHandle == mEntry->mHandle ); QVERIFY( e->speedDial() == mEntry->speedDial() ); @@ -129,17 +141,17 @@ } -void UT_LogsCntEntry::testSetHighlights() +void UT_LogsCntEntry::testSetHighlights_latin12k() { - - mEntry->setHighlights( QString( "665" ) ); + + mEntry->setHighlights( PATTERN("665") ); QVERIFY( mEntry->firstName()[0].text() == QString("") ); QVERIFY( mEntry->lastName()[0].text() == QString("") ); mEntry->setFirstName( QString( "Nokia" ) ); mEntry->setLastName( QString( "Test" ) ); - mEntry->setHighlights( QString( "665" ) ); + mEntry->setHighlights( PATTERN( "665" ) ); QVERIFY( mEntry->firstName()[0].text() == QString( "Nokia" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 3 ); QVERIFY( mEntry->lastName()[0].text() == QString( "Test" ) ); @@ -149,7 +161,7 @@ mEntry->setFirstName( QString( "Jim" ) ); mEntry->setLastName( QString( "Johnson" ) ); - mEntry->setHighlights( QString( "5" ) ); + mEntry->setHighlights( PATTERN( "5" ) ); QVERIFY( mEntry->firstName()[0].text() == QString( "Jim" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1 ); QVERIFY( mEntry->lastName()[0].text() == QString( "Johnson" ) ); @@ -158,7 +170,7 @@ mEntry->setFirstName( QString( "Big Jim" ) ); mEntry->setLastName( QString( "Johnson" ) ); - mEntry->setHighlights( QString( "5" ) ); + mEntry->setHighlights( PATTERN( "5" ) ); QVERIFY( mEntry->firstName()[0].text() == QString( "Big" ) ); QVERIFY( mEntry->firstName()[1].text() == QString( "Jim" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0 ); @@ -168,44 +180,44 @@ mEntry->setFirstName( QString( "John" ) ); mEntry->setLastName( QString( "Johnson" ) ); - mEntry->setHighlights( QString( "5646" ) ); + mEntry->setHighlights( PATTERN( "5646" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 4 ); QVERIFY( mEntry->lastName()[0].highlights() == 4); - mEntry->setHighlights( QString( "56467" ) ); + mEntry->setHighlights( PATTERN( "56467" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0 ); QVERIFY( mEntry->lastName()[0].highlights() == 5); - mEntry->setHighlights( QString( "505" ) ); + mEntry->setHighlights( PATTERN( "505" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 1); - mEntry->setHighlights( QString( "506" ) );//entry is not a match + mEntry->setHighlights( PATTERN( "506" ) );//entry is not a match QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 1);//506 means 5 or 6 in higlighting mEntry->setFirstName( QString( "Big Jim Johnson" ) ); mEntry->setLastName( QString( "" ) ); - mEntry->setHighlights( QString( "205" ) ); + mEntry->setHighlights( PATTERN( "205" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 1); QVERIFY( mEntry->firstName()[2].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 0); - mEntry->setHighlights( QString( "20505" ) ); + mEntry->setHighlights( PATTERN( "20505" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 1); QVERIFY( mEntry->firstName()[2].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 0); - mEntry->setHighlights( QString( "50205" ) ); + mEntry->setHighlights( PATTERN( "50205" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 1); QVERIFY( mEntry->firstName()[2].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 0); - mEntry->setHighlights( QString( "50502" ) ); + mEntry->setHighlights( PATTERN( "50502" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 1); QVERIFY( mEntry->firstName()[2].highlights() == 1); @@ -214,114 +226,199 @@ mEntry->setFirstName( QString( "Big John" ) ); mEntry->setLastName( QString( "Johnson" ) ); - mEntry->setHighlights( QString( "2056" ) ); + mEntry->setHighlights( PATTERN( "2056" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 2); QVERIFY( mEntry->lastName()[0].highlights() == 2); - mEntry->setHighlights( QString( "5602" ) ); + mEntry->setHighlights( PATTERN( "5602" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 2); QVERIFY( mEntry->lastName()[0].highlights() == 2); - mEntry->setHighlights( QString( "564602" ) ); + mEntry->setHighlights( PATTERN( "564602" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 4); QVERIFY( mEntry->lastName()[0].highlights() == 4); - mEntry->setHighlights( QString( "5646702" ) ); + mEntry->setHighlights( PATTERN( "5646702" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 0); QVERIFY( mEntry->lastName()[0].highlights() == 5); - mEntry->setHighlights( QString( "5646" ) ); + mEntry->setHighlights( PATTERN( "5646" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0); QVERIFY( mEntry->firstName()[1].highlights() == 4); QVERIFY( mEntry->lastName()[0].highlights() == 4); - mEntry->setHighlights( QString( "50" ) ); + mEntry->setHighlights( PATTERN( "50" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0); QVERIFY( mEntry->firstName()[1].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 1); - mEntry->setHighlights( QString( "05" ) ); + mEntry->setHighlights( PATTERN( "05" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0); QVERIFY( mEntry->firstName()[1].highlights() == 1); QVERIFY( mEntry->lastName()[0].highlights() == 1); mEntry->setFirstName( QString( "John 0John" ) ); mEntry->setLastName( QString( "Malkovich" ) ); - mEntry->setHighlights( QString( "05" ) ); + mEntry->setHighlights( PATTERN( "05" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 2); QVERIFY( mEntry->lastName()[0].highlights() == 0); - mEntry->setHighlights( QString( "0506" ) ); + mEntry->setHighlights( PATTERN( "0506" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0); QVERIFY( mEntry->firstName()[1].highlights() == 2); QVERIFY( mEntry->lastName()[0].highlights() == 1); - mEntry->setHighlights( QString( "506" ) ); + mEntry->setHighlights( PATTERN( "506" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 0); QVERIFY( mEntry->lastName()[0].highlights() == 1); - mEntry->setHighlights( QString( "5060" ) ); + mEntry->setHighlights( PATTERN( "5060" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 0); QVERIFY( mEntry->lastName()[0].highlights() == 0); - mEntry->setHighlights( QString( "05060" ) ); + mEntry->setHighlights( PATTERN( "05060" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0); QVERIFY( mEntry->firstName()[1].highlights() == 2); QVERIFY( mEntry->lastName()[0].highlights() == 0); - mEntry->setHighlights( QString( "050506" ) ); + mEntry->setHighlights( PATTERN( "050506" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 1); QVERIFY( mEntry->firstName()[1].highlights() == 2); QVERIFY( mEntry->lastName()[0].highlights() == 1); mEntry->setPhoneNumber( QString( "+1234567" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "+1234567" ) ); - mEntry->setHighlights( QString( "+12" ) ); + mEntry->setHighlights( PATTERN( "+12" ) ); QVERIFY( mEntry->phoneNumber().mHighlights == 3 ); mEntry->setPhoneNumber( QString( "1234567" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "1234567" ) ); - mEntry->setHighlights( QString( "+12" ) ); + mEntry->setHighlights( PATTERN( "+12" ) ); QVERIFY( mEntry->phoneNumber().mHighlights == 0 ); - mEntry->setHighlights( QString( "12" ) ); + mEntry->setHighlights( PATTERN( "12" ) ); QVERIFY( mEntry->phoneNumber().mHighlights == 2 ); mEntry->setFirstName( QString( "Alice 028 Ming" ) ); - mEntry->setHighlights( QString( "028" ) ); + mEntry->setHighlights( PATTERN( "028" ) ); QVERIFY( mEntry->firstName()[0].highlights() == 0); QVERIFY( mEntry->firstName()[1].highlights() == 3); QVERIFY( mEntry->firstName()[2].highlights() == 0); QVERIFY( mEntry->lastName()[0].highlights() == 0); + mEntry->setFirstName( QString( "Alice +Ming" ) ); + + mEntry->setHighlights( PATTERN( "+6" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "#6" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "*6" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "16" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setFirstName( QString( "Alice M*ing" ) ); + mEntry->setHighlights( PATTERN( "6+" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "6*" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "6#" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setFirstName( QString( "Alice M-ing" ) ); + mEntry->setHighlights( PATTERN( "6+" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "6*" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "6#" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "61" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setFirstName( QString( "Alice M#ing" ) ); + mEntry->setHighlights( PATTERN( "6+" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "6*" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "6#" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "61" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 0); + QVERIFY( mEntry->firstName()[1].highlights() == 0); + QVERIFY( mEntry->lastName()[0].highlights() == 0); } void UT_LogsCntEntry::testSetPhoneNumber() { + QString empty(""); + mEntry->setPhoneNumber( QString( "1234567" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "1234567" ) ); - QVERIFY( mEntry->phoneNumber().mTranslatedText == QString( "" ) ); + QVERIFY( mEntry->phoneNumber().mTranslatedText != empty ); QVERIFY( mEntry->phoneNumber().mHighlights == 0 ); mEntry->setPhoneNumber( QString( "+1234567" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "+1234567" ) ); + QVERIFY( mEntry->phoneNumber().mTranslatedText != empty ); mEntry->setPhoneNumber( QString( "#1234567" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "#1234567" ) ); + QVERIFY( mEntry->phoneNumber().mTranslatedText != empty ); mEntry->setPhoneNumber( QString( "*1234567" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "*1234567" ) ); + QVERIFY( mEntry->phoneNumber().mTranslatedText != empty ); mEntry->setPhoneNumber( QString( "*12+345#67" ) ); QVERIFY( mEntry->phoneNumber().text() == QString( "*12+345#67" ) ); + QVERIFY( mEntry->phoneNumber().mTranslatedText != empty ); } @@ -339,11 +436,11 @@ } -void UT_LogsCntEntry::testRichText() +void UT_LogsCntEntry::testRichText_latin12k() { mEntry->setFirstName( QString( "John" ) ); - mEntry->setHighlights( QString( "5" ) ); + mEntry->setHighlights( PATTERN( "5" ) ); QVERIFY( mEntry->firstName()[0].richText() == QString( "John" ) ); QVERIFY( mEntry->firstName()[0].richText( QString(""),QString("") ) == QString( "John" ) ); @@ -355,13 +452,13 @@ QVERIFY( mEntry->firstName()[0].richText() == QString( "" ) ); mEntry->setPhoneNumber( QString( "1234567" ) ); - mEntry->setHighlights( QString( "5" ) ); + mEntry->setHighlights( PATTERN( "5" ) ); QVERIFY( mEntry->phoneNumber().mHighlights == 0 ); QVERIFY( mEntry->phoneNumber().text() == QString( "1234567" ) ); QVERIFY( mEntry->phoneNumber().richText() == QString( "1234567" ) ); - mEntry->setHighlights( QString( "1" ) ); + mEntry->setHighlights( PATTERN( "1" ) ); QVERIFY( mEntry->phoneNumber().mHighlights == 1 ); QVERIFY( mEntry->phoneNumber().text() == QString( "1234567" ) ); @@ -369,25 +466,26 @@ } -void UT_LogsCntEntry::testMatch() +void UT_LogsCntEntry::testMatch_latin12k() { + mEntry->mType = LogsCntEntry::EntryTypeHistory; mEntry->setFirstName( QString( "John" ) ); - QVERIFY( mEntry->match( QString( "5" ) ) ); - QVERIFY( !mEntry->match( QString( "6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "6" ) ) ); mEntry->setPhoneNumber( QString( "11111111111" ) ); mEntry->setFirstName( QString( "John" ) ); mEntry->setLastName( QString( "Malkovich" ) ); - QVERIFY( mEntry->match( QString( "6" ) ) ); - QVERIFY( mEntry->match( QString( "5" ) ) ); - QVERIFY( !mEntry->match( QString( "2" ) ) ); - QVERIFY( mEntry->match( QString( "56" ) ) ); - QVERIFY( !mEntry->match( QString( "566" ) ) ); + QVERIFY( mEntry->match( PATTERN( "6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "2" ) ) ); + QVERIFY( mEntry->match( PATTERN( "56" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "566" ) ) ); mEntry->setPhoneNumber( QString( "5669876566" ) ); - QVERIFY( mEntry->match( QString( "566" ) ) ); + QVERIFY( mEntry->match( PATTERN( "566" ) ) ); // - zero cases - @@ -395,93 +493,199 @@ mEntry->setFirstName( QString( "John" ) ); mEntry->setLastName( QString( "Malkovich" ) ); - QVERIFY( mEntry->match( QString( "202" ) ) );//match not John and match not Malkovich match phone - QVERIFY( !mEntry->match( QString( "507" ) ) );//match John and match not Malkovich - QVERIFY( !mEntry->match( QString( "206" ) ) );//match not John and macth Malkovich - QVERIFY( mEntry->match( QString( "506" ) ) );//match John and macth Malkovich - QVERIFY( mEntry->match( QString( "605" ) ) );//match John and macth Malkovich - QVERIFY( !mEntry->match( QString( "505" ) ) );//match John "two times" - QVERIFY( mEntry->match( QString( "60005" ) ) );//match John and match Malkovich - QVERIFY( !mEntry->match( QString( "6000500" ) ) );//match John and match Malkovich + QVERIFY( !mEntry->match( PATTERN( "00" ) ) ); + QVERIFY( mEntry->match( PATTERN( "202" ) ) );//match not John and match not Malkovich match phone + QVERIFY( !mEntry->match( PATTERN( "507" ) ) );//match John and match not Malkovich + QVERIFY( !mEntry->match( PATTERN( "206" ) ) );//match not John and macth Malkovich + QVERIFY( mEntry->match( PATTERN( "506" ) ) );//match John and macth Malkovich + QVERIFY( mEntry->match( PATTERN( "605" ) ) );//match John and macth Malkovich + QVERIFY( !mEntry->match( PATTERN( "505" ) ) );//match John "two times" + QVERIFY( mEntry->match( PATTERN( "60005" ) ) );//match John and match Malkovich + QVERIFY( !mEntry->match( PATTERN( "6000500" ) ) );//match John and match Malkovich mEntry->setFirstName( QString( "John Malkovich" ) ); mEntry->setLastName( QString( "" ) ); - QVERIFY( mEntry->match( QString( "202" ) ) );//match not John and match not Malkovich match phone - QVERIFY( !mEntry->match( QString( "507" ) ) );//match John and match not Malkovich - QVERIFY( !mEntry->match( QString( "206" ) ) );//match not John and macth Malkovich - QVERIFY( mEntry->match( QString( "506" ) ) );//match John and macth Malkovich - QVERIFY( mEntry->match( QString( "605" ) ) );//match John and macth Malkovich - QVERIFY( !mEntry->match( QString( "505" ) ) );//match John "two times" - QVERIFY( mEntry->match( QString( "60005" ) ) );//match John and match Malkovich - QVERIFY( !mEntry->match( QString( "6000500" ) ) );//match John and match Malkovich + QVERIFY( mEntry->match( PATTERN( "202" ) ) );//match not John and match not Malkovich match phone + QVERIFY( !mEntry->match( PATTERN( "507" ) ) );//match John and match not Malkovich + QVERIFY( !mEntry->match( PATTERN( "206" ) ) );//match not John and macth Malkovich + QVERIFY( mEntry->match( PATTERN( "506" ) ) );//match John and macth Malkovich + QVERIFY( mEntry->match( PATTERN( "605" ) ) );//match John and macth Malkovich + QVERIFY( !mEntry->match( PATTERN( "505" ) ) );//match John "two times" + QVERIFY( mEntry->match( PATTERN( "60005" ) ) );//match John and match Malkovich + QVERIFY( !mEntry->match( PATTERN( "6000500" ) ) );//match John and match Malkovich mEntry->setFirstName( QString( "" ) ); mEntry->setLastName( QString( "John Malkovich" ) ); - QVERIFY( mEntry->match( QString( "202" ) ) );//match not John and match not Malkovich match phone - QVERIFY( !mEntry->match( QString( "507" ) ) );//match John and match not Malkovich - QVERIFY( !mEntry->match( QString( "206" ) ) );//match not John and macth Malkovich - QVERIFY( mEntry->match( QString( "506" ) ) );//match John and macth Malkovich - QVERIFY( mEntry->match( QString( "605" ) ) );//match John and macth Malkovich - QVERIFY( !mEntry->match( QString( "505" ) ) );//match John "two times" - QVERIFY( mEntry->match( QString( "60005" ) ) );//match John and match Malkovich - QVERIFY( !mEntry->match( QString( "6000500" ) ) );//match John and match Malkovich + QVERIFY( mEntry->match( PATTERN( "202" ) ) );//match not John and match not Malkovich match phone + QVERIFY( !mEntry->match( PATTERN( "507" ) ) );//match John and match not Malkovich + QVERIFY( !mEntry->match( PATTERN( "206" ) ) );//match not John and macth Malkovich + QVERIFY( mEntry->match( PATTERN( "506" ) ) );//match John and macth Malkovich + QVERIFY( mEntry->match( PATTERN( "605" ) ) );//match John and macth Malkovich + QVERIFY( !mEntry->match( PATTERN( "505" ) ) );//match John "two times" + QVERIFY( mEntry->match( PATTERN( "60005" ) ) );//match John and match Malkovich + QVERIFY( !mEntry->match( PATTERN( "6000500" ) ) );//match John and match Malkovich mEntry->setFirstName( QString( "John Peter" ) ); mEntry->setLastName( QString( "Malkovich" ) ); - QVERIFY( mEntry->match( QString( "50607" ) ) );//match John and match Malkovich match Peter - QVERIFY( mEntry->match( QString( "506" ) ) );//match John and macth Malkovich match ignore Peter - QVERIFY( !mEntry->match( QString( "50608" ) ) );//match John and match Malkovich match not Peter - QVERIFY( !mEntry->match( QString( "5060702" ) ) );//match John and match Malkovich match Peter + no match extra - QVERIFY( !mEntry->match( QString( "5060706" ) ) );//match John and match Malkovich match Peter + macth extra + QVERIFY( mEntry->match( PATTERN( "50607" ) ) );//match John and match Malkovich match Peter + QVERIFY( mEntry->match( PATTERN( "506" ) ) );//match John and macth Malkovich match ignore Peter + QVERIFY( !mEntry->match( PATTERN( "50608" ) ) );//match John and match Malkovich match not Peter + QVERIFY( !mEntry->match( PATTERN( "5060702" ) ) );//match John and match Malkovich match Peter + no match extra + QVERIFY( !mEntry->match( PATTERN( "5060706" ) ) );//match John and match Malkovich match Peter + macth extra mEntry->setFirstName( QString( "John Kalkovich" ) ); mEntry->setLastName( QString( "" ) ); - QVERIFY( mEntry->match( QString( "505" ) ) );//match John and match Kalkovich + QVERIFY( mEntry->match( PATTERN( "505" ) ) );//match John and match Kalkovich mEntry->setFirstName( QString( "John John Malkovich" ) ); mEntry->setLastName( QString( "" ) ); - QVERIFY( mEntry->match( QString( "50605" ) ) );//match John and match Malkovich and match John - QVERIFY( mEntry->match( QString( "506" ) ) );//match Johns and macth Malkovich - QVERIFY( !mEntry->match( QString( "50608" ) ) );//match John and match Malkovich match not Peter + QVERIFY( mEntry->match( PATTERN( "50605" ) ) );//match John and match Malkovich and match John + QVERIFY( mEntry->match( PATTERN( "506" ) ) );//match Johns and macth Malkovich + QVERIFY( !mEntry->match( PATTERN( "50608" ) ) );//match John and match Malkovich match not Peter mEntry->setFirstName( QString( "John 0John Malkovich" ) ); mEntry->setLastName( QString( "" ) ); - QVERIFY( !mEntry->match( QString( "50605" ) ) ); - QVERIFY( !mEntry->match( QString( "505" ) ) ); - QVERIFY( mEntry->match( QString( "5" ) ) ); - QVERIFY( mEntry->match( QString( "0" ) ) ); - QVERIFY( mEntry->match( QString( "05" ) ) ); - QVERIFY( mEntry->match( QString( "0505" ) ) ); - QVERIFY( mEntry->match( QString( "0505" ) ) ); - QVERIFY( mEntry->match( QString( "05005" ) ) ); - QVERIFY( mEntry->match( QString( "6005" ) ) ); - QVERIFY( !mEntry->match( QString( "05050" ) ) ); - QVERIFY( !mEntry->match( QString( "00505" ) ) ); - QVERIFY( !mEntry->match( QString( "005050" ) ) ); - QVERIFY( mEntry->match( QString( "0506" ) ) ); - QVERIFY( mEntry->match( QString( "050506" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "50605" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "505" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( mEntry->match( PATTERN( "0" ) ) ); + QVERIFY( mEntry->match( PATTERN( "05" ) ) ); + QVERIFY( mEntry->match( PATTERN( "0505" ) ) ); + QVERIFY( mEntry->match( PATTERN( "0505" ) ) ); + QVERIFY( mEntry->match( PATTERN( "05005" ) ) ); + QVERIFY( mEntry->match( PATTERN( "6005" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "05050" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "00505" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "005050" ) ) ); + QVERIFY( mEntry->match( PATTERN( "0506" ) ) ); + QVERIFY( mEntry->match( PATTERN( "050506" ) ) ); mEntry->setPhoneNumber( QString( "+20298457698576" ) ); mEntry->setFirstName( QString( "John" ) ); mEntry->setLastName( QString( "Malkovich" ) ); - QVERIFY( mEntry->match( QString( "+202" ) ) ); - QVERIFY( !mEntry->match( QString( "#202" ) ) ); - QVERIFY( !mEntry->match( QString( "*202" ) ) ); - QVERIFY( !mEntry->match( QString( "202" ) ) ); - QVERIFY( !mEntry->match( QString( "+202#98" ) ) ); + QVERIFY( mEntry->match( PATTERN( "+202" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "#202" ) ) ); + QVERIFY( mEntry->match( PATTERN( "*202" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "202" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "+202#98" ) ) ); + + QVERIFY( mEntry->match( PATTERN( "50" ) ) ); + QVERIFY( mEntry->match( PATTERN( "05" ) ) ); + QVERIFY( mEntry->match( PATTERN( "506" ) ) ); + + mEntry->setFirstName( QString( "John" ) ); + mEntry->setLastName( QString( "#Malkovich" ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "506" ) ) ); + QVERIFY( mEntry->match( PATTERN( "#6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "+6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "16" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "*6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "50#6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5016" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "50*6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "50+6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "+" ) ) );//phone + QVERIFY( mEntry->match( PATTERN( "*" ) ) ); + QVERIFY( mEntry->match( PATTERN( "#" ) ) ); + + mEntry->setFirstName( QString( "J*hn" ) ); + mEntry->setLastName( QString( "#Malkovich" ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5*" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5+" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "51" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5#" ) ) ); + QVERIFY( mEntry->match( PATTERN( "50#" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5+0#6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5*0#6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "5*0#" ) ) ); + + mEntry->setFirstName( QString( "J-hn" ) ); + mEntry->setLastName( QString( "#Malkovich" ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5*" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5+" ) ) ); + QVERIFY( mEntry->match( PATTERN( "51" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5#" ) ) ); + QVERIFY( mEntry->match( PATTERN( "50#" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5+0#6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5*0#6" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "5*0#" ) ) ); + QVERIFY( mEntry->match( PATTERN( "510#" ) ) ); + + mEntry->setFirstName( QString("Alice 028") ); + mEntry->setLastName( QString( "Ming" ) ); + QVERIFY( mEntry->match( PATTERN( "02806" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "0280" ) ) );//not supported - QVERIFY( mEntry->match( QString( "50" ) ) ); - QVERIFY( mEntry->match( QString( "05" ) ) ); - QVERIFY( mEntry->match( QString( "506" ) ) ); + mEntry->mType = LogsCntEntry::EntryTypeContact; + QVERIFY( !mEntry->match( PATTERN( "+202" ) ) ); + + mEntry->setFirstName( QString( "0J0hn" ) ); + mEntry->setLastName( QString( "Malkovich" ) ); + QVERIFY( mEntry->match( PATTERN( "000" ) ) ); + +} + +void UT_LogsCntEntry::testMatch_thai12k() +{ + + LogsPredictiveTranslator::deleteInstance(); + HbInputLanguage thai( QLocale::Thai ); + HbInputSettingProxy::instance()->setGlobalInputLanguage( thai ); + + mEntry->mType = LogsCntEntry::EntryTypeHistory; + + mEntry->setFirstName( QString( "5643" ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "6" ) ) ); + + mEntry->setLastName( QString( "6787" ) ); + QVERIFY( mEntry->match( PATTERN( "5" ) ) ); + QVERIFY( mEntry->match( PATTERN( "05" ) ) ); + QVERIFY( mEntry->match( PATTERN( "6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "*#*#*#*5*#*#*#**#*#" ) ) ); + QVERIFY( mEntry->match( PATTERN( "*#*#*****#6" ) ) ); + QVERIFY( mEntry->match( PATTERN( "06" ) ) ); + + QVERIFY( mEntry->match( PATTERN( "605" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "606" ) ) ); + + QVERIFY( mEntry->match( PATTERN( "#*#*#6*#*#**0*#*#**5*****#" ) ) ); + QVERIFY( !mEntry->match( PATTERN( "**#*#**#*#6*#*0*#*#*6*#**#****#" ) ) ); + +} + + +void UT_LogsCntEntry::testSetHighlights_thai12k() +{ + LogsPredictiveTranslator::deleteInstance(); + HbInputLanguage thai( QLocale::Thai ); + HbInputSettingProxy::instance()->setGlobalInputLanguage( thai ); + + mEntry->mType = LogsCntEntry::EntryTypeHistory; + mEntry->setFirstName( QString( "5643 456456" ) ); + mEntry->setLastName( QString( "6787" ) ); + + mEntry->setHighlights( PATTERN( "****56#*#*#" ) ); + QVERIFY( mEntry->firstName().length() == 1 ); + QVERIFY( mEntry->lastName().length() == 1 ); + QVERIFY( mEntry->firstName()[0].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 0); + + mEntry->setHighlights( PATTERN( "****56#*#*#06" ) ); + QVERIFY( mEntry->firstName()[0].highlights() == 2); + QVERIFY( mEntry->lastName()[0].highlights() == 1); } - diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logscntfinder.cpp --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logscntfinder.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logscntfinder.cpp Fri May 14 15:52:41 2010 +0300 @@ -59,6 +59,7 @@ LogsCntFinder finder( *mFinder->mContactManager ); QVERIFY( finder.mCurrentPredictivePattern == "" ); + QVERIFY( finder.mCurrentInputPattern == "" ); QVERIFY( finder.mResults.count() == 0 ); QVERIFY( finder.mHistoryEvents.count() == 0 ); QVERIFY( finder.mContactManager ); @@ -66,7 +67,7 @@ } -void UT_LogsCntFinder::testPredictiveSearchQuery() +void UT_LogsCntFinder::testPredictiveSearchQuery_latin12k() { QSignalSpy queryReadySpy(mFinder, SIGNAL(queryReady() ) ); QSignalSpy resultsAddedSpy(mCntResults, SIGNAL(resultsAdded() ) ); @@ -74,6 +75,7 @@ int resultsCount = 0; LogsCntEntryHandle* handle1 = (LogsCntEntryHandle*)1; LogsCntEntryHandle* handle2 = (LogsCntEntryHandle*)2; + LogsCntEntryHandle* handle3 = (LogsCntEntryHandle*)3; LogsCntEntry* entry1 = new LogsCntEntry( *handle1,0 ); entry1->setFirstName( QString("Tim Roth") ); @@ -89,6 +91,13 @@ QVERIFY( mFinder->mHistoryEvents.count() == 2 ); QCOMPARE( mFinder->mCachedCounter, 0 ); + LogsCntEntry* entry3 = new LogsCntEntry( *handle3,0 ); + entry3->setFirstName( QString("Kaizu") ); + entry3->setLastName( QString("Oistamo") ); + mFinder->insertEntry( 1, entry3 ); + QVERIFY( mFinder->mHistoryEvents.count() == 3 ); + QCOMPARE( mFinder->mCachedCounter, 0 ); + mCntResults->set( 9 );//John1 Malkovich1 ... queryReadySpy.clear(); resultsAddedSpy.clear(); @@ -97,21 +106,23 @@ QCOMPARE( queryReadySpy.count(), 1 ); QCOMPARE( resultsAddedSpy.count(), 1 ); QVERIFY( mFinder->mCurrentPredictivePattern == QString("5") ); - QCOMPARE( mFinder->resultsCount(), 1 + 9 ); + QVERIFY( mFinder->mCurrentInputPattern == QString("5") ); + QCOMPARE( mFinder->resultsCount(), 2 + 9 ); + QVERIFY( mFinder->mResults[1]->isCached() ); QVERIFY( mFinder->mResults[0]->isCached() ); QVERIFY( mFinder->mResults[0]->handle() == handle2 ); QVERIFY( mFinder->mResults[0]->firstName()[0].text() == QString("Kai") ); QVERIFY( mFinder->mResults[0]->firstName()[0].highlights() == 1 ); QVERIFY( mFinder->mResults[0]->avatarPath() == QString("c:\\data\\images\\logstest2.jpg") ); - QVERIFY( !mFinder->mResults[1]->isCached() ); - QVERIFY( mFinder->mResults[1]->handle() == 0 ); - QVERIFY( mFinder->mResults[1]->contactId() == 1 ); - QCOMPARE( mFinder->mCachedCounter, 1 ); + QVERIFY( !mFinder->mResults[2]->isCached() ); + QVERIFY( mFinder->mResults[2]->handle() == 0 ); + QVERIFY( mFinder->mResults[2]->contactId() == 1 ); + QCOMPARE( mFinder->mCachedCounter, 2 ); - const LogsCntEntry* firstE = &mFinder->resultAt( 1 ); - QCOMPARE( mFinder->mCachedCounter, 2 ); - QVERIFY( mFinder->mResults[1]->firstName()[0].text() == QString("John1") ); - QVERIFY( mFinder->mResults[1]->firstName()[0].highlights() == 1 ); + const LogsCntEntry* firstE = &mFinder->resultAt( 2 ); + QCOMPARE( mFinder->mCachedCounter, 3 ); + QVERIFY( mFinder->mResults[2]->firstName()[0].text() == QString("John1") ); + QVERIFY( mFinder->mResults[2]->firstName()[0].highlights() == 1 ); mCntResults->set( 9 );//John1 Malkovich1 ... @@ -170,14 +181,14 @@ mFinder->predictiveSearchQuery( QString("5") ); QCOMPARE( queryReadySpy.count(), 1 ); QCOMPARE( resultsAddedSpy.count(), 1 ); - QCOMPARE( mFinder->resultsCount(), 1 + 9 ); + QCOMPARE( mFinder->resultsCount(), 2 + 9 ); QVERIFY( mFinder->mResults[0]->isCached() ); QVERIFY( mFinder->mResults[0]->handle() == handle2 ); QVERIFY( mFinder->mResults[0]->firstName()[0].text() == QString("Kai") ); QVERIFY( mFinder->mResults[0]->firstName()[0].highlights() == 1 ); - QVERIFY( !mFinder->mResults[1]->isCached() ); - QVERIFY( mFinder->mResults[1]->contactId() == 1 ); - QCOMPARE( mFinder->mCachedCounter, 1 ); + QVERIFY( !mFinder->mResults[2]->isCached() ); + QVERIFY( mFinder->mResults[2]->contactId() == 1 ); + QCOMPARE( mFinder->mCachedCounter, 2 ); CACHE_ALL_RESULTS(); QCOMPARE( mFinder->mCachedCounter, mFinder->resultsCount() ); @@ -202,17 +213,17 @@ mFinder->predictiveSearchQuery( QString("5") ); QCOMPARE( queryReadySpy.count(), 1 ); QCOMPARE( resultsAddedSpy.count(), 1 ); - QCOMPARE( mFinder->resultsCount(), 1 + 9 ); + QCOMPARE( mFinder->resultsCount(), 2 + 9 ); QVERIFY( mFinder->mResults[0]->isCached() ); QVERIFY( mFinder->mResults[0]->handle() == handle2 ); QVERIFY( mFinder->mResults[0]->firstName()[0].text() == QString("Kai") ); QVERIFY( mFinder->mResults[0]->firstName()[0].highlights() == 1 ); //althoug had to go to db, contact ids were reused from prev seacrh - QVERIFY( mFinder->mResults[1]->isCached() ); - QVERIFY( mFinder->mResults[1]->handle() == 0 ); - QVERIFY( mFinder->mResults[1]->firstName()[0].text() == QString("John1") ); - QVERIFY( mFinder->mResults[1]->firstName()[0].highlights() == 1 ); - QCOMPARE( mFinder->mCachedCounter, 10 ); + QVERIFY( mFinder->mResults[2]->isCached() ); + QVERIFY( mFinder->mResults[2]->handle() == 0 ); + QVERIFY( mFinder->mResults[2]->firstName()[0].text() == QString("John1") ); + QVERIFY( mFinder->mResults[2]->firstName()[0].highlights() == 1 ); + QCOMPARE( mFinder->mCachedCounter, 11 ); //refresh mCntResults->set( 9 ); @@ -222,7 +233,7 @@ mFinder->predictiveSearchQuery( mFinder->mCurrentPredictivePattern ); QCOMPARE( queryReadySpy.count(), 1 ); QCOMPARE( resultsAddedSpy.count(), 1 ); - QCOMPARE( mFinder->resultsCount(), 1 + 9 ); + QCOMPARE( mFinder->resultsCount(), 2 + 9 ); //reset mCntResults->set( 9 ); @@ -314,10 +325,128 @@ QCOMPARE( resultsAddedSpy.count(), 1 ); QCOMPARE( mFinder->resultsCount(), 1 ); +// -- + + qDeleteAll( mFinder->mHistoryEvents ); + mFinder->mHistoryEvents.clear(); + mFinder->predictiveSearchQuery( QString("") ); + + entry1 = new LogsCntEntry( *handle1,0 ); + entry1->setFirstName( QString("+Tim #Roth") ); + mFinder->insertEntry( 0, entry1 ); + QCOMPARE( mFinder->mHistoryEvents.count(), 1 ); + + mCntResults->reset(); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("+80#7") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 1 ); + QVERIFY( mFinder->mResults[0]->firstName()[0].text() == QString("+Tim") ); + QVERIFY( mFinder->mResults[0]->firstName()[0].highlights() == 2 ); + QVERIFY( mFinder->mResults[0]->firstName()[1].text() == QString("#Roth") ); + QVERIFY( mFinder->mResults[0]->firstName()[1].highlights() == 2 ); + QCOMPARE( mFinder->mCurrentInputPattern, QString("+80#7") ); + QCOMPARE( mFinder->mCurrentPredictivePattern, QString("*80#7") ); + QCOMPARE( mCntResults->query(), QString("+80#7") ); + +// -- + + qDeleteAll( mFinder->mHistoryEvents ); + mFinder->mHistoryEvents.clear(); + mFinder->predictiveSearchQuery( QString("") ); + + entry1 = new LogsCntEntry( *handle1,0 ); + entry1->setFirstName( QString("James Bond") ); + entry1->setPhoneNumber( QString("0401234566") ); + mFinder->insertEntry( 0, entry1 ); + QCOMPARE( mFinder->mHistoryEvents.count(), 1 ); + + entry2 = new LogsCntEntry( *handle2,0 ); + entry2->setFirstName( QString("Mika Häkkinen") ); + entry2->setPhoneNumber( QString("0401234999") ); + mFinder->insertEntry( 0, entry2 ); + QCOMPARE( mFinder->mHistoryEvents.count(), 2 ); + + mCntResults->reset(); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("0") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 2 ); + + mCntResults->reset(); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("00") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 0 ); + + mCntResults->reset(); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("000") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 0 ); + +// -- + + qDeleteAll( mFinder->mHistoryEvents ); + mFinder->mHistoryEvents.clear(); + mFinder->predictiveSearchQuery( QString("") ); + + mCntResults->set( 1, QString("Alice 028"), QString("Ming") ); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("0") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 1 ); + CACHE_ALL_RESULTS(); + + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("00") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 1 ); + CACHE_ALL_RESULTS(); + + mCntResults->set( 1, QString("James"), QString("Bond") ); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("005") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 1 ); + CACHE_ALL_RESULTS(); + + mCntResults->set( 1, QString("Alice 028"), QString("Ming") ); + queryReadySpy.clear(); + resultsAddedSpy.clear(); + + mFinder->predictiveSearchQuery( QString("00") ); + QCOMPARE( queryReadySpy.count(), 1 ); + QCOMPARE( resultsAddedSpy.count(), 1 ); + QCOMPARE( mFinder->resultsCount(), 1 ); + CACHE_ALL_RESULTS(); + + } -void UT_LogsCntFinder::testResultAt() +void UT_LogsCntFinder::testResultAt_latin12k() { mCntResults->set( 9 , QString( "first"), QString( "last") ); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictive12keytranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictive12keytranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "ut_logspredictive12keytranslator.h" +#include "logspredictive12keytranslator.h" + +#include +#include + +#include +#include + +class LogsPredictive12KeyTranslator_mock : public LogsPredictive12KeyTranslator +{ +public: + + inline LogsPredictive12KeyTranslator_mock() + :LogsPredictive12KeyTranslator() + { mKeyMap = + HbKeymapFactory::instance()->keymap( QLocale::English, + QLocale::AnyCountry ); + } + + inline QStringList nameTokens( const QString& /*name*/ ) const + {return QStringList();} + +}; + + +void UT_LogsPredictive12KeyTranslator::initTestCase() +{ + mOrigLang = HbInputSettingProxy::instance()->globalInputLanguage(); + +} + +void UT_LogsPredictive12KeyTranslator::cleanupTestCase() +{ + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + +} + + +void UT_LogsPredictive12KeyTranslator::init() +{ + mTranslator = new LogsPredictive12KeyTranslator_mock(); +} + +void UT_LogsPredictive12KeyTranslator::cleanup() +{ + delete mTranslator; + mTranslator = 0; + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + +} + +void UT_LogsPredictive12KeyTranslator::testConstructor() +{ + QVERIFY( mTranslator ); + QVERIFY( mTranslator->mKeyMap ); +} + +void UT_LogsPredictive12KeyTranslator::testPatternTokens() +{ + QCOMPARE( mTranslator->patternTokens( QString("122" ) ).length(), 1 ); + QCOMPARE( mTranslator->patternTokens( QString("122" ) )[0], QString("122" ) ); + QCOMPARE( mTranslator->patternTokens( QString("102" ) ).length(), 2 ); + QCOMPARE( mTranslator->patternTokens( QString("102" ) )[0], QString("1" ) ); + QCOMPARE( mTranslator->patternTokens( QString("102" ) )[1], QString("2" ) ); + QCOMPARE( mTranslator->patternTokens( QString("0010200" ) ).length(), 2 ); + QCOMPARE( mTranslator->patternTokens( QString("0010200" ) )[0], QString("001" ) ); + QCOMPARE( mTranslator->patternTokens( QString("0010200" ) )[1], QString("200" ) ); + QCOMPARE( mTranslator->patternTokens( QString("0" ) ).length(), 1 ); + QCOMPARE( mTranslator->patternTokens( QString("0" ) )[0], QString("0" ) ); + QCOMPARE( mTranslator->patternTokens( QString("000" ) ).length(), 1 ); + QCOMPARE( mTranslator->patternTokens( QString("000" ) )[0], QString("0" ) ); + QCOMPARE( mTranslator->patternTokens( QString("001" ) ).length(), 1 ); + QCOMPARE( mTranslator->patternTokens( QString("001" ) )[0], QString("1" ) ); + +} + +void UT_LogsPredictive12KeyTranslator::testHasPatternSeparators() +{ + QVERIFY( !mTranslator->hasPatternSeparators( QString("122" ) ) ); + QVERIFY( mTranslator->hasPatternSeparators( QString("1022" ) ) ); + QCOMPARE( mTranslator->hasPatternSeparators( QString("0010200" ) ), 5 ); + QCOMPARE( mTranslator->hasPatternSeparators( QString("0000" ) ), 4 ); + QCOMPARE( mTranslator->hasPatternSeparators( QString("345345" ) ), 0 ); + +} + +void UT_LogsPredictive12KeyTranslator::testTranslateChar() +{ + //latin + QCOMPARE( mTranslator->translateChar( QChar('0') ), QChar('0') ); + QCOMPARE( mTranslator->translateChar( QChar(0x4E0F) ), QChar() ); + +} + + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivelatin12keytranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivelatin12keytranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "ut_logspredictivelatin12keytranslator.h" +#include "logspredictivelatin12keytranslator.h" + +#include +#include + + +void UT_LogsPredictiveLatin12KeyTranslator::initTestCase() +{ +} + +void UT_LogsPredictiveLatin12KeyTranslator::cleanupTestCase() +{ +} + + +void UT_LogsPredictiveLatin12KeyTranslator::init() +{ + mTranslator = new LogsPredictiveLatin12KeyTranslator(); +} + +void UT_LogsPredictiveLatin12KeyTranslator::cleanup() +{ + delete mTranslator; + mTranslator = 0; +} + +void UT_LogsPredictiveLatin12KeyTranslator::testConstructor() +{ + QVERIFY( mTranslator ); + QVERIFY( !mTranslator->mSpecialKeyMap.isEmpty() ); + +} + +void UT_LogsPredictiveLatin12KeyTranslator::testTranslate() +{ + QVERIFY( mTranslator->translate( QString( "Nokia" ) ) == QString( "66542" ) ); + QVERIFY( mTranslator->translate( QString( "Aarne" ) ) == QString( "22763" ) ); + QVERIFY( mTranslator->translate( QString( "Bertta" ) ) == QString( "237882" ) ); + QVERIFY( mTranslator->translate( QString( "Celsius" ) ) == QString( "2357487" ) ); + QVERIFY( mTranslator->translate( QString( "Daavid" ) ) == QString( "322843" ) ); + QVERIFY( mTranslator->translate( QString( "Eemeli" ) ) == QString( "336354" ) ); + QVERIFY( mTranslator->translate( QString( "Faarao" ) ) == QString( "322726" ) ); + QVERIFY( mTranslator->translate( QString( "Gideon" ) ) == QString( "443366" ) ); + QVERIFY( mTranslator->translate( QString( "Heikki" ) ) == QString( "434554" ) ); + QVERIFY( mTranslator->translate( QString( "Iivari" ) ) == QString( "448274" ) ); + QVERIFY( mTranslator->translate( QString( "Jussi" ) ) == QString( "58774" ) ); + QVERIFY( mTranslator->translate( QString( "Kalle" ) ) == QString( "52553" ) ); + QVERIFY( mTranslator->translate( QString( "Lauri" ) ) == QString( "52874" ) ); + QVERIFY( mTranslator->translate( QString( "Matti" ) ) == QString( "62884" ) ); + QVERIFY( mTranslator->translate( QString( "Niilo" ) ) == QString( "64456" ) ); + QVERIFY( mTranslator->translate( QString( "Otto" ) ) == QString( "6886" ) ); + QVERIFY( mTranslator->translate( QString( "Paavo" ) ) == QString( "72286" ) ); + QVERIFY( mTranslator->translate( QString( "Kuu" ) ) == QString( "588" ) ); + QVERIFY( mTranslator->translate( QString( "Risto" ) ) == QString( "74786" ) ); + QVERIFY( mTranslator->translate( QString( "Sakari" ) ) == QString( "725274" ) ); + QVERIFY( mTranslator->translate( QString( "Tyyne" ) ) == QString( "89963" ) ); + QVERIFY( mTranslator->translate( QString( "Urho" ) ) == QString( "8746" ) ); + QVERIFY( mTranslator->translate( QString( "Vihtori" ) ) == QString( "8448674" ) ); + QVERIFY( mTranslator->translate( QString( "Wiski" ) ) == QString( "94754" ) ); + QVERIFY( mTranslator->translate( QString( "Yrjö" ) ) == QString( "9756" ) ); + QVERIFY( mTranslator->translate( QString( "Tseta" ) ) == QString( "87382" ) ); + QVERIFY( mTranslator->translate( QString( "Åke" ) ) == QString( "253" ) ); + QVERIFY( mTranslator->translate( QString( "Äiti" ) ) == QString( "2484" ) ); + QVERIFY( mTranslator->translate( QString( "Öljy" ) ) == QString( "6559" ) ); + QVERIFY( mTranslator->translate( QString( "Adam" ) ) == QString( "2326" ) ); + QVERIFY( mTranslator->translate( QString( "Bertil" ) ) == QString( "237845" ) ); + QVERIFY( mTranslator->translate( QString( "Cesar" ) ) == QString( "23727" ) ); + QVERIFY( mTranslator->translate( QString( "David" ) ) == QString( "32843" ) ); + QVERIFY( mTranslator->translate( QString( "Erik" ) ) == QString( "3745" ) ); + QVERIFY( mTranslator->translate( QString( "Filip" ) ) == QString( "34547" ) ); + QVERIFY( mTranslator->translate( QString( "Gustav" ) ) == QString( "487828" ) ); + QVERIFY( mTranslator->translate( QString( "Helge" ) ) == QString( "43543" ) ); + QVERIFY( mTranslator->translate( QString( "Ivar" ) ) == QString( "4827" ) ); + QVERIFY( mTranslator->translate( QString( "Johan" ) ) == QString( "56426" ) ); + QVERIFY( mTranslator->translate( QString( "Kalle" ) ) == QString( "52553" ) ); + QVERIFY( mTranslator->translate( QString( "Ludvig" ) ) == QString( "583844" ) ); + QVERIFY( mTranslator->translate( QString( "Martin" ) ) == QString( "627846" ) ); + QVERIFY( mTranslator->translate( QString( "Niklas" ) ) == QString( "645527" ) ); + QVERIFY( mTranslator->translate( QString( "Olof" ) ) == QString( "6563" ) ); + QVERIFY( mTranslator->translate( QString( "Petter" ) ) == QString( "738837" ) ); + QVERIFY( mTranslator->translate( QString( "Quintus" ) ) == QString( "7846887" ) ); + QVERIFY( mTranslator->translate( QString( "Rudolf" ) ) == QString( "783653" ) ); + QVERIFY( mTranslator->translate( QString( "Sigurd" ) ) == QString( "744873" ) ); + QVERIFY( mTranslator->translate( QString( "Tore" ) ) == QString( "8673" ) ); + QVERIFY( mTranslator->translate( QString( "Urban" ) ) == QString( "87226" ) ); + QVERIFY( mTranslator->translate( QString( "Viktor" ) ) == QString( "845867" ) ); + QVERIFY( mTranslator->translate( QString( "Wilhelm" ) ) == QString( "9454356" ) ); + QVERIFY( mTranslator->translate( QString( "Xerxes" ) ) == QString( "937937" ) ); + QVERIFY( mTranslator->translate( QString( "Yngve" ) ) == QString( "96483" ) ); + QVERIFY( mTranslator->translate( QString( "Zäta" ) ) == QString( "9282" ) ); + QVERIFY( mTranslator->translate( QString( "Ärlig" ) ) == QString( "27544" ) ); + QVERIFY( mTranslator->translate( QString( "Östen" ) ) == QString( "67836" ) ); + QVERIFY( mTranslator->translate( QString( "Alpha" ) ) == QString( "25742" ) ); + QVERIFY( mTranslator->translate( QString( "Bravo" ) ) == QString( "27286" ) ); + QVERIFY( mTranslator->translate( QString( "Charlie" ) ) == QString( "2427543" ) ); + QVERIFY( mTranslator->translate( QString( "Delta" ) ) == QString( "33582" ) ); + QVERIFY( mTranslator->translate( QString( "Echo" ) ) == QString( "3246" ) ); + QVERIFY( mTranslator->translate( QString( "Foxtrot" ) ) == QString( "3698768" ) ); + QVERIFY( mTranslator->translate( QString( "Golf" ) ) == QString( "4653" ) ); + QVERIFY( mTranslator->translate( QString( "Hotel" ) ) == QString( "46835" ) ); + QVERIFY( mTranslator->translate( QString( "India" ) ) == QString( "46342" ) ); + QVERIFY( mTranslator->translate( QString( "Juliet" ) ) == QString( "585438" ) ); + QVERIFY( mTranslator->translate( QString( "Kilo" ) ) == QString( "5456" ) ); + QVERIFY( mTranslator->translate( QString( "Lima" ) ) == QString( "5462" ) ); + QVERIFY( mTranslator->translate( QString( "Mike" ) ) == QString( "6453" ) ); + QVERIFY( mTranslator->translate( QString( "November" ) ) == QString( "66836237" ) ); + QVERIFY( mTranslator->translate( QString( "Oscar" ) ) == QString( "67227" ) ); + QVERIFY( mTranslator->translate( QString( "Papa" ) ) == QString( "7272" ) ); + QVERIFY( mTranslator->translate( QString( "Quebec" ) ) == QString( "783232" ) ); + QVERIFY( mTranslator->translate( QString( "Romeo" ) ) == QString( "76636" ) ); + QVERIFY( mTranslator->translate( QString( "Sierra" ) ) == QString( "743772" ) ); + QVERIFY( mTranslator->translate( QString( "Tanga" ) ) == QString( "82642" ) ); + QVERIFY( mTranslator->translate( QString( "Uniform" ) ) == QString( "8643676" ) ); + QVERIFY( mTranslator->translate( QString( "Vârlan" ) ) == QString( "827526" ) ); + QVERIFY( mTranslator->translate( QString( "Victor" ) ) == QString( "842867" ) ); + QVERIFY( mTranslator->translate( QString( "Whiskey" ) ) == QString( "9447539" ) ); + QVERIFY( mTranslator->translate( QString( "Xray" ) ) == QString( "9729" ) ); + QVERIFY( mTranslator->translate( QString( "Yankee" ) ) == QString( "926533" ) ); + QVERIFY( mTranslator->translate( QString( "Zulu" ) ) == QString( "9858" ) ); + QVERIFY( mTranslator->translate( QString( "1234567890" ) ) == QString( "1234567890" ) ); + QCOMPARE( mTranslator->translate( QString( "+1234567890" ) ) ,QString( "*1234567890" ) ); + QCOMPARE( mTranslator->translate( QString( "*1234567890" ) ) ,QString( "*1234567890" ) ); + QCOMPARE( mTranslator->translate( QString( "#1234567890" ) ), QString( "#1234567890" ) ); + QCOMPARE( mTranslator->translate( QString( "++##" ) ), QString( "**##" ) ); + QCOMPARE( mTranslator->translate( QString( "-+##" ) ), QString( "1*##" ) ); + QCOMPARE( mTranslator->translate( QString( "/+##" ) ), QString( "1*##" ) ); + QCOMPARE( mTranslator->translate( QString( "*+##" ) ), QString( "**##" ) ); + + QString uni; + uni.append(QChar(0x0219)); + uni.append(QChar(0x4E0F)); + QString result("7"); + + QCOMPARE(mTranslator->translate(uni), result); + + QString uni1; + uni1.append(QChar(0x4E0E)); + uni1.append(QChar(0x4E0F)); + QString result1(""); + QCOMPARE(mTranslator->translate(uni1), result1); + + QString result2; + QCOMPARE(mTranslator->translate(uni1), result2); + +} + +void UT_LogsPredictiveLatin12KeyTranslator::testTranslateChar() +{ + + QCOMPARE( mTranslator->translateChar( QChar('+') ), QChar('*') ); + QCOMPARE( mTranslator->translateChar( QChar('*') ), QChar('*') ); + QCOMPARE( mTranslator->translateChar( QChar('#') ), QChar('#') ); + QCOMPARE( mTranslator->translateChar( QChar('0') ), QChar('0') ); + QCOMPARE( mTranslator->translateChar( QChar('a') ), QChar('2') ); + QCOMPARE( mTranslator->translateChar( QChar('A') ), QChar('2') ); + QCOMPARE( mTranslator->translateChar( QChar('1') ), QChar('1') ); + QCOMPARE( mTranslator->translateChar( QChar('ä') ), QChar('2') ); + QCOMPARE( mTranslator->translateChar( QChar('Ä') ), QChar('2') ); + QCOMPARE( mTranslator->translateChar( QChar('-') ), QChar('1') ); + // Romanian unicode character "sh" + QCOMPARE( mTranslator->translateChar( QChar(0x0219) ), QChar('7') ); + // Chinese unicode character + QChar chn(0x4E0F); + QCOMPARE( mTranslator->translateChar( QChar(0x4E0F) ), QChar() ); + +} + + + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivethai12keytranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivethai12keytranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "ut_logspredictivethai12keytranslator.h" +#include "logspredictivethai12keytranslator.h" + +#include + +#include +#include + + +void UT_LogsPredictiveThai12KeyTranslator::initTestCase() +{ + mOrigLang = HbInputSettingProxy::instance()->globalInputLanguage(); +} + +void UT_LogsPredictiveThai12KeyTranslator::cleanupTestCase() +{ + + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + +} + + +void UT_LogsPredictiveThai12KeyTranslator::init() +{ + + HbInputLanguage thai( QLocale::Thai ); + + HbInputSettingProxy::instance()->setGlobalInputLanguage( thai ); + mTranslator = new LogsPredictiveThai12KeyTranslator(); + +} + +void UT_LogsPredictiveThai12KeyTranslator::cleanup() +{ + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + delete mTranslator; + mTranslator = 0; +} + +void UT_LogsPredictiveThai12KeyTranslator::testConstructor() +{ + QVERIFY( mTranslator ); + +} + +void UT_LogsPredictiveThai12KeyTranslator::testTranslate() +{ + QCOMPARE( mTranslator->translate( QString( "0123456789" ) ), QString( "0123456789" ) ); + QCOMPARE( mTranslator->translate( QString( "Nokia" ) ), QString( "" ) ); + QCOMPARE( mTranslator->translate( QString( "*0123##456*789*" ) ), QString( "0123456789" ) ); + + const int ucsize = 9; + // 1 2 3 4 5 6 7 8 9 + const QChar thaiName1[] = {0x0E01,0x0E06,0x0E0A,0x0E0E,0x0E14,0x0E19,0x0E1E,0x0E23,0x0E2A }; + QCOMPARE( mTranslator->translate( QString( thaiName1,ucsize ) ), QString( "123456789" ) ); + + // 1 2 * 4 5 6 # 8 9 + const QChar thaiName2[] = {0x0E01,0x0E06,0x0E2F,0x0E0E,0x0E14,0x0E19,0x0E30,0x0E23,0x0E2A }; + QCOMPARE( mTranslator->translate( QString( thaiName2,ucsize ) ), QString( "1245689" ) ); + + +} + +void UT_LogsPredictiveThai12KeyTranslator::testTranslateChar() +{ + + QCOMPARE( mTranslator->translateChar( QChar('0') ), QChar('0') ); + QCOMPARE( mTranslator->translateChar( QChar('1') ), QChar('1') ); + QCOMPARE( mTranslator->translateChar( QChar('N') ), QChar() ); + QCOMPARE( mTranslator->translateChar( QChar('*') ), QChar() ); + QCOMPARE( mTranslator->translateChar( QChar('#') ), QChar() ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E01) ), QChar('1') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E06) ), QChar('2') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E0A) ), QChar('3') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E0E) ), QChar('4') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E14) ), QChar('5') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E19) ), QChar('6') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E1E) ), QChar('7') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E23) ), QChar('8') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E2A) ), QChar('9') ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E2F) ), QChar() ); + QCOMPARE( mTranslator->translateChar( QChar(0x0E30) ), QChar() ); + +} + + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivetranslator.cpp --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivetranslator.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/src/ut_logspredictivetranslator.cpp Fri May 14 15:52:41 2010 +0300 @@ -14,19 +14,25 @@ * Description: * */ + +#include + #include "ut_logspredictivetranslator.h" #include "logspredictivetranslator.h" #include -#include void UT_LogsPredictiveTranslator::initTestCase() { + mOrigLang = HbInputSettingProxy::instance()->globalInputLanguage(); + } void UT_LogsPredictiveTranslator::cleanupTestCase() { + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + } @@ -38,143 +44,51 @@ void UT_LogsPredictiveTranslator::cleanup() { LogsPredictiveTranslator::deleteInstance(); + HbInputSettingProxy::instance()->setGlobalInputLanguage( mOrigLang ); + } void UT_LogsPredictiveTranslator::testConstructor() { QVERIFY( mTranslator ); QVERIFY( mTranslator->mKeyMap ); + LogsPredictiveTranslator::deleteInstance(); -} + mTranslator = 0; + HbInputLanguage thai( QLocale::Thai ); + HbInputSettingProxy::instance()->setGlobalInputLanguage( thai ); -void UT_LogsPredictiveTranslator::testTranslate() -{ - QVERIFY( mTranslator->translate( QString( "Nokia" ) ) == QString( "66542" ) ); - QVERIFY( mTranslator->translate( QString( "Aarne" ) ) == QString( "22763" ) ); - QVERIFY( mTranslator->translate( QString( "Bertta" ) ) == QString( "237882" ) ); - QVERIFY( mTranslator->translate( QString( "Celsius" ) ) == QString( "2357487" ) ); - QVERIFY( mTranslator->translate( QString( "Daavid" ) ) == QString( "322843" ) ); - QVERIFY( mTranslator->translate( QString( "Eemeli" ) ) == QString( "336354" ) ); - QVERIFY( mTranslator->translate( QString( "Faarao" ) ) == QString( "322726" ) ); - QVERIFY( mTranslator->translate( QString( "Gideon" ) ) == QString( "443366" ) ); - QVERIFY( mTranslator->translate( QString( "Heikki" ) ) == QString( "434554" ) ); - QVERIFY( mTranslator->translate( QString( "Iivari" ) ) == QString( "448274" ) ); - QVERIFY( mTranslator->translate( QString( "Jussi" ) ) == QString( "58774" ) ); - QVERIFY( mTranslator->translate( QString( "Kalle" ) ) == QString( "52553" ) ); - QVERIFY( mTranslator->translate( QString( "Lauri" ) ) == QString( "52874" ) ); - QVERIFY( mTranslator->translate( QString( "Matti" ) ) == QString( "62884" ) ); - QVERIFY( mTranslator->translate( QString( "Niilo" ) ) == QString( "64456" ) ); - QVERIFY( mTranslator->translate( QString( "Otto" ) ) == QString( "6886" ) ); - QVERIFY( mTranslator->translate( QString( "Paavo" ) ) == QString( "72286" ) ); - QVERIFY( mTranslator->translate( QString( "Kuu" ) ) == QString( "588" ) ); - QVERIFY( mTranslator->translate( QString( "Risto" ) ) == QString( "74786" ) ); - QVERIFY( mTranslator->translate( QString( "Sakari" ) ) == QString( "725274" ) ); - QVERIFY( mTranslator->translate( QString( "Tyyne" ) ) == QString( "89963" ) ); - QVERIFY( mTranslator->translate( QString( "Urho" ) ) == QString( "8746" ) ); - QVERIFY( mTranslator->translate( QString( "Vihtori" ) ) == QString( "8448674" ) ); - QVERIFY( mTranslator->translate( QString( "Wiski" ) ) == QString( "94754" ) ); - QVERIFY( mTranslator->translate( QString( "Yrjö" ) ) == QString( "9756" ) ); - QVERIFY( mTranslator->translate( QString( "Tseta" ) ) == QString( "87382" ) ); - QVERIFY( mTranslator->translate( QString( "Åke" ) ) == QString( "253" ) ); - QVERIFY( mTranslator->translate( QString( "Äiti" ) ) == QString( "2484" ) ); - QVERIFY( mTranslator->translate( QString( "Öljy" ) ) == QString( "6559" ) ); - QVERIFY( mTranslator->translate( QString( "Adam" ) ) == QString( "2326" ) ); - QVERIFY( mTranslator->translate( QString( "Bertil" ) ) == QString( "237845" ) ); - QVERIFY( mTranslator->translate( QString( "Cesar" ) ) == QString( "23727" ) ); - QVERIFY( mTranslator->translate( QString( "David" ) ) == QString( "32843" ) ); - QVERIFY( mTranslator->translate( QString( "Erik" ) ) == QString( "3745" ) ); - QVERIFY( mTranslator->translate( QString( "Filip" ) ) == QString( "34547" ) ); - QVERIFY( mTranslator->translate( QString( "Gustav" ) ) == QString( "487828" ) ); - QVERIFY( mTranslator->translate( QString( "Helge" ) ) == QString( "43543" ) ); - QVERIFY( mTranslator->translate( QString( "Ivar" ) ) == QString( "4827" ) ); - QVERIFY( mTranslator->translate( QString( "Johan" ) ) == QString( "56426" ) ); - QVERIFY( mTranslator->translate( QString( "Kalle" ) ) == QString( "52553" ) ); - QVERIFY( mTranslator->translate( QString( "Ludvig" ) ) == QString( "583844" ) ); - QVERIFY( mTranslator->translate( QString( "Martin" ) ) == QString( "627846" ) ); - QVERIFY( mTranslator->translate( QString( "Niklas" ) ) == QString( "645527" ) ); - QVERIFY( mTranslator->translate( QString( "Olof" ) ) == QString( "6563" ) ); - QVERIFY( mTranslator->translate( QString( "Petter" ) ) == QString( "738837" ) ); - QVERIFY( mTranslator->translate( QString( "Quintus" ) ) == QString( "7846887" ) ); - QVERIFY( mTranslator->translate( QString( "Rudolf" ) ) == QString( "783653" ) ); - QVERIFY( mTranslator->translate( QString( "Sigurd" ) ) == QString( "744873" ) ); - QVERIFY( mTranslator->translate( QString( "Tore" ) ) == QString( "8673" ) ); - QVERIFY( mTranslator->translate( QString( "Urban" ) ) == QString( "87226" ) ); - QVERIFY( mTranslator->translate( QString( "Viktor" ) ) == QString( "845867" ) ); - QVERIFY( mTranslator->translate( QString( "Wilhelm" ) ) == QString( "9454356" ) ); - QVERIFY( mTranslator->translate( QString( "Xerxes" ) ) == QString( "937937" ) ); - QVERIFY( mTranslator->translate( QString( "Yngve" ) ) == QString( "96483" ) ); - QVERIFY( mTranslator->translate( QString( "Zäta" ) ) == QString( "9282" ) ); - QVERIFY( mTranslator->translate( QString( "Ärlig" ) ) == QString( "27544" ) ); - QVERIFY( mTranslator->translate( QString( "Östen" ) ) == QString( "67836" ) ); - QVERIFY( mTranslator->translate( QString( "Alpha" ) ) == QString( "25742" ) ); - QVERIFY( mTranslator->translate( QString( "Bravo" ) ) == QString( "27286" ) ); - QVERIFY( mTranslator->translate( QString( "Charlie" ) ) == QString( "2427543" ) ); - QVERIFY( mTranslator->translate( QString( "Delta" ) ) == QString( "33582" ) ); - QVERIFY( mTranslator->translate( QString( "Echo" ) ) == QString( "3246" ) ); - QVERIFY( mTranslator->translate( QString( "Foxtrot" ) ) == QString( "3698768" ) ); - QVERIFY( mTranslator->translate( QString( "Golf" ) ) == QString( "4653" ) ); - QVERIFY( mTranslator->translate( QString( "Hotel" ) ) == QString( "46835" ) ); - QVERIFY( mTranslator->translate( QString( "India" ) ) == QString( "46342" ) ); - QVERIFY( mTranslator->translate( QString( "Juliet" ) ) == QString( "585438" ) ); - QVERIFY( mTranslator->translate( QString( "Kilo" ) ) == QString( "5456" ) ); - QVERIFY( mTranslator->translate( QString( "Lima" ) ) == QString( "5462" ) ); - QVERIFY( mTranslator->translate( QString( "Mike" ) ) == QString( "6453" ) ); - QVERIFY( mTranslator->translate( QString( "November" ) ) == QString( "66836237" ) ); - QVERIFY( mTranslator->translate( QString( "Oscar" ) ) == QString( "67227" ) ); - QVERIFY( mTranslator->translate( QString( "Papa" ) ) == QString( "7272" ) ); - QVERIFY( mTranslator->translate( QString( "Quebec" ) ) == QString( "783232" ) ); - QVERIFY( mTranslator->translate( QString( "Romeo" ) ) == QString( "76636" ) ); - QVERIFY( mTranslator->translate( QString( "Sierra" ) ) == QString( "743772" ) ); - QVERIFY( mTranslator->translate( QString( "Tanga" ) ) == QString( "82642" ) ); - QVERIFY( mTranslator->translate( QString( "Uniform" ) ) == QString( "8643676" ) ); - QVERIFY( mTranslator->translate( QString( "Vârlan" ) ) == QString( "827526" ) ); - QVERIFY( mTranslator->translate( QString( "Victor" ) ) == QString( "842867" ) ); - QVERIFY( mTranslator->translate( QString( "Whiskey" ) ) == QString( "9447539" ) ); - QVERIFY( mTranslator->translate( QString( "Xray" ) ) == QString( "9729" ) ); - QVERIFY( mTranslator->translate( QString( "Yankee" ) ) == QString( "926533" ) ); - QVERIFY( mTranslator->translate( QString( "Zulu" ) ) == QString( "9858" ) ); - QVERIFY( mTranslator->translate( QString( "1234567890" ) ) == QString( "1234567890" ) ); - QCOMPARE( mTranslator->translate( QString( "+1234567890" ) ) ,QString( "11234567890" ) ); - QCOMPARE( mTranslator->translate( QString( "#1234567890" ) ), QString( "11234567890" ) ); - QCOMPARE( mTranslator->translate( QString( "++##" ) ), QString( "1111" ) ); - QCOMPARE( mTranslator->translate( QString( "-+##" ) ), QString( "1111" ) ); - QCOMPARE( mTranslator->translate( QString( "/+##" ) ), QString( "1111" ) ); - QCOMPARE( mTranslator->translate( QString( "*+##" ) ), QString( "1111" ) ); - - - QString uni; - uni.append(QChar(0x0219)); - uni.append(QChar(0x4E0F)); - QString result("7"); - result.append(QChar(0x4E0F)); - QCOMPARE(mTranslator->translate(uni), result); -} - -void UT_LogsPredictiveTranslator::testTranslateChar() -{ - // Romanian unicode character "sh" - QChar rom(0x0219); - QCOMPARE( mTranslator->translate( rom ), QChar('7') ); - - // Chinese unicode character - QChar chn(0x4E0F); - QCOMPARE( mTranslator->translate( chn ), chn ); -} - - -void UT_LogsPredictiveTranslator::testStartsWith() -{ - QVERIFY( mTranslator->startsWith( QString(""), QString("") ) == 0 ); - QVERIFY( mTranslator->startsWith( QString(""), QString("12") ) == 0 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("") ) == 0 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("6") ) == 1 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("66") ) == 2 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("665") ) == 3 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("6654") ) == 4 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("66542") ) == 5 ); - QVERIFY( mTranslator->startsWith( QString("Nokia"), QString("665423") ) == 0 ); - + mTranslator = LogsPredictiveTranslator::instance(); + QVERIFY( mTranslator ); + QVERIFY( mTranslator->mKeyMap ); } +void UT_LogsPredictiveTranslator::testTranslate() +{ + QString test1( "12345" ); + + QCOMPARE( mTranslator->LogsPredictiveTranslator::translate( test1 ).length(), + test1.length() ); + + QCOMPARE( mTranslator->LogsPredictiveTranslator::translate( test1, 2 ).length(), + 2 ); +} + +void UT_LogsPredictiveTranslator::testStartsWith() +{ + QCOMPARE( mTranslator->startsWith( QString("" ), QString("") ), 0 ); + QCOMPARE( mTranslator->startsWith( QString("123" ), QString("") ), 0 ); + QCOMPARE( mTranslator->startsWith( QString("" ), QString("123") ), 0 ); + QCOMPARE( mTranslator->startsWith( QString("123" ), QString("1234") ), 0 ); + QCOMPARE( mTranslator->startsWith( QString("123" ), QString("1") ), 1 ); + QCOMPARE( mTranslator->startsWith( QString("123" ), QString("123") ), 3 ); + QCOMPARE( mTranslator->startsWith( QString("123" ), QString("12"), true ), 2 ); + QCOMPARE( mTranslator->startsWith( QString("123" ), QString("12"), false ), 2 ); + +} + + + + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logscntfinder/tsrc/ut_logscntfinder/ut_logscntfinder.pro --- a/logsui/logscntfinder/tsrc/ut_logscntfinder/ut_logscntfinder.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logscntfinder/tsrc/ut_logscntfinder/ut_logscntfinder.pro Fri May 14 15:52:41 2010 +0300 @@ -35,18 +35,32 @@ # Input HEADERS += inc/ut_logscntfinder.h +HEADERS += inc/ut_logspredictivetranslator.h +HEADERS += inc/ut_logspredictive12keytranslator.h +HEADERS += inc/ut_logspredictivelatin12keytranslator.h +HEADERS += inc/ut_logspredictivethai12keytranslator.h +HEADERS += inc/ut_logscntentry.h HEADERS += ../../inc/logscntfinder.h -HEADERS += inc/ut_logspredictivetranslator.h +HEADERS += ../../inc/logscntentry.h HEADERS += ../../inc/logspredictivetranslator.h -HEADERS += inc/ut_logscntentry.h +HEADERS += ../../inc/logspredictive12keytranslator.h +HEADERS += ../../inc/logspredictivelatin12keytranslator.h +HEADERS += ../../inc/logspredictivethai12keytranslator.h HEADERS += ../stubs/qtcontacts_stubs.h SOURCES += src/main.cpp SOURCES += src/ut_logscntfinder.cpp SOURCES += src/ut_logspredictivetranslator.cpp +SOURCES += src/ut_logspredictive12keytranslator.cpp +SOURCES += src/ut_logspredictivelatin12keytranslator.cpp +SOURCES += src/ut_logspredictivethai12keytranslator.cpp SOURCES += src/ut_logscntentry.cpp SOURCES += ../../src/logscntfinder.cpp +SOURCES += ../../src/logscntentry.cpp SOURCES += ../../src/logspredictivetranslator.cpp +SOURCES += ../../src/logspredictive12keytranslator.cpp +SOURCES += ../../src/logspredictivelatin12keytranslator.cpp +SOURCES += ../../src/logspredictivethai12keytranslator.cpp SOURCES += ../../../tsrc/qtestutils/src/testresultxmlparser.cpp SOURCES += ../stubs/qtcontacts_stubs.cpp diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/bwins/logsengineu.def --- a/logsui/logsengine/bwins/logsengineu.def Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/bwins/logsengineu.def Fri May 14 15:52:41 2010 +0300 @@ -1,59 +1,64 @@ EXPORTS ?time@LogsEvent@@QBE?AVQDateTime@@XZ @ 1 NONAME ; class QDateTime LogsEvent::time(void) const - ??0LogsCustomFilter@@QAE@XZ @ 2 NONAME ; LogsCustomFilter::LogsCustomFilter(void) - ?clearEvents@LogsCustomFilter@@QAE_NXZ @ 3 NONAME ; bool LogsCustomFilter::clearEvents(void) - ?ALS@LogsEvent@@QBE_NXZ @ 4 NONAME ; bool LogsEvent::ALS(void) const - ?updateExisting@LogsContact@@QAE_NXZ @ 5 NONAME ; bool LogsContact::updateExisting(void) - ??0LogsModel@@QAE@W4LogsModelType@0@_N@Z @ 6 NONAME ; LogsModel::LogsModel(enum LogsModel::LogsModelType, bool) - ?allowedRequestType@LogsContact@@QAE?AW4RequestType@1@XZ @ 7 NONAME ; enum LogsContact::RequestType LogsContact::allowedRequestType(void) - ??0LogsEvent@@QAE@ABV0@@Z @ 8 NONAME ; LogsEvent::LogsEvent(class LogsEvent const &) - ?markEventsSeen@LogsModel@@QAE_NW4ClearType@1@@Z @ 9 NONAME ; bool LogsModel::markEventsSeen(enum LogsModel::ClearType) - ?getNumberToClipboard@LogsDetailsModel@@QAEXXZ @ 10 NONAME ; void LogsDetailsModel::getNumberToClipboard(void) - ??0LogsFilter@@QAE@W4FilterType@0@@Z @ 11 NONAME ; LogsFilter::LogsFilter(enum LogsFilter::FilterType) - ?sendMessage@LogsMessage@@QAE_NXZ @ 12 NONAME ; bool LogsMessage::sendMessage(void) - ?predictiveSearchStatus@LogsModel@@QAEHXZ @ 13 NONAME ; int LogsModel::predictiveSearchStatus(void) - ?duration@LogsEvent@@QBEHXZ @ 14 NONAME ; int LogsEvent::duration(void) const - ?contactLocalId@LogsEvent@@QBEIXZ @ 15 NONAME ; unsigned int LogsEvent::contactLocalId(void) const - ??1LogsMatchesModel@@UAE@XZ @ 16 NONAME ; LogsMatchesModel::~LogsMatchesModel(void) - ?open@LogsContact@@QAE_NXZ @ 17 NONAME ; bool LogsContact::open(void) - ?logId@LogsEvent@@QBEHXZ @ 18 NONAME ; int LogsEvent::logId(void) const - ?call@LogsCall@@QAEXW4CallType@1@@Z @ 19 NONAME ; void LogsCall::call(enum LogsCall::CallType) - ?allowedCallTypes@LogsCall@@QAE?AV?$QList@W4CallType@LogsCall@@@@XZ @ 20 NONAME ; class QList LogsCall::allowedCallTypes(void) - ?callToNumber@LogsCall@@SAXW4CallType@1@ABVQString@@I@Z @ 21 NONAME ; void LogsCall::callToNumber(enum LogsCall::CallType, class QString const &, unsigned int) - ?setContactId@LogsCustomFilter@@QAEXI@Z @ 22 NONAME ; void LogsCustomFilter::setContactId(unsigned int) - ??1LogsModel@@UAE@XZ @ 23 NONAME ; LogsModel::~LogsModel(void) - ?remoteParty@LogsEvent@@QBEABVQString@@XZ @ 24 NONAME ; class QString const & LogsEvent::remoteParty(void) const - ?compressData@LogsModel@@QAEHXZ @ 25 NONAME ; int LogsModel::compressData(void) - ?addNew@LogsContact@@QAE_NXZ @ 26 NONAME ; bool LogsContact::addNew(void) - ?isRead@LogsEvent@@QBE_NXZ @ 27 NONAME ; bool LogsEvent::isRead(void) const - ?ringDuration@LogsEvent@@QBEHXZ @ 28 NONAME ; int LogsEvent::ringDuration(void) const - ?markEventsSeen@LogsCustomFilter@@QAE_NXZ @ 29 NONAME ; bool LogsCustomFilter::markEventsSeen(void) - ??1LogsDetailsModel@@UAE@XZ @ 30 NONAME ; LogsDetailsModel::~LogsDetailsModel(void) - ?number@LogsEvent@@QBEABVQString@@XZ @ 31 NONAME ; class QString const & LogsEvent::number(void) const - ?logsMatchesModel@LogsModel@@QAEPAVLogsMatchesModel@@XZ @ 32 NONAME ; class LogsMatchesModel * LogsModel::logsMatchesModel(void) - ??1LogsFilter@@UAE@XZ @ 33 NONAME ; LogsFilter::~LogsFilter(void) - ??1LogsMessage@@UAE@XZ @ 34 NONAME ; LogsMessage::~LogsMessage(void) - ?logsMatches@LogsMatchesModel@@QAEXABVQString@@@Z @ 35 NONAME ; void LogsMatchesModel::logsMatches(class QString const &) - ?setPredictiveSearch@LogsModel@@QAEH_N@Z @ 36 NONAME ; int LogsModel::setPredictiveSearch(bool) - ?duplicates@LogsEvent@@QBEHXZ @ 37 NONAME ; int LogsEvent::duplicates(void) const - ?getNumberForCalling@LogsEvent@@QAE?AVQString@@XZ @ 38 NONAME ; class QString LogsEvent::getNumberForCalling(void) - ?createContact@LogsMatchesModel@@QAEPAVLogsContact@@ABVQString@@@Z @ 39 NONAME ; class LogsContact * LogsMatchesModel::createContact(class QString const &) - ?direction@LogsEvent@@QBE?AW4LogsDirection@1@XZ @ 40 NONAME ; enum LogsEvent::LogsDirection LogsEvent::direction(void) const - ?refreshData@LogsModel@@QAEHXZ @ 41 NONAME ; int LogsModel::refreshData(void) - ?clearEvent@LogsDetailsModel@@QAEXXZ @ 42 NONAME ; void LogsDetailsModel::clearEvent(void) - ?clearMissedCallsCounter@LogsModel@@QAEHXZ @ 43 NONAME ; int LogsModel::clearMissedCallsCounter(void) - ?filterType@LogsFilter@@QBE?AW4FilterType@1@XZ @ 44 NONAME ; enum LogsFilter::FilterType LogsFilter::filterType(void) const - ?setPredictiveSearch@LogsMatchesModel@@QAEH_N@Z @ 45 NONAME ; int LogsMatchesModel::setPredictiveSearch(bool) - ??1LogsEvent@@UAE@XZ @ 46 NONAME ; LogsEvent::~LogsEvent(void) - ?setMaxSize@LogsFilter@@QAEXH@Z @ 47 NONAME ; void LogsFilter::setMaxSize(int) - ?initiateCallback@LogsCall@@QAEXXZ @ 48 NONAME ; void LogsCall::initiateCallback(void) - ??1LogsCustomFilter@@UAE@XZ @ 49 NONAME ; LogsCustomFilter::~LogsCustomFilter(void) - ?sendMessageToNumber@LogsMessage@@SA_NABVQString@@0I@Z @ 50 NONAME ; bool LogsMessage::sendMessageToNumber(class QString const &, class QString const &, unsigned int) - ?defaultCallType@LogsCall@@QAE?AW4CallType@1@XZ @ 51 NONAME ; enum LogsCall::CallType LogsCall::defaultCallType(void) - ?predictiveSearchStatus@LogsMatchesModel@@QAEHXZ @ 52 NONAME ; int LogsMatchesModel::predictiveSearchStatus(void) - ?eventType@LogsEvent@@QBE?AW4LogsEventType@1@XZ @ 53 NONAME ; enum LogsEvent::LogsEventType LogsEvent::eventType(void) const - ??1LogsCall@@UAE@XZ @ 54 NONAME ; LogsCall::~LogsCall(void) - ?clearList@LogsModel@@QAE_NW4ClearType@1@@Z @ 55 NONAME ; bool LogsModel::clearList(enum LogsModel::ClearType) - ??1LogsContact@@UAE@XZ @ 56 NONAME ; LogsContact::~LogsContact(void) - ?clearType@LogsFilter@@QBE?AW4ClearType@LogsModel@@XZ @ 57 NONAME ; enum LogsModel::ClearType LogsFilter::clearType(void) const + ?setPredictiveSearch@LogsAbstractModel@@QAEH_N@Z @ 2 NONAME ; int LogsAbstractModel::setPredictiveSearch(bool) + ??0LogsCustomFilter@@QAE@XZ @ 3 NONAME ; LogsCustomFilter::LogsCustomFilter(void) + ?isCommunicationPossible@LogsAbstractModel@@QBE_NABVLogsEvent@@@Z @ 4 NONAME ; bool LogsAbstractModel::isCommunicationPossible(class LogsEvent const &) const + ?clearEvents@LogsCustomFilter@@QAE_NXZ @ 5 NONAME ; bool LogsCustomFilter::clearEvents(void) + ?predictiveSearchStatus@LogsAbstractModel@@QAEHXZ @ 6 NONAME ; int LogsAbstractModel::predictiveSearchStatus(void) + ?ALS@LogsEvent@@QBE_NXZ @ 7 NONAME ; bool LogsEvent::ALS(void) const + ?updateExisting@LogsContact@@QAE_NXZ @ 8 NONAME ; bool LogsContact::updateExisting(void) + ??0LogsModel@@QAE@W4LogsModelType@0@_N@Z @ 9 NONAME ; LogsModel::LogsModel(enum LogsModel::LogsModelType, bool) + ?allowedRequestType@LogsContact@@QAE?AW4RequestType@1@XZ @ 10 NONAME ; enum LogsContact::RequestType LogsContact::allowedRequestType(void) + ??0LogsEvent@@QAE@ABV0@@Z @ 11 NONAME ; LogsEvent::LogsEvent(class LogsEvent const &) + ?markEventsSeen@LogsModel@@QAE_NW4ClearType@1@@Z @ 12 NONAME ; bool LogsModel::markEventsSeen(enum LogsModel::ClearType) + ?getNumberToClipboard@LogsDetailsModel@@QAEXXZ @ 13 NONAME ; void LogsDetailsModel::getNumberToClipboard(void) + ??0LogsFilter@@QAE@W4FilterType@0@@Z @ 14 NONAME ; LogsFilter::LogsFilter(enum LogsFilter::FilterType) + ?sendMessage@LogsMessage@@QAE_NXZ @ 15 NONAME ; bool LogsMessage::sendMessage(void) + ?duration@LogsEvent@@QBEHXZ @ 16 NONAME ; int LogsEvent::duration(void) const + ?contactLocalId@LogsEvent@@QBEIXZ @ 17 NONAME ; unsigned int LogsEvent::contactLocalId(void) const + ??1LogsMatchesModel@@UAE@XZ @ 18 NONAME ; LogsMatchesModel::~LogsMatchesModel(void) + ?open@LogsContact@@QAE_NXZ @ 19 NONAME ; bool LogsContact::open(void) + ?logId@LogsEvent@@QBEHXZ @ 20 NONAME ; int LogsEvent::logId(void) const + ?updateConfiguration@LogsModel@@QAEHAAVLogsConfigurationParams@@@Z @ 21 NONAME ; int LogsModel::updateConfiguration(class LogsConfigurationParams &) + ?call@LogsCall@@QAEXW4CallType@1@@Z @ 22 NONAME ; void LogsCall::call(enum LogsCall::CallType) + ?allowedCallTypes@LogsCall@@QAE?AV?$QList@W4CallType@LogsCall@@@@XZ @ 23 NONAME ; class QList LogsCall::allowedCallTypes(void) + ?callToNumber@LogsCall@@SAXW4CallType@1@ABVQString@@I@Z @ 24 NONAME ; void LogsCall::callToNumber(enum LogsCall::CallType, class QString const &, unsigned int) + ?setContactId@LogsCustomFilter@@QAEXI@Z @ 25 NONAME ; void LogsCustomFilter::setContactId(unsigned int) + ??1LogsModel@@UAE@XZ @ 26 NONAME ; LogsModel::~LogsModel(void) + ??1LogsConfigurationParams@@UAE@XZ @ 27 NONAME ; LogsConfigurationParams::~LogsConfigurationParams(void) + ?remoteParty@LogsEvent@@QBEABVQString@@XZ @ 28 NONAME ; class QString const & LogsEvent::remoteParty(void) const + ?compressData@LogsModel@@QAEHXZ @ 29 NONAME ; int LogsModel::compressData(void) + ?addNew@LogsContact@@QAE_NXZ @ 30 NONAME ; bool LogsContact::addNew(void) + ?setListItemTextWidth@LogsConfigurationParams@@QAEXH@Z @ 31 NONAME ; void LogsConfigurationParams::setListItemTextWidth(int) + ?isRead@LogsEvent@@QBE_NXZ @ 32 NONAME ; bool LogsEvent::isRead(void) const + ?ringDuration@LogsEvent@@QBEHXZ @ 33 NONAME ; int LogsEvent::ringDuration(void) const + ?markEventsSeen@LogsCustomFilter@@QAE_NXZ @ 34 NONAME ; bool LogsCustomFilter::markEventsSeen(void) + ??1LogsDetailsModel@@UAE@XZ @ 35 NONAME ; LogsDetailsModel::~LogsDetailsModel(void) + ?number@LogsEvent@@QBEABVQString@@XZ @ 36 NONAME ; class QString const & LogsEvent::number(void) const + ?logsMatchesModel@LogsModel@@QAEPAVLogsMatchesModel@@XZ @ 37 NONAME ; class LogsMatchesModel * LogsModel::logsMatchesModel(void) + ?createContact@LogsAbstractModel@@QAEPAVLogsContact@@ABVQString@@@Z @ 38 NONAME ; class LogsContact * LogsAbstractModel::createContact(class QString const &) + ??1LogsFilter@@UAE@XZ @ 39 NONAME ; LogsFilter::~LogsFilter(void) + ??1LogsMessage@@UAE@XZ @ 40 NONAME ; LogsMessage::~LogsMessage(void) + ?logsMatches@LogsMatchesModel@@QAEXABVQString@@@Z @ 41 NONAME ; void LogsMatchesModel::logsMatches(class QString const &) + ?listItemTextWidth@LogsConfigurationParams@@QBEHXZ @ 42 NONAME ; int LogsConfigurationParams::listItemTextWidth(void) const + ?duplicates@LogsEvent@@QBEHXZ @ 43 NONAME ; int LogsEvent::duplicates(void) const + ?getNumberForCalling@LogsEvent@@QAE?AVQString@@XZ @ 44 NONAME ; class QString LogsEvent::getNumberForCalling(void) + ?direction@LogsEvent@@QBE?AW4LogsDirection@1@XZ @ 45 NONAME ; enum LogsEvent::LogsDirection LogsEvent::direction(void) const + ?refreshData@LogsModel@@QAEHXZ @ 46 NONAME ; int LogsModel::refreshData(void) + ?clearEvent@LogsDetailsModel@@QAEXXZ @ 47 NONAME ; void LogsDetailsModel::clearEvent(void) + ?clearMissedCallsCounter@LogsModel@@QAEHXZ @ 48 NONAME ; int LogsModel::clearMissedCallsCounter(void) + ?filterType@LogsFilter@@QBE?AW4FilterType@1@XZ @ 49 NONAME ; enum LogsFilter::FilterType LogsFilter::filterType(void) const + ??1LogsEvent@@UAE@XZ @ 50 NONAME ; LogsEvent::~LogsEvent(void) + ??4LogsConfigurationParams@@QAEAAV0@ABV0@@Z @ 51 NONAME ; class LogsConfigurationParams & LogsConfigurationParams::operator=(class LogsConfigurationParams const &) + ?setMaxSize@LogsFilter@@QAEXH@Z @ 52 NONAME ; void LogsFilter::setMaxSize(int) + ?initiateCallback@LogsCall@@QAEXXZ @ 53 NONAME ; void LogsCall::initiateCallback(void) + ??1LogsCustomFilter@@UAE@XZ @ 54 NONAME ; LogsCustomFilter::~LogsCustomFilter(void) + ?sendMessageToNumber@LogsMessage@@SA_NABVQString@@0I@Z @ 55 NONAME ; bool LogsMessage::sendMessageToNumber(class QString const &, class QString const &, unsigned int) + ?defaultCallType@LogsCall@@QAE?AW4CallType@1@XZ @ 56 NONAME ; enum LogsCall::CallType LogsCall::defaultCallType(void) + ??0LogsConfigurationParams@@QAE@PAVQObject@@@Z @ 57 NONAME ; LogsConfigurationParams::LogsConfigurationParams(class QObject *) + ?eventType@LogsEvent@@QBE?AW4LogsEventType@1@XZ @ 58 NONAME ; enum LogsEvent::LogsEventType LogsEvent::eventType(void) const + ??1LogsCall@@UAE@XZ @ 59 NONAME ; LogsCall::~LogsCall(void) + ?clearList@LogsModel@@QAE_NW4ClearType@1@@Z @ 60 NONAME ; bool LogsModel::clearList(enum LogsModel::ClearType) + ??1LogsContact@@UAE@XZ @ 61 NONAME ; LogsContact::~LogsContact(void) + ?clearType@LogsFilter@@QBE?AW4ClearType@LogsModel@@XZ @ 62 NONAME ; enum LogsModel::ClearType LogsFilter::clearType(void) const diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/eabi/logsengineu.def --- a/logsui/logsengine/eabi/logsengineu.def Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/eabi/logsengineu.def Fri May 14 15:52:41 2010 +0300 @@ -31,51 +31,59 @@ _ZN16LogsDetailsModelD1Ev @ 30 NONAME _ZN16LogsDetailsModelD2Ev @ 31 NONAME _ZN16LogsMatchesModel11logsMatchesERK7QString @ 32 NONAME - _ZN16LogsMatchesModel13createContactERK7QString @ 33 NONAME - _ZN16LogsMatchesModel19setPredictiveSearchEb @ 34 NONAME - _ZN16LogsMatchesModel22predictiveSearchStatusEv @ 35 NONAME - _ZN16LogsMatchesModelD0Ev @ 36 NONAME - _ZN16LogsMatchesModelD1Ev @ 37 NONAME - _ZN16LogsMatchesModelD2Ev @ 38 NONAME - _ZN8LogsCall12callToNumberENS_8CallTypeERK7QStringj @ 39 NONAME - _ZN8LogsCall15defaultCallTypeEv @ 40 NONAME - _ZN8LogsCall16allowedCallTypesEv @ 41 NONAME - _ZN8LogsCall16initiateCallbackEv @ 42 NONAME - _ZN8LogsCall4callENS_8CallTypeE @ 43 NONAME - _ZN8LogsCallD0Ev @ 44 NONAME - _ZN8LogsCallD1Ev @ 45 NONAME - _ZN8LogsCallD2Ev @ 46 NONAME - _ZN9LogsEvent19getNumberForCallingEv @ 47 NONAME - _ZN9LogsEventC1ERKS_ @ 48 NONAME - _ZN9LogsEventC2ERKS_ @ 49 NONAME - _ZN9LogsEventD0Ev @ 50 NONAME - _ZN9LogsEventD1Ev @ 51 NONAME - _ZN9LogsEventD2Ev @ 52 NONAME - _ZN9LogsModel11refreshDataEv @ 53 NONAME - _ZN9LogsModel12compressDataEv @ 54 NONAME - _ZN9LogsModel14markEventsSeenENS_9ClearTypeE @ 55 NONAME - _ZN9LogsModel16logsMatchesModelEv @ 56 NONAME - _ZN9LogsModel19setPredictiveSearchEb @ 57 NONAME - _ZN9LogsModel22predictiveSearchStatusEv @ 58 NONAME - _ZN9LogsModel23clearMissedCallsCounterEv @ 59 NONAME - _ZN9LogsModel9clearListENS_9ClearTypeE @ 60 NONAME - _ZN9LogsModelC1ENS_13LogsModelTypeEb @ 61 NONAME - _ZN9LogsModelC2ENS_13LogsModelTypeEb @ 62 NONAME - _ZN9LogsModelD0Ev @ 63 NONAME - _ZN9LogsModelD1Ev @ 64 NONAME - _ZN9LogsModelD2Ev @ 65 NONAME - _ZNK10LogsFilter10filterTypeEv @ 66 NONAME - _ZNK10LogsFilter9clearTypeEv @ 67 NONAME - _ZNK9LogsEvent10duplicatesEv @ 68 NONAME - _ZNK9LogsEvent11remotePartyEv @ 69 NONAME - _ZNK9LogsEvent12ringDurationEv @ 70 NONAME - _ZNK9LogsEvent14contactLocalIdEv @ 71 NONAME - _ZNK9LogsEvent3ALSEv @ 72 NONAME - _ZNK9LogsEvent4timeEv @ 73 NONAME - _ZNK9LogsEvent5logIdEv @ 74 NONAME - _ZNK9LogsEvent6isReadEv @ 75 NONAME - _ZNK9LogsEvent6numberEv @ 76 NONAME - _ZNK9LogsEvent8durationEv @ 77 NONAME - _ZNK9LogsEvent9directionEv @ 78 NONAME - _ZNK9LogsEvent9eventTypeEv @ 79 NONAME + _ZN16LogsMatchesModelD0Ev @ 33 NONAME + _ZN16LogsMatchesModelD1Ev @ 34 NONAME + _ZN16LogsMatchesModelD2Ev @ 35 NONAME + _ZN17LogsAbstractModel13createContactERK7QString @ 36 NONAME + _ZN17LogsAbstractModel19setPredictiveSearchEb @ 37 NONAME + _ZN17LogsAbstractModel22predictiveSearchStatusEv @ 38 NONAME + _ZN23LogsConfigurationParams20setListItemTextWidthEi @ 39 NONAME + _ZN23LogsConfigurationParamsC1EP7QObject @ 40 NONAME + _ZN23LogsConfigurationParamsC2EP7QObject @ 41 NONAME + _ZN23LogsConfigurationParamsD0Ev @ 42 NONAME + _ZN23LogsConfigurationParamsD1Ev @ 43 NONAME + _ZN23LogsConfigurationParamsD2Ev @ 44 NONAME + _ZN23LogsConfigurationParamsaSERKS_ @ 45 NONAME + _ZN8LogsCall12callToNumberENS_8CallTypeERK7QStringj @ 46 NONAME + _ZN8LogsCall15defaultCallTypeEv @ 47 NONAME + _ZN8LogsCall16allowedCallTypesEv @ 48 NONAME + _ZN8LogsCall16initiateCallbackEv @ 49 NONAME + _ZN8LogsCall4callENS_8CallTypeE @ 50 NONAME + _ZN8LogsCallD0Ev @ 51 NONAME + _ZN8LogsCallD1Ev @ 52 NONAME + _ZN8LogsCallD2Ev @ 53 NONAME + _ZN9LogsEvent19getNumberForCallingEv @ 54 NONAME + _ZN9LogsEventC1ERKS_ @ 55 NONAME + _ZN9LogsEventC2ERKS_ @ 56 NONAME + _ZN9LogsEventD0Ev @ 57 NONAME + _ZN9LogsEventD1Ev @ 58 NONAME + _ZN9LogsEventD2Ev @ 59 NONAME + _ZN9LogsModel11refreshDataEv @ 60 NONAME + _ZN9LogsModel12compressDataEv @ 61 NONAME + _ZN9LogsModel14markEventsSeenENS_9ClearTypeE @ 62 NONAME + _ZN9LogsModel16logsMatchesModelEv @ 63 NONAME + _ZN9LogsModel19updateConfigurationER23LogsConfigurationParams @ 64 NONAME + _ZN9LogsModel23clearMissedCallsCounterEv @ 65 NONAME + _ZN9LogsModel9clearListENS_9ClearTypeE @ 66 NONAME + _ZN9LogsModelC1ENS_13LogsModelTypeEb @ 67 NONAME + _ZN9LogsModelC2ENS_13LogsModelTypeEb @ 68 NONAME + _ZN9LogsModelD0Ev @ 69 NONAME + _ZN9LogsModelD1Ev @ 70 NONAME + _ZN9LogsModelD2Ev @ 71 NONAME + _ZNK10LogsFilter10filterTypeEv @ 72 NONAME + _ZNK10LogsFilter9clearTypeEv @ 73 NONAME + _ZNK17LogsAbstractModel23isCommunicationPossibleERK9LogsEvent @ 74 NONAME + _ZNK23LogsConfigurationParams17listItemTextWidthEv @ 75 NONAME + _ZNK9LogsEvent10duplicatesEv @ 76 NONAME + _ZNK9LogsEvent11remotePartyEv @ 77 NONAME + _ZNK9LogsEvent12ringDurationEv @ 78 NONAME + _ZNK9LogsEvent14contactLocalIdEv @ 79 NONAME + _ZNK9LogsEvent3ALSEv @ 80 NONAME + _ZNK9LogsEvent4timeEv @ 81 NONAME + _ZNK9LogsEvent5logIdEv @ 82 NONAME + _ZNK9LogsEvent6isReadEv @ 83 NONAME + _ZNK9LogsEvent6numberEv @ 84 NONAME + _ZNK9LogsEvent8durationEv @ 85 NONAME + _ZNK9LogsEvent9directionEv @ 86 NONAME + _ZNK9LogsEvent9eventTypeEv @ 87 NONAME diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/inc/logscommondata.h --- a/logsui/logsengine/inc/logscommondata.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/inc/logscommondata.h Fri May 14 15:52:41 2010 +0300 @@ -20,6 +20,7 @@ #include #include "logsevent.h" +#include "logsconfigurationparams.h" QTM_BEGIN_NAMESPACE class QContactManager; @@ -57,14 +58,18 @@ int maxReadSize() const; LogsEvent::LogsDirection maxReadSizeDirection() const; + int updateConfiguration(const LogsConfigurationParams& params); + LogsConfigurationParams& currentConfiguration(); private: QContactManager* mContactManager; int mMaxReadSize; LogsEvent::LogsDirection mMaxReadSizeDir; + LogsConfigurationParams mConfiguration; private: friend class UT_LogsCommonData; + friend class UT_LogsModel; }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/inc/logsconfigurationparams.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsengine/inc/logsconfigurationparams.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LOGSCONFIGURATIONPARAMS_H +#define LOGSCONFIGURATIONPARAMS_H + +#include +#include + +/** + * + */ +class LogsConfigurationParams : public QObject +{ + Q_OBJECT + +public: // The exported API + + LOGSENGINE_EXPORT explicit LogsConfigurationParams(QObject* parent = 0); + LOGSENGINE_EXPORT ~LogsConfigurationParams(); + + LOGSENGINE_EXPORT void setListItemTextWidth(int width); + LOGSENGINE_EXPORT int listItemTextWidth() const; + + LOGSENGINE_EXPORT LogsConfigurationParams& operator=(const LogsConfigurationParams& params); + +private: + int mListItemTextWidth; + +}; + +#endif // LOGSCONFIGURATIONPARAMS_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/inc/logsmatchesmodel.h --- a/logsui/logsengine/inc/logsmatchesmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/inc/logsmatchesmodel.h Fri May 14 15:52:41 2010 +0300 @@ -48,41 +48,22 @@ LOGSENGINE_EXPORT ~LogsMatchesModel(); LOGSENGINE_EXPORT void logsMatches(const QString& pattern); - - /** - * Factory method for creating a new contact object. Transfers ownership. - */ - LOGSENGINE_EXPORT LogsContact* createContact(const QString& number); - - /** - * Returns cenrep key status of predictive search feature. - * @return 0 - feature is permanently off and can't be turned on, - * 1 - feature is on - * 2 - feature is temporarily off and can be turned on - * negative value indicates some error in fetching the key - */ - LOGSENGINE_EXPORT int predictiveSearchStatus(); - - /** - * Allows to modify cenrep key value of predictive search features. - * However, this function can't be used if feature is set permanently off - * (see predictiveSearchStatus()) - * @param enabled, specify whether cenrep key will be set to 1 or 2 - * @ return 0 if cenrep key value modified succesfully, - * -1 in case of some error - */ - LOGSENGINE_EXPORT int setPredictiveSearch(bool enabled); public: // From QAbstractItemModel virtual int rowCount(const QModelIndex &parent) const; virtual QVariant data(const QModelIndex &index, int role) const; - -public: // From LogsAbstractModel + +protected slots: + + virtual void contactSavingCompleted(bool modified); + +protected: // From LogsAbstractModel virtual QVariant createCall(const LogsModelItemContainer& item) const; virtual QVariant createMessage(const LogsModelItemContainer& item) const; virtual QVariant createContact(const LogsModelItemContainer& item) const; + virtual int doSetPredictiveSearch(bool enabled); private slots: @@ -120,7 +101,6 @@ QString mCurrentSearchPattern; QString mPrevSearchPattern; LogsThumbIconManager *mIconManager; - bool mSearchEnabled; int mResultCount; private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/logsengine.pro --- a/logsui/logsengine/logsengine.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/logsengine.pro Fri May 14 15:52:41 2010 +0300 @@ -45,6 +45,7 @@ HEADERS += inc/logseventdata.h HEADERS += inc/logsthumbnailmanager.h HEADERS += inc/logscommondata.h +HEADERS += inc/logsconfigurationparams.h HEADERS += logssymbianos/inc/logsdbconnector.h HEADERS += logssymbianos/inc/logsreader.h HEADERS += logssymbianos/inc/logsreaderstates.h @@ -66,6 +67,7 @@ SOURCES += src/logscustomfilter.cpp SOURCES += src/logsthumbnailmanager.cpp SOURCES += src/logscommondata.cpp +SOURCES += src/logsconfigurationparams.cpp SOURCES += logssymbianos/src/logsdbconnector.cpp SOURCES += logssymbianos/src/logsreader.cpp SOURCES += logssymbianos/src/logsreaderstates.cpp @@ -85,7 +87,7 @@ TARGET.CAPABILITY = CAP_GENERAL_DLL TARGET.EPOCALLOWDLLDATA = 1 - LIBS += -lflogger -llogcli -llogwrap -lefsrv -lxqservice -lqtcontacts -llogscntfinder -lthumbnailmanagerqt -lcentralrepository + LIBS += -lflogger -llogcli -llogwrap -lefsrv -lxqservice -lxqserviceutil -lqtcontacts -llogscntfinder -lthumbnailmanagerqt -lcentralrepository defFiles = "$${LITERAL_HASH}ifdef WINS" \ "DEFFILE bwins/logsengine.def" \ diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/logssymbianos/src/logseventparser.cpp --- a/logsui/logsengine/logssymbianos/src/logseventparser.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/logssymbianos/src/logseventparser.cpp Fri May 14 15:52:41 2010 +0300 @@ -42,15 +42,32 @@ //Set remote party information QString newRemoteParty = QString::fromUtf16( source.RemoteParty().Ptr(), source.RemoteParty().Length() ); + + bool remotePartyUnknown( newRemoteParty == strings.iUnKnownRemote ); + bool remotePartyPrivate( false ); + bool remotePartyPayphone( false ); + if ( !remotePartyUnknown ){ + remotePartyPrivate = ( source.RemoteParty() == KLogsPrivateText ); + } + if ( !remotePartyUnknown && !remotePartyPrivate ){ + remotePartyPayphone = ( source.RemoteParty() == KLogsPayphoneText ); + } + if ( !isUnknownRemoteParty(dest, newRemoteParty) && - newRemoteParty != strings.iUnKnownRemote && - source.RemoteParty() != KLogsPrivateText && - source.RemoteParty() != KLogsPayphoneText ){ + !remotePartyUnknown && !remotePartyPrivate && !remotePartyPayphone ){ dest.setRemoteParty( newRemoteParty ); } - - dataChanged |= dest.setNumber( - QString::fromUtf16( source.Number().Ptr(), source.Number().Length() ) ); + + if ( remotePartyPrivate ){ + dest.setRemotePartyPrivate(true); + } else { + dest.setRemotePartyPrivate(false); + dataChanged |= dest.setNumber( + QString::fromUtf16( source.Number().Ptr(), source.Number().Length() ) ); + } + + //remoteparty unknown and no number -> unknown + dest.setRemotePartyUnknown(remotePartyUnknown && dest.number().isEmpty()); // Set direction QString sourceDirection = diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/logssymbianos/src/logsreader.cpp --- a/logsui/logsengine/logssymbianos/src/logsreader.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/logssymbianos/src/logsreader.cpp Fri May 14 15:52:41 2010 +0300 @@ -265,7 +265,7 @@ LOGS_QDEBUG( "logs [ENG] reading is in progress, cancelling" ) Cancel(); } else if (mCurrentStateMachine == &mModifyingStates) { - LOGS_QDEBUG( "logs [ENG] <- LogsReader::removeEvent(), modifying is in progress, can't cancel" ) + LOGS_QDEBUG( "logs [ENG] <- LogsReader::cancelCurrentRequestL(), modifying is in progress, can't cancel" ) User::Leave(KErrInUse); } } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logseventparser.cpp --- a/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logseventparser.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logseventparser.cpp Fri May 14 15:52:41 2010 +0300 @@ -19,9 +19,12 @@ #include "logsevent.h" #include "logseventdata.h" #include +#include #include +_LIT( KTestUnknown, "Unknown" ); + void UT_LogsEventParser::initTestCase() { @@ -34,6 +37,7 @@ void UT_LogsEventParser::init() { + mStrings.iUnKnownRemote = DESC_TO_QSTRING( KTestUnknown() ); mEvent = new LogsEvent(); } @@ -104,6 +108,32 @@ event.initializeEventL(*logEvent, mStrings); QVERIFY( event.eventState() == LogsEvent::EventNotUpdated ); + LogsEvent unknowEvent; + logEvent->SetRemoteParty( KTestUnknown ); + logEvent->SetNumber( _L("") ); + unknowEvent.initializeEventL(*logEvent, mStrings); + QVERIFY( unknowEvent.isRemotePartyUnknown() ); + QVERIFY( unknowEvent.number().isEmpty() ); + logEvent->SetNumber( _L("1234") ); + unknowEvent.initializeEventL(*logEvent, mStrings); + QVERIFY( !unknowEvent.isRemotePartyUnknown() ); + QVERIFY( !unknowEvent.number().isEmpty() ); + + LogsEvent privateEvent; + logEvent->SetRemoteParty( KLogsPrivateText ); + logEvent->SetNumber( _L("") ); + privateEvent.initializeEventL(*logEvent, mStrings); + QVERIFY( privateEvent.isRemotePartyPrivate() ); + QVERIFY( privateEvent.number().isEmpty() ); + + LogsEvent payphoneEvent; + logEvent->SetRemoteParty( KLogsPayphoneText ); + logEvent->SetNumber( _L("1112222") ); + payphoneEvent.initializeEventL(*logEvent, mStrings); + QVERIFY( !payphoneEvent.isRemotePartyPrivate() ); + QVERIFY( !payphoneEvent.isRemotePartyUnknown() ); + QVERIFY( !payphoneEvent.number().isEmpty() ); + CleanupStack::PopAndDestroy( logEvent ); } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsreaderstates.cpp --- a/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsreaderstates.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsreaderstates.cpp Fri May 14 15:52:41 2010 +0300 @@ -28,6 +28,7 @@ _LIT( KTestInDirection, "Incoming" ); _LIT( KTestOutDirection, "Outgoing" ); _LIT( KTestMissedDirection, "Missed call" ); +_LIT( KTestUnknown, "Unknown" ); void UT_LogsReaderStates::initTestCase() { @@ -35,7 +36,8 @@ mLogClient = CLogClient::NewL( *((RFs*)&rfsDummy) ); mStrings.iInDirection = DESC_TO_QSTRING( KTestInDirection() ); mStrings.iOutDirection = DESC_TO_QSTRING( KTestOutDirection() ); - mStrings.iMissedDirection = DESC_TO_QSTRING( KTestMissedDirection() ); + mStrings.iMissedDirection = DESC_TO_QSTRING( KTestMissedDirection() ); + mStrings.iUnKnownRemote = DESC_TO_QSTRING( KTestUnknown() ); } void UT_LogsReaderStates::cleanupTestCase() @@ -136,6 +138,7 @@ QVERIFY( index == 2 ); // Invalid event discarded + logEvent->SetRemoteParty( _L("") ); logEvent->SetNumber( _L("") ); logEvent->SetId( 102 ); logsEvent = new LogsEvent; @@ -151,18 +154,61 @@ QVERIFY( mEvents.count() == 3 ); QVERIFY( index == 1 ); + logEvent->SetRemoteParty( _L("Private") ); + logEvent->SetNumber( _L("") ); + logEvent->SetId( 106 ); + logsEvent = new LogsEvent; + index = 0; + QVERIFY( state.updateAndInsertEventL( *logEvent, logsEvent, index ) ); + QVERIFY( mEvents.count() == 4 ); + QVERIFY( index == 1 ); + QVERIFY( mEvents.at(0)->isRemotePartyPrivate() ); + + logEvent->SetRemoteParty( _L("Private") ); + logEvent->SetNumber( _L("123") ); + logEvent->SetId( 107 ); + logsEvent = new LogsEvent; + index = 0; + QVERIFY( state.updateAndInsertEventL( *logEvent, logsEvent, index ) ); + QVERIFY( mEvents.count() == 5 ); + QVERIFY( index == 1 ); + QVERIFY( mEvents.at(0)->isRemotePartyPrivate() ); + + + logEvent->SetRemoteParty( _L("Unknown") ); + logEvent->SetNumber( _L("123") ); + logEvent->SetId( 108 ); + logsEvent = new LogsEvent; + index = 0; + QVERIFY( state.updateAndInsertEventL( *logEvent, logsEvent, index ) ); + QVERIFY( mEvents.count() == 6 ); + QVERIFY( index == 1 ); + QVERIFY( !mEvents.at(0)->isRemotePartyUnknown() ); + + + logEvent->SetRemoteParty( _L("Unknown") ); + logEvent->SetNumber( _L("") ); + logEvent->SetId( 109 ); + logsEvent = new LogsEvent; + index = 0; + QVERIFY( state.updateAndInsertEventL( *logEvent, logsEvent, index ) ); + QVERIFY( mEvents.count() == 7 ); + QVERIFY( index == 1 ); + QVERIFY( mEvents.at(0)->isRemotePartyUnknown() ); + + state.resetEvents(); QVERIFY( !mEvents.at(0)->isInView() ); QVERIFY( !mEvents.at(1)->isInView() ); LogsEvent* event = state.takeMatchingEvent(*logEvent); QVERIFY( event ); - QVERIFY( mEvents.count() == 2 ); + QVERIFY( mEvents.count() == 6 ); delete event; logEvent->SetId( 200 ); LogsEvent* event2 = state.takeMatchingEvent(*logEvent); QVERIFY( !event2 ); - QVERIFY( mEvents.count() == 2 ); + QVERIFY( mEvents.count() == 6 ); CleanupStack::PopAndDestroy( logEvent ); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/ut_logssymbianos.pro --- a/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/ut_logssymbianos.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/ut_logssymbianos.pro Fri May 14 15:52:41 2010 +0300 @@ -55,6 +55,7 @@ HEADERS += ../../../../../recents_plat/logs_engine_api/inc/logsevent.h HEADERS += ../../../inc/logseventdata.h HEADERS += ../../../inc/logscommondata.h +HEADERS += ../../../inc/logsconfigurationparams.h HEADERS += ../stubs/logclient_stubs_helper.h @@ -76,6 +77,8 @@ SOURCES += ../../../src/logsevent.cpp SOURCES += ../../../src/logseventdata.cpp SOURCES += ../../../src/logscommondata.cpp +SOURCES += ../../../src/logsconfigurationparams.cpp + SOURCES += ../../../../tsrc/qtestutils/src/testresultxmlparser.cpp SOURCES += ../stubs/logclient_stubs.cpp SOURCES += ../stubs/qtcontacts_stubs.cpp diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logsabstractmodel.cpp --- a/logsui/logsengine/src/logsabstractmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logsabstractmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -58,6 +58,57 @@ // // ----------------------------------------------------------------------------- // +LogsContact* LogsAbstractModel::createContact(const QString& number) +{ + LogsContact* contact = new LogsContact(number, *mDbConnector); + connect( contact, SIGNAL(saveCompleted(bool)), this, SLOT(contactSavingCompleted(bool)) ); + return contact; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LogsAbstractModel::predictiveSearchStatus() +{ + if ( !mDbConnector ){ + return -1; + } + return mDbConnector->predictiveSearchStatus(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LogsAbstractModel::setPredictiveSearch(bool enabled) +{ + return doSetPredictiveSearch(enabled); +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LogsAbstractModel::isCommunicationPossible(const LogsEvent& event) const +{ +return ( !event.isRemotePartyPrivate() && !event.isRemotePartyUnknown() ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsAbstractModel::contactSavingCompleted(bool modified) +{ + Q_UNUSED(modified); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// QVariant LogsAbstractModel::doGetData(int role, const LogsModelItemContainer& item) const { if ( role == RoleFullEvent ) { @@ -85,7 +136,7 @@ return QVariant(); } LogsCall* logscall = new LogsCall(*event); - if (!logscall->isAllowedCallType()) { + if (!logscall->isAllowedCallType() || !isCommunicationPossible(*event)) { delete logscall; logscall = 0; } @@ -105,7 +156,7 @@ return QVariant(); } LogsMessage* logsMessage = new LogsMessage(*event); - if (!logsMessage->isMessagingAllowed()) { + if (!logsMessage->isMessagingAllowed() || !isCommunicationPossible(*event)) { delete logsMessage; logsMessage = 0; } @@ -126,7 +177,7 @@ } Q_ASSERT(mDbConnector); LogsContact* logsContact = new LogsContact(*event, *mDbConnector); - if ( !logsContact->isContactRequestAllowed() ) { + if ( !logsContact->isContactRequestAllowed() || !isCommunicationPossible(*event) ) { delete logsContact; logsContact = 0; } @@ -138,6 +189,17 @@ // // ----------------------------------------------------------------------------- // +int LogsAbstractModel::doSetPredictiveSearch(bool enabled){ + if ( !mDbConnector ){ + return -1; + } + return mDbConnector->setPredictiveSearch(enabled); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// QString LogsAbstractModel::directionIconName(const LogsEvent& event) { QString direction; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logscall.cpp --- a/logsui/logsengine/src/logscall.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logscall.cpp Fri May 14 15:52:41 2010 +0300 @@ -25,6 +25,7 @@ //SYSTEM #include #include +#include // ----------------------------------------------------------------------------- // @@ -190,6 +191,11 @@ LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::createcall(), num", num ) XQServiceRequest snd(service, type, sync); snd << num; + // Start call at bg, call UI will bring itself to foreground when ever + // it thinks it is good time to do it. + XQRequestInfo info; + info.setBackground(true); + snd.setInfo(info); QVariant retValue; snd.send(retValue); LOGS_QDEBUG( "logs [ENG] <- LogsCall::createcall()" ) @@ -206,6 +212,11 @@ LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::createCallWithService(), num", serviceId ) XQServiceRequest snd(service, type, sync); snd << num << serviceId; + // Start call at bg, call UI will bring itself to foreground when ever + // it thinks it is good time to do it. + XQRequestInfo info; + info.setBackground(true); + snd.setInfo(info); QVariant retValue; snd.send(retValue); LOGS_QDEBUG( "logs [ENG] <- LogsCall::createCallWithService()" ) diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logscommondata.cpp --- a/logsui/logsengine/src/logscommondata.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logscommondata.cpp Fri May 14 15:52:41 2010 +0300 @@ -18,6 +18,7 @@ //USER #include "logscommondata.h" #include "logslogger.h" +#include "logsconfigurationparams.h" //SYSTEM #include @@ -110,5 +111,23 @@ return mMaxReadSizeDir; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LogsCommonData::updateConfiguration(const LogsConfigurationParams& params) +{ + mConfiguration = params; + return 0; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsConfigurationParams& LogsCommonData::currentConfiguration() +{ + return mConfiguration; +} // End of file diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logsconfigurationparams.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsengine/src/logsconfigurationparams.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "logsconfigurationparams.h" +#include "logslogger.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsConfigurationParams::LogsConfigurationParams( QObject* parent ) : + QObject(parent), mListItemTextWidth(0) +{ + + LOGS_QDEBUG( "logs [ENG] <-> LogsConfigurationParams::LogsConfigurationParams()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsConfigurationParams& LogsConfigurationParams::operator=( + const LogsConfigurationParams& params ) +{ + + LOGS_QDEBUG( "logs [ENG] <-> LogsConfigurationParams::operator=()" ) + mListItemTextWidth = params.mListItemTextWidth; + return *this; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsConfigurationParams::~LogsConfigurationParams() +{ + LOGS_QDEBUG( "logs [ENG] <-> LogsConfigurationParams::~LogsConfigurationParams()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsConfigurationParams::setListItemTextWidth(int width) +{ + mListItemTextWidth = width; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LogsConfigurationParams::listItemTextWidth() const +{ + return mListItemTextWidth; +} + +// End of file + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logsdetailsmodel.cpp --- a/logsui/logsengine/src/logsdetailsmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logsdetailsmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -242,6 +242,10 @@ QString LogsDetailsModel::getHeaderData(const LogsEvent& event) const { QString headerdata(event.remoteParty()); + if ( event.isRemotePartyPrivate() ){ + headerdata = hbTrId("txt_dial_dblist_call_id_val_privat_number"); + } + if ( headerdata.length() == 0 && event.number().length() > 0 ){ headerdata = event.number(); } @@ -307,27 +311,16 @@ // // ----------------------------------------------------------------------------- // -QString LogsDetailsModel::getHeaderValue(QString value,bool isRemote) const +QString LogsDetailsModel::getHeaderValue(QString /*value*/,bool isRemote) const { QString headervalue(""); - if (isAddress(value)){ - if ((isOutgoingCall() && isRemote)|| (!isOutgoingCall() && !isRemote)){ + if ((isOutgoingCall() && isRemote)|| (!isOutgoingCall() && !isRemote)){ headervalue = hbTrId("txt_dial_dblist_callee_id"); - } - else{ - headervalue = hbTrId("txt_dialer_ui_dblist_call_id"); - } - } - else { - if ((isOutgoingCall() && isRemote)|| (!isOutgoingCall() && !isRemote)) { - headervalue = hbTrId("txt_dial_dblist_callee_id"); - } - else { - headervalue = hbTrId("txt_dialer_ui_dblist_call_id"); - } } - - return headervalue; + else{ + headervalue = hbTrId("txt_dialer_ui_dblist_call_id"); + } + return headervalue; } // ----------------------------------------------------------------------------- diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logsevent.cpp --- a/logsui/logsengine/src/logsevent.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logsevent.cpp Fri May 14 15:52:41 2010 +0300 @@ -50,7 +50,9 @@ mIndex(0), mIsInView(false), mEventState(EventAdded), - mIsLocallySeen(false) + mIsLocallySeen(false), + mIsPrivate(false), + mIsUnknown(false) { } @@ -82,6 +84,8 @@ mIsInView = event.mIsInView; mEventState = event.mEventState; mIsLocallySeen = event.mIsLocallySeen; + mIsPrivate = event.mIsPrivate; + mIsUnknown = event.mIsUnknown; } // ---------------------------------------------------------------------------- @@ -175,6 +179,7 @@ bool LogsEvent::validate() { return ( !mNumber.isEmpty() || !mRemoteParty.isEmpty() || + ( mRemoteParty.isEmpty() && ( mIsPrivate || mIsUnknown )) || ( mLogsEventData && !mLogsEventData->remoteUrl().isEmpty() ) ); } @@ -634,7 +639,28 @@ // bool LogsEvent::isSeenLocally() const { - return ( mIsLocallySeen || mIsRead ); + return ( mIsLocallySeen || mIsRead ); +} + +bool LogsEvent::isRemotePartyPrivate() const +{ + return mIsPrivate; +} + +bool LogsEvent::isRemotePartyUnknown() const +{ + return mIsUnknown; +} + +void LogsEvent::setRemotePartyPrivate(bool markedAsPrivate) +{ + mIsPrivate = markedAsPrivate; +} + + +void LogsEvent::setRemotePartyUnknown(bool markedAsUnknown) +{ + mIsUnknown = markedAsUnknown; } // End of file diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logsmatchesmodel.cpp --- a/logsui/logsengine/src/logsmatchesmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logsmatchesmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -50,7 +50,6 @@ mParentModel(parentModel), mLogsCntFinder(0), mIconManager(0), - mSearchEnabled(false), mResultCount(0) { LOGS_QDEBUG( "logs [ENG] -> LogsMatchesModel::LogsMatchesModel()" ) @@ -124,6 +123,16 @@ // // ----------------------------------------------------------------------------- // +void LogsMatchesModel::contactSavingCompleted(bool modified) +{ + Q_UNUSED(modified); + forceSearchQuery(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// QVariant LogsMatchesModel::createCall(const LogsModelItemContainer& item) const { LOGS_QDEBUG( "logs [ENG] -> LogsMatchesModel::createCall()" ) @@ -192,33 +201,20 @@ return var; } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -int LogsMatchesModel::predictiveSearchStatus() -{ - return mDbConnector->predictiveSearchStatus(); -} - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -int LogsMatchesModel::setPredictiveSearch(bool enabled) +int LogsMatchesModel::doSetPredictiveSearch(bool enabled) { - LOGS_QDEBUG( "logs [ENG] -> LogsMatchesModel::setPredictiveSearch()" ) + LOGS_QDEBUG( "logs [ENG] -> LogsMatchesModel::doSetPredictiveSearch()" ) int err = mDbConnector->setPredictiveSearch(enabled); if (!err) { - if ((mSearchEnabled && !enabled) || (!mSearchEnabled && enabled)) { - //in case of search is turned off, getLogMatches will only reset - //previous search results - mSearchEnabled = enabled; - forceSearchQuery(); - } + //in case of search is turned off, getLogMatches will only reset + //previous search results + forceSearchQuery(); } - LOGS_QDEBUG_2( "logs [ENG] <- LogsMatchesModel::setPredictiveSearch(), err: ", err ) + LOGS_QDEBUG_2( "logs [ENG] <- LogsMatchesModel::doSetPredictiveSearch(), err: ", err ) return err; } @@ -310,8 +306,6 @@ int searchStatus = mDbConnector->predictiveSearchStatus(); //searchStatus equal to 0 means that search should be permanently disabled if (searchStatus != 0) { - mSearchEnabled = (searchStatus == 1 || searchStatus < 0); - mLogsCntFinder = new LogsCntFinder(LogsCommonData::getInstance().contactManager()); connect(mLogsCntFinder, SIGNAL(queryReady()),this, SLOT(queryReady())); @@ -404,17 +398,6 @@ // // ----------------------------------------------------------------------------- // -LogsContact* LogsMatchesModel::createContact(const QString& number) -{ - LogsContact* contact = new LogsContact(number, *mDbConnector); - connect( contact, SIGNAL(saveCompleted(bool)), this, SLOT(forceSearchQuery()) ); - return contact; -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void LogsMatchesModel::getLogsMatches(const QString& pattern, bool async, bool force ) @@ -442,7 +425,8 @@ void LogsMatchesModel::doSearchQuery() { LOGS_QDEBUG( "logs [ENG] -> LogsMatchesModel::doSearchQuery()" ); - if (mCurrentSearchPattern != mPrevSearchPattern && mSearchEnabled){ + if (mCurrentSearchPattern != mPrevSearchPattern && + mDbConnector->predictiveSearchStatus() == 1 ){ mPrevSearchPattern = mCurrentSearchPattern; if (mCurrentSearchPattern.length() > 0) { LOGS_QDEBUG( "logs [ENG] do search" ); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/src/logsmodel.cpp --- a/logsui/logsengine/src/logsmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/src/logsmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -29,6 +29,9 @@ #include "logscommondata.h" #include #include +#include +#include +#include Q_DECLARE_METATYPE(LogsEvent *) Q_DECLARE_METATYPE(LogsCall *) @@ -56,6 +59,8 @@ this, SLOT( dataUpdated(QList) )); connect( mDbConnector, SIGNAL( dataRemoved(QList) ), this, SLOT( dataRemoved(QList) )); + connect( hbInstance->theme(), SIGNAL ( changeFinished() ), + this, SLOT ( resetModel())); mDbConnector->init(); mDbConnector->start(); @@ -151,22 +156,33 @@ // // ----------------------------------------------------------------------------- // -int LogsModel::predictiveSearchStatus() +int LogsModel::updateConfiguration(LogsConfigurationParams& params) { - return mDbConnector->predictiveSearchStatus(); + LOGS_QDEBUG( "logs [ENG] -> LogsModel::updateConfiguration()" ) + int currWidth = + LogsCommonData::getInstance().currentConfiguration().listItemTextWidth(); + int newWidth = params.listItemTextWidth(); + LOGS_QDEBUG_3( "logs [ENG] Curr and new width", currWidth, newWidth ) + int retVal = LogsCommonData::getInstance().updateConfiguration(params); + + // Do model reset if list item width has changed as we need to ensure + // missed call's duplicate info visibility + bool unseenExists = false; + for ( int i = 0; i < mEvents.count() && !unseenExists; i++ ){ + LogsEvent* event = mEvents.at(i); + if ( event->duplicates() > 0 && !event->isSeenLocally() ){ + unseenExists = true; + } + } + if ( unseenExists && currWidth > 0 && currWidth != newWidth ){ + LOGS_QDEBUG( "logs [ENG] Do model reset" ) + resetModel(); + } + LOGS_QDEBUG( "logs [ENG] <- LogsModel::updateConfiguration()" ) + return retVal; } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -int LogsModel::setPredictiveSearch(bool enabled) -{ - return mDbConnector->setPredictiveSearch(enabled); -} - - -// ----------------------------------------------------------------------------- // From QAbstractListModel // ----------------------------------------------------------------------------- // @@ -282,7 +298,7 @@ { QList< QList > sequences; QList currSequence; - int prevIndex = indexes.at(0) - 1; + int prevIndex = indexes.count() > 0 ? ( indexes.at(0) - 1 ) : -1; for ( int i = 0; i < indexes.count(); i++ ){ int currIndex = indexes.at(i); if ( prevIndex+1 != currIndex ){ @@ -319,18 +335,59 @@ callerId = event.logsEventData()->remoteUrl(); } if ( callerId.length() == 0 ){ - callerId = tr("No number"); + if ( event.isRemotePartyPrivate() ){ + callerId = hbTrId("txt_dial_dblist_call_id_val_privat_number"); + } + else if ( event.isRemotePartyUnknown() ){ + callerId = hbTrId("txt_dial_dblist_call_id_val_unknown_number"); + } + } int duplicates = event.duplicates(); if ( duplicates > 0 && !event.isSeenLocally() ){ - callerId.append( "(" ); - callerId.append( QString::number(duplicates + 1) ); - callerId.append( ")"); + QString callerIdBaseString = callerId; + QString callerIdDupString = "(" + QString::number(duplicates + 1) + ")"; + int width = LogsCommonData::getInstance().currentConfiguration().listItemTextWidth(); + callerId = SqueezedString(callerIdBaseString,callerIdDupString,width); } return callerId; } // ----------------------------------------------------------------------------- +// basestring: string to be cutted if not fited to maxwidth +// secondarystring: string to show fully in the end of basestring +// maxwidth: maximum width (in pixels) available for basestring + secondarystring +// +// ----------------------------------------------------------------------------- +// +QString LogsModel::SqueezedString( + QString basestring, QString secondarystring, qreal maxwidth) const +{ + QFontMetricsF fontMetrics(HbFontSpec(HbFontSpec::Primary).font()); + QString fullString = basestring + secondarystring; + qreal totalwidth = 0; + int x = 0; + if (fontMetrics.width(fullString) > maxwidth){ + maxwidth = maxwidth - fontMetrics.width(tr("...")+secondarystring); + for (x = 0; (x < basestring.count()) && (totalwidth < maxwidth); x++){ + totalwidth = totalwidth + fontMetrics.width(basestring[x]); + } + if ( ( totalwidth > maxwidth ) && ( x>0 ) ) x--; + return basestring.left(x) + tr("...") + secondarystring; + } else { + return fullString; + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsModel::resetModel() +{ + this->reset(); +} +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/hbstubs/hbicon.h --- a/logsui/logsengine/tsrc/hbstubs/hbicon.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/hbstubs/hbicon.h Fri May 14 15:52:41 2010 +0300 @@ -35,7 +35,8 @@ public: // Data added for the unit testing stub QString mName; - QIcon* mTestIcon; + + static QIcon* defaultIcon(); }; Q_DECLARE_METATYPE(HbIcon) diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/hbstubs/hbstubs.cpp --- a/logsui/logsengine/tsrc/hbstubs/hbstubs.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/hbstubs/hbstubs.cpp Fri May 14 15:52:41 2010 +0300 @@ -22,6 +22,17 @@ QString mUTClipboard; +static QIcon* logsTestIcon = 0; + +QIcon* HbIcon::defaultIcon() +{ + return logsTestIcon; +} + +#define ENSURE_DEFAULT_ICON \ +if ( !logsTestIcon ){ \ + logsTestIcon = new QIcon(); \ +} // ----------------------------------------------------------------------------- // HbIcon::HbIcon @@ -30,7 +41,7 @@ HbIcon::HbIcon() { mName = QString(); - mTestIcon = new QIcon; + ENSURE_DEFAULT_ICON } // ----------------------------------------------------------------------------- @@ -40,7 +51,7 @@ HbIcon::HbIcon(const QString &iconName) { mName = iconName; - mTestIcon = new QIcon; + ENSURE_DEFAULT_ICON } // ----------------------------------------------------------------------------- @@ -50,7 +61,7 @@ HbIcon::HbIcon(const QIcon &icon) { mName = "c:\\data\\images\\designer.png"; - mTestIcon = new QIcon; + ENSURE_DEFAULT_ICON } // ----------------------------------------------------------------------------- @@ -60,7 +71,7 @@ HbIcon::HbIcon(const HbIcon &icon) { mName = "c:\\data\\images\\designer.png"; - mTestIcon = new QIcon; + ENSURE_DEFAULT_ICON } // ----------------------------------------------------------------------------- @@ -69,7 +80,6 @@ // HbIcon::~HbIcon() { - delete mTestIcon; } // ----------------------------------------------------------------------------- @@ -87,7 +97,7 @@ // QIcon &HbIcon::qicon() const { - return *mTestIcon; + return *logsTestIcon; } // ----------------------------------------------------------------------------- diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/stubs/qthighway_stub.cpp --- a/logsui/logsengine/tsrc/stubs/qthighway_stub.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/stubs/qthighway_stub.cpp Fri May 14 15:52:41 2010 +0300 @@ -16,16 +16,19 @@ */ #include - +#include +#include #include "qthighway_stub_helper.h" QString qtHighwayStubService; QString qtHighwayStubMessage; +bool qtHighwayStubRequestBg = false; void QtHighwayStubHelper::reset() { qtHighwayStubService.clear(); qtHighwayStubMessage.clear(); + qtHighwayStubRequestBg = false; } QString QtHighwayStubHelper::service() @@ -38,6 +41,11 @@ return qtHighwayStubMessage; } +bool QtHighwayStubHelper::isRequestBg() +{ + return qtHighwayStubRequestBg; +} + XQServiceRequest::XQServiceRequest( const QString& service, const QString& message, const bool& synchronous) { @@ -74,3 +82,27 @@ { } + +void XQServiceRequest::setInfo(const XQRequestInfo &info) +{ + Q_UNUSED(info); +} + +XQRequestInfo::XQRequestInfo() +{ +} + +XQRequestInfo::~XQRequestInfo() +{ + +} + +void XQRequestInfo::setBackground(bool on) +{ + qtHighwayStubRequestBg = on; +} + +bool XQRequestInfo::isBackground() const +{ + return qtHighwayStubRequestBg; +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/stubs/qthighway_stub_helper.h --- a/logsui/logsengine/tsrc/stubs/qthighway_stub_helper.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/stubs/qthighway_stub_helper.h Fri May 14 15:52:41 2010 +0300 @@ -24,4 +24,5 @@ static void reset(); static QString service(); static QString message(); + static bool isRequestBg(); }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/inc/ut_logscommondata.h --- a/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logscommondata.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logscommondata.h Fri May 14 15:52:41 2010 +0300 @@ -45,6 +45,7 @@ void testGetInstance(); void testGetContactManager(); void testFreeCommonData(); + void testCurrentConfiguration(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsconfigurationparams.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsconfigurationparams.h Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LOGSCONFIGURATIONPARAMS_H +#define UT_LOGSCONFIGURATIONPARAMS_H + +#include + +class UT_LogsConfigurationParams : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testSetListItemTextWidth(); + void testListItemTextWidth(); + +private: + +}; + + +#endif //UT_LOGSCOMMONDATA_H diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsmodel.h --- a/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsmodel.h Fri May 14 15:52:41 2010 +0300 @@ -54,6 +54,7 @@ void testGetDecorationData(); void testIconName(); void testGetCallerId(); + void testSqueezedString(); void testClearList(); void testMarkEventsSeen(); void testClearMissedCallsCounter(); @@ -61,6 +62,7 @@ void testCompressData(); void testPredictiveSearchStatus(); void testSetPredictiveSearch(); + void testUpdateConfiguration(); private: diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsthumbnailmanager.h --- a/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsthumbnailmanager.h Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsthumbnailmanager.h Fri May 14 15:52:41 2010 +0300 @@ -43,7 +43,7 @@ private: LogsThumbIconManager* mIconMgr; // SUT - QIcon mIcon; + QIcon* mIcon; }; diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/main.cpp --- a/logsui/logsengine/tsrc/ut_logsengine/src/main.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/main.cpp Fri May 14 15:52:41 2010 +0300 @@ -30,6 +30,7 @@ #include "ut_logseventdata.h" #include "ut_logsthumbnailmanager.h" #include "ut_logscommondata.h" +#include "ut_logsconfigurationparams.h" #include "testresultxmlparser.h" @@ -128,7 +129,17 @@ args_logsCommonData << "-xml" << "-o" << resultFileName; QTest::qExec(&ut_logsCommonData, args_logsCommonData); + parser.parseAndPrintResults(resultFileName,true); + + UT_LogsConfigurationParams ut_logsConfigurationParams; + resultFileName = "c:/ut_logs_logsConfigurationParams.xml"; + QStringList args_logsConfigurationParams( "ut_logsConfigurationParams"); + args_logsConfigurationParams << "-xml" << "-o" << resultFileName; + QTest::qExec(&ut_logsConfigurationParams, args_logsConfigurationParams); + parser.parseAndPrintResults(resultFileName,true); + + if (promptOnExit) { printf("Press any key...\n"); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/ut_logscall.cpp --- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logscall.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logscall.cpp Fri May 14 15:52:41 2010 +0300 @@ -121,24 +121,28 @@ mLogsCall->call(LogsCall::TypeLogsVoiceCall); QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.telephony" ); QVERIFY( QtHighwayStubHelper::message() == "dial(QString)" ); + QVERIFY( QtHighwayStubHelper::isRequestBg() ); // Video call message is longer than voice call QtHighwayStubHelper::reset(); mLogsCall->call(LogsCall::TypeLogsVideoCall); QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.telephony" ); QVERIFY( QtHighwayStubHelper::message() == "dialVideo(QString)" ); + QVERIFY( QtHighwayStubHelper::isRequestBg() ); QtHighwayStubHelper::reset(); mLogsCall->mServiceId = 3; mLogsCall->call(LogsCall::TypeLogsVoIPCall); QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.telephony" ); - QVERIFY( QtHighwayStubHelper::message() == "dialVoipService(QString,int)" ); + QVERIFY( QtHighwayStubHelper::message() == "dialVoipService(QString,int)" ); + QVERIFY( QtHighwayStubHelper::isRequestBg() ); // Not supported calltype QtHighwayStubHelper::reset(); mLogsCall->call(static_cast(9999)); QVERIFY( QtHighwayStubHelper::service().isEmpty() ); QVERIFY( QtHighwayStubHelper::message().isEmpty() ); + QVERIFY( !QtHighwayStubHelper::isRequestBg() ); } void UT_LogsCall::testInitiateCallback() @@ -147,6 +151,7 @@ mLogsCall->initiateCallback(); QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.telephony" ); QVERIFY( QtHighwayStubHelper::message() == "dial(QString)" ); + QVERIFY( QtHighwayStubHelper::isRequestBg() ); // Video call message is longer than voice call mLogsCall->mDefaultCall = LogsCall::TypeLogsVideoCall; @@ -154,11 +159,13 @@ mLogsCall->initiateCallback(); QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.telephony" ); QVERIFY( QtHighwayStubHelper::message() == "dialVideo(QString)" ); + QVERIFY( QtHighwayStubHelper::isRequestBg() ); mLogsCall->mDefaultCall = LogsCall::TypeLogsVoIPCall; QtHighwayStubHelper::reset(); mLogsCall->mServiceId = 3; mLogsCall->initiateCallback(); QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.telephony" ); - QVERIFY( QtHighwayStubHelper::message() == "dialVoipService(QString,int)" ); + QVERIFY( QtHighwayStubHelper::message() == "dialVoipService(QString,int)" ); + QVERIFY( QtHighwayStubHelper::isRequestBg() ); } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/ut_logscommondata.cpp --- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logscommondata.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logscommondata.cpp Fri May 14 15:52:41 2010 +0300 @@ -16,6 +16,7 @@ */ #include "ut_logscommondata.h" #include "logscommondata.h" +#include "logsconfigurationparams.h" #include @@ -55,4 +56,11 @@ LogsCommonData::freeCommonData(); } - +void UT_LogsCommonData::testCurrentConfiguration() +{ + LogsConfigurationParams params; + params.setListItemTextWidth(400); + LogsCommonData::getInstance().updateConfiguration(params); + LogsConfigurationParams& test = LogsCommonData::getInstance().currentConfiguration(); + QVERIFY( test.listItemTextWidth() == 400 ); +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/ut_logsconfigurationparams.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsconfigurationparams.cpp Fri May 14 15:52:41 2010 +0300 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "ut_logsconfigurationparams.h" +#include "logsconfigurationparams.h" + +#include + +LogsConfigurationParams myparam; + +void UT_LogsConfigurationParams::initTestCase() +{ +} + +void UT_LogsConfigurationParams::cleanupTestCase() +{ +} + + +void UT_LogsConfigurationParams::init() +{ +} + +void UT_LogsConfigurationParams::cleanup() +{ +} + +void UT_LogsConfigurationParams::testSetListItemTextWidth() +{ + myparam.setListItemTextWidth(200); +} + +void UT_LogsConfigurationParams::testListItemTextWidth() +{ + QVERIFY (myparam.listItemTextWidth() == 200); +} + diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/ut_logsmatchesmodel.cpp --- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsmatchesmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsmatchesmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -83,7 +83,6 @@ { // Predictive search is on QVERIFY( mMatchesModel ); - QVERIFY( mMatchesModel->mSearchEnabled ); QVERIFY( mMatchesModel->mIconManager ); QVERIFY( mMatchesModel->mLogsCntFinder ); @@ -93,7 +92,6 @@ LogsDbConnectorStubHelper::setPredictiveSearch(2); mMatchesModel = mModel->logsMatchesModel(); QVERIFY( mMatchesModel ); - QVERIFY( !mMatchesModel->mSearchEnabled ); QVERIFY( mMatchesModel->mIconManager ); QVERIFY( mMatchesModel->mLogsCntFinder ); @@ -103,7 +101,6 @@ LogsDbConnectorStubHelper::setPredictiveSearch(-1); mMatchesModel = mModel->logsMatchesModel(); QVERIFY( mMatchesModel ); - QVERIFY( mMatchesModel->mSearchEnabled ); QVERIFY( mMatchesModel->mIconManager ); QVERIFY( mMatchesModel->mLogsCntFinder ); @@ -338,7 +335,6 @@ { QVERIFY( mMatchesModel->mLogsCntFinder ); QVERIFY( mMatchesModel->mIconManager ); - QVERIFY( mMatchesModel->mSearchEnabled ); // Query ready when no matching search events QSignalSpy spy(mMatchesModel, SIGNAL(modelReset())); @@ -411,7 +407,7 @@ QVERIFY( mMatchesModel->mLogsCntFinder->mCurrentPredictivePattern.isEmpty() ); // Search is Off, current pattern updated, but no search happens - mMatchesModel->mSearchEnabled = false; + mMatchesModel->mPrevSearchPattern = "1"; mMatchesModel->mCurrentSearchPattern = "2"; mMatchesModel->logsMatches( "199" ); @@ -427,7 +423,7 @@ void UT_LogsMatchesModel::testCreateContactWithNumber() { LogsContact* contact = 0; - contact = mMatchesModel->createContact("123"); + contact = mMatchesModel->LogsAbstractModel::createContact(QString("123")); QVERIFY(contact); QVERIFY(contact->isContactRequestAllowed()); delete contact; @@ -646,12 +642,11 @@ { QVERIFY( mMatchesModel->mLogsCntFinder ); QVERIFY( mMatchesModel->mIconManager ); - QVERIFY( mMatchesModel->mSearchEnabled ); // Predictive search is permanently off in cenrep, setting the value fails LogsDbConnectorStubHelper::reset(); QVERIFY( mMatchesModel->setPredictiveSearch(false) != 0 ); QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "setPredictiveSearch" ); - QVERIFY( mMatchesModel->mSearchEnabled ); + // Turning off is ok, search results are reset mMatchesModel->mLogsCntFinder->mCurrentPredictivePattern = "9"; @@ -662,7 +657,6 @@ mMatchesModel->mCurrentSearchPattern = "567"; LogsDbConnectorStubHelper::setPredictiveSearch(1); QVERIFY( mMatchesModel->setPredictiveSearch(false) == 0 ); - QVERIFY( !mMatchesModel->mSearchEnabled ); QVERIFY( mMatchesModel->mMatches.count() == 0 ); QVERIFY( mMatchesModel->mPrevSearchPattern.isEmpty() ); QVERIFY( mMatchesModel->mLogsCntFinder->mCurrentPredictivePattern == "9" ); @@ -672,16 +666,8 @@ mMatchesModel->mCurrentSearchPattern = "567"; QVERIFY( mMatchesModel->setPredictiveSearch(true) == 0 ); QVERIFY( mMatchesModel->mPrevSearchPattern.isEmpty() ); - QVERIFY( mMatchesModel->mSearchEnabled ); mMatchesModel->doSearchQuery(); // simulate async completion QVERIFY( mMatchesModel->mPrevSearchPattern == "567" ); QVERIFY( mMatchesModel->mLogsCntFinder->mCurrentPredictivePattern == "567" ); - - // Turning search on, when it is already on => nothing happens - mMatchesModel->mCurrentSearchPattern = "777"; - QVERIFY( mMatchesModel->setPredictiveSearch(true) == 0 ); - QVERIFY( mMatchesModel->mSearchEnabled ); - QVERIFY( mMatchesModel->mPrevSearchPattern == "567" ); - QVERIFY( mMatchesModel->mLogsCntFinder->mCurrentPredictivePattern == "567" ); } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/ut_logsmodel.cpp --- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsmodel.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsmodel.cpp Fri May 14 15:52:41 2010 +0300 @@ -24,9 +24,12 @@ #include "logseventdata.h" #include "logsdbconnector.h" #include "logsdbconnector_stub_helper.h" +#include "logscommondata.h" +#include "logsconfigurationparams.h" #include #include +#include Q_DECLARE_METATYPE(LogsEvent *) Q_DECLARE_METATYPE(LogsCall *) @@ -58,6 +61,7 @@ void UT_LogsModel::init() { mModel = new LogsModel(); + LogsCommonData::getInstance().currentConfiguration().setListItemTextWidth(360); } void UT_LogsModel::cleanup() @@ -158,12 +162,18 @@ void UT_LogsModel::testDataAdded() { + QList addedIndexes; + QSignalSpy spy(mModel, SIGNAL(rowsInserted(const QModelIndex &, int, int))); + + // Empty list + mModel->dataAdded(addedIndexes); + QVERIFY( spy.count() == 0 ); + // One event added LogsEvent* event = new LogsEvent(); - mModel->mEvents.append(event); - QList addedIndexes; + mModel->mEvents.append(event); addedIndexes.append( 0 ); - QSignalSpy spy(mModel, SIGNAL(rowsInserted(const QModelIndex &, int, int))); + mModel->dataAdded(addedIndexes); QVERIFY( spy.count() == 1 ); @@ -195,11 +205,19 @@ void UT_LogsModel::testDataUpdated() { + QList updatedIndexes; + QSignalSpy spy(mModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &))); + + // Empty list + mModel->dataUpdated(updatedIndexes); + QVERIFY( spy.count() == 0 ); + + // Something updated LogsEvent* event = new LogsEvent(); mModel->mEvents.append(event); - QList updatedIndexes; + updatedIndexes.append( 0 ); - QSignalSpy spy(mModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &))); + mModel->dataUpdated(updatedIndexes); QVERIFY( spy.count() == 1 ); } @@ -207,9 +225,12 @@ void UT_LogsModel::testDataRemoved() { QList removedIndexes; - removedIndexes.append( 0 ); QSignalSpy spy(mModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int))); mModel->dataRemoved(removedIndexes); + QVERIFY( spy.count() == 0 ); + + removedIndexes.append( 0 ); + mModel->dataRemoved(removedIndexes); QVERIFY( spy.count() == 1 ); } @@ -382,9 +403,10 @@ void UT_LogsModel::testGetCallerId() { + //add private and unknown // No name or number LogsEvent event; - QVERIFY( mModel->getCallerId(event) == QString("No number") ); + QVERIFY( mModel->getCallerId(event) == QString("") ); // No name QString num("+12345555"); @@ -418,6 +440,28 @@ QVERIFY( mModel->getCallerId(event) == "test@1.2.3.4" ); } +void UT_LogsModel::testSqueezedString() +{ + QFontMetricsF fontMetrics(HbFontSpec(HbFontSpec::Primary).font()); + qreal maxwidth = LogsCommonData::getInstance().currentConfiguration().listItemTextWidth(); + QString baseString = "4124"; + QString secondaryString = "(3)"; + qreal stringWidth = fontMetrics.width(baseString+secondaryString); + + //test with string that fits + QVERIFY (mModel->SqueezedString(baseString,secondaryString,stringWidth + 10) == "4124(3)"); + + //test with string that needs to be cutted + QString squeezed = mModel->SqueezedString(baseString,secondaryString,stringWidth - 10); + QVERIFY (squeezed.endsWith("...(3)")); + + //test with empty basestring + QVERIFY (mModel->SqueezedString("",secondaryString,stringWidth) == "(3)"); + + //test with empty secondarystring + QVERIFY (mModel->SqueezedString(baseString,"",stringWidth) == "4124"); +} + void UT_LogsModel::testClearList() { mModel->clearList(LogsModel::TypeLogsClearAll); @@ -496,3 +540,32 @@ QVERIFY( mModel->setPredictiveSearch(true) == 0 ); QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "setPredictiveSearch" ); } + +void UT_LogsModel::testUpdateConfiguration() +{ + QSignalSpy spy(mModel, SIGNAL(modelReset())); + + // No previous config, reset not signaled + LogsConfigurationParams params; + params.setListItemTextWidth(200); + mModel->updateConfiguration(params); + QVERIFY( spy.count() == 0 ); + + // Previous config but no change, reset not signaled + mModel->updateConfiguration(params); + QVERIFY( spy.count() == 0 ); + + // Config changed but no unseen events, reset not signaled + params.setListItemTextWidth(400); + mModel->updateConfiguration(params); + QVERIFY( spy.count() == 0 ); + + // Config changed and unseen events, reset signaled + LOGS_TEST_CREATE_EVENT(event, 1, LogsEvent::EventAdded ); + event->setDirection(LogsEvent::DirMissed); + event->setDuplicates(10); + params.setListItemTextWidth(300); + mModel->updateConfiguration(params); + QVERIFY( spy.count() == 1 ); + +} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/src/ut_logsthumbnailmanager.cpp --- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsthumbnailmanager.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsthumbnailmanager.cpp Fri May 14 15:52:41 2010 +0300 @@ -23,6 +23,7 @@ #include #include #include +#include const QString path1 = "c:\\data\\images\\bg_1.png"; @@ -59,26 +60,28 @@ void UT_LogsThumbnailManager::testNonExistingIcon() { QSignalSpy spy(mIconMgr, SIGNAL(contactIconReady(int))); - Q_ASSERT(spy.isValid()); + QVERIFY(spy.isValid()); QCOMPARE( spy.count(), 0 ); - mIcon = mIconMgr->contactIcon(path3, 0); - Q_ASSERT(mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(path3, 0); + QVERIFY(mIcon->isNull()); // default icon used first + QVERIFY(mIcon == HbIcon::defaultIcon()); + mIconMgr->cancel(); - // No avatarpath, use defaul icon, note that defaul icon is null - // because svg config is not enabled in .pro file - mIcon = mIconMgr->contactIcon(QString(), 0); - Q_ASSERT(mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(QString(), 0); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); } void UT_LogsThumbnailManager::testOneExistingIcon() { QSignalSpy spy(mIconMgr, SIGNAL(contactIconReady(int))); - Q_ASSERT(spy.isValid()); + QVERIFY(spy.isValid()); QCOMPARE( spy.count(), 0 ); - mIcon = mIconMgr->contactIcon(path1, 10); - Q_ASSERT(mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(path1, 10); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); QPixmap pixmap(path1); int index = 10; @@ -87,13 +90,15 @@ mIconMgr->mTnmReqMap.insert(reqId, path1); mIconMgr->thumbnailReady(pixmap, clientData, 1, 0); // - mIcon = mIconMgr->contactIcon(path1, 10); - Q_ASSERT(!mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(path1, 10); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon != HbIcon::defaultIcon()); // mIconMgr->cancel(); // - mIcon = mIconMgr->contactIcon(path1, 10); - Q_ASSERT(mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(path1, 10); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); reqId = mIconMgr->mThumbnailManager->getThumbnail(path1, clientData, 0); mIconMgr->mTnmReqMap.insert(reqId, path1); mIconMgr->thumbnailReady(pixmap, clientData, 2, -1); @@ -102,21 +107,25 @@ QCOMPARE(spy.count(), 1); QList arguments = spy.takeFirst(); QVERIFY(arguments.at(0).toInt() == 10); - mIcon = mIconMgr->contactIcon(path1, 10); - Q_ASSERT(!mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(path1, 10); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); } void UT_LogsThumbnailManager::testCancel() { QSignalSpy spy(mIconMgr, SIGNAL(contactIconReady(int))); - Q_ASSERT(spy.isValid()); + QVERIFY(spy.isValid()); QCOMPARE( spy.count(), 0 ); - mIcon = mIconMgr->contactIcon(path1, 10); - Q_ASSERT(mIcon.isNull()); - mIcon = mIconMgr->contactIcon(path1, 11); - Q_ASSERT(mIcon.isNull()); - mIcon = mIconMgr->contactIcon(path3, 0); - Q_ASSERT(mIcon.isNull()); + mIcon = &mIconMgr->contactIcon(path1, 10); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); + mIcon = &mIconMgr->contactIcon(path1, 11); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); + mIcon = &mIconMgr->contactIcon(path3, 0); + QVERIFY(mIcon->isNull()); + QVERIFY(mIcon == HbIcon::defaultIcon()); mIconMgr->thumbnailLoad(); mIconMgr->cancel(); QCOMPARE(spy.count(), 0); diff -r 4a5361db8937 -r 7119b73b84d6 logsui/logsengine/tsrc/ut_logsengine/ut_logsengine.pro --- a/logsui/logsengine/tsrc/ut_logsengine/ut_logsengine.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/logsengine/tsrc/ut_logsengine/ut_logsengine.pro Fri May 14 15:52:41 2010 +0300 @@ -52,6 +52,7 @@ HEADERS += inc/ut_logseventdata.h HEADERS += inc/ut_logsthumbnailmanager.h HEADERS += inc/ut_logscommondata.h +HEADERS += inc/ut_logsconfigurationparams.h HEADERS += ../../../../recents_plat/logs_engine_api/inc/logsabstractmodel.h HEADERS += ../../../../recents_plat/logs_engine_api/inc/logsmodel.h HEADERS += ../../inc/logsdetailsmodel.h @@ -65,6 +66,7 @@ HEADERS += ../../inc/logseventdata.h HEADERS += ../../inc/logsthumbnailmanager.h HEADERS += ../../inc/logscommondata.h +HEADERS += ../../inc/logsconfigurationparams.h HEADERS += ../../logssymbianos/inc/logseventparser.h HEADERS += ../../logssymbianos/inc/logseventdataparser.h HEADERS += ../../logssymbianos/inc/logsdbconnector.h @@ -84,6 +86,7 @@ SOURCES += src/ut_logseventdata.cpp SOURCES += src/ut_logsthumbnailmanager.cpp SOURCES += src/ut_logscommondata.cpp +SOURCES += src/ut_logsconfigurationparams.cpp SOURCES += ../../src/logsabstractmodel.cpp SOURCES += ../../src/logsmodel.cpp SOURCES += ../../src/logsdetailsmodel.cpp @@ -97,8 +100,8 @@ SOURCES += ../../src/logseventdata.cpp SOURCES += ../../src/logsthumbnailmanager.cpp SOURCES += ../../src/logscommondata.cpp +SOURCES += ../../src/logsconfigurationparams.cpp SOURCES += ../hbstubs/hbstubs.cpp -SOURCES += ../hbstubs/qiconstubs.cpp SOURCES += ../symbianos_stub/logsdbconnector_stub.cpp SOURCES += ../symbianos_stub/logseventparser_stub.cpp SOURCES += ../symbianos_stub/logseventdataparser_stub.cpp diff -r 4a5361db8937 -r 7119b73b84d6 logsui/tsrc/install/logs_update_udeb.pkg --- a/logsui/tsrc/install/logs_update_udeb.pkg Tue May 04 12:39:37 2010 +0300 +++ b/logsui/tsrc/install/logs_update_udeb.pkg Fri May 14 15:52:41 2010 +0300 @@ -20,7 +20,7 @@ &EN ; Header -#{"LogsApp"},(0x101F4CD5),1,0,0,TYPE=SP +#{"LogsApp"},(0x101F4CD5),1,0,0,TYPE=SA,RU ; Localised Vendor name %{"Symbian"} diff -r 4a5361db8937 -r 7119b73b84d6 logsui/tsrc/logscenrepeditor/logscenrepeditor.pro --- a/logsui/tsrc/logscenrepeditor/logscenrepeditor.pro Tue May 04 12:39:37 2010 +0300 +++ b/logsui/tsrc/logscenrepeditor/logscenrepeditor.pro Fri May 14 15:52:41 2010 +0300 @@ -31,6 +31,6 @@ symbian: { TARGET.UID2 = 0x100039CE TARGET.UID3 = 0xE8316BDD - TARGET.CAPABILITY = CAP_APPLICATION AllFiles + TARGET.CAPABILITY = CAP_APPLICATION LIBS += -lcentralrepository } diff -r 4a5361db8937 -r 7119b73b84d6 logsui/tsrc/logsservicestester/main.cpp --- a/logsui/tsrc/logsservicestester/main.cpp Tue May 04 12:39:37 2010 +0300 +++ b/logsui/tsrc/logsservicestester/main.cpp Fri May 14 15:52:41 2010 +0300 @@ -27,6 +27,7 @@ qDebug() << "LogsServicesTester entry"; LogsServices::LogsView viewIndex = LogsServices::ViewAll; bool showDialpad = false; + QString number; for ( int i = 0; i< argc; i++ ){ qDebug() << "Arg" << ( i + 1 ) << argv[i]; QString argStr( argv[i] ); @@ -36,6 +37,9 @@ if ( argStr == QString("-dialpad") ){ showDialpad = true; } + if ( argStr == QString("-num") ){ + number = "223456677"; + } } HbApplication app(argc, argv); @@ -43,7 +47,7 @@ mainWindow.show(); qDebug() << "LogsServicesTester start logs"; - LogsServices::start( viewIndex, showDialpad ); + LogsServices::start( viewIndex, showDialpad, number ); int ret = app.exec(); qDebug() << "LogsServicesTester exit"; diff -r 4a5361db8937 -r 7119b73b84d6 recents_plat/logs_engine_api/inc/logsabstractmodel.h --- a/recents_plat/logs_engine_api/inc/logsabstractmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/recents_plat/logs_engine_api/inc/logsabstractmodel.h Fri May 14 15:52:41 2010 +0300 @@ -25,6 +25,7 @@ class LogsDbConnector; class LogsModelItemContainer; class HbIcon; +class LogsContact; /** * Abstract logs model. @@ -51,7 +52,32 @@ public: ~LogsAbstractModel(); + + /** + * Factory method for creating a new contact object. Transfers ownership. + */ + LOGSENGINE_EXPORT LogsContact* createContact(const QString& number); + /** + * Returns cenrep key status of predictive search feature. + * @return 0 - feature is permanently off and can't be turned on, + * 1 - feature is on + * 2 - feature is temporarily off and can be turned on + * negative value indicates some error in fetching the key + */ + LOGSENGINE_EXPORT int predictiveSearchStatus(); + + /** + * Allows to modify cenrep key value of predictive search features. + * However, this function can't be used if feature is set permanently off + * (see predictiveSearchStatus()) + * @param enabled, specify whether cenrep key will be set to 1 or 2 + * @ return 0 if cenrep key value modified succesfully, + * -1 in case of some error + */ + LOGSENGINE_EXPORT int setPredictiveSearch(bool enabled); + + LOGSENGINE_EXPORT bool isCommunicationPossible(const LogsEvent& event) const; public: static QString directionIconName(const LogsEvent& event); @@ -65,7 +91,11 @@ void getDecorationData(const LogsEvent& event, QList& iconList) const; LogsDbConnector* dbConnector(); - + +protected slots: + + virtual void contactSavingCompleted(bool modified); + protected: QVariant doGetData(int role, const LogsModelItemContainer& item) const; @@ -73,7 +103,8 @@ virtual QVariant createCall(const LogsModelItemContainer& item) const; virtual QVariant createMessage(const LogsModelItemContainer& item) const; virtual QVariant createContact(const LogsModelItemContainer& item) const; - + virtual int doSetPredictiveSearch(bool enabled); + explicit LogsAbstractModel(); protected: //data diff -r 4a5361db8937 -r 7119b73b84d6 recents_plat/logs_engine_api/inc/logsevent.h --- a/recents_plat/logs_engine_api/inc/logsevent.h Tue May 04 12:39:37 2010 +0300 +++ b/recents_plat/logs_engine_api/inc/logsevent.h Fri May 14 15:52:41 2010 +0300 @@ -263,6 +263,18 @@ */ bool isSeenLocally() const; + bool isRemotePartyPrivate() const; + bool isRemotePartyUnknown() const; + + /** + * Set remote party status as private of the event. + */ + void setRemotePartyPrivate(bool markedAsPrivate); + + /** + * Set remote party status as unknown of the event. + */ + void setRemotePartyUnknown(bool markedAsUnknown); private: @@ -315,6 +327,8 @@ bool mIsInView; LogsEventState mEventState; bool mIsLocallySeen; + bool mIsPrivate; + bool mIsUnknown; private: diff -r 4a5361db8937 -r 7119b73b84d6 recents_plat/logs_engine_api/inc/logsmodel.h --- a/recents_plat/logs_engine_api/inc/logsmodel.h Tue May 04 12:39:37 2010 +0300 +++ b/recents_plat/logs_engine_api/inc/logsmodel.h Fri May 14 15:52:41 2010 +0300 @@ -24,6 +24,7 @@ class LogsEvent; class LogsDbConnector; class LogsMatchesModel; +class LogsConfigurationParams; /** * Model for log events. @@ -104,25 +105,13 @@ * @return 0 if compressed */ LOGSENGINE_EXPORT int compressData(); - + /** - * Returns cenrep key status of predictive search feature. - * @return 0 - feature is permanently off and can't be turned on, - * 1 - feature is on - * 2 - feature is temporarily off and can be turned on - * negative value indicates some error in fetching the key + * Configuration. + * @param configuration parameters + * @return 0 if configured succesfully */ - LOGSENGINE_EXPORT int predictiveSearchStatus(); - - /** - * Allows to modify cenrep key value of predictive search features. - * However, this function can't be used if feature is set permanently off - * (see predictiveSearchStatus()) - * @param enabled, specify whether cenrep key will be set to 1 or 2 - * @ return 0 if cenrep key value modified succesfully, - * -1 in case of some error - */ - LOGSENGINE_EXPORT int setPredictiveSearch(bool enabled); + LOGSENGINE_EXPORT int updateConfiguration(LogsConfigurationParams& params); public: // From QAbstractItemModel @@ -160,6 +149,7 @@ void dataAdded(QList addedIndexes); void dataUpdated(QList updatedIndexes); void dataRemoved(QList removedIndexes); + void resetModel(); private: @@ -170,6 +160,7 @@ */ QList< QList > findSequentialIndexes(const QList& indexes); QString getCallerId(const LogsEvent& event) const; + QString SqueezedString(QString basestring, QString secondarystring, qreal maxwidth) const; void initIcons(); bool matchEventWithClearType(const LogsEvent& event, LogsModel::ClearType clearType);