2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file PhnCallPresentationModel.h
19 * @brief This is the header file for the %CallPresentationModel class.
21 * This header file contains the declarations for %CallPresentationModel class.
23 #ifndef _PHN_CALL_PRESENTATION_MODEL_H_
24 #define _PHN_CALL_PRESENTATION_MODEL_H_
27 #include <FTelephony.h>
28 #include <FMessaging.h>
29 #include "CallAppControlRequestMgr.h"
30 #include "CallTypes.h"
31 #include "CallITelephonyEventListener.h"
32 #include "CalllogManager.h"
35 class TelephonyManager;
36 class SettingsPresentationModel;
39 * @class CallPresentationModel
40 * @brief CallPresentationModel is Singleton class and acts as interface between
41 * events from other managers and all the views.
44 class CallPresentationModel: public ITelephonyEventListener
45 , public Tizen::App::IAppControlResponseListener
46 , public Tizen::Telephony::ITelephonyNetworkEventListener
47 , public Tizen::Telephony::ITelephonySimEventListener
48 , public Tizen::Messaging::ISmsListener
51 //create a singleton instance
52 static CallPresentationModel* GetInstance(void);
55 CallPresentationModel(void);
56 CallPresentationModel(CallPresentationModel& presentor);
57 virtual ~CallPresentationModel(void);
58 CallPresentationModel& operator =(const CallPresentationModel& presentor);
60 result Construct(void);
61 static void CreateInstance(void);
62 static void DestroyInstance(void);
64 result GetSimInfo(void);
65 //Used to check if sim is available
66 bool IsSimAvailable(void);
67 bool IfNumberEndsWithHash(Tizen::Base::String& contactNumber);
70 //set the telephony event listener
71 void SetTelEventListener(ITelephonyEventListener* pTelEventListener);
73 //Dial an outgoing call
74 void DialCall(Tizen::Base::String& contactNumber, bool isEmergency);
76 void EndActiveCall(Tizen::Base::Long callHandle);
77 void EndDialingCall(Tizen::Base::String& contactNumber);
78 //End the conference call
79 bool EndConferenceCall(void);
80 //Ends all active calls
81 void EndAllCall(void);
84 * @returns true if successful.
86 bool HoldCall(Tizen::Base::Long callHandle);
89 * @returns true if successful.
91 bool UnHoldCall(Tizen::Base::Long callHandle);
92 //Hold conference call
93 bool HoldConferenceCall(void);
94 //UnHold conference call
95 bool ActivateConferenceCall(void);
96 //Join active and held call to conference call.
98 //Swap between active and held call
100 //Mute or Unmute Call
101 bool SetMuteStatus(bool setMute);
102 //Get the call Muted status
103 bool IsCallMuted(void);
104 //Set speaker to On or Off mode.
105 bool SetSpeakerStatus(bool setSpeaker);
106 //Get the speaker status
107 bool IsSpeakerOn(void);
109 void SendDTMFSignal(Tizen::Base::String& textToBeSent);
110 //Function to get the conference call info
111 AppCallInfo* GetConferenceCallInfoN(void);
112 //Split this call from the conference call
113 bool SplitFromConference(SplitConfCallerCmdIds splitCallerCmdId, Tizen::Base::Collection::IListT<AppCallInfo>* pConfCallList);
114 //End this single call from the conference call
115 void EndCallFromConference(EndConfCallerCmdIds endCallerCmdId, Tizen::Base::Collection::IListT<AppCallInfo>* pConfCallList);
116 //returns true, if split operation is allowed. Else, returns false.
117 bool IsSplitAllowed(void);
118 //Accept the incoming call as per the options
119 void AcceptIncomingCall(CallAnsweringOptions answerOptions,int callHandle);
120 //Reject an incoming call and send message, if required.
121 bool RejectCall(int callHandle, bool sendMsg, const Tizen::Base::String& contactNumber);
122 //Function used to add call
123 void AddCall(const Tizen::Base::String& phoneNumber);
124 //Get the current call count
125 int GetCurrentCallCount(void);
126 //Get the current call list
127 Tizen::Base::Collection::IListT<AppCallInfo>* GetCallListN(void);
128 //Check if modem and sim initialization is complete.
129 bool CheckSimInitializationIsCompleted();
130 //This function returns true, if contact number is emergency no.
131 bool IsEmergencyNumber(const Tizen::Base::String& phoneNumber, bool isSimInitialized);
132 //Start the alert in case of incoming call
133 void StartAlert(AppCallInfo& incomingCallInfo);
134 //Stop the alert in case of incoming call
135 void StopAlert(void);
136 //Gets the contact for the given phonenumber.returns null if not present.
137 Tizen::Social::Contact* GetContactN(const Tizen::Base::String& phoneNumber);
138 //Fetch the incoming call details.
139 AppCallInfo* FetchIncomingCallDetailsN(const Tizen::Base::String& callHandle, const Tizen::Base::String& contactNumber);
140 //Function is used to auto reject the call based on call settings and return true, if rejected.
141 bool CheckIncomingCallToBeRejected(AppCallInfo* pIncomingCallInfo);
142 //Launch dial appcontrol for add call senario
143 void LaunchDialAppControl();
144 //Used to check if Join button should be enabled or not
145 bool IsEnableJoinCallButton(void);
146 //Used to check if incomig call is present
147 bool IsIncomingorDialingCallPresent(void);
148 //Used to launch Messaging AppControl to compose message.
149 bool LaunchComposeMessageAppControl(Tizen::Base::String& contactNumber, Tizen::App::IAppControlResponseListener* pListener);
150 //Used to make "ViewContact" AppControl request.
151 bool LaunchViewContactAppControl(Tizen::Base::String& contactId, Tizen::App::IAppControlResponseListener* pListener);
152 //Used to make "AddContact" AppControl request.
153 bool LaunchAddContactAppControl(Tizen::Base::String& contactNumber, Tizen::App::IAppControlResponseListener* pListener);
154 //Used to check if there is any AppControl request in progress.
155 bool IsAppControlRunning(void);
156 //Used to abort any running AppControl request.
157 void AbortAppControlRequest(void);
158 //Used to complete any running AppControl request.
159 void AppControlRequestCompleted(void);
160 //Used to send message
161 void SendMessage(Tizen::Base::String& strMsg,Tizen::Base::String& recpientNum);
162 //Checks if message sending is in progress
163 bool IsMessageSendingInProgress(void);
165 //Event Listener methods from ITelephonyEventListener
166 virtual void HandleCallConnected(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
167 virtual void HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
168 virtual void HandleConferenceCall(AppCallInfo& pCallInfo);
169 virtual void HandleIncomingCall(AppCallInfo& pCallInfo);
170 virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
171 virtual void HandleConferenceChange(void);
172 virtual void HandleTelephonyError(int errorCode);
173 //From IAppControlResponseListener
174 virtual void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
175 virtual void OnAppForeground(void);
176 virtual void OnTelephonyNetworkStatusChanged(const Tizen::Telephony::NetworkStatus& networkStatus);
177 virtual void OnTelephonySimStateChanged(Tizen::Telephony::SimState state);
178 virtual void OnSmsMessageSent(result r);
181 static CallPresentationModel* __pInstance;
182 //to forward telephony events
183 ITelephonyEventListener* __pTelEventListener;
184 TelephonyManager* __pTelephonyMgr;
185 SettingsPresentationModel* __pSettingsPresentor;
186 // This is only to save PhoneApp from closing when only 1 incoming call is present and
187 // incoming call is rejected with "Reject With message" by opening Msg AppControl.
188 bool __isMessageAppControlRunning;
189 bool __isDialAppControlRunning;
190 bool __isMessageSendInProgress;
191 //Used to manage AppControl requests.
192 CallAppControlRequestMgr* __pAppControlMgr;
193 Tizen::Telephony::NetworkManager* __pNetworkManager;
194 Tizen::Telephony::SimStateManager* __psimStateManager;
195 Tizen::Telephony::SimInfo* __psimInfo;
196 Tizen::Messaging::SmsManager* __pSmsManager;
199 #endif // _PHN_CALL_PRESENTATION_MODEL_H_