diff -r f5050f1da672 -r 04becd199f91 javacommons/utils/src.s60/formatternative.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/utils/src.s60/formatternative.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2008-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: formatternative +* +*/ + + +//#include +#include +#include + +#include "com_nokia_mj_impl_utils_Formatter.h" +#include "com_nokia_mj_impl_utils_ResourceLoader.h" +#include "javajniutils.h" +#include "logger.h" + +enum EDateTimeFormat +{ + DATE_LONG = 1, + DATE_SHORT = 2, + /*TIME_SHORT = 3, + TIME_LONG = 4, + DATETIME_SHORT = 5, + DATETIME_LONG = 6*/ +}; + +const TUint JavaUpperTimeFor1970 = 14474675; +const TUint JavaLowerTimeFor1970 = 254771200; + +// const TInt KMaxDateTimeStringSize = 50; +const TInt KMaxDateFormatSize = 30; +const TInt KMaxNumberFormatSize = 40; + +// _LIT( KAvkonResFile, "z:\\resource\\avkon.rsc" ); + +JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_Formatter__1formatInteger +(JNIEnv *aJni, jobject, jint aNumber) +{ + JELOG2(EUtils); + TReal64 realNumber = aNumber; + std::auto_ptr numberString(HBufC::New(KMaxNumberFormatSize)); + if (numberString.get() == 0) + { + return 0; + } + TPtr numberPtr = numberString->Des(); + + TRealFormat numberFormat; + + TInt error = numberPtr.Num(realNumber, numberFormat); + if (error < KErrNone) + { + WLOG2(EUtils, + "Cannot format %d to current locale. Error: %d", aNumber, error); + } + + return aJni->NewString( + (const jchar*)numberPtr.Ptr(), numberPtr.Length()); +} + +JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_Formatter__1formatDate +(JNIEnv * aJni, jobject, jlong timeInMillis) +{ + std::auto_ptr dateString(HBufC::New(KMaxDateFormatSize)); + if (dateString.get() == 0) + { + return 0; + } + TPtr datePtr(dateString->Des()); + TBuf dateStringBuf; + + // Java Date object is calculated by millisecs from 1.1.1970 0:00:00 GMT + // Need conversion for Symbian TTime + TInt64 timeNum = *reinterpret_cast(&timeInMillis); + TInt64 timeBeginNum = + MAKE_TINT64(JavaUpperTimeFor1970, JavaLowerTimeFor1970); + + TTime timeBegin(timeBeginNum); + TTimeIntervalMicroSeconds delta(timeNum * 1000); + TTime time = timeBegin + delta; + + _LIT(KTestFormat, "%/0%1%/1%2%/2%3%/3"); + TRAP_IGNORE(time.FormatL(dateStringBuf, KTestFormat)); + datePtr.Append(dateStringBuf); + + return aJni->NewString( + (const jchar*)datePtr.Ptr(), datePtr.Length()); +} + +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_utils_ResourceLoader__1getLocaleId +(JNIEnv *, jobject) + +{ + return (jint)User::Language(); +} +