1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "IccManager.h"
6 #include "mozilla/dom/MozIccManagerBinding.h"
8 #include "IccListener.h"
9 #include "mozilla/AsyncEventDispatcher.h"
10 #include "mozilla/dom/IccChangeEvent.h"
11 #include "mozilla/Preferences.h"
12 #include "nsIIccInfo.h"
14 using namespace mozilla::dom
;
16 NS_IMPL_CYCLE_COLLECTION_CLASS(IccManager
)
18 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IccManager
,
20 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
22 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(IccManager
,
24 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
26 // QueryInterface implementation for IccManager
27 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IccManager
)
28 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper
)
30 NS_IMPL_ADDREF_INHERITED(IccManager
, DOMEventTargetHelper
)
31 NS_IMPL_RELEASE_INHERITED(IccManager
, DOMEventTargetHelper
)
33 IccManager::IccManager(nsPIDOMWindow
* aWindow
)
34 : DOMEventTargetHelper(aWindow
)
36 uint32_t numberOfServices
=
37 mozilla::Preferences::GetUint("ril.numRadioInterfaces", 1);
39 for (uint32_t i
= 0; i
< numberOfServices
; i
++) {
40 nsRefPtr
<IccListener
> iccListener
= new IccListener(this, i
);
41 mIccListeners
.AppendElement(iccListener
);
45 IccManager::~IccManager()
51 IccManager::WrapObject(JSContext
* aCx
)
53 return MozIccManagerBinding::Wrap(aCx
, this);
57 IccManager::Shutdown()
59 for (uint32_t i
= 0; i
< mIccListeners
.Length(); i
++) {
60 mIccListeners
[i
]->Shutdown();
61 mIccListeners
[i
] = nullptr;
63 mIccListeners
.Clear();
67 IccManager::NotifyIccAdd(const nsAString
& aIccId
)
69 MozIccManagerBinding::ClearCachedIccIdsValue(this);
71 IccChangeEventInit init
;
72 init
.mBubbles
= false;
73 init
.mCancelable
= false;
76 nsRefPtr
<IccChangeEvent
> event
=
77 IccChangeEvent::Constructor(this, NS_LITERAL_STRING("iccdetected"), init
);
78 event
->SetTrusted(true);
80 nsRefPtr
<AsyncEventDispatcher
> asyncDispatcher
=
81 new AsyncEventDispatcher(this, event
);
83 return asyncDispatcher
->PostDOMEvent();
87 IccManager::NotifyIccRemove(const nsAString
& aIccId
)
89 MozIccManagerBinding::ClearCachedIccIdsValue(this);
91 IccChangeEventInit init
;
92 init
.mBubbles
= false;
93 init
.mCancelable
= false;
96 nsRefPtr
<IccChangeEvent
> event
=
97 IccChangeEvent::Constructor(this, NS_LITERAL_STRING("iccundetected"), init
);
98 event
->SetTrusted(true);
100 nsRefPtr
<AsyncEventDispatcher
> asyncDispatcher
=
101 new AsyncEventDispatcher(this, event
);
103 return asyncDispatcher
->PostDOMEvent();
109 IccManager::GetIccIds(nsTArray
<nsString
>& aIccIds
)
111 nsTArray
<nsRefPtr
<IccListener
>>::size_type i
;
112 for (i
= 0; i
< mIccListeners
.Length(); ++i
) {
113 Icc
* icc
= mIccListeners
[i
]->GetIcc();
115 aIccIds
.AppendElement(icc
->GetIccId());
121 IccManager::GetIccById(const nsAString
& aIccId
) const
123 nsTArray
<nsRefPtr
<IccListener
>>::size_type i
;
124 for (i
= 0; i
< mIccListeners
.Length(); ++i
) {
125 Icc
* icc
= mIccListeners
[i
]->GetIcc();
126 if (icc
&& aIccId
== icc
->GetIccId()) {