1## 3.8\. User Interface Compatibility
2
3### 3.8.1\. Launcher (Home Screen)
4
5Android includes a launcher application (home screen) and support for
6third-party applications to replace the device launcher (home screen).
7
8If device implementations allow third-party applications to replace the device
9home screen, they:
10
11*   [C-1-1] MUST declare the platform feature `android.software.home_screen`.
12*   [C-1-2] MUST return the [`AdaptiveIconDrawable`](
13    https://developer.android.com/reference/android/graphics/drawable/AdaptiveIconDrawable.html)
14    object when the third-party application use `<adaptive-icon>` tag to provide
15    their icon, and the [`PackageManager`](
16    https://developer.android.com/reference/android/content/pm/PackageManager.html)
17    methods to retrieve icons are called.
18
19If device implementations include a default launcher that supports in-app
20pinning of shortcuts, they:
21
22*   [C-2-1] MUST report `true` for
23    [`ShortcutManager.isRequestPinShortcutSupported()`](
24    https://developer.android.com/reference/android/content/pm/ShortcutManager.html#isRequestPinShortcutSupported%28%29).
25*   [C-2-2] MUST have user affordance asking the user before adding a shortcut requested
26    by apps via the [`ShortcutManager.requestPinShortcut()`](
27    https://developer.android.com/reference/android/content/pm/ShortcutManager.html#requestPinShortcut%28android.content.pm.ShortcutInfo, android.content.IntentSender%29)
28    API method.
29*   [C-2-3] MUST support pinned shortcuts and dynamic and static
30    shortcuts as documented on the [App Shortcuts page](
31    https://developer.android.com/guide/topics/ui/shortcuts.html).
32
33Conversely, if device implementations do not support in-app pinning of
34shortcuts, they:
35
36*   [C-3-1] MUST report `false` for
37    [`ShortcutManager.isRequestPinShortcutSupported()`](
38    https://developer.android.com/reference/android/content/pm/ShortcutManager.html#isRequestPinShortcutSupported%28%29).
39
40If device implementations implement a default launcher that provides quick
41access to the additional shortcuts provided by third-party apps through the
42[ShortcutManager](
43https://developer.android.com/reference/android/content/pm/ShortcutManager.html)
44API, they:
45
46*   [C-4-1] MUST support all documented shortcut features (e.g. static and
47    dynamic shortcuts, pinning shortcuts) and fully implement the APIs of the
48    [`ShortcutManager`](
49    https://developer.android.com/reference/android/content/pm/ShortcutManager.html)
50    API class.
51
52If device implementations include a default launcher app that shows badges for
53the app icons, they:
54
55*   [C-5-1] MUST respect the [`NotificationChannel.setShowBadge()`](
56    https://developer.android.com/reference/android/app/NotificationChannel.html#setShowBadge%28boolean%29)
57    API method.
58    In other words, show a visual affordance associated with the app icon if the
59    value is set as `true`, and do not show any app icon badging scheme when all
60    of the app's notification channels have set the value as `false`.
61*   MAY override the app icon badges with their proprietary badging scheme when
62    third-party applications indicate support of the proprietary badging scheme
63    through the use of proprietary APIs, but SHOULD use the resources and values
64    provided through the notification badges APIs described in [the SDK](
65    https://developer.android.com/preview/features/notification-badges.html)
66    , such as the [`Notification.Builder.setNumber()`](
67    http://developer.android.com/reference/android/app/Notification.Builder.html#setNumber%28int%29)
68    and the [`Notification.Builder.setBadgeIconType()`](
69    http://developer.android.com/reference/android/app/Notification.Builder.html#setBadgeIconType%28int%29)
70    API.
71
72### 3.8.2\. Widgets
73
74Android supports third-party app widgets by defining a component type and
75corresponding API and lifecycle that allows applications to expose an
76[“AppWidget”](http://developer.android.com/guide/practices/ui_guidelines/widget_design.html)
77to the end user.
78
79If device implementations support third-party app widgets, they:
80
81*   [C-1-1] MUST declare support for platform feature
82    `android.software.app_widgets`.
83*   [C-1-2] MUST include built-in support for AppWidgets and expose
84    user interface affordances to add, configure, view, and remove AppWidgets
85    directly within the Launcher.
86*   [C-1-3] MUST be capable of rendering widgets that are 4 x 4
87    in the standard grid size. See the [App Widget DesignGuidelines](
88    http://developer.android.com/guide/practices/ui_guidelines/widget_design.html)
89    in the Android SDK documentation for details.
90*   MAY support application widgets on the lock screen.
91
92If device implementations support third-party app widgets and in-app
93pinning of shortcuts, they:
94
95*   [C-2-1] MUST report `true` for
96    [`AppWidgetManager.html.isRequestPinAppWidgetSupported()`](
97    https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#isRequestPinAppWidgetSupported%28%29).
98*   [C-2-2] MUST have user affordance asking the user before adding a shortcut requested
99    by apps via the [`AppWidgetManager.requestPinAppWidget()`](
100    https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#requestPinAppWidget%28android.content.ComponentName,android.os.Bundle, android.app.PendingIntent%29)
101    API method.
102
103### 3.8.3\. Notifications
104
105Android includes [`Notification`](
106https://developer.android.com/reference/android/app/Notification.html) and
107[`NotificationManager`](
108https://developer.android.com/reference/android/app/NotificationManager.html)
109APIs that allow third-party app developers to notify users of notable events and
110attract users' attention using the hardware components (e.g. sound, vibration
111and light) and software features (e.g. notification shade, system bar) of the
112device.
113
114#### 3.8.3.1\. Presentation of Notifications
115
116If device implementations allow third-party apps to [notify users of notable events](
117http://developer.android.com/guide/topics/ui/notifiers/notifications.html), they:
118
119*   [C-1-1] MUST support notifications that use hardware features, as described in
120    the SDK documentation, and to the extent possible with the device implementation
121    hardware. For instance, if a device implementation includes a vibrator, it MUST
122    correctly implement the vibration APIs. If a device implementation lacks
123    hardware, the corresponding APIs MUST be implemented as no-ops. This behavior is
124    further detailed in [section 7](#7_hardware_compatibility).
125*   [C-1-2]  MUST correctly render all [resources](
126    https://developer.android.com/guide/topics/resources/available-resources.html)
127    (icons, animation files, etc.) provided for in the APIs, or in the
128    Status/System Bar [icon style guide](
129    http://developer.android.com/design/style/iconography.html), although they
130    MAY provide an alternative user experience for notifications than that
131    provided by the reference Android Open Source implementation.
132*   [C-1-3] MUST honor and implement properly the behaviors described for
133    [the APIs](
134    https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Managing)
135    to update, remove and group notifications.
136*   [C-1-4] MUST provide the full behavior of the [NotificationChannel](
137    https://developer.android.com/reference/android/app/NotificationChannel.html)
138    API documented in the SDK.
139*   [C-1-5] MUST provide a user affordance to block and modify a certain
140    third-party app's notification per each channel and app package level.
141*   [C-1-6] MUST also provide a user affordance to display deleted notification
142    channels.
143*   [C-1-7] MUST correctly render all resources (images, stickers, icons, etc.)
144    provided through [Notification.MessagingStyle](
145    https://developer.android.com/reference/android/app/Notification.MessagingStyle)
146    alongside the notification text without additional user interaction. For
147    example, MUST show all resources including icons provided through
148    [android.app.Person](https://developer.android.com/reference/android/app/Person)
149    in a group conversation that is set through [setGroupConversation](
150    https://developer.android.com/reference/android/app/Notification.MessagingStyle.html?hl=es-AR#setGroupConversation%28boolean%29).
151*   [C-SR] Are STRONGLY RECOMMENDED to automatically surface a user affordance
152    to block a certain third-party app's notification per each channel and app
153    package level after the user dismisses that notification multiple times.
154*   SHOULD support rich notifications.
155*   SHOULD present some higher priority notifications as heads-up notifications.
156*   SHOULD have a user affordance to snooze notifications.
157*   MAY only manage the visibility and timing of when third-party apps can notify
158    users of notable events to mitigate safety issues such as driver distraction.
159
160Android 11 introduces support for conversation notifications, which are
161notifications that use [MessagingStyle](https://developer.android.com/reference/android/app/Notification.MessagingStyle.html)
162and provides a published [People](https://developer.android.com/reference/android/app/Person) Shortcut ID.
163
164Device implementations:
165
166*   [C-SR] Are STRONGLY RECOMMENDED to group and display
167    [`conversation notifications`](https://developer.android.com/preview/features/conversations#api-notifications)
168    ahead of non conversation notifications with the exception of
169    ongoing foreground service notifications and [`importance:high`](https://developer.android.com/reference/android/app/NotificationManager#IMPORTANCE_HIGH)
170    notifications.
171
172If device implementations support [`conversation notifications`](https://developer.android.com/preview/features/conversations#api-notifications)
173and the app provides the required data for
174[`bubbles`](https://developer.android.com/guide/topics/ui/bubbles), they:
175
176*   [C-SR] Are STRONGLY RECOMMENDED to display this conversation as a bubble.
177    The AOSP implementation meets these requirements with the default System UI,
178    Settings, and Launcher.
179
180If device implementations support rich notifications, they:
181
182*   [C-2-1] MUST use the exact resources as
183    provided through the [`Notification.Style`](
184    https://developer.android.com/reference/android/app/Notification.Style.html)
185    API class and its subclasses for the presented resource elements.
186*   SHOULD present each and every resource element (e.g.
187    icon, title and summary text) defined in the [`Notification.Style`](
188    https://developer.android.com/reference/android/app/Notification.Style.html)
189    API class and its subclasses.
190
191If device implementations support heads-up notifications: they:
192
193*   [C-3-1] MUST use the heads-up notification view and resources
194    as described in the [`Notification.Builder`](
195    https://developer.android.com/reference/android/app/Notification.Builder.html)
196    API class when heads-up notifications are presented.
197*   [C-3-2] MUST display the actions provided through
198    [`Notification.Builder.addAction()`](
199    https://developer.android.com/reference/android/app/Notification.Builder#addAction%28android.app.Notification.Action%29)
200    together with the notification content without additional user interaction
201    as described in [the SDK](
202    https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up).
203
204#### 3.8.3.2\. Notification Listener Service
205
206Android includes the [`NotificationListenerService`](
207https://developer.android.com/reference/android/service/notification/NotificationListenerService.html)
208APIs that allow apps (once explicitly enabled by the user) to receive a copy of
209all notifications as they are posted or updated.
210
211Device implementations:
212
213*   [C-0-1] MUST correctly and promptly update notifications in their entirety
214    to all such installed and user-enabled listener services, including any and
215    all metadata attached to the Notification object.
216*   [C-0-2] MUST respect the [`snoozeNotification()`](
217    https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#snoozeNotification%28java.lang.String, long%29)
218    API call, and dismiss the notification and make a callback after the snooze
219    duration that is set in the API call.
220
221If device implementations have a user affordance to snooze notifications, they:
222
223*   [C-1-1] MUST reflect the snoozed notification status properly
224    through the standard APIs such as
225    [`NotificationListenerService.getSnoozedNotifications()`](
226    https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getSnoozedNotifications%28%29).
227*   [C-1-2] MUST make this user affordance available to snooze notifications
228    from each installed third-party app's, unless they are from
229    persistent/foreground services.
230
231#### 3.8.3.3\. DND (Do not Disturb)
232
233If device implementations support the DND feature, they:
234
235*   [C-1-1] MUST, for when the device implementation has provided a means for the user
236    to grant or deny third-party apps to access the DND policy configuration,
237    display [Automatic DND rules](
238    https://developer.android.com/reference/android/app/NotificationManager.html#addAutomaticZenRule%28android.app.AutomaticZenRule%29)
239    created by applications alongside the user-created and pre-defined rules.
240*   [C-1-3] MUST honor the [`suppressedVisualEffects`](https://developer.android.com/reference/android/app/NotificationManager.Policy.html#suppressedVisualEffects)
241    values passed along the [`NotificationManager.Policy`](https://developer.android.com/reference/android/app/NotificationManager.Policy.html#NotificationManager.Policy%28int, int, int, int%29)
242    and if an app has set any of the SUPPRESSED_EFFECT_SCREEN_OFF or
243    SUPPRESSED_EFFECT_SCREEN_ON flags, it SHOULD indicate to the user that the
244    visual effects are suppressed in the DND settings menu.
245
246### 3.8.4\. Search
247
248Android includes APIs that allow developers to
249[incorporate search](http://developer.android.com/reference/android/app/SearchManager.html)
250into their applications and expose their application’s data into the global
251system search. Generally speaking, this functionality consists of a single,
252system-wide user interface that allows users to enter queries, displays
253suggestions as users type, and displays results. The Android APIs allow
254developers to reuse this interface to provide search within their own apps and
255allow developers to supply results to the common global search user interface.
256
257*   Android device implementations SHOULD include global search, a single, shared,
258system-wide search user interface capable of real-time suggestions in response
259to user input.
260
261If device implementations implement the global search interface, they:
262
263*   [C-1-1] MUST implement the APIs that allow third-party applications to add
264    suggestions to the search box when it is run in global search mode.
265
266If no third-party applications are installed that make use of the global search:
267
268*   The default behavior SHOULD be to display web search engine results and
269    suggestions.
270
271Android also includes the [Assist APIs](
272https://developer.android.com/reference/android/app/assist/package-summary.html)
273to allow applications to elect how much information of the current context is
274shared with the assistant on the device.
275
276If device implementations support the Assist action, they:
277
278*   [C-2-1] MUST indicate clearly to the end user when the context is shared, by
279    either:
280    *   Each time the assist app accesses the context, displaying a white
281    light around the edges of the screen that meet or exceed the duration and
282    brightness of the Android Open Source Project implementation.
283    *   For the preinstalled assist app, providing a user affordance less
284    than two navigations away from
285    [the default voice input and assistant app settings menu](#3_2_3_5_default_app_settings),
286    and only sharing the context when the assist app is explicitly invoked by
287    the user through a hotword or assist navigation key input.
288*   [C-2-2] The designated interaction to launch the assist app as described
289    in [section 7.2.3](#7_2_3_navigation_keys) MUST launch the user-selected
290    assist app, in other words the app that implements `VoiceInteractionService`,
291    or an activity handling the `ACTION_ASSIST` intent.
292
293### 3.8.5\. Alerts and Toasts
294
295Applications can use the [`Toast`](
296http://developer.android.com/reference/android/widget/Toast.html)
297API to display short non-modal strings to the end user that disappear after a
298brief period of time, and use the [`TYPE_APPLICATION_OVERLAY`](
299http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_OVERLAY)
300window type API to display alert windows as an overlay over other apps.
301
302If device implementations include a screen or video output, they:
303
304*   [C-1-1] MUST provide a user affordance to block an app from displaying alert
305windows that use the [`TYPE_APPLICATION_OVERLAY`](
306http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_OVERLAY)
307. The AOSP implementation meets this requirement by having controls in the notification shade.
308
309*   [C-1-2] MUST honor the Toast API and display Toasts from applications to end users in some highly
310visible manner.
311
312### 3.8.6\. Themes
313
314Android provides “themes” as a mechanism for applications to apply styles across
315an entire Activity or application.
316
317Android includes a “Holo” and "Material" theme family as a set of defined styles
318for application developers to use if they want to match the
319[Holo theme look and feel](http://developer.android.com/guide/topics/ui/themes.html)
320as defined by the Android SDK.
321
322If device implementations include a screen or video output, they:
323
324*   [C-1-1] MUST NOT alter any of the [Holo theme attributes](
325    http://developer.android.com/reference/android/R.style.html) exposed to
326    applications.
327*   [C-1-2] MUST support the “Material” theme family and MUST NOT alter any of
328    the [Material theme attributes](
329    http://developer.android.com/reference/android/R.style.html#Theme_Material)
330    or their assets exposed to applications.
331*   [C-1-3] MUST use the [Roboto version 2.x](https://github.com/google/roboto)
332    fonts as the out-of-box Sans-serif font family for languages that Roboto
333    supports.
334
335Android also includes a “Device Default” theme family as a set of defined styles
336for application developers to use if they want to match the look and feel of the
337device theme as defined by the device implementer.
338
339*   Device implementations MAY modify the [Device Default theme attributes](
340    http://developer.android.com/reference/android/R.style.html) exposed to
341    applications.
342
343Android supports a variant theme with translucent system bars, which allows
344application developers to fill the area behind the status and navigation bar
345with their app content. To enable a consistent developer experience in this
346configuration, it is important the status bar icon style is maintained across
347different device implementations.
348
349If device implementations include a system status bar, they:
350
351*   [C-2-1] MUST use white for system status icons (such as signal strength and
352    battery level) and notifications issued by the system, unless the icon is
353    indicating a problematic status or an app requests a light status bar using
354    the SYSTEM_UI_FLAG_LIGHT_STATUS_BAR flag.
355*   [C-2-2] Android device implementations MUST change the color of the system
356    status icons to black (for details, refer to [R.style](
357    http://developer.android.com/reference/android/R.style.html)) when an app
358    requests a light status bar.
359
360### 3.8.7\. Live Wallpapers
361
362Android defines a component type and corresponding API and lifecycle that allows
363applications to expose one or more
364[“Live Wallpapers”](http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html)
365to the end user. Live wallpapers are animations, patterns, or similar images
366with limited input capabilities that display as a wallpaper, behind other
367applications.
368
369Hardware is considered capable of reliably running live wallpapers if it can run
370all live wallpapers, with no limitations on functionality, at a reasonable frame
371rate with no adverse effects on other applications. If limitations in the
372hardware cause wallpapers and/or applications to crash, malfunction, consume
373excessive CPU or battery power, or run at unacceptably low frame rates, the
374hardware is considered incapable of running live wallpaper. As an example, some
375live wallpapers may use an OpenGL 2.0 or 3.x context to render their content.
376Live wallpaper will not run reliably on hardware that does not support multiple
377OpenGL contexts because the live wallpaper use of an OpenGL context may conflict
378with other applications that also use an OpenGL context.
379
380*   Device implementations capable of running live wallpapers reliably as described
381above SHOULD implement live wallpapers.
382
383If device implementations implement live wallpapers, they:
384
385*   [C-1-1] MUST report the platform feature flag android.software.live_wallpaper.
386
387### 3.8.8\. Activity Switching
388
389The upstream Android source code includes the
390[overview screen](https://developer.android.com/guide/components/activities/recents.html), a
391system-level user interface for task switching and displaying recently accessed
392activities and tasks using a thumbnail image of the application’s graphical
393state at the moment the user last left the application.
394
395Device implementations
396including the recents function navigation key as detailed in
397[section 7.2.3](#7_2_3_navigation_keys) MAY alter the interface.
398
399If device implementations including the recents function navigation key as detailed in
400[section 7.2.3](#7_2_3_navigation_keys) alter the interface, they:
401
402*   [C-1-1] MUST support at least up to 7 displayed activities.
403*   SHOULD at least display the title of 4 activities at a time.
404*   [C-1-2] MUST implement the [screen pinning behavior](http://developer.android.com/about/versions/android-5.0.html#ScreenPinning)
405    and provide the user with a settings menu to toggle the feature.
406*   SHOULD display highlight color, icon, screen title in recents.
407*   SHOULD display a closing affordance ("x") but MAY delay this until user interacts with screens.
408*   SHOULD implement a shortcut to switch easily to the previous activity.
409*   SHOULD trigger the fast-switch action between the two most recently used
410    apps, when the recents function key is tapped twice.
411*   SHOULD trigger the split-screen multiwindow-mode, if supported, when the
412    recents functions key is long pressed.
413*   MAY display affiliated recents as a group that moves together.
414*   [SR] Are STRONGLY RECOMMENDED to use the upstream Android user
415interface (or a similar thumbnail-based interface) for the overview screen.
416
417### 3.8.9\. Input Management
418
419Android includes support for
420[Input Management](http://developer.android.com/guide/topics/text/creating-input-method.html)
421and support for third-party input method editors.
422
423If device implementations allow users to use third-party input methods on the
424device, they:
425
426*   [C-1-1] MUST declare the platform feature android.software.input_methods and
427    support IME APIs as defined in the Android SDK documentation.
428
429
430### 3.8.10\. Lock Screen Media Control
431
432The Remote Control Client API is deprecated from Android 5.0 in favor of the
433[Media Notification Template](http://developer.android.com/reference/android/app/Notification.MediaStyle.html)
434that allows media applications to integrate with playback controls that are
435displayed on the lock screen.
436
437
438### 3.8.11\. Screen savers (previously Dreams)
439
440See [section 3.2.3.5](#3_2_3_5_conditional_application_intents) for settings
441intent to congfigure screen savers.
442
443### 3.8.12\. Location
444
445If device implementations include a hardware sensor (e.g. GPS) that is capable
446of providing the location coordinates, they
447
448*   [C-1-2] MUST display the [current status of location](
449    https://developer.android.com/reference/android/location/LocationManager.html#isLocationEnabled%28%29)
450    in the Location menu within Settings.
451*   [C-1-3] MUST NOT display [location modes](
452    https://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE)
453    in the Location menu within Settings.
454
455### 3.8.13\. Unicode and Font
456
457Android includes support for the emoji characters defined in
458[Unicode 10.0](http://www.unicode.org/versions/Unicode10.0.0/).
459
460If device implementations include a screen or video output, they:
461
462*   [C-1-1] MUST be capable of rendering these emoji characters in color glyph.
463*   [C-1-2] MUST include support for:
464     *   Roboto 2 font with different weights—sans-serif-thin, sans-serif-light,
465       sans-serif-medium, sans-serif-black, sans-serif-condensed,
466       sans-serif-condensed-light for the languages available on the device.
467     *   Full Unicode 7.0 coverage of Latin, Greek, and Cyrillic, including the
468       Latin Extended A, B, C, and D ranges, and all glyphs in the currency
469       symbols block of Unicode 7.0.
470*   SHOULD support the skin tone and diverse family emojis as specified in the
471    [Unicode Technical Report #51](http://unicode.org/reports/tr51).
472
473
474If device implementations include an IME, they:
475
476*   SHOULD provide an input method to the user for these emoji characters.
477
478Android includes support to render Myanmar fonts. Myanmar has several
479non-Unicode compliant fonts, commonly known as “Zawgyi,” for rendering Myanmar
480languages.
481
482If device implementations include support for Burmese, they:
483
484    * [C-2-1] MUST render text with Unicode compliant font as default;
485      non-Unicode compliant font MUST NOT be set as default font unless the user
486      chooses it in the language picker.
487    * [C-2-2] MUST support a Unicode font and a non-Unicode compliant font if a
488      non-Unicode compliant font is supported on the device.  Non-Unicode
489      compliant font MUST NOT remove or overwrite the Unicode font.
490    * [C-2-3] MUST render text with non-Unicode compliant font ONLY IF a
491      language code with [script code Qaag](
492      http://unicode.org/reports/tr35/#unicode_script_subtag_validity) is
493      specified (e.g. my-Qaag). No other ISO language or region codes (whether
494      assigned, unassigned, or reserved) can be used to refer to non-Unicode
495      compliant font for Myanmar. App developers and web page authors can
496      specify my-Qaag as the designated language code as they would for any
497      other language.
498
499### 3.8.14\. Multi-windows
500
501If device implementations have the capability to display multiple activities at
502the same time, they:
503
504*   [C-1-1] MUST implement such multi-window mode(s) in accordance with the
505    application behaviors and APIs described in the Android SDK
506    [multi-window mode support documentation](
507    https://developer.android.com/guide/topics/ui/multi-window.html) and meet
508    the following requirements:
509*   [C-1-2] MUST honor [`android:resizeableActivity`](
510    https://developer.android.com/reference/android/R.attr.html#resizeableActivity)
511    that is set by an app in the `AndroidManifest.xml` file as described in
512    [this SDK](https://developer.android.com/guide/topics/manifest/application-element#resizeableActivity).
513*   [C-1-3] MUST NOT offer split-screen or freeform mode if
514    the screen height is less than 440 dp and the screen width is less than 440
515    dp.
516*   [C-1-4] An activity MUST NOT be resized to a size smaller than 220dp in
517    multi-window modes other than Picture-in-Picture.
518*   Device implementations with screen size `xlarge` SHOULD support freeform
519    mode.
520
521If device implementations support multi-window mode(s), and the split screen
522mode, they:
523
524*   [C-2-1] MUST honor the declared [`AndroidManifestLayout_minWidth`](
525    https://developer.android.com/reference/android/R.styleable.html#AndroidManifestLayout_minWidth)
526    and [`AndroidManifestLayout_minHeight`](
527    https://developer.android.com/reference/android/R.styleable.html#AndroidManifestLayout_minHeight)
528    values of the third-party launcher application and not override these values
529    in the course of showing some content of the docked activity.
530
531
532If device implementations support multi-window mode(s) and Picture-in-Picture
533multi-window mode, they:
534
535*   [C-3-1] MUST launch activities in picture-in-picture multi-window mode
536    when the app is:
537        *   Targeting API level 26 or higher and declares
538        [`android:supportsPictureInPicture`](https://developer.android.com/reference/android/R.attr.html#supportsPictureInPicture)
539        *   Targeting API level 25 or lower and declares both [`android:resizeableActivity`](https://developer.android.com/reference/android/R.attr.html#resizeableActivity)
540        and [`android:supportsPictureInPicture`](https://developer.android.com/reference/android/R.attr.html#supportsPictureInPicture).
541*   [C-3-2] MUST expose the actions in their SystemUI as
542    specified by the current PIP activity through the [`setActions()`](
543    https://developer.android.com/reference/android/app/PictureInPictureParams.Builder.html#setActions%28java.util.List<android.app.RemoteAction>%29)
544    API.
545*   [C-3-3] MUST support aspect ratios greater than or equal to
546    1:2.39 and less than or equal to 2.39:1, as specified by the PIP activity through
547    the [`setAspectRatio()`](
548    https://developer.android.com/reference/android/app/PictureInPictureParams.Builder.html#setAspectRatio%28android.util.Rational%29)
549    API.
550*   [C-3-4] MUST use [`KeyEvent.KEYCODE_WINDOW`](
551    https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_WINDOW)
552    to control the PIP window; if PIP mode is not implemented, the key MUST be
553    available to the foreground activity.
554*   [C-3-5] MUST provide a user affordance to block an app from displaying in
555    PIP mode; the AOSP implementation meets this requirement by having
556    controls in the notification shade.
557*   [C-3-6] MUST allocate the following minimum width and height for the PIP
558    window when an application does not declare any value for
559    [`AndroidManifestLayout_minWidth`](
560    https://developer.android.com/reference/android/R.styleable.html#AndroidManifestLayout_minWidth)
561    and [`AndroidManifestLayout_minHeight`](
562    https://developer.android.com/reference/android/R.styleable.html#AndroidManifestLayout_minHeight):
563
564    *   Devices with the Configuration.uiMode that is set other than
565    [`UI_MODE_TYPE_TELEVISION`](
566    https://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_TELEVISION)
567    MUST allocate a minimum width and height of 108 dp.
568    *   Devices with the Configuration.uiMode that is set to
569    [`UI_MODE_TYPE_TELEVISION`](
570    https://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_TELEVISION)
571    MUST allocate a minimum width of 240 dp and a minimum height of 135 dp.
572
573### 3.8.15\. Display Cutout
574
575Android supports a Display Cutout as described
576in the SDK document. The [`DisplayCutout`](
577https://developer.android.com/reference/android/view/DisplayCutout) API defines
578an area on the edge of the display that may not be functional for an application
579due to a display cutout or curved display on the edge(s).
580
581If device implementations include display cutout(s), they:
582
583*   [C-1-5] MUST NOT have cutout(s) if the device's aspect ratio is 1.0(1:1).
584*   [C-1-2] MUST NOT have more than one cutout per edge.
585*   [C-1-3] MUST honor the display cutout flags set by the app through the
586[`WindowManager.LayoutParams`](
587https://developer.android.com/reference/android/view/WindowManager.LayoutParams)
588API as described in the SDK.
589*   [C-1-4] MUST report correct values for all cutout metrics defined in the
590[`DisplayCutout`](
591https://developer.android.com/reference/android/view/DisplayCutout) API.
592
593### 3.8.16\. Device Controls
594
595Android includes [`ControlsProviderService`](https://developer.android.com/reference/android/service/controls/ControlsProviderService)
596and [`Control`](https://developer.android.com/reference/android/service/controls/Control)
597APIs to allow third-party applications to publish device controls for quick
598status and action for users.
599
600See Section [2_2_3](#2_2_3_software) for device-specific requirements.