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 }