--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Symbian3/PDK/Source/GUID-12DA697C-1BB0-489F-98E1-F9B81E4A2F4D.dita Fri Jan 22 18:26:19 2010 +0000
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
+<!-- This component and the accompanying materials are made available under the terms of the License
+"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:
+-->
+<!DOCTYPE concept
+ PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
+<concept id="GUID-12DA697C-1BB0-489F-98E1-F9B81E4A2F4D" xml:lang="en"><title>Creating
+a Privacy Notification Notifier</title><shortdesc>To use the LBS Privacy Notifiers for privacy verification and privacy
+notification a licensee must implement a Privacy Notification Notifier. The
+licensee should override the synchronous <apiname>MEikSrvNotifierBase2::StartL()</apiname> method
+that does not return a response. This is because the user cannot send a response
+to a privacy notification. </shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody>
+<p>This topic describes how to implement a Privacy Notification Notifier,
+which is used to handle privacy notification requests. </p>
+<p>The implementation of a Privacy Notification Notifier is similar to that
+of a Privacy Verification Notifier. In particular, the same <codeph>TLbsExternalRequestInfo</codeph> object
+is passed for privacy notification as for privacy verification. The most notable
+difference for privacy notification is that the synchronous method <xref href="GUID-2BA43B57-610F-324F-B5E0-590174A6D1BF.dita#GUID-2BA43B57-610F-324F-B5E0-590174A6D1BF/GUID-21C2E5DC-5DA4-35E3-A605-AE6DCB1BB3CE"><apiname>MEikSrvNotifierBase::StartL()</apiname></xref> is
+implemented. This is because the notifier is used only for privacy notification
+and it is not possible to respond to it. This makes implementation of the
+notifier easier. </p>
+<section> <title>Defining the Privacy Notification Notifier</title>
+ <p>The code below shows a definition of a Privacy Notification Notifier
+class. </p><p>The notifier owns a <codeph>CMyLBSPrivacyNotifierDialog</codeph> dialog
+class to show details of the privacy request to the end user and to obtain
+the response. </p><codeblock xml:space="preserve">/*
+============================================================================
+ Name : MyLBSPrivacyNotifier.h
+ Description : This file defines a LBS Privacy Notification Notifier
+============================================================================
+*/
+
+#ifndef __MYLBSPRIVACYNOTIFIER_H__
+#define __MYLBSPRIVACYNOTIFIER_H__
+
+#define NOTIFY_RESOURCE_PATH "\\private\\10003a4a\\" // Default location for dialog GUI resources
+#define NOTIFY_RESOURCE "MyLBSPrivacyDialogs.rsc" // Compiled dialog resource file name
+
+// This value is defined in MyLBSPrivacyVerifier.h
+//const TUid KScreenOutputChannel={0x1000ABEF};
+
+// Include Files
+#include <e32base.h>
+#include <eiknotapi.h>
+#include <eikdialg.h>
+#include "lbsprivacyextnotifiers.h" // Defines privacy data types
+#include "MyLBSNotifiersChannel.h" // Channel for notifier display
+
+// Dialog forward declaration for notifier
+class CMyLBSPrivacyNotifierDialog;
+
+// Privacy verification notifier class definintion
+class CMyLBSPrivacyNotifier : public CBase, public MEikSrvNotifierBase2
+ {
+public:
+ static CMyLBSPrivacyNotifier* NewL();
+ ~CMyLBSPrivacyNotifier();
+
+ // Called when the dialog is hidden
+ void DialogDismissed();
+
+private: // From MEikSrvNotifierBase2
+
+ // Not used for location notification - no response is required
+ void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+
+ // Synchronous StartL is used for location notification
+ TPtrC8 StartL(const TDesC8& aBuffer);
+
+ // Not implemented for LBS privacy notifiers
+ TPtrC8 UpdateL(const TDesC8& aBuffer);
+
+ TNotifierInfo RegisterL();
+ TNotifierInfo Info() const;
+ void Cancel();
+ void Release();
+
+private:
+ CMyLBSPrivacyNotifier();
+ void ConstructL();
+
+private:
+ // Data members
+ TNotifierInfo iInfo;
+
+ // From lbsprivacyextnotifiers.h - request parameters
+ TLbsPrivacyNotifierParams iRequestParams;
+
+ // Verification Dialog
+ CMyLBSPrivacyNotifierDialog* iDlg;
+
+ };
+
+#endif // __MYLBSPRIVACYNOTIFIER_H__</codeblock> </section>
+<section><title>Defining the Privacy Notification Dialog</title><p>The following
+is the definition of the dialog used by the example Privacy Notification Notifier: </p><codeblock xml:space="preserve">/*
+============================================================================
+ Name : MyLBSPrivacyNotifier.cpp
+ Description : Source for LBS location notification notifier and dialog
+============================================================================
+*/
+
+// System headers
+#include <eikdialg.h>
+#include <eikmfne.h>
+#include <eikenv.h>
+#include <bautils.h>
+#include <eikappui.h>
+#include <e32cmn.h>
+
+// LBS headers
+#include <lbsprivacyextnotifiers.h>
+
+// project headers
+#include <MyLBSPrivacyDialogs.rsg>
+#include "MyLBSPrivacyNotifier.h"
+#include "MyLBSDialogs.hrh"
+
+/* CMyLBSPrivacyNotifierDialog
+ The resource for this dialog defines it as a sleeping dialog
+ Resources are allocated for it when the owning notifier is loaded by ECom
+ This is a good idea for situations where emergency requests notify the user
+ so that a confirmation dialog is shown even in low memory conditions
+*/
+
+class CMyLBSPrivacyNotifierDialog : public CEikDialog
+ {
+public:
+ static CMyLBSPrivacyNotifierDialog* NewLD(CMyLBSPrivacyNotifier* aNotifier);
+ ~CMyLBSPrivacyNotifierDialog();
+
+ void ShowDialog(TLbsExternalRequestInfo& aInfo);
+ void HideDialog();
+
+public: // from CEikDialog
+ TBool OkToExitL(TInt aButtonId);
+ void PreLayoutDynInitL();
+
+private:
+ CMyLBSPrivacyNotifierDialog(CMyLBSPrivacyNotifier* aNotifier);
+ void LoadResourceL();
+ void FreeResource();
+ void ConstructL();
+
+private:
+
+ // The notifier that calls this dialog
+ CMyLBSPrivacyNotifier* iNotifier;
+
+ // Library resource containing dialog resources
+ TInt iResourceFile;
+
+ // The privacy requester info - contains requester id and name
+ TLbsExternalRequestInfo iInfo;
+ };</codeblock><p>The dialog requires a resource definition. In this case
+the dialog has only a <uicontrol>continue</uicontrol> button because no response
+can be made to the notification. </p><codeblock xml:space="preserve">RESOURCE DIALOG r_lbs_notify_dialog
+ {
+ title = "Privacy Notification Dialog";
+ flags=EEikDialogFlagNotifyEsc;
+ buttons = R_EIK_BUTTONS_CONTINUE;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EEikCtLabel;
+ control = LABEL
+ {
+ standard_font = EEikLabelFontAnnotation;
+ txt = "Sending your location to :";
+ };
+ },
+ DLG_LINE
+ {
+ type = EEikCtEdwin;
+ id = EPrivacyClientName;
+ control = EDWIN
+ {
+ width = 10;
+ maxlength = 25;
+ };
+ }
+ };
+ }</codeblock></section>
+<section><title>Notifier and dialog method implementations</title><p>Much
+of the implementation of a Privacy Notification Notifier is similar to that
+for a Privacy Verification Notifier. The most relevant differences are in
+the implementation of <xref href="GUID-DE445C4B-22EF-3A1F-8A69-57CB703BFAD0.dita#GUID-DE445C4B-22EF-3A1F-8A69-57CB703BFAD0/GUID-7863DC49-9664-390C-AAE1-B3BE043CA108"><apiname>MEikSrvNotifierBase2::RegisterL()</apiname></xref>, <xref href="GUID-DE445C4B-22EF-3A1F-8A69-57CB703BFAD0.dita#GUID-DE445C4B-22EF-3A1F-8A69-57CB703BFAD0/GUID-5DC8D35F-FFA5-3CE8-A06D-303A7E3ECC9B"><apiname>MEikSrvNotifierBase2::StartL()</apiname></xref> and <xref href="GUID-DC21E927-18B3-3BBF-9B67-496F2D158B03.dita#GUID-DC21E927-18B3-3BBF-9B67-496F2D158B03/GUID-6AFDB981-BBA2-3A5E-A7A5-BA6B39BC4CE9"><apiname>CEikDialog::OkToExitL()</apiname></xref>. </p><p>The value KLbsExtLocationRequestNotifyUid as defined in lbsextprivacynotifiers.h
+must be used for the notifier registration. The choice of notifier priority
+is a licensee decision, but a high priority is recommended because a location
+notification can be sent as part of an emergency services request and the
+user may want to know that their location was successfully sent. </p><codeblock xml:space="preserve">// Called by notifier framework once to register the notifier with ECOM
+MEikSrvNotifierBase2::TNotifierInfo CMyLBSPrivacyNotifier::RegisterL()
+ {
+ iInfo.iUid = KLbsExtLocationRequestNotifyUid;
+ iInfo.iChannel = KScreenOutputChannel;
+
+ // High priority privacy request
+ iInfo.iPriority = ENotifierPriorityVHigh;
+ return iInfo;
+ }</codeblock><p>The notifier implements only the synchronous version of <codeph>StartL()</codeph>. </p><codeblock xml:space="preserve">// Synchronous StartL is used for location
+// notification because no response is required
+TPtrC8 CMyLBSPrivacyNotifier::StartL(const TDesC8& aBuffer)
+ {
+ TBuf8<KLbsMaxClientNameSize> clientName;
+ TBuf8<KLbsMaxRequesterIdSize> requesterId;
+
+ TLbsPrivacyNotifierParamsPckg pckg;
+ pckg.Copy(aBuffer);
+ TLbsPrivacyNotifierParams params = pckg();
+ TLbsExternalRequestInfo info;
+ params.GetRequesterInfo(info);
+
+ // Show the dialog with the requester details
+ iDlg->ShowDialog(info);
+
+ return TPtrC8();
+ }</codeblock><p><codeph>OkToExit(</codeph>) does not write any notifier
+response parameters. </p><codeblock xml:space="preserve">// From CEikDialog - called when a dialog button is pressed
+TBool CMyLBSPrivacyNotifierDialog::OkToExitL(TInt aButtonId)
+ {
+ // No response parameters to set for location notification
+
+ // Inform the notifier that this dialog
+ // is exiting so that it can inform the notifier manager
+ iNotifier->DialogDismissed();
+ return ETrue;
+ }</codeblock></section>
+</conbody></concept>
\ No newline at end of file