bluetoothengine/btnotif/src/btnotifnameutils.cpp
branchRCL_3
changeset 23 9386f31cc85b
parent 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btnotif/src/btnotifnameutils.cpp	Wed Sep 01 12:20:04 2010 +0100
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 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:  Declares Bluetooth notifiers base class.
+ *
+ */
+
+#include <AknUtils.h>
+#include <StringLoader.h>
+#include <utf.h>
+
+#include <BTNotif.rsg>
+
+#include "btNotifDebug.h"
+#include "btnotifnameutils.h"
+
+/**
+ * A function for strip dangerous chars out of BT name 
+ * @param  a device name. After return, it contains the stripped name.
+ * @return void
+ */
+void BtNotifNameUtils::StripDeviceName(TBTDeviceName& aDeviceNameForStrip)
+    {	   
+    aDeviceNameForStrip.Trim();
+    // Filter out listbox non-friendly control chars.
+    //
+    AknTextUtils::StripCharacters(aDeviceNameForStrip, KAknStripListControlChars);  	             
+
+    // Filter out sub-string-separator to pretend unexpected text layout.
+    //
+    TChar subStringSeparator = TChar(0x0001);
+    TBuf<1> tempCharBuf;
+    tempCharBuf.Append(subStringSeparator);
+    AknTextUtils::StripCharacters(aDeviceNameForStrip, tempCharBuf); 
+    }
+
+/**
+ * Gets the device name to be displayed in note or dialog.
+ * @param aName contains the name to be displayed
+ * @param aDev the device that may have a friendly or device name, or no name at all.
+ */
+void BtNotifNameUtils::GetDeviceDisplayName(TBTDeviceName& aName, const CBTDevice* aDev)
+    {
+    if(aDev && aDev->IsValidFriendlyName() )
+        {
+        aName.Copy( aDev->FriendlyName() );
+        }
+    else
+        {
+        GetDeviceName(aName, aDev);
+        }
+    }
+
+/**
+ * Gets the device name from aDev if its friendly name or device name is valid; otherwise 
+ * the predefined default BT name.
+ * @param aName contains the device name as the result 
+ * @param aDev the device that may have a device name, or no name at all.
+ */
+void BtNotifNameUtils::GetDeviceName(TBTDeviceName& aName, const CBTDevice* aDev)
+    {
+    aName.Zero();
+    TInt err (CnvUtfConverter::EErrorIllFormedInput);
+    if(aDev && aDev->IsValidDeviceName())
+        {
+        err = CnvUtfConverter::ConvertToUnicodeFromUtf8(aName, aDev->DeviceName());
+        }
+    // if there are illformated chars in the device name, default name should be used for display.
+    if (err == CnvUtfConverter::EErrorIllFormedInput || aName.Length() == 0)
+        {
+        StringLoader::Load(aName, R_BT_DIALOG_DEF_NAME);
+        }
+    StripDeviceName(aName);
+    }
+
+/**
+ * Sets the device name.  This handles the conversion from unicode
+ * to UTF8.
+ * @param aDev the device that the name should be set for
+ * @param aName the name to set
+ */
+void BtNotifNameUtils::SetDeviceNameL(const TBTDeviceName& aName, CBTDevice& aDev)
+    {
+    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::SetDeviceNameL - Name: '%S' length: %d"), &aName, aName.Length() ));
+
+    // Rationalise the name to remove whitespace and control characters
+    // then set the name if there's anything left
+    TBTDeviceName devName(aName);
+    StripDeviceName(devName);
+    if (aName.Length())
+        {
+        aDev.SetDeviceNameL(BTDeviceNameConverter::ToUTF8L(devName)); 
+        }	
+    }
+
+