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
160If device implementations support rich notifications, they:
161
162*   [C-2-1] MUST use the exact resources as
163    provided through the [`Notification.Style`](
164    https://developer.android.com/reference/android/app/Notification.Style.html)
165    API class and its subclasses for the presented resource elements.
166*   SHOULD present each and every resource element (e.g.
167    icon, title and summary text) defined in the [`Notification.Style`](
168    https://developer.android.com/reference/android/app/Notification.Style.html)
169    API class and its subclasses.
170
171If device implementations support heads-up notifications: they:
172
173*   [C-3-1] MUST use the heads-up notification view and resources
174    as described in the [`Notification.Builder`](
175    https://developer.android.com/reference/android/app/Notification.Builder.html)
176    API class when heads-up notifications are presented.
177*   [C-3-2] MUST display the actions provided through
178    [`Notification.Builder.addAction()`](
179    https://developer.android.com/reference/android/app/Notification.Builder#addAction%28android.app.Notification.Action%29)
180    together with the notification content without additional user interaction
181    as described in [the SDK](
182    https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up).
183
184#### 3.8.3.2\. Notification Listener Service
185
186Android includes the [`NotificationListenerService`](
187https://developer.android.com/reference/android/service/notification/NotificationListenerService.html)
188APIs that allow apps (once explicitly enabled by the user) to receive a copy of
189all notifications as they are posted or updated.
190
191If device implementations report the feature flag [`android.hardware.ram.normal`](https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_RAM_NORMAL),
192they:
193
194*   [C-1-1] MUST correctly and promptly update notifications in their entirety to all
195    such installed and user-enabled listener services, including any and all
196    metadata attached to the Notification object.
197*   [C-1-2] MUST respect the [`snoozeNotification()`](
198    https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#snoozeNotification%28java.lang.String, long%29)
199    API call, and dismiss the notification and make a callback after the snooze
200    duration that is set in the API call.
201
202If device implementations have a user affordance to snooze notifications, they:
203
204*   [C-2-1] MUST reflect the snoozed notification status properly
205    through the standard APIs such as
206    [`NotificationListenerService.getSnoozedNotifications()`](
207    https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getSnoozedNotifications%28%29).
208*   [C-2-2] MUST make this user affordance available to snooze notifications
209    from each installed third-party app's, unless they are from
210    persistent/foreground services.
211
212#### 3.8.3.3\. DND (Do not Disturb)
213
214If device implementations support the DND feature, they:
215
216*   [C-1-1] MUST implement an activity that would respond to the intent
217    [ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS](
218    https://developer.android.com/reference/android/provider/Settings.html#ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS),
219    which for implementations with UI_MODE_TYPE_NORMAL it MUST be an activity
220    where the user can grant or deny the app access to DND policy
221    configurations.
222*   [C-1-2] MUST, for when the device implementation has provided a means for the user
223    to grant or deny third-party apps to access the DND policy configuration,
224    display [Automatic DND rules](
225    https://developer.android.com/reference/android/app/NotificationManager.html#addAutomaticZenRule%28android.app.AutomaticZenRule%29)
226    created by applications alongside the user-created and pre-defined rules.
227*   [C-1-3] MUST honor the [`suppressedVisualEffects`](https://developer.android.com/reference/android/app/NotificationManager.Policy.html#suppressedVisualEffects)
228    values passed along the [`NotificationManager.Policy`](https://developer.android.com/reference/android/app/NotificationManager.Policy.html#NotificationManager.Policy%28int, int, int, int%29)
229    and if an app has set any of the SUPPRESSED_EFFECT_SCREEN_OFF or
230    SUPPRESSED_EFFECT_SCREEN_ON flags, it SHOULD indicate to the user that the
231    visual effects are suppressed in the DND settings menu.
232
233### 3.8.4\. Search
234
235Android includes APIs that allow developers to
236[incorporate search](http://developer.android.com/reference/android/app/SearchManager.html)
237into their applications and expose their application’s data into the global
238system search. Generally speaking, this functionality consists of a single,
239system-wide user interface that allows users to enter queries, displays
240suggestions as users type, and displays results. The Android APIs allow
241developers to reuse this interface to provide search within their own apps and
242allow developers to supply results to the common global search user interface.
243
244*   Android device implementations SHOULD include global search, a single, shared,
245system-wide search user interface capable of real-time suggestions in response
246to user input.
247
248If device implementations implement the global search interface, they:
249
250*   [C-1-1] MUST implement the APIs that allow third-party applications to add
251    suggestions to the search box when it is run in global search mode.
252
253If no third-party applications are installed that make use of the global search:
254
255*   The default behavior SHOULD be to display web search engine results and
256    suggestions.
257
258Android also includes the [Assist APIs](
259https://developer.android.com/reference/android/app/assist/package-summary.html)
260to allow applications to elect how much information of the current context is
261shared with the assistant on the device.
262
263If device implementations support the Assist action, they:
264
265*   [C-2-1] MUST indicate clearly to the end user when the context is shared, by
266    either:
267    *   Each time the assist app accesses the context, displaying a white
268    light around the edges of the screen that meet or exceed the duration and
269    brightness of the Android Open Source Project implementation.
270    *   For the preinstalled assist app, providing a user affordance less
271    than two navigations away from
272    [the default voice input and assistant app settings menu](#3_2_3_5_default_app_settings),
273    and only sharing the context when the assist app is explicitly invoked by
274    the user through a hotword or assist navigation key input.
275*   [C-2-2] The designated interaction to launch the assist app as described
276    in [section 7.2.3](#7_2_3_navigation_keys) MUST launch the user-selected
277    assist app, in other words the app that implements `VoiceInteractionService`,
278    or an activity handling the `ACTION_ASSIST` intent.
279
280### 3.8.5\. Alerts and Toasts
281
282Applications can use the [`Toast`](
283http://developer.android.com/reference/android/widget/Toast.html)
284API to display short non-modal strings to the end user that disappear after a
285brief period of time, and use the [`TYPE_APPLICATION_OVERLAY`](
286http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_OVERLAY)
287window type API to display alert windows as an overlay over other apps.
288
289If device implementations include a screen or video output, they:
290
291*   [C-1-1] MUST provide a user affordance to block an app from displaying alert
292windows that use the [`TYPE_APPLICATION_OVERLAY`](
293http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_OVERLAY)
294. The AOSP implementation meets this requirement by having controls in the notification shade.
295
296*   [C-1-2] MUST honor the Toast API and display Toasts from applications to end users in some highly
297visible manner.
298
299### 3.8.6\. Themes
300
301Android provides “themes” as a mechanism for applications to apply styles across
302an entire Activity or application.
303
304Android includes a “Holo” and "Material" theme family as a set of defined styles
305for application developers to use if they want to match the
306[Holo theme look and feel](http://developer.android.com/guide/topics/ui/themes.html)
307as defined by the Android SDK.
308
309If device implementations include a screen or video output, they:
310
311*   [C-1-1] MUST NOT alter any of the [Holo theme attributes](
312    http://developer.android.com/reference/android/R.style.html) exposed to
313    applications.
314*   [C-1-2] MUST support the “Material” theme family and MUST NOT alter any of
315    the [Material theme attributes](
316    http://developer.android.com/reference/android/R.style.html#Theme_Material)
317    or their assets exposed to applications.
318
319Android also includes a “Device Default” theme family as a set of defined styles
320for application developers to use if they want to match the look and feel of the
321device theme as defined by the device implementer.
322
323*   Device implementations MAY modify the [Device Default theme attributes](
324    http://developer.android.com/reference/android/R.style.html) exposed to
325    applications.
326
327Android supports a variant theme with translucent system bars, which allows
328application developers to fill the area behind the status and navigation bar
329with their app content. To enable a consistent developer experience in this
330configuration, it is important the status bar icon style is maintained across
331different device implementations.
332
333If device implementations include a system status bar, they:
334
335*   [C-2-1] MUST use white for system status icons (such as signal strength and
336    battery level) and notifications issued by the system, unless the icon is
337    indicating a problematic status or an app requests a light status bar using
338    the SYSTEM_UI_FLAG_LIGHT_STATUS_BAR flag.
339*   [C-2-2] Android device implementations MUST change the color of the system
340    status icons to black (for details, refer to [R.style](
341    http://developer.android.com/reference/android/R.style.html)) when an app
342    requests a light status bar.
343
344### 3.8.7\. Live Wallpapers
345
346Android defines a component type and corresponding API and lifecycle that allows
347applications to expose one or more
348[“Live Wallpapers”](http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html)
349to the end user. Live wallpapers are animations, patterns, or similar images
350with limited input capabilities that display as a wallpaper, behind other
351applications.
352
353Hardware is considered capable of reliably running live wallpapers if it can run
354all live wallpapers, with no limitations on functionality, at a reasonable frame
355rate with no adverse effects on other applications. If limitations in the
356hardware cause wallpapers and/or applications to crash, malfunction, consume
357excessive CPU or battery power, or run at unacceptably low frame rates, the
358hardware is considered incapable of running live wallpaper. As an example, some
359live wallpapers may use an OpenGL 2.0 or 3.x context to render their content.
360Live wallpaper will not run reliably on hardware that does not support multiple
361OpenGL contexts because the live wallpaper use of an OpenGL context may conflict
362with other applications that also use an OpenGL context.
363
364*   Device implementations capable of running live wallpapers reliably as described
365above SHOULD implement live wallpapers.
366
367If device implementations implement live wallpapers, they:
368
369*   [C-1-1] MUST report the platform feature flag android.software.live_wallpaper.
370
371### 3.8.8\. Activity Switching
372
373The upstream Android source code includes the
374[overview screen](https://developer.android.com/guide/components/activities/recents.html), a
375system-level user interface for task switching and displaying recently accessed
376activities and tasks using a thumbnail image of the application’s graphical
377state at the moment the user last left the application.
378
379Device implementations
380including the recents function navigation key as detailed in
381[section 7.2.3](#7_2_3_navigation_keys) MAY alter the interface.
382
383If device implementations including the recents function navigation key as detailed in
384[section 7.2.3](#7_2_3_navigation_keys) alter the interface, they:
385
386*   [C-1-1] MUST support at least up to 7 displayed activities.
387*   SHOULD at least display the title of 4 activities at a time.
388*   [C-1-2] MUST implement the [screen pinning behavior](http://developer.android.com/about/versions/android-5.0.html#ScreenPinning)
389    and provide the user with a settings menu to toggle the feature.
390*   SHOULD display highlight color, icon, screen title in recents.
391*   SHOULD display a closing affordance ("x") but MAY delay this until user interacts with screens.
392*   SHOULD implement a shortcut to switch easily to the previous activity.
393*   SHOULD trigger the fast-switch action between the two most recently used
394    apps, when the recents function key is tapped twice.
395*   SHOULD trigger the split-screen multiwindow-mode, if supported, when the
396    recents functions key is long pressed.
397*   MAY display affiliated recents as a group that moves together.
398*   [SR] Are STRONGLY RECOMMENDED to use the upstream Android user
399interface (or a similar thumbnail-based interface) for the overview screen.
400
401### 3.8.9\. Input Management
402
403Android includes support for
404[Input Management](http://developer.android.com/guide/topics/text/creating-input-method.html)
405and support for third-party input method editors.
406
407If device implementations allow users to use third-party input methods on the
408device, they:
409
410*   [C-1-1] MUST declare the platform feature android.software.input_methods and
411    support IME APIs as defined in the Android SDK documentation.
412*   [C-1-2] MUST provide a user-accessible mechanism to add and configure
413    third-party input methods in response to the
414    android.settings.INPUT_METHOD_SETTINGS intent.
415
416If device implementations declare the [`android.software.autofill`](
417https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_AUTOFILL)
418feature flag, they:
419
420*   [C-2-1] MUST fully implement the [`AutofillService`](
421https://developer.android.com/reference/android/service/autofill/AutofillService.html)
422and [`AutofillManager`](
423https://developer.android.com/reference/android/view/autofill/AutofillManager.html)
424APIs and honor the [`android.settings.REQUEST_SET_AUTOFILL_SERVICE`](
425https://developer.android.com/reference/android/provider/Settings.html#ACTION_REQUEST_SET_AUTOFILL_SERVICE)
426intent to show a default app settings menu to enable and disable autofill and
427change the default autofill service for the user.
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
440Android includes support for [interactive screen savers](http://developer.android.com/reference/android/service/dreams/DreamService.html),
441previously referred to as Dreams. Screen savers allow users to interact with
442applications when a device connected to a power source is idle or docked in a
443desk dock.  Android Watch devices MAY implement screen savers, but other types
444of device implementations SHOULD include support for screen savers and provide
445a settings option for users to configure screen savers in response to the
446`android.settings.DREAM_SETTINGS` intent.
447
448### 3.8.12\. Location
449
450If device implementations include a hardware sensor (e.g. GPS) that is capable
451of providing the location coordinates, they
452
453*   [C-1-2] MUST display the [current status of location](
454    https://developer.android.com/reference/android/location/LocationManager.html#isLocationEnabled%28%29)
455    in the Location menu within Settings.
456*   [C-1-3] MUST NOT display [location modes](
457    https://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE)
458    in the Location menu within Settings.
459
460### 3.8.13\. Unicode and Font
461
462Android includes support for the emoji characters defined in
463[Unicode 10.0](http://www.unicode.org/versions/Unicode10.0.0/).
464
465If device implementations include a screen or video output, they:
466
467*   [C-1-1] MUST be capable of rendering these emoji characters in color glyph.
468*   [C-1-2] MUST include support for:
469     *   Roboto 2 font with different weights—sans-serif-thin, sans-serif-light,
470       sans-serif-medium, sans-serif-black, sans-serif-condensed,
471       sans-serif-condensed-light for the languages available on the device.
472     *   Full Unicode 7.0 coverage of Latin, Greek, and Cyrillic, including the
473       Latin Extended A, B, C, and D ranges, and all glyphs in the currency
474       symbols block of Unicode 7.0.
475*   SHOULD support the skin tone and diverse family emojis as specified in the
476    [Unicode Technical Report #51](http://unicode.org/reports/tr51).
477
478
479If device implementations include an IME, they:
480
481*   SHOULD provide an input method to the user for these emoji characters.
482
483Android includes support to render Myanmar fonts. Myanmar has several
484non-Unicode compliant fonts, commonly known as “Zawgyi,” for rendering Myanmar
485languages.
486
487If device implementations include support for Burmese, they:
488
489    * [C-2-1] MUST render text with Unicode compliant font as default;
490      non-Unicode compliant font MUST NOT be set as default font unless the user
491      chooses it in the language picker.
492    * [C-2-2] MUST support a Unicode font and a non-Unicode compliant font if a
493      non-Unicode compliant font is supported on the device.  Non-Unicode
494      compliant font MUST NOT remove or overwrite the Unicode font.
495    * [C-2-3] MUST render text with non-Unicode compliant font ONLY IF a
496      language code with [script code Qaag](
497      http://unicode.org/reports/tr35/#unicode_script_subtag_validity) is
498      specified (e.g. my-Qaag). No other ISO language or region codes (whether
499      assigned, unassigned, or reserved) can be used to refer to non-Unicode
500      compliant font for Myanmar. App developers and web page authors can
501      specify my-Qaag as the designated language code as they would for any
502      other language.
503
504### 3.8.14\. Multi-windows
505
506If device implementations have the capability to display multiple activities at
507the same time, they:
508
509*   [C-1-1] MUST implement such multi-window mode(s) in accordance with the
510    application behaviors and APIs described in the Android SDK
511    [multi-window mode support documentation](
512    https://developer.android.com/guide/topics/ui/multi-window.html) and meet
513    the following requirements:
514*   [C-1-2] MUST honor [`android:resizeableActivity`](
515    https://developer.android.com/reference/android/R.attr.html#resizeableActivity)
516    that is set by an app in the `AndroidManifest.xml` file as described in
517    [this SDK](https://developer.android.com/guide/topics/manifest/application-element#resizeableActivity).
518*   [C-1-3] MUST NOT offer split-screen or freeform mode if
519    the screen height is less than 440 dp and the screen width is less than 440
520    dp.
521*   [C-1-4] An activity MUST NOT be resized to a size smaller than 220dp in
522    multi-window modes other than Picture-in-Picture.
523*   Device implementations with screen size `xlarge` SHOULD support freeform
524    mode.
525
526If device implementations support multi-window mode(s), and the split screen
527mode, they:
528
529*   [C-2-1] MUST preload a [resizeable](
530    https://developer.android.com/guide/topics/ui/multi-window.html#configuring)
531    launcher as the default.
532*   [C-2-2] MUST crop the docked activity of a split-screen multi-window but
533    SHOULD show some content of it, if the Launcher app is the focused window.
534*   [C-2-3] MUST honor the declared [`AndroidManifestLayout_minWidth`](
535    https://developer.android.com/reference/android/R.styleable.html#AndroidManifestLayout_minWidth)
536    and [`AndroidManifestLayout_minHeight`](
537    https://developer.android.com/reference/android/R.styleable.html#AndroidManifestLayout_minHeight)
538    values of the third-party launcher application and not override these values
539    in the course of showing some content of the docked activity.
540
541
542If device implementations support multi-window mode(s) and Picture-in-Picture
543multi-window mode, they:
544
545*   [C-3-1] MUST launch activities in picture-in-picture multi-window mode
546    when the app is:
547        *   Targeting API level 26 or higher and declares
548        [`android:supportsPictureInPicture`](https://developer.android.com/reference/android/R.attr.html#supportsPictureInPicture)
549        *   Targeting API level 25 or lower and declares both [`android:resizeableActivity`](https://developer.android.com/reference/android/R.attr.html#resizeableActivity)
550        and [`android:supportsPictureInPicture`](https://developer.android.com/reference/android/R.attr.html#supportsPictureInPicture).
551*   [C-3-2] MUST expose the actions in their SystemUI as
552    specified by the current PIP activity through the [`setActions()`](
553    https://developer.android.com/reference/android/app/PictureInPictureParams.Builder.html#setActions%28java.util.List<android.app.RemoteAction>%29)
554    API.
555*   [C-3-3] MUST support aspect ratios greater than or equal to
556    1:2.39 and less than or equal to 2.39:1, as specified by the PIP activity through
557    the [`setAspectRatio()`](
558    https://developer.android.com/reference/android/app/PictureInPictureParams.Builder.html#setAspectRatio%28android.util.Rational%29)
559    API.
560*   [C-3-4] MUST use [`KeyEvent.KEYCODE_WINDOW`](
561    https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_WINDOW)
562    to control the PIP window; if PIP mode is not implemented, the key MUST be
563    available to the foreground activity.
564*   [C-3-5] MUST provide a user affordance to block an app from displaying in
565    PIP mode; the AOSP implementation meets this requirement by having
566    controls in the notification shade.
567*   [C-3-6] MUST allocate minimum width and height of 108 dp for the PIP window
568    and minimum width of 240 dp and height of 135 dp for the PIP window when the
569    `Configuration.uiMode` is configured as [`UI_MODE_TYPE_TELEVISION`](
570    https://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_TELEVISION).
571
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 is not functional for displaying
579content.
580
581If device implementations include display cutout(s), they:
582
583*   [C-1-1] MUST only have cutout(s) on the short edge(s) of the device.
584Conversely, if the device's aspect ratio is 1.0(1:1), they MUST NOT have
585cutout(s).
586*   [C-1-2] MUST NOT have more than one cutout per edge.
587*   [C-1-3] MUST honor the display cutout flags set by the app through the
588[`WindowManager.LayoutParams`](
589https://developer.android.com/reference/android/view/WindowManager.LayoutParams)
590API as described in the SDK.
591*   [C-1-4] MUST report correct values for all cutout metrics defined in the
592[`DisplayCutout`](
593https://developer.android.com/reference/android/view/DisplayCutout) API.
594