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.