dom/mobilemessage/src/gonk/SmsService.cpp

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:c9d17e21070e
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include "SmsMessage.h"
7 #include "SmsService.h"
8 #include "SmsSegmentInfo.h"
9 #include "mozilla/Preferences.h"
10 #include "nsServiceManagerUtils.h"
11
12 namespace {
13
14 const char* kPrefRilNumRadioInterfaces = "ril.numRadioInterfaces";
15 #define kPrefDefaultServiceId "dom.sms.defaultServiceId"
16 const char* kObservedPrefs[] = {
17 kPrefDefaultServiceId,
18 nullptr
19 };
20
21 uint32_t
22 getDefaultServiceId()
23 {
24 int32_t id = mozilla::Preferences::GetInt(kPrefDefaultServiceId, 0);
25 int32_t numRil = mozilla::Preferences::GetInt(kPrefRilNumRadioInterfaces, 1);
26
27 if (id >= numRil || id < 0) {
28 id = 0;
29 }
30
31 return id;
32 }
33
34 } // Anonymous namespace
35
36 namespace mozilla {
37 namespace dom {
38 namespace mobilemessage {
39
40 NS_IMPL_ISUPPORTS(SmsService,
41 nsISmsService,
42 nsIObserver)
43
44 SmsService::SmsService()
45 {
46 mRil = do_GetService("@mozilla.org/ril;1");
47 NS_WARN_IF_FALSE(mRil, "This shouldn't fail!");
48
49 // Initialize observer.
50 Preferences::AddStrongObservers(this, kObservedPrefs);
51 mDefaultServiceId = getDefaultServiceId();
52 }
53
54 /*
55 * Implementation of nsIObserver.
56 */
57
58 NS_IMETHODIMP
59 SmsService::Observe(nsISupports* aSubject,
60 const char* aTopic,
61 const char16_t* aData)
62 {
63 if (!strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
64 nsDependentString data(aData);
65 if (data.EqualsLiteral(kPrefDefaultServiceId)) {
66 mDefaultServiceId = getDefaultServiceId();
67 }
68 return NS_OK;
69 }
70
71 MOZ_ASSERT(false, "SmsService got unexpected topic!");
72 return NS_ERROR_UNEXPECTED;
73 }
74
75 /*
76 * Implementation of nsISmsService.
77 */
78
79 NS_IMETHODIMP
80 SmsService::GetSmsDefaultServiceId(uint32_t* aServiceId)
81 {
82 *aServiceId = mDefaultServiceId;
83 return NS_OK;
84 }
85
86 NS_IMETHODIMP
87 SmsService::GetSegmentInfoForText(const nsAString& aText,
88 nsIMobileMessageCallback* aRequest)
89 {
90 nsCOMPtr<nsIRadioInterface> radioInterface;
91 if (mRil) {
92 mRil->GetRadioInterface(0, getter_AddRefs(radioInterface));
93 }
94 NS_ENSURE_TRUE(radioInterface, NS_ERROR_FAILURE);
95
96 return radioInterface->GetSegmentInfoForText(aText, aRequest);
97 }
98
99 NS_IMETHODIMP
100 SmsService::Send(uint32_t aServiceId,
101 const nsAString& aNumber,
102 const nsAString& aMessage,
103 bool aSilent,
104 nsIMobileMessageCallback* aRequest)
105 {
106 nsCOMPtr<nsIRadioInterface> radioInterface;
107 if (mRil) {
108 mRil->GetRadioInterface(aServiceId, getter_AddRefs(radioInterface));
109 }
110 NS_ENSURE_TRUE(radioInterface, NS_ERROR_FAILURE);
111
112 return radioInterface->SendSMS(aNumber, aMessage, aSilent, aRequest);
113 }
114
115 NS_IMETHODIMP
116 SmsService::IsSilentNumber(const nsAString& aNumber,
117 bool* aIsSilent)
118 {
119 *aIsSilent = mSilentNumbers.Contains(aNumber);
120 return NS_OK;
121 }
122
123 NS_IMETHODIMP
124 SmsService::AddSilentNumber(const nsAString& aNumber)
125 {
126 if (mSilentNumbers.Contains(aNumber)) {
127 return NS_ERROR_UNEXPECTED;
128 }
129
130 NS_ENSURE_TRUE(mSilentNumbers.AppendElement(aNumber), NS_ERROR_FAILURE);
131 return NS_OK;
132 }
133
134 NS_IMETHODIMP
135 SmsService::RemoveSilentNumber(const nsAString& aNumber)
136 {
137 if (!mSilentNumbers.Contains(aNumber)) {
138 return NS_ERROR_INVALID_ARG;
139 }
140
141 NS_ENSURE_TRUE(mSilentNumbers.RemoveElement(aNumber), NS_ERROR_FAILURE);
142 return NS_OK;
143 }
144
145 NS_IMETHODIMP
146 SmsService::GetSmscAddress(uint32_t aServiceId,
147 nsIMobileMessageCallback *aRequest)
148 {
149 nsCOMPtr<nsIRadioInterface> radioInterface;
150 if (mRil) {
151 mRil->GetRadioInterface(aServiceId, getter_AddRefs(radioInterface));
152 }
153 NS_ENSURE_TRUE(radioInterface, NS_ERROR_FAILURE);
154
155 return radioInterface->GetSmscAddress(aRequest);
156 }
157
158 } // namespace mobilemessage
159 } // namespace dom
160 } // namespace mozilla

mercurial