blob: 133d3e557c0e8362fd4d173983e65153390f855f [file] [log] [blame]
<html devsite>
<head>
<title>Data Saver mode</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 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.
-->
<p>
Mobile data use is costly and even more so where data plan costs are not
affordable by all. Android users need the ability to reduce data use or block it
from apps altogether. The Data Saver feature in the Android 7.0 release provides
this functionality to the user.
</p>
<p>
The <a href="https://developer.android.com/training/basics/network-ops/data-saver">Data Saver</a>
feature can be turned on or off by the user. App developers
should use a new API to check if Data Saver mode is on. If it is on, the app
developers can handle the situation gracefully by tuning their applications for
low- or no-data access.
</p>
<p>
End users benefit as they will be able to control which apps can access data in
the background and which can access data only while in the foreground. This
ensures desired background data exchange when Data Saver is on per user control.
</p>
<h2 id="implementation">Implementation</h2>
<p>
Since the Data Saver is a feature in the platform, device manufacturers gain its
functionality by default with the N release. Find the source files in:</br>
<a class="external"
href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/datausage">
packages/apps/Settings/src/com/android/settings/datausage</a>
</p>
<h3 id="settings-interface">Settings interface</h3>
<p>
A default Data Saver settings user interface is supplied in the Android Open
Source Project (AOSP). See the screenshots below for examples.
</p>
<p>
These screenshots show the Data Saver mode in use.
</p>
<img src="/devices/tech/connect/images/data-saver-use.png" width="397" alt="Toggling Data Saver off/on" />
<p class="img-caption">
<strong>Figure 1.</strong> Toggling Data Saver off/on
</p>
<img src="/devices/tech/connect/images/data-battery-saver.png" width="641" alt="Battery saver and Data Saver are on" />
<p class="img-caption">
<strong>Figure 2.</strong> When both battery saver and Data Saver are on
</p>
<img src="/devices/tech/connect/images/data-saver-app.png" width="376" alt="App-specific data usage screen" />
<p class="img-caption">
<strong>Figure 3.</strong> App-specific data usage screen: Settings > Apps > Data usage
</p>
<img src="/devices/tech/connect/images/data-saver-quick-settings.png" width="446" alt="Data saver in the Quick Settings" />
<p class="img-caption">
<strong>Figure 4.</strong> Data saver states on the Quick Settings menu
</p>
<h3 id="apps">Apps</h3>
<p class="caution"><strong>Important</strong>: Device implementers should not whitelist apps.
Even if they do, users may remove them. Including other apps forces users to decide on which to
apply Data Saver.</p>
<p>
All app developers must act to implement Data Saver, including OEMs and
carriers with preloaded apps. See
<a href="https://developer.android.com/training/basics/network-ops/data-saver">Data
Saver on developer.android.com</a> for app developer instructions on detecting
and monitoring Data Saver states. See the sections below for additional details
helpful to partners.</p>
<p>
To optimize for Data Saver mode, apps should:
</p>
<ul>
<li>Remove unnecessary images
<li>Use lower resolution for remaining images
<li>Use lower bitrate video
<li>Trigger existing “lite” experiences
<li>Compress data
<li>Respect metered vs. unmetered network status even when Data Saver is
off
</ul>
<p>
Conversely, to work well with Data Saver, apps should not:
</p>
<ul>
<li>Autoplay videos
<li>Prefetch content/attachments
<li>Download updates / code
<li>Ask to be whitelisted unless background data is truly part of core
functionality
<li>Treat whitelisting as a license to use more bandwidth
</ul>
<h2 id="validation">Validation</h2>
<p>
Implementers can ensure their version of the feature works as intended by
running the following CTS test:
</p>
<pre class="devsite-click-to-copy">
com.android.cts.net.HostsideRestrictBackgroundNetworkTests
</pre>
<p>
In addition, <code>adb</code> commands can be used to conduct tests manually by
first running this command to see all available options:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell cmd netpolicy
</pre>
<p>
For example, this command returns the UIDs of the whitelisted apps:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell cmd netpolicy list restrict-background-whitelist
</pre>
</body>
</html>