diff -r 6ca72c0fe49a -r a941bc465d9f wvuing/wvuiave/AppSrc/ccainvitationview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiave/AppSrc/ccainvitationview.cpp Wed Sep 01 12:31:13 2010 +0100 @@ -0,0 +1,596 @@ +/* +* Copyright (c) 2006 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: View class for private chat list view +* +*/ + + +// INCLUDE FILES +#include "CCAAppUi.h" +#include "CCAStatusPaneHandler.h" +#include "chatngclient.hrh" +#include "ccainvitationview.h" +#include "ccainvitationcontainer.h" +#include "caexternalinterface.h" +#include "ChatDebugPrint.h" +#include "CCAUISessionManager.h" +#include "MCABlockingPC.h" +#include "CCABlockingUI.h" +#include "MCAInvitationPC.h" +#include "MCAProcessManager.h" + +#include "IMDialogUtils.h" +#include "IMUtils.h" +#include "CCATextQuerydialog.h" +#include "CCAGroupUtils.h" +#include "MCAUiLoginCmdCB.h" +#include "MCALoginPC.h" + +// local variation +#include "IMPrivateCRKeys.h" +#include "IMVariant.hrh" +// The Settings have been moved to Cenrep (also retained in the Resource file), +// so the enums for keys and central repository header is added here +#include "VariantKeys.h" + +#include "CCASyncChecker.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +// ================= MEMBER FUNCTIONS ======================= + + + +// ----------------------------------------------------------------------------- +// CCAInvitationView::CCAInvitationView() +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCAInvitationView::CCAInvitationView() : iChatJoinRejectFlag( EFalse ) + { + } + + +// Destructor +CCAInvitationView::~CCAInvitationView() + { + if ( iContainer && iAppUi ) + { + iAppUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + + delete iBlockingUI; + delete iAsyncCallBack; + delete iIdentification; + + } +// ----------------------------------------------------------------------------- +// CCAInvitationView::ConstructL() +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// + +void CCAInvitationView::ConstructL( TInt aAvkonViewResourceId, + TUid aViewId ) + { + BaseConstructL( aAvkonViewResourceId, aViewId ); + + iAppUi = static_cast( CEikonEnv::Static()->AppUi() ); + + MCABlockingPC* blockingPC = iAppUi->GetProcessManager().GetBlockingInterface(); + + iInvitationPC = iAppUi->GetProcessManager().GetInvitationsInterface(); + iBlockingUI = CCABlockingUI::NewL( blockingPC ); + iRejectReason = iInvitationPC->RejectReason(); + iTitlePane = iAppUi->CAStatusPane(); + } + +// --------------------------------------------------------- +// CCAInvitationView::HandleCommandL() +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::HandleCommandL( TInt aCommand ) + { + HBufC* screenName = iAppUi->ScreenNamePtr(); + TPtr screenNamePtr = screenName->Des(); + TPtr rejectReasonPtr = iRejectReason->Des(); + if ( iChatJoinRejectFlag ) + { + return; + } + switch ( aCommand ) + { + // These cases require, that we are logged in + case EChatInvitationDlgCmdJoin: + case EChatInvitationDlgCmdReject: + case EChatClientFriendsListViewCmdBlock: + case EChatClientFriendsListViewCmdBlockEnter: + case EChatClientFriendsListViewShowBlockedList: + case EChatClientFriendsListViewUnblock: + { + if ( !UISessionManager().LoginL( MCAUiLoginCmdCB::EQueryLogin ) ) + { + return; + } + break; + } + default: + { + break; + } + } +#ifdef IMPS_CONTACT_FETCH_BACKGROUND + + switch ( aCommand ) + { + // These cases require, that we are logged in + //case EChatInvitationDlgCmdJoin: + //case EChatInvitationDlgCmdReject: + case EChatClientFriendsListViewCmdBlock: + case EChatClientFriendsListViewCmdBlockEnter: + case EChatClientFriendsListViewShowBlockedList: + case EChatClientFriendsListViewUnblock: + { + if ( !CCASyncChecker::CheckSyncStateL() ) + { + return; + } + break; + } + default: + { + break; + } + } +#endif //IMPS_CONTACT_FETCH_BACKGROUND + switch ( aCommand ) + { + case EAknSoftkeyBack: + case EChatClientCmdBack: + { + if ( !iContainer->IsInvitationOpen() ) + { + if ( iTitlePane ) + { + iTitlePane->SynchroniseAndRemoveTabGroup(); + } + TCADnlConvInvGroupFocus dnlConvInvGroupFocus; + dnlConvInvGroupFocus.iInvConvGroupID.Copy( iAppUi->GetProcessManager().GetInvitationsInterface()->GetInviteID( iInvitationIndex ) ); + dnlConvInvGroupFocus.iListID.Copy( KNullDesC() ); + dnlConvInvGroupFocus.iType = EInviteItem; + TCADnlConvInvGroupFocusBuf convInvGroupFocusBuf( dnlConvInvGroupFocus ); + iAppUi->SwitchViewBackL( KUidFriendsListView, KConvInvGroupFocusId, convInvGroupFocusBuf ); + } + break; + } + case EChatInvitationDlgCmdJoin: + { + // ask the screen name + TInt result( EAknSoftkeyOk ); + result = iAppUi->GroupUtils()->ScreenNameQueryL( screenNamePtr ); + + if ( ( result == EAknSoftkeyOk ) || ( result == EAknSoftkeyYes ) ) + { + iChatJoinRejectFlag = ETrue; + iContainer->JoinToGroupL( iInvitationIndex ); + iChatJoinRejectFlag = EFalse; + } + + break; + } + + case EChatInvitationDlgCmdReject: + { + // ask the reason + // CodeScanner warning ignored because CS does not + // notice that PrepareLC puts the dialog to cleanupstack + CCATextQueryDialog* dlg = CCATextQueryDialog::NewL( rejectReasonPtr ); // CSI: 35 # See comment above + dlg->PrepareLC( R_CHATCLIENT_REJECT_REASON_QUERY ); + dlg->SetTitleL( R_QTN_CHAT_INVIT_REJECT_REASON ); + dlg->SetPredictiveTextInputPermitted( ETrue ); // T9 + TInt result( dlg->RunLD() ); + + if ( ( result == EAknSoftkeyOk ) || ( result == EAknSoftkeyYes ) ) + { + iChatJoinRejectFlag = ETrue; + iContainer->RejectInvitationL( iInvitationIndex, rejectReasonPtr ); + iChatJoinRejectFlag = EFalse; + if ( iTitlePane ) + { + iTitlePane->SynchroniseAndRemoveTabGroup(); + } + iAppUi->SwitchViewBackL( KUidFriendsListView ); + } + + break; + } + case EKeyDelete: + case EChatInvitationDlgCmdDelete: + { + // ask the confirmation + HBufC* prompt = + iEikonEnv->AllocReadResourceLC( R_CHAT_CONV_LIST_INV_DEL ); + CAknQueryDialog* dlg = new( ELeave )CAknQueryDialog(); + CleanupStack::PushL( dlg ); + dlg->SetPromptL( prompt->Des() ); + CleanupStack::Pop( dlg ); + TInt ret( dlg->ExecuteLD( R_CLOSE_COVERSATION_QUERY ) ); + CleanupStack::PopAndDestroy( prompt ); + + // should be deleted + if ( ( ret == EAknSoftkeyOk ) || ( ret == EAknSoftkeyYes ) ) + { + iChatJoinRejectFlag = ETrue; + iContainer->DeleteInvitationL( iInvitationIndex ); + iChatJoinRejectFlag = EFalse; + if ( iTitlePane ) + { + iTitlePane->SynchroniseAndRemoveTabGroup(); + } + iAppUi->SwitchViewBackL( KUidFriendsListView ); + } + + break; + } + + case EChatClientFriendsListViewCmdBlock: + { + iBlockingUI->BlockUserL( iInvitationPC->InvitationUserIDL( /*iInvitationIndex */ 0 ) ); + break; + } + + case EChatClientFriendsListViewCmdBlockEnter: + { + iBlockingUI->DisplayBlockTextQueryL(); + break; + } + + case EChatClientFriendsListViewShowBlockedList: + { + iBlockingUI->DisplayBlockedListL(); + break; + } + + case EChatClientFriendsListViewUnblock: + { + iBlockingUI->DisplayUnblockListQueryL(); + break; + } + + case EChatClientCmdHelp: + { + HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), + ( CCoeEnv::Static()->AppUi() )->AppHelpContextL () ); + break; + } + case EAknCmdExit: // fall-through, handled similarily + case EEikCmdExit: // fall-through, handled similarily + case EAknSoftkeyExit: // fall-through, handled similarily + case EChatClientCmdExit: + { + iAppUi->HandleCommandL( EAknSoftkeyExit ); + break; + } + case EAknSoftkeyOk: + { + // Show context menu with selection key + ShowPopUpMenuL(); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + + } + +// --------------------------------------------------------- +// CCAInvitationView::DoActivateL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::DoActivateL( const TVwsViewId& /* aPrevViewId */, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ) + { + CHAT_DP( D_CHAT_LIT( "CCAInvitationView::DoActivateL, customMessageId:\ + %d" ), aCustomMessageId ); + // Unregister the view that was registered from Forward option. + // didn't find any better place to put this. + if ( TEnumsPC::EToBeUnregistered == iAppUi->RetForwardTo() ) + { + iAppUi->UnRegisterPreviousview( ); + iAppUi->SetResetForwardTo( TEnumsPC::EUnregistered ); + } + iChatJoinRejectFlag = EFalse; + iInvitationPC->RegisterObserver( this ); + + TBool activateFromTabSwitch = EFalse; + if ( aCustomMessageId == KUidInvViewMsgId ) + { + TCADnlInvViewBuf viewBuf; + viewBuf.Copy( aCustomMessage.Left( viewBuf.MaxLength() ) ); + + activateFromTabSwitch = viewBuf().iSwitchTab; + if ( activateFromTabSwitch ) + { + iInvitationIndex = iInvitationPC->FindInvitationIndex( viewBuf().iInviteID ); + iTabId = viewBuf().iTabId; + } + else + { + iInvitationIndex = viewBuf().iInvitationIndex; + if ( iTitlePane ) + { + //hide navi pane decorators + iTitlePane->ClearNaviPaneL(); + + iTabId = iTitlePane->ShowTabGroupL( TEnumsPC::EInviteItem, + viewBuf().iInviteID ); + } + } + } + iIdentification = iInvitationPC->InvitationUserIDL( iInvitationIndex ).AllocL(); + + + if ( !iInvitationPC->IsInvitationUnread( iInvitationIndex ) ) + { + iInvitationPC->SetInvitationAsReadL( iInvitationIndex ); + } + + // Reuse the container if it exists. + iContainer = CCAInvitationContainer::NewL( ClientRect(), + iInvitationIndex, + iRejectReason->Des(), + *CAViewSwitcher(), + *this, iTabId, + iContextFlag, + *this ); + + CEikButtonGroupContainer *cba = CEikButtonGroupContainer::Current(); + cba->MakeCommandVisible( EAknSoftkeyOptions, EFalse ); + cba->MakeCommandVisible( EAknSoftkeyBack, EFalse ); + iContainer->SetMopParent( this ); + if ( iTitlePane ) + { + iTitlePane->SetTitleL( iEikonEnv, + R_QTN_CHAT_INVITATION_TITLE ); + } + iAppUi->SetAfterRefreshMode( ETrue ); + + iInvitationPC->SetActiveInvitation( iInvitationIndex ); + + if ( iTitlePane ) + { + iTitlePane->AddObserver( this ) ; + } + iContainer->PrepareTextL( iInvitationIndex ); + cba->MakeCommandVisible( EAknSoftkeyOptions, ETrue ); + cba->MakeCommandVisible( EAknSoftkeyBack, ETrue ); + iAppUi->AddToViewStackL( *this, iContainer ); + + MenuBar()->SetContextMenuTitleResourceId( R_CHATCLIENT_INVITATIONS_CONTEXTMENUBAR ); + } + +// --------------------------------------------------------- +// CCAInvitationView::DoDeactivate() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::DoDeactivate() + { + + delete iIdentification; + + iIdentification = NULL; + + if ( iTitlePane ) + { + iTitlePane->RemoveObserver( this ); + } + + if ( iContainer ) + { + iAppUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + iInvitationPC->UnRegisterObserver(); + } + + + +// --------------------------------------------------------- +// CCAInvitationView::HandleInvitationEventL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::HandleInvitationEventL( TEnumsPC::TInviteType aInviteType, TInt aIndex ) + { + switch ( aInviteType ) + { + case TEnumsPC::ENewInvite: + { + break; + } + case TEnumsPC::EInviteCancelOrExpired: + { + //if the expired one is the current one which is being viewd + //close the current view and switch the view back + if ( aIndex == iInvitationIndex ) + { + //since this is called by the system dont use the following + //CAAppUi()->CAStatusPane()->DeleteTab(iTabId); method to delete + //this invitation + if ( iTitlePane ) + { + iTitlePane->SynchroniseAndRemoveTabGroup(); + } + iAppUi->SwitchViewBackL( KUidFriendsListView ); + } + } + default: + { + break; + } + + } + + } + +// --------------------------------------------------------- +// CCAInvitationView::HandleInvitationResponse +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::HandleInvitationResponse( TBool /*aAcceptance*/, + const TDesC& /*aUserId*/, + const TDesC& /*aGroupName*/, + const TDesC& /*aResponse*/ ) + { + //Nothing to do here.. + //handled in appui + } + + +// --------------------------------------------------------- +// CCAInvitationView::SwitchTabL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::SwitchTabL( const TDesC& aWvId, const TInt aTabIndex ) + { + + iInvitationIndex = iInvitationPC->FindInvitationIndex( aWvId ); + //if valid index then only perform the switch + if ( iInvitationIndex != -1 ) + { + iInvitationPC->SetActiveInvitation( iInvitationIndex ); + + //Check whether the invitation is read else mark it read + if ( !iInvitationPC->IsInvitationUnread( iInvitationIndex ) ) + { + iInvitationPC->SetInvitationAsReadL( iInvitationIndex ); + } + + iTabId = aTabIndex; + + //remove the controls from view stack + iAppUi->RemoveFromViewStack( *this, iContainer ); + + iContainer->InvitationSwitchTabL( iInvitationIndex ); + + //again add those controls to view stack + iAppUi->AddToViewStackL( *this, iContainer ); + + iChatJoinRejectFlag = EFalse; + } + + + } + + +// ----------------------------------------------------------------------------- +// CCAInvitationView::DynInitMenuPaneL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + +void CCAInvitationView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + // if we're displaying general menu and help feature is not supported.. + if ( aResourceId == R_CHATCLIENT_GENERAL_MENU && + !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + // dim the help menu item + aMenuPane->SetItemDimmed( EChatClientCmdHelp, ETrue ); + } + switch ( aResourceId ) + { + case R_CHATCLIENT_FRIENDSLIST_SUBMENU: + { + // Always hide this option as unblock shoul be should + // be showed only in blocklist view. + aMenuPane->SetItemDimmed( EChatClientFriendsListViewUnblock, + ETrue ); + + aMenuPane->SetItemDimmed( EChatClientFriendsListViewCmdBlock, + iContainer->IsBlocked( iInvitationPC-> + InvitationUserIDL( iInvitationIndex + ) ) ); + // show/hide "show blocked list" option + if ( !IMUtils::IntResourceValueL( + RSC_CHAT_VARIATION_SHOW_BLOCKED_LIST ) ) + { + aMenuPane->SetItemDimmed( + EChatClientFriendsListViewShowBlockedList, ETrue ); + } + + break; + } + default: + { + //we are never here. + break; + } + + } + } + +// --------------------------------------------------------- +// CCAInvitationView::ShowPopUpMenuL() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationView::ShowPopUpMenuL( ) + { +#ifndef RD_30_DISABLE_TOUCH + // S60 COMMON + MenuBar()->StopDisplayingMenuBar(); + MenuBar()->TryDisplayContextMenuBarL(); +#endif //RD_30_DISABLE_TOUCH + } + +// --------------------------------------------------------- +// CCAInvitationView::ShowRecipientsListL() +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCAInvitationView::ShowRecipientsListL( TInt /*aResourceId*/ ) + { + return KErrNotFound; + } + +// End of File