--- /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 <barsread.h>
+#include <bldvariant.hrh>
+#include <eikmenup.h>
+#include <chatNG.rsg>
+#include <hlplch.h>
+#include <FeatMgr.h>
+#include <AknDlgShut.h>
+#include <StringLoader.h>
+#include <aknglobalnote.h>
+#include <stringloader.h>
+#include <eiklbx.h>
+#include <SysUtil.h>
+
+#include <csxhelp/imng.hlp.hrh>
+
+// ================= 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<CCAAppUi*>( 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