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