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