blob: 4e68eac06814c6507c8e190e894c7a3d358a310f [file] [log] [blame]
page.title=Implementing Emergency Affordance
@jd:body
<!--
Copyright 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
<ol id="auto-toc">
</ol>
</div>
</div>
<p>All mobile devices sold in India from the 1st January 2017 will need to
provide a panic button to meet Indian Department of Telecommunications (DoT)
requirements.</p>
<p>An Emergency Affordance feature has been developed to provide a reference
implementation of the panic button for Android devices to address these
regulatory requirements. This will be enabled by default in future Android
releases but must be patched into existing builds. Currently, this feature is
exclusively targeted at devices that are sold in the Indian market but can be
included on all devices sold throughout the world as the feature has no effect
outside India.</p>
<h2 id="examples-source">Examples and source</h2> <p>The Emergency Affordance
feature is implemented in the Android Open Source Project (AOSP) <a
href="https://android.googlesource.com/platform/frameworks/base/">frameworks/base</a>
project. It is available in the master branch and will be enabled by default in
future Android releases.</p>
<p>This feature is currently available in the following branches and commits.
This information is provided to enable device manufacturers to easily patch the
necessary changes into their existing builds. Device manufacturers wanting to
implement the AOSP reference emergency affordance feature can cherry-pick the
commits from the applicable branches into their own builds.</p>
<p class="table-caption" id="cherry-picks-reference-implementation">
<strong>Table 1.</strong> Cherry-picks for AOSP reference emergency affordance feature</p>
<table>
<tbody>
<tr>
<th scope="col">Branch</th>
<th scope="col">Commits</th>
</tr>
<tr>
<td>master</td>
<td><a href="https://android-review.googlesource.com/#/c/284723/">e0c3c66</a>
Added Emergency affordance feature<br>
<a href="https://android-review.googlesource.com/#/c/287188/">42a4338</a>
Added translations for emergency action string<br>
<a href="https://android-review.googlesource.com/#/c/286858/">4df8d64</a>
Fixed an issue where the emergency affordance would show on tablets
</td>
</tr>
<tr>
<td>nougat-dev</td>
<td><a href="https://android-review.googlesource.com/#/c/284761/">e6680d9</a>
Added Emergency affordance feature<br>
<a href="https://android-review.googlesource.com/#/c/287293/">95e1865</a>
Added translations for emergency action string<br>
<a href="https://android-review.googlesource.com/#/c/286953/">a70bb89</a>
Fixed an issue where the emergency affordance would show on tablets
</td>
</tr>
<tr>
<td>marshmallow-dev</td>
<td><a href="https://android-review.googlesource.com/#/c/284624/">cd22634</a>
Added Emergency affordance feature<br>
<a href="https://android-review.googlesource.com/#/c/286937/">13f51c6</a>
Added translations for emergency action string<br>
<a href="https://android-review.googlesource.com/#/c/287241/">6531666</a>
Fixed an issue where the emergency affordance would show on tablets
</td>
</tr>
<tr>
<td class="style1">lollipop-mr1-dev</td>
<td><a href="https://android-review.googlesource.com/#/c/284743/">5fbc86b</a>
Added Emergency affordance feature<br>
<a href="https://android-review.googlesource.com/#/c/287382/">1b60879</a>
Added translations for emergency action string<br>
<a href="https://android-review.googlesource.com/#/c/286856/">d74366f</a>
Fixed an issue where the emergency affordance would show on tablets
</td>
</tr>
</tbody>
</table>
<h2 id="implementation">Implementation</h2> <p>The Emergency Affordance feature
makes no changes to the APIs exposed through the Android SDK. When enabled and
activated, it provides two triggers that can initiate an emergency call to
112, which is the single emergency number to be used in India and mandated by
the DoT regulations.<br> An emergency call is initiated by either:</p> <ul>
<li>Long pressing the <strong>EMERGENCY</strong> button on the lockscreen
(Figure 1)</li> <li>Tapping the <strong>Emergency</strong> option from the
<em>Global Action Menu</em> (Figure 2), accessed by long pressing the power
key.</li> </ul>
<table>
<tr>
<td width="50%"><img src="images/emergency-button.png" alt="emergency
button" width="246" id="emergency-button" />
<p class="img-caption">
<strong>Figure 1.</strong> Long press the <strong>EMERGENCY</strong> button,
highlighted with a red box, on the lock screen.</p></td>
<td width="50%"><img src="images/emergency-option.png" alt="emergency
option" width="247" id="emergency-option" />
<p class="img-caption">
<strong>Figure 2.</strong> Tap the <strong>Emergency</strong> action item on
the <em>Global Action Menu</em>.</p></td>
</tr>
</table>
<p>This feature introduces the following internal components:</p> <ul>
<li>EmergencyAffordanceManager<br>
<code>frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java</code>
</li> <li>EmergencyAffordanceService<br>
<code>frameworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java</code>
</li> </ul>
<h3 id="EmergencyAffordanceManager">EmergencyAffordanceManager</h3> <p>The
EmergencyAffordanceManager provides an internal API to use the Emergency
Affordance feature. It provides methods for initiating the emergency call and
querying at runtime if the feature should be enabled.</p> <ul> <li><code>void
performEmergencyCall()</code> - Initiates an emergency call</li>
<li><code>boolean needsEmergencyAffordance()</code> - Determines if the feature
should be active</li> </ul> <p>The feature may be permanently disabled at build
time by changing the <code>EmergencyAffordanceManager.ENABLED</code> constant
to <code>false</code>. This will cause <code>needsEmergencyAffordance()</code>
to always return false and prevent the <code>EmergencyAffordanceService</code>
from starting.</p>
<h3 id="EmergencyAffordanceService">EmergencyAffordanceService</h3> <p>The
<code>EmergencyAffordanceService</code> is a system service that monitors the
Mobile Country Code (MCC) of all the detected cellular networks and the MCC of
the installed SIM cards. If any of the installed SIM cards or detected cellular
networks have a MCC matching one of India's MCCs (404,405) then the feature
will be enabled. This means the feature can be enabled in India even if no SIM
card is present. It is assumed the mobile network will permit registration for
emergency calls even without a SIM card installed. The feature will remain
enabled until a non-India SIM is installed and none of the detected networks
have a matching MCC.</p>
<p>The following resources and settings affect the behavior of the Emergency
Affordance feature. If the config type is "Resource" it is an internal resource
defined in <code>frameworks/base/core/res/res/values/config.xml</code>. If
config type is "Setting" it is a setting stored in the systems settings
provider.</p>
<p class="table-caption" id="settings-affecting behavior">
<strong>Table 2.</strong> Settings affecting behavior of emergency affordance
feature</p>
<table>
<tbody>
<tr>
<th scope="col">Config Type</th>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
<tr>
<td>Resource</td>
<td>config_emergency_call_number</td>
<td>The phone number that is automatically dialed when the emergency call is
initiated.<br>
Type: String<br>
Default: 112</td>
</tr>
<tr>
<td>Resource</td>
<td>config_emergency_mcc_codes</td>
<td>An array of Integers listing the MCCs the feature should be active in.<br>
Type: Array of Integers<br>
Default: {404,405}</td>
</tr>
<tr>
<td>Setting</td>
<td>emergency_affordance_number</td>
<td>Global setting override with the number to call with the emergency
affordance. This will only have an effect on debuggable build images (ie. build
type is userdebug or eng). This is intended only for testing.<br>
Type: String<br>
Default: unset</td>
</tr>
<tr>
<td>Setting </td>
<td>force_emergency_affordance</td>
<td>Global setting, whether the emergency affordance should be shown regardless
of device state. This is intended only for testing.<br>
Type: Boolean (1 or 0)<br>
Default: unset --&gt; 0</td>
</tr>
</tbody>
</table>
<h3 id="112">Enable emergency calls to '112'</h3> <p>The emergency affordance
feature connects the call using the emergency dialer so that the call can be
connected when the lock screen is active. The emergency dialer only connects
calls to the list of numbers provided by the Radio Interface Layer (RIL),
through the system property 'ril.ecclist', when no SIM is installed and
'<code>ril.ecclist&lt;<i>SimSlotNumber</i>&gt;</code>' when a SIM is inserted
and <code><i>&lt;SimSlotNumber&gt;</code></i> is the slot ID of the default
subscriber.<br> Device manufacturers using the emergency affordance feature
must ensure that devices in India always enable 112 as an emergency number in
the RIL.</p>
<h2 id="validation">Validation</h2> <p>While testing, on a debuggable build,
the number that is called can be changed with the following command:</p>
<pre>
$ adb shell settings put global emergency_affordance_number <i>&lt;number_to_call&gt;</i>
</pre>
<p>Although this setting can be set on a normal user build, it will be ignored.
To actually connect the call the number must be in the list of emergency
numbers provided by the RIL. This can be temporarily set using the following
command executed from a root shell on a userdebug device:</p>
<pre>
$ setprop ril.ecclist "$(getprop ril.ecclist),<i>&lt;number_to_call&gt;</i>"
</pre>
<p>The following command can also be used to force the Emergency Affordance
feature to be enabled even in the absence of an Indian mobile network being
detected or an Indian SIM card being inserted.</p>
<pre>
$ adb shell settings put global force_emergency_affordance 1
</pre>
<p>During testing it is recommend that at least the following cases are
tested.</p>
<ul> <li>Once activated, long pressing the <strong>EMERGENCY</strong> button on
the lockscreen (Figure 1) initiates a call the specified emergency number.</li>
<li>Once activated, the <strong>Emergency</strong> item on the Global Action
Menu is present and that tapping it initiates a call to the specified emergency
number.</li> <li>The feature <b>is not</b> <b>activated</b> in the absence of a
detected Indian Mobile Network with a non-India SIM card installed.</li>
<li>The feature <b>is activated</b> on the device whilst an Indian SIM card is
installed, regardless of the detected mobile networks.</li> <li>The feature
<b>is</b> <b>activated</b> on the device whilst an in the presence of a Indian
Mobile Network regardless of the SIM cards installed.</li> </ul>
<p>If a device includes supports multiple SIM cards then testing should ensure
that the SIM MCC detection works correctly in each SIM slot. The feature is not
governed by Android compatibility, so there are no CTS tests for it.</p>
<h2 id="faq">Frequently Asked Questions</h2>
<h5 id="q-112">Q. The emergency number '112' has not been commissioned yet in
India, should it still be used?</h5>
<p>'112' is the number that will be used in India as the Public Safety
Answering Point (PSAP) as defined by the Integrated Emergency Communications
and Response Systems (IECRS). Until the PSAP is commissioned all calls to '112'
will be routed to the existing '100' emergency number.</p>
<h5 id="q-other-triggers">Q. What about other triggers like "triple" pressing
the power button?</h5> <p>Device manufacturer may choose to implement
additional triggers. Triple tapping the hardware power button is also an
approved trigger action by the India DoT. However, this trigger is not
supported in the AOSP reference implementation as a number of other widely used
applications use the power button gestures, including repeated tapping of the
power button. These applications might interfere with the emergency dialer, or
the user may accidentally trigger the panic button while trying to trigger
actions in these applications.</p>