telephonyutils/dial/src/DIALUTIL.CPP
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyutils/dial/src/DIALUTIL.CPP	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,433 @@
+// Copyright (c) 1997-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:
+//
+
+/**
+ @file
+ @internalComponent
+ @deprecated 9.1
+*/
+
+#include "DIALUTIL.H"
+
+/**
+@deprecated 9.1
+*/
+TInt TDialNumber::String (const TDes& aPhoneNumber, TInt aPos) const
+	{
+	while (aPhoneNumber[aPos] == KCharSpace  &&  aPos < aPhoneNumber.Length()-1) // already on a space then move to a non-space
+		{
+		aPos++;
+		}
+
+	if (aPos > aPhoneNumber.Length())
+		{
+		return (KErrNotFound);
+		}
+
+	while (aPhoneNumber[aPos] != KCharSpace  &&  aPos < aPhoneNumber.Length()-1)
+		{
+		aPos++;
+		}
+
+	if (aPos >= aPhoneNumber.Length()-1)
+		{
+		return (KErrNotFound);
+		}
+
+	return (aPos);
+	}
+
+/**
+@deprecated 9.1
+*/
+void TDialNumber::SpaceParser(const TDes& aPhoneNumber)
+	{
+	TInt i = aPhoneNumber.Locate(KCharPlus) ;
+	TInt j = aPhoneNumber.Locate(KCharSpace) ;
+	if (j!=-1) // there space(s)
+		j = String ( aPhoneNumber , 0) ;
+	else
+		j = -1 ;
+
+	if ( i==-1 || j==-1 ) 
+	{
+		iNatCode = _L("") ;
+		iAreaCode = _L("");
+		iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+		return ;
+	}
+	else if (j>i)
+		{
+		if ( j-2*i-2 >= KMaxNatCode )
+			{
+			iNatCode = _L("") ;
+			iAreaCode = _L("");
+			iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+			return ;
+			}
+		else
+			iNatCode = aPhoneNumber.Mid(i+1,j-i-1);
+		}
+	i=j;
+	j = String ( aPhoneNumber , i) ;
+
+	if ( i==-1 || j==-1 )
+		iAreaCode = _L("");
+	else if (j>i)
+		{
+		if ( j-2*i-2 >= KMaxAreaCode )
+			{
+			iNatCode = _L("") ;
+			iAreaCode = _L("");
+			iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+			return ;
+			}
+		else
+			{
+			iAreaCode = aPhoneNumber.Mid(i+1,j-i-1);
+			DialUtil::RemoveSpace (iAreaCode) ;
+			}
+		}
+
+	if (!iNatCode.Length() &&
+		!iAreaCode.Length() )
+			iPhoneNumber = aPhoneNumber ;
+	else if ( !iAreaCode.Length() ) // no area code supplied take the remain from NatCode onward as telephone number
+		iPhoneNumber = aPhoneNumber.Mid(i+1,aPhoneNumber.Length()-i-1);
+	else
+		{
+		iPhoneNumber = aPhoneNumber.Mid(j+1,aPhoneNumber.Length()-j-1);
+		}
+	DialUtil::RemoveSpace (iPhoneNumber) ;
+	}
+
+/**
+@deprecated 9.1
+*/
+void TDialNumber::BracketParser(const TDes& aPhoneNumber)
+	{
+	TInt i = aPhoneNumber.Locate(KCharPlus) ;
+	TInt j = aPhoneNumber.Locate(KCharSpace) ; 
+	if ( j == KErrNotFound ) // no space found in the string
+		j = aPhoneNumber.Locate(KCharOpenBracket) ; // It must has a (
+	else
+		j = Min (aPhoneNumber.Locate(TChar(KCharSpace)),aPhoneNumber.Locate(TChar(KCharOpenBracket)) ) ;
+	
+	if ( i==-1 || j==-1 || j<=i )
+		{
+		iNatCode = _L("") ;
+		iAreaCode = _L("");
+		iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+		return ;
+		}
+	else
+		{
+		if ( j-2*i-2 >= KMaxNatCode )
+			{
+			iNatCode = _L("") ;
+			iAreaCode = _L("");
+			iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+			return ;
+			}
+		else
+			iNatCode = aPhoneNumber.Mid(i+1,j-i-1);
+		}
+
+	i = aPhoneNumber.Locate(KCharOpenBracket) ;
+	j = aPhoneNumber.Locate(KCharCloseBracket) ;
+
+	if ( i==-1 || j==-1 || j<=i )
+		{
+		iNatCode = _L("") ;
+		iAreaCode = _L("");
+		iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+		return ;
+		}
+	else
+		{
+		if ( j-2*i-2 >= KMaxAreaCode )
+			{
+			iNatCode = _L("") ;
+			iAreaCode = _L("");
+			iPhoneNumber = aPhoneNumber.Right(aPhoneNumber.Length()-1 ); // from KCharPlus onward
+			return ;
+			}
+		else
+			iAreaCode = aPhoneNumber.Mid(i+1,j-i-1);
+		}
+	if (!iNatCode.Length() &&
+		!iAreaCode.Length() )
+			iPhoneNumber = aPhoneNumber ;
+	else
+			iPhoneNumber = aPhoneNumber.Mid(j+1,aPhoneNumber.Length()-j-1);
+
+	}
+
+/**
+@deprecated 9.1
+*/
+TDialNumber::TDialNumber (const TDes& aPhoneNumber,
+						  const TDialLocation& aDialLocation , 
+						  const TChargeCard & aChargeCard )
+	{
+	
+	if (aPhoneNumber.Locate(KCharPlus) == KErrNotFound)
+		{
+		}
+	else
+		{
+		TInt iOpen =aPhoneNumber.Locate(KCharOpenBracket);
+		TInt iClose=aPhoneNumber.Locate(KCharCloseBracket);
+
+
+		if ( iOpen==KErrNotFound ||
+			 iClose==KErrNotFound    )
+			{
+			SpaceParser (aPhoneNumber) ;
+			}
+		else // found both brackets 
+			{
+			if (iOpen>iClose || iClose-iOpen==1 ) // close bracket before open bracket or nothing in the brackets
+				SpaceParser (aPhoneNumber) ;
+			else
+				{
+				iClose=aPhoneNumber.Locate(KCharSpace);
+
+				if ( iClose==KErrNotFound) // no spaces found in string
+					BracketParser(aPhoneNumber);
+				else 
+					{
+					if ( iClose>iOpen) // first space found after open bracket so bracket parser
+						BracketParser (aPhoneNumber) ;
+					else // spaces found before the (
+						{
+						while (	iClose < aPhoneNumber.Length()-1 &&
+								aPhoneNumber[iClose]==KCharSpace)
+							iClose++; // move on until a non-space char found
+
+						if (aPhoneNumber[iClose]==KCharOpenBracket) // is a bracket ?
+							BracketParser(aPhoneNumber); // the bracket parser
+						else
+							SpaceParser (aPhoneNumber) ;
+						}
+					}
+
+				}
+			}
+		}
+	iIntlPrefCode = aDialLocation.IntlPrefCode () ;
+	iNatPrefCode = aDialLocation.NatPrefCode () ;
+
+	if (!iNatCode.Length()) // if national code is not supplied
+	{
+		iNatCode = aDialLocation.NatCode () ; // set it to the current location
+		if (!iAreaCode.Length())
+			iAreaCode = aDialLocation.AreaCode () ;
+	}
+//	else // supplied in the string
+//		; // leave the area code alone and assume user has to supplied this
+
+	CallType(aDialLocation) ;
+	if (aChargeCard.ValidateChargeCardInfo())
+		RuleToUse(aChargeCard) ;
+
+	}
+
+/**
+@deprecated 9.1
+*/
+TPtrC TDialNumber::IntlPrefCode () const 
+	{
+	return TPtrC(iIntlPrefCode);
+	}
+
+/**
+@deprecated 9.1
+*/
+TPtrC TDialNumber::NatPrefCode ()const 
+	{
+	return TPtrC(iNatPrefCode);
+	}
+
+/**
+@deprecated 9.1
+*/
+TPtrC TDialNumber::NatCode()const 
+	{
+	return TPtrC(iNatCode);
+	}
+
+/**
+@deprecated 9.1
+*/
+TPtrC TDialNumber::AreaCode()const 
+	{
+	return TPtrC(iAreaCode);
+	}
+
+/**
+@deprecated 9.1
+*/
+TPtrC TDialNumber::PhoneNumber()const 
+	{
+	return TPtrC(iPhoneNumber);
+	}
+
+/**
+@deprecated 9.1
+*/
+TPtrC TDialNumber::RuleToUse()const 
+	{
+	return TPtrC(iRuleToUse);
+	}
+
+/**
+@deprecated 9.1
+*/
+TCallType TDialNumber::CallType()const 
+	{
+	return iCallType;
+	}
+
+/**
+@deprecated 9.1
+*/
+void TDialNumber::RuleToUse ( const TChargeCard & aChargeCard)
+	{
+	switch (iCallType)
+		{
+	case ELocalCall:
+		iRuleToUse = aChargeCard.LocalRule() ;
+		break;
+	case ELongDistanceCall:
+		iRuleToUse = aChargeCard.NatRule();
+		break;
+	case EInternationalCall:
+		iRuleToUse = aChargeCard.IntlRule() ;
+		break;
+		}
+	}
+
+/**
+@deprecated 9.1
+*/
+void TDialNumber::CallType ( const TDialLocation & aDialLocation )
+	{
+	iCallType = ELocalCall ;
+	if ( aDialLocation.AreaCode() != iAreaCode)
+		{
+		iCallType = ELongDistanceCall ;
+		}
+	if ( aDialLocation.NatCode() != iNatCode)
+		{
+		iCallType = EInternationalCall ;
+		}
+
+	}
+
+/**
+@deprecated 9.1
+*/
+TBool TDialNumber::IsNatCode() const { return iNatCode.Length(); }
+/**
+@deprecated 9.1
+*/
+TBool TDialNumber::IsAreaCode() const { return iAreaCode.Length();}
+/**
+@deprecated 9.1
+*/
+TBool TDialNumber::IsRuleToUse() const{ return iRuleToUse.Length();}
+
+
+//
+// DialUtil
+//
+
+/**
+@deprecated 9.1
+*/
+TBool DialUtil::AppendDialString(TDes& aDialStr, TPtrC aAppendStr )
+	{
+	if ( (aDialStr.Length()+aAppendStr.Length()) < aDialStr.MaxLength() )
+		{
+		aDialStr.Append (aAppendStr);
+		return ETrue ;
+		}
+	else
+		return EFalse ;
+	}
+
+/**
+@deprecated 9.1
+*/
+TBool DialUtil::AppendDialString(TDes& aDialStr, TChar aChar )
+	{
+	if ( (aDialStr.Length()+1) < aDialStr.MaxLength() )
+		{
+		aDialStr.Append (aChar);
+		return ETrue ;
+		}
+	else
+		return EFalse ;
+	}
+
+
+/**
+@deprecated 9.1
+*/
+void DialUtil::RemoveSpace (TDes& aDialString)
+	{
+	TInt pos = aDialString.Locate(KCharSpace);
+
+	while ( pos != -1 )
+		{
+		aDialString.Replace (pos,1,_L("")) ;
+		pos = aDialString.Locate(KCharSpace);
+		}
+	}
+
+#if 0
+TBool DialUtil::PhoneFormatOK( TDes& aPhoneNumber)
+	{
+ 	return !(
+			(aPhoneNumber.Locate(KCharOpenBracket)!=KErrNotFound && aPhoneNumber.Locate(KCharCloseBracket)==KErrNotFound) 
+ 	||		(aPhoneNumber.Locate(KCharOpenBracket)==KErrNotFound && aPhoneNumber.Locate(KCharCloseBracket)!=KErrNotFound)
+		) ;
+	}
+#endif
+
+/**
+@deprecated 9.1
+*/
+void DialUtil::RemoveUndiallableChars (TDes& aDialString)
+	{
+	TInt pos = 0;
+	while ( pos < aDialString.Length() )
+		{
+		if (	aDialString[pos] == KCharStar  ||
+				aDialString[pos] == KCharHash  ||
+				aDialString[pos] == KCharComma ||
+			(	aDialString[pos] >= '0' && aDialString[pos] <='9') )
+
+			;
+		else
+			{
+			aDialString.Replace (pos,1,_L("")) ;
+			pos--;
+			}
+		pos++ ;
+		}
+
+	}