--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/securitydialogs/Autolock/src/AutolockContainer.cpp Wed Sep 01 12:19:59 2010 +0100
@@ -0,0 +1,394 @@
+/*
+* Copyright (c) 2002 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 FILES
+#include "AutolockContainer.h"
+#include <eikenv.h>
+#include <autolock.mbg>
+#include <avkon.hrh>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <data_caging_path_literals.hrh>
+#include "AutolockAppUiPS.h"
+#include <Autolock.rsg>
+#include "autolock.hrh"
+#include <eikdef.h>
+#include <aknnotedialog.h>
+#include <aknkeylock.h>
+#include <AknSoftNotifier.h>
+
+#include <coreapplicationuisdomainpskeys.h>
+
+#include <AknsLayeredBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <AknBitmapAnimation.h>
+#include <AknsUtils.h>
+#include <AknUtils.h>
+
+#include <e32property.h>
+#include <PSVariables.h> // Property values
+#include <coreapplicationuisdomainpskeys.h>
+#include <startupdomainpskeys.h>
+#include <ctsydomainpskeys.h>
+_LIT(BitmapName,"AutoLock.mbm");
+
+// CONSTANTS
+
+#ifdef RD_FULLSCREEN_WALLPAPER
+enum TAutolockBgLayers
+ {
+ EAutolockBgLayerWallpaper = 0,
+ EAutolockBgLayerBackground = 1,
+ EAutolockBgLayersN = 2
+ };
+#else
+enum TAutolockBgLayers
+ {
+ EAutolockBgLayerBackground = 0,
+ EAutolockBgLayerWallpaper = 1,
+ EAutolockBgLayersN = 2
+ };
+#endif //RD_FULLSCREEN_WALLPAPER
+
+ TInt aCallRect_x;
+ TInt aCallRect_y;
+ TInt aCallRect_width;
+ TInt aCallRect_height;
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CAutolockContainer::ConstructL(const TRect& aRect)
+// Symbian OS two phased constructor
+// ---------------------------------------------------------
+//
+void CAutolockContainer::ConstructL(const TRect& aRect)
+ {
+ #if defined(_DEBUG)
+ RDebug::Print(_L("(AUTOLOCK)CAutolockContainer::ConstructL"));
+ #endif
+ CreateWindowL();
+
+ HBufC* bitMapPath = HBufC::NewLC(KMaxPath);
+ TPtr BitmapFile(bitMapPath->Des());
+ BitmapFile.Append(_L("Z:"));
+ BitmapFile.Append(KDC_APP_BITMAP_DIR);
+ BitmapFile.Append(BitmapName);
+
+ iEikBitmap = 0;
+ iEikBitmapCall = 0;
+ AknsUtils::CreateIconL(
+ AknsUtils::SkinInstance(),
+ KAknsIIDQgnGrafPhoneLocked,
+ iBitmap,
+ iMask,
+ BitmapFile,
+ EMbmAutolockQgn_graf_phone_locked,
+ EMbmAutolockQgn_graf_phone_locked_mask );
+ AknsUtils::CreateIconL(
+ AknsUtils::SkinInstance(),
+ KAknsIIDQgnGrafPhoneLocked,
+ iBitmapCall,
+ iMaskCall,
+ BitmapFile,
+ EMbmAutolockQgn_indi_button_end_call,
+ EMbmAutolockQgn_indi_button_end_call_mask );
+
+#ifdef RD_FULLSCREEN_WALLPAPER
+ TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
+ TRect wallpaperRect( TPoint(0,0), screenSize );
+ iBgContext = CAknsLayeredBackgroundControlContext::NewL(
+ KAknsIIDWallpaper, wallpaperRect, ETrue, EAutolockBgLayersN );
+ SetRect(aRect);
+#else
+ // Create background control context for skins. Use parent absolute mode,
+ // as this is window owning control
+ iBgContext = CAknsLayeredBackgroundControlContext::NewL(
+ KAknsIIDQsnBgAreaMainIdle, aRect, ETrue, EAutolockBgLayersN );
+ iBgContext->SetLayerImage( EAutolockBgLayerWallpaper, KAknsIIDWallpaper );
+ iBgContext->SetLayerRect( EAutolockBgLayerWallpaper, aRect );
+ SetRect(aRect);
+#endif // RD_FULLSCREEN_WALLPAPER
+ ActivateL();
+
+ CleanupStack::PopAndDestroy(bitMapPath); //bitMapPath
+ #if defined(_DEBUG)
+ RDebug::Print(_L("(AUTOLOCK)CAutolockContainer::ConstructL END"));
+ #endif
+ }
+
+
+// ---------------------------------------------------------
+// CAutolockContainer::~CAutolockContainer()
+// Destructor
+// ---------------------------------------------------------
+//
+CAutolockContainer::~CAutolockContainer()
+ {
+ delete iBgContext;
+ delete iBitmap;
+ delete iMask;
+ delete iBitmapCall;
+ delete iMaskCall;
+
+ }
+// ---------------------------------------------------------
+// CAutolockContainer::SizeChanged()
+// Called by framework when the view size is changed
+// ---------------------------------------------------------
+//
+void CAutolockContainer::SizeChanged()
+ {
+ #if defined(_DEBUG)
+ RDebug::Print(_L("(AUTOLOCK)CAutolockContainer::SizeChanged()"));
+ #endif
+
+ TRect mainPaneRect(Rect());
+ TAknLayoutRect idleTradPane;
+ idleTradPane.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::main_idle_trad_pane());
+
+ TInt variety = 3;
+ if (Layout_Meta_Data::IsLandscapeOrientation())
+ {
+ variety = 2;
+ }
+
+
+ TAknLayoutRect idlePaneG2;
+ idlePaneG2.LayoutRect(idleTradPane.Rect(), AknLayoutScalable_Avkon::main_idle_pane_g2(variety));
+
+ TInt callState = 0;
+ RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState );
+ if ( callState == EPSCTsyCallStateNone || callState == EPSCTsyCallStateUninitialized )
+ {
+ AknIconUtils::SetSize( iBitmap, idlePaneG2.Rect().Size() );
+ }
+ else
+ {
+ TSize lockSize = TSize(0.8 * idlePaneG2.Rect().Size().iWidth, 0.8 * idlePaneG2.Rect().Size().iHeight);
+ AknIconUtils::SetSize( iBitmap, lockSize );
+ }
+ TSize callSize = TSize(60,60);
+ AknIconUtils::SetSize( iBitmapCall, callSize );
+
+#ifdef RD_FULLSCREEN_WALLPAPER
+ TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
+ TRect wallpaperRect( TPoint(0,0), screenSize );
+ iBgContext->SetLayerRect( EAutolockBgLayerBackground, Rect() ) ;
+ iBgContext->SetLayerRect( EAutolockBgLayerWallpaper, wallpaperRect ) ;
+
+ TPoint origo( 0, 0);
+ iBgContext->SetParentPos(origo);
+#else
+
+ iBgContext->SetLayerRect( EAutolockBgLayerBackground, Rect() ) ;
+ iBgContext->SetLayerRect( EAutolockBgLayerWallpaper, Rect() ) ;
+
+ TPoint positionRelativeToScreen = PositionRelativeToScreen();
+ //parent must be set when using parent absolute mode.
+ iBgContext->SetParentPos(positionRelativeToScreen);
+#endif //RD_FULLSCREEN_WALLPAPER
+
+ RRegion autolockRegion;
+#ifdef RD_FULLSCREEN_WALLPAPER
+ autolockRegion.AddRect( wallpaperRect);
+#else
+ autolockRegion.AddRect(Rect());
+#endif //RD_FULLSCREEN_WALLPAPER
+ Window().SetShape(autolockRegion);
+ autolockRegion.Close();
+
+ #if defined(_DEBUG)
+ RDebug::Print(_L("(AUTOLOCK)CAutolockContainer::SizeChanged() END"));
+ #endif
+ }
+// ---------------------------------------------------------
+// CAutolockContainer::CountComponentControls() const
+// ---------------------------------------------------------
+//
+TInt CAutolockContainer::CountComponentControls() const
+ {
+ TInt controlCount = 0;
+
+ return controlCount;
+ }
+
+// ---------------------------------------------------------
+// CAutolockContainer::ComponentControl(TInt aIndex) const
+// ---------------------------------------------------------
+//
+CCoeControl* CAutolockContainer::ComponentControl(TInt /*aIndex*/) const
+ {
+ return NULL;
+ }
+ // ---------------------------------------------------------
+// CAutolockContainer::Draw(const TRect& aRect) const
+// ---------------------------------------------------------
+//
+void CAutolockContainer::Draw(const TRect& aRect) const
+ {
+ #if defined(_DEBUG)
+ RDebug::Print(_L("(AUTOLOCK)CAutolockContainer::Draw"));
+ #endif
+ if (AknLayoutUtils::PenEnabled() )
+ {
+ TInt value = 0;
+ RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, value);
+ if(value <= EAutolockOff)
+ { // Avoid displaying the icon
+ #if defined(_DEBUG)
+ RDebug::Printf( "%s %s (%u) no Draw value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, value );
+ #endif
+ // If it returns, it will not handle orientation changes.
+ // However it will not really draw because the view is hidden
+ // return;
+ }
+ }
+
+ CWindowGc& gc = SystemGc();
+ gc.SetPenStyle(CGraphicsContext::ENullPen);
+ gc.SetBrushColor(KRgbWhite);
+ gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+ AknsDrawUtils::Background( skin, cc, this, gc, aRect );
+
+ // Draw "lock" icon centered to this control
+ // fist calculate the correct x coordinate based on this
+ // controls rect and bitmap width
+ TInt x = Rect().Width()/2 - iBitmap->SizeInPixels().iWidth /2;
+ // and do same with y
+ TInt y = Rect().Height()/2 - iBitmap->SizeInPixels().iHeight/2;
+ TInt width =iBitmap->SizeInPixels().iWidth;
+ TInt height =iBitmap->SizeInPixels().iHeight;
+
+ TInt gripStatus = EPSHWRMGripClosed;
+ RProperty::Get( KPSUidHWRM, KHWRMGripStatus, gripStatus );
+ #if defined(_DEBUG)
+ RDebug::Printf( "%s %s (%u) gripStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, gripStatus );
+ #endif
+
+ TInt callState = 0;
+ RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState );
+ if ( callState == EPSCTsyCallStateNone || callState == EPSCTsyCallStateUninitialized )
+ {
+ }
+ else
+ {
+ if (gripStatus != EPSHWRMGripOpen)
+ y-=100;
+ }
+
+ if (iBitmap && iMask)
+ {
+ // gc.BitBltMasked(TPoint(x,y),iBitmap,TRect(TPoint(0,0),iBitmap->SizeInPixels()), iMask, ETrue);
+ gc.BitBltMasked(TPoint(x,y),iBitmap,TRect(TPoint(0,0),TPoint(width,height)), iMask, ETrue);
+ if ( callState == EPSCTsyCallStateNone || callState == EPSCTsyCallStateUninitialized )
+ {
+ }
+ else
+ {
+ if (gripStatus != EPSHWRMGripOpen)
+ {
+ aCallRect_x=Rect().Width()/2 - iBitmapCall->SizeInPixels().iWidth/2;
+ aCallRect_y=Rect().Height() * 0.75;
+ }
+ else
+ {
+ aCallRect_x=Rect().Width()* 0.75 - iBitmapCall->SizeInPixels().iWidth/2;
+ aCallRect_y = Rect().Height()/2-3*10;
+ }
+ aCallRect_width=iBitmapCall->SizeInPixels().iWidth;
+ aCallRect_height=iBitmapCall->SizeInPixels().iHeight;
+ TSize cornerSize(20,20);
+ TSize cornerEllipseSize(cornerSize.iHeight*2,cornerSize.iWidth*2);
+ TRect box(aCallRect_x-3*10 , aCallRect_y-3*10, aCallRect_x+aCallRect_width+3*10, aCallRect_y+aCallRect_height+3*10);
+ TRect cornerRectTl(box.iTl,cornerEllipseSize);
+ gc.SetBrushColor(KRgbRed);
+ gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+ gc.SetPenStyle(CGraphicsContext::EDottedPen);
+ gc.DrawRoundRect(box,cornerSize);
+ gc.BitBltMasked(TPoint(aCallRect_x,aCallRect_y),iBitmapCall,TRect(TPoint(0,0),TPoint(aCallRect_width,aCallRect_height)), iMaskCall, ETrue);
+ if (gripStatus != EPSHWRMGripOpen)
+ aCallRect_y+=100; // coordinates are relative to TRect, not to Screen
+
+ // if active call, dismiss all pending notes. This avoids them on top of the BigRedButton
+ CAknSoftNotifier *softNotifier = NULL;
+ TRAPD (err, {
+ softNotifier = CAknSoftNotifier::NewL();
+ softNotifier->AddNotificationL(ESetIdleState, 0);
+ // softNotifier->SetIdleStateL(EFalse);
+ };)
+ delete softNotifier;
+ // during any call ,the touch need to be enabled, so that BigRedButton is available
+ // It will be re-enabled when the call ends
+ RAknKeyLock keylock;
+ if ( keylock.Connect() == KErrNone )
+ {
+ keylock.DisableWithoutNote();
+ keylock.Close();
+ }
+ }
+ }
+ else if (iBitmap && !iMask)
+ {
+ gc.BitBlt(TPoint(x,y),iBitmap);
+ if ( callState == EPSCTsyCallStateNone || callState == EPSCTsyCallStateUninitialized )
+ {
+ }
+ else
+ {
+ gc.BitBlt(TPoint(x,y+iBitmap->SizeInPixels().iHeight),iBitmapCall);
+ }
+ }
+ #if defined(_DEBUG)
+ RDebug::Print(_L("(AUTOLOCK)CAutolockContainer::Draw END"));
+ #endif
+ }
+
+// ---------------------------------------------------------
+// CAutolockContainer::HandleControlEventL(
+// CCoeControl* aControl,TCoeEvent aEventType)
+// ---------------------------------------------------------
+//
+void CAutolockContainer::HandleControlEventL(
+ CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+ {
+ }
+
+// ---------------------------------------------------------
+// CAutolockContainer::MopSupplyObject
+//
+// ---------------------------------------------------------
+//
+TTypeUid::Ptr CAutolockContainer::MopSupplyObject( TTypeUid aId )
+ {
+ if (aId.iUid == MAknsControlContext::ETypeId)
+ {
+ return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+ }
+ return CCoeControl::MopSupplyObject( aId );
+ }
+void CAutolockContainer::GiveCoords( TRect& aRect )
+ {
+ aRect.iBr.iX=aCallRect_x;
+ aRect.iBr.iY=aCallRect_y;
+ aRect.iTl.iX=aCallRect_width+2*3*10;
+ aRect.iTl.iY=aCallRect_height+2*3*10;
+ }
+// End of File