examples/QtQuick/qmlnotifyfriends/notifyfriends_symbian.cpp

00001 /****************************************************************************
00002 **
00003 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
00004 ** All rights reserved.
00005 ** Contact: Nokia Corporation
00006 **
00007 **
00008 ** $QT_BEGIN_LICENSE:BSD$
00009 ** You may use this file under the terms of the BSD license as follows:
00010 **
00011 ** "Redistribution and use in source and binary forms, with or without
00012 ** modification, are permitted provided that the following conditions are
00013 ** met:
00014 **   * Redistributions of source code must retain the above copyright
00015 **     notice, this list of conditions and the following disclaimer.
00016 **   * Redistributions in binary form must reproduce the above copyright
00017 **     notice, this list of conditions and the following disclaimer in
00018 **     the documentation and/or other materials provided with the
00019 **     distribution.
00020 **   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
00021 **     the names of its contributors may be used to endorse or promote
00022 **     products derived from this software without specific prior written
00023 **     permission.
00024 **
00025 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00026 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00027 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00028 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00029 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00030 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00031 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00032 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00033 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00034 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00035 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
00036 ** $QT_END_LICENSE$
00037 **
00038 ****************************************************************************/
00039 
00040 #include <asshdalarm.h>
00041 #include <asclisession.h>
00042 
00043 #include "notifyfriends_symbian.h"
00044 
00045 // Symbian static constructor.
00046 NotifyFriendsPrivate* NotifyFriendsPrivate::NewL(NotifyFriends *aPublicAPI)
00047 {
00048     NotifyFriendsPrivate* self = new (ELeave) NotifyFriendsPrivate(aPublicAPI);
00049     CleanupStack::PushL(self);
00050     self->ConstructL();
00051     CleanupStack::Pop(self);
00052     return self;
00053 }
00054 
00055 // Symbian second stage constructor.
00056 void NotifyFriendsPrivate::ConstructL()
00057 {
00058     // connect to the alarm server
00059     User::LeaveIfError(iAlarmServerSession.Connect());
00060 }
00061 
00062 // Private constructor - initialise the pointer to the public API class
00063 // and make this high priority for scheduling.
00064 NotifyFriendsPrivate::NotifyFriendsPrivate(NotifyFriends *aPublicAPI):iPublic(aPublicAPI),
00065     CActive(CActive::EPriorityHigh)
00066 {
00067     CActiveScheduler::Add(this);
00068 }
00069 
00070 NotifyFriendsPrivate::~NotifyFriendsPrivate()
00071 {
00072     // Cancel any outstanding requests before this object is destroyed.
00073     // This destructor cannot leave - so trap any problems here.
00074 
00075     iAlarmServerSession.Close();
00076 }
00077 
00078 
00079 // Add fixed alarm.
00080 void NotifyFriendsPrivate::AddAlarm( QString alarmMsg, int alarmTime, QString contactNumber)
00081 {
00082     iAlarmMsg = alarmMsg;
00083     iContactNumber = contactNumber;
00084     // Create an alarm.
00085     TASShdAlarm alarm;
00086 
00087     // Add alarm message.
00088     _LIT(KAlarmMessage, "This is a fixed alarm");
00089     alarm.Message() = alarmMsg.utf16();
00090 
00091     // Add alarm sound.
00092     _LIT(KAlarmSound, "Chimes");
00093     alarm.SoundName() = KAlarmSound;
00094 
00095     // Alarm occurs once.
00096     alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce;
00097 
00098     alarm.NextDueTime().HomeTime();
00099 
00100     alarm.NextDueTime()+= TTimeIntervalSeconds((TInt)alarmTime);
00101 
00102     // WriteUserData capability is required to add an alarm
00103     if(!IsActive())
00104         {
00105         iAlarmServerSession.AlarmAddWithNotification(iStatus, alarm);
00106         SetActive();
00107 
00108         // Alarm id value is emitted by the signal.
00109         QString alarmId;
00110         alarmId.setNum(int(alarm.Id()));
00111         emit iPublic->alarmAdded(alarmId);
00112         }
00113     else{
00114         // Already a notification alarm is posted, wait till it completes.
00115     }
00116 }
00117 
00118 // Emit the signal that alarm finishes.
00119 void NotifyFriendsPrivate::RunL()
00120 {
00121     emit iPublic->alarmFinished(iContactNumber, iAlarmMsg);
00122 }
00123 
00124 // No Cancel implementation, if asynchronous request is already active, it will wait till it finishes.
00125 void NotifyFriendsPrivate::DoCancel()
00126 {
00127     // No implementation.
00128 }

Generated by  doxygen 1.6.2