Home | History | Annotate | Download | only in training
      1 toc:
      2 - title: Getting Started
      3   path: /training/index.html
      4   section:
      5   - title: Building Your First App
      6     path: /training/basics/firstapp/index.html
      7     path_attributes:
      8     - name: description
      9       value: After you've installed the Android SDK, start with this class to learn the basics about Android app development.
     10     section:
     11     - title: Creating an Android Project
     12       path: /training/basics/firstapp/creating-project.html
     13     - title: Running Your Application
     14       path: /training/basics/firstapp/running-app.html
     15     - title: Building a Simple User Interface
     16       path: /training/basics/firstapp/building-ui.html
     17     - title: Starting Another Activity
     18       path: /training/basics/firstapp/starting-activity.html
     19   - title: Supporting Different Devices
     20     path: /training/basics/supporting-devices/index.html
     21     path_attributes:
     22     - name: description
     23       value: How to build your app with alternative resources that provide an optimized user experience on multiple device form factors using a single APK.
     24     section:
     25     - title: Supporting Different Languages
     26       path: /training/basics/supporting-devices/languages.html
     27     - title: Supporting Different Screens
     28       path: /training/basics/supporting-devices/screens.html
     29     - title: Supporting Different Platform Versions
     30       path: /training/basics/supporting-devices/platforms.html
     31   - title: Managing the Activity Lifecycle
     32     path: /training/basics/activity-lifecycle/index.html
     33     path_attributes:
     34     - name: ja-lang
     35       value:  
     36     - name: ko-lang
     37       value:    
     38     - name: pt-br-lang
     39       value: Como gerenciar o ciclo de vida da atividade
     40     - name: ru-lang
     41       value:    
     42     - name: zh-cn-lang
     43       value: 
     44     - name: zh-tw-lang
     45       value: 
     46     - name: description
     47       value: How Android activities live and die and how to create a seamless user experience by implementing lifecycle callback methods.
     48     section:
     49     - title: Starting an Activity
     50       path: /training/basics/activity-lifecycle/starting.html
     51       path_attributes:
     52       - name: ja-lang
     53         value: 
     54       - name: ko-lang
     55         value:  
     56       - name: pt-br-lang
     57         value: Iniciando uma atividade
     58       - name: ru-lang
     59         value:  
     60       - name: zh-cn-lang
     61         value: 
     62       - name: zh-tw-lang
     63         value: 
     64     - title: Pausing and Resuming an Activity
     65       path: /training/basics/activity-lifecycle/pausing.html
     66     - title: Stopping and Restarting an Activity
     67       path: /training/basics/activity-lifecycle/stopping.html
     68       path_attributes:
     69       - name: ja-lang
     70         value: 
     71       - name: ko-lang
     72         value:    
     73       - name: pt-br-lang
     74         value: Pausando e reiniciando uma atividade
     75       - name: ru-lang
     76         value:    
     77       - name: zh-cn-lang
     78         value: 
     79       - name: zh-tw-lang
     80         value: 
     81     - title: Recreating an Activity
     82       path: /training/basics/activity-lifecycle/recreating.html
     83       path_attributes:
     84       - name: ja-lang
     85         value: 
     86       - name: ko-lang
     87         value:  
     88       - name: pt-br-lang
     89         value: Recriando uma atividade
     90       - name: ru-lang
     91         value:  
     92       - name: zh-cn-lang
     93         value: 
     94       - name: zh-tw-lang
     95         value: 
     96   - title: Building a Dynamic UI with Fragments
     97     path: /training/basics/fragments/index.html
     98     path_attributes:
     99     - name: description
    100       value: How to build a user interface for your app that is flexible enough to present multiple UI components on large screens and a more constrained set of UI components on smaller screensessential for building a single APK for both phones and tablets.
    101     section:
    102     - title: Creating a Fragment
    103       path: /training/basics/fragments/creating.html
    104     - title: Building a Flexible UI
    105       path: /training/basics/fragments/fragment-ui.html
    106       path_attributes:
    107       - name: zh-cn-lang
    108         value: 
    109     - title: Communicating with Other Fragments
    110       path: /training/basics/fragments/communicating.html
    111   - title: Saving Data
    112     path: /training/basics/data-storage/index.html
    113     path_attributes:
    114     - name: ja-lang
    115       value: 
    116     - name: ko-lang
    117       value:  
    118     - name: pt-br-lang
    119       value: Salvando dados
    120     - name: ru-lang
    121       value:  
    122     - name: zh-cn-lang
    123       value: 
    124     - name: zh-tw-lang
    125       value: 
    126     - name: description
    127       value: How to save data on the device, whether it's temporary files, downloaded app assets, user media, structured data, or something else.
    128     section:
    129     - title: Saving Key-Value Sets
    130       path: /training/basics/data-storage/shared-preferences.html
    131       path_attributes:
    132       - name: ja-lang
    133         value: 
    134       - name: ko-lang
    135         value: -  
    136       - name: pt-br-lang
    137         value: Salvando conjuntos de valor-chave
    138       - name: ru-lang
    139         value:   "-"
    140       - name: zh-cn-lang
    141         value: 
    142       - name: zh-tw-lang
    143         value: 
    144     - title: Saving Files
    145       path: /training/basics/data-storage/files.html
    146       path_attributes:
    147       - name: ja-lang
    148         value: 
    149       - name: ko-lang
    150         value:  
    151       - name: pt-br-lang
    152         value: Salvando arquivos
    153       - name: ru-lang
    154         value:  
    155       - name: zh-cn-lang
    156         value: 
    157       - name: zh-tw-lang
    158         value: 
    159     - title: Saving Data in SQL Databases
    160       path: /training/basics/data-storage/databases.html
    161       path_attributes:
    162       - name: ja-lang
    163         value: SQL 
    164       - name: ko-lang
    165         value: SQL   
    166       - name: pt-br-lang
    167         value: Salvando dados em bancos de dados do SQL
    168       - name: ru-lang
    169         value:      SQL
    170       - name: zh-cn-lang
    171         value:  SQL 
    172       - name: zh-tw-lang
    173         value:  SQL 
    174   - title: Interacting with Other Apps
    175     path: /training/basics/intents/index.html
    176     path_attributes:
    177     - name: ja-lang
    178       value: 
    179     - name: ko-lang
    180       value:    
    181     - name: pt-br-lang
    182       value: Interagindo com outros aplicativos
    183     - name: ru-lang
    184       value:    
    185     - name: zh-cn-lang
    186       value: 
    187     - name: zh-tw-lang
    188       value: 
    189     - name: description
    190       value: How to build a user experience that leverages other apps available on the device to perform advanced user tasks, such as capture a photo or view an address on a map.
    191     section:
    192     - title: Sending the User to Another App
    193       path: /training/basics/intents/sending.html
    194       path_attributes:
    195       - name: ja-lang
    196         value: 
    197       - name: ko-lang
    198         value:    
    199       - name: pt-br-lang
    200         value: Enviando o usurio para outro aplicativo
    201       - name: ru-lang
    202         value:     
    203       - name: zh-cn-lang
    204         value: 
    205       - name: zh-tw-lang
    206         value: 
    207     - title: Getting a Result from the Activity
    208       path: /training/basics/intents/result.html
    209       path_attributes:
    210       - name: ja-lang
    211         value: 
    212       - name: ko-lang
    213         value:   
    214       - name: pt-br-lang
    215         value: Obtendo resultados de uma atividade
    216       - name: ru-lang
    217         value:   
    218       - name: zh-cn-lang
    219         value: 
    220       - name: zh-tw-lang
    221         value: 
    222     - title: Allowing Other Apps to Start Your Activity
    223       path: /training/basics/intents/filters.html
    224       path_attributes:
    225       - name: ja-lang
    226         value: 
    227       - name: ko-lang
    228         value:      
    229       - name: pt-br-lang
    230         value: Permitindo que outros aplicativos iniciem sua atividade
    231       - name: ru-lang
    232         value:       
    233       - name: zh-cn-lang
    234         value: 
    235       - name: zh-tw-lang
    236         value: 
    237   - title: Working with System Permissions
    238     path: /training/permissions/index.html
    239     path_attributes:
    240     - name: description
    241       value: How to declare that your app needs access to features and resources outside of its 'sandbox', and how to request those privileges at runtime.
    242     section:
    243     - title: Declaring Permissions
    244       path: /training/permissions/declaring.html
    245     - title: Requesting Permissions at Run Time
    246       path: /training/permissions/requesting.html
    247     - title: Best Practices for Runtime Permissions
    248       path: /training/permissions/best-practices.html
    249 
    250 - title: Building Apps with Content Sharing
    251   path: /training/building-content-sharing.html
    252   section:
    253   - title: Sharing Simple Data
    254     path: /training/sharing/index.html
    255     path_attributes:
    256     - name: description
    257       value: How to take your app interaction to the next level by sharing information with other apps, receive information back, and provide a simple and scalable way to perform Share actions with user content.
    258     section:
    259     - title: Sending Simple Data to Other Apps
    260       path: /training/sharing/send.html
    261     - title: Receiving Simple Data from Other Apps
    262       path: /training/sharing/receive.html
    263     - title: Adding an Easy Share Action
    264       path: /training/sharing/shareaction.html
    265   - title: Sharing Files
    266     path: /training/secure-file-sharing/index.html
    267     path_attributes:
    268     - name: description
    269       value: How to provide secure access to a file associated with your app using a content URI and temporary access permissions.
    270     section:
    271     - title: Setting Up File Sharing
    272       path: /training/secure-file-sharing/setup-sharing.html
    273     - title: Sharing a File
    274       path: /training/secure-file-sharing/share-file.html
    275     - title: Requesting a Shared File
    276       path: /training/secure-file-sharing/request-file.html
    277     - title: Retrieving File Information
    278       path: /training/secure-file-sharing/retrieve-info.html
    279   - title: Sharing Files with NFC
    280     path: /training/beam-files/index.html
    281     path_attributes:
    282     - name: description
    283       value: How to transfer files between devices using the NFC Android Beam feature.
    284     section:
    285     - title: Sending Files to Another Device
    286       path: /training/beam-files/send-files.html
    287     - title: Receiving Files from Another Device
    288       path: /training/beam-files/receive-files.html
    289 
    290 - title: Building Apps with Multimedia
    291   path: /training/building-multimedia.html
    292   section:
    293   - title: Managing Audio Playback
    294     path: /training/managing-audio/index.html
    295     path_attributes:
    296     - name: description
    297       value: How to respond to hardware audio key presses, request audio focus when playing audio, and respond appropriately to changes in audio focus.
    298     section:
    299     - title: Controlling Your App's Volume and Playback
    300       path: /training/managing-audio/volume-playback.html
    301     - title: Managing Audio Focus
    302       path: /training/managing-audio/audio-focus.html
    303     - title: Dealing with Audio Output Hardware
    304       path: /training/managing-audio/audio-output.html
    305   - title: Capturing Photos
    306     path: /training/camera/index.html
    307     path_attributes:
    308     - name: description
    309       value: How to leverage existing camera apps on the user's device to capture photos or control the camera hardware directly and build your own camera app.
    310     section:
    311     - title: Taking Photos Simply
    312       path: /training/camera/photobasics.html
    313     - title: Recording Videos Simply
    314       path: /training/camera/videobasics.html
    315     - title: Controlling the Camera
    316       path: /training/camera/cameradirect.html
    317   - title: Printing Content
    318     path: /training/printing/index.html
    319     path_attributes:
    320     - name: description
    321       value: How to print photos, HTML documents, and custom documents from your app.
    322     section:
    323     - title: Photos
    324       path: /training/printing/photos.html
    325     - title: HTML Documents
    326       path: /training/printing/html-docs.html
    327     - title: Custom Documents
    328       path: /training/printing/custom-docs.html
    329 
    330 - title: Building Apps with Graphics & Animation
    331   path: /training/building-graphics.html
    332   section:
    333   - title: Displaying Bitmaps Efficiently
    334     path: /training/displaying-bitmaps/index.html
    335     path_attributes:
    336     - name: description
    337       value: How to load and process bitmaps while keeping your user interface responsive and avoid exceeding memory limits.
    338     section:
    339     - title: Loading Large Bitmaps Efficiently
    340       path: /training/displaying-bitmaps/load-bitmap.html
    341     - title: Processing Bitmaps Off the UI Thread
    342       path: /training/displaying-bitmaps/process-bitmap.html
    343     - title: Caching Bitmaps
    344       path: /training/displaying-bitmaps/cache-bitmap.html
    345     - title: Managing Bitmap Memory
    346       path: /training/displaying-bitmaps/manage-memory.html
    347     - title: Displaying Bitmaps in Your UI
    348       path: /training/displaying-bitmaps/display-bitmap.html
    349   - title: Displaying Graphics with OpenGL ES
    350     path: /training/graphics/opengl/index.html
    351     path_attributes:
    352     - name: description
    353       value: How to create OpenGL graphics within the Android app framework and respond to touch input.
    354     section:
    355     - title: Building an OpenGL ES Environment
    356       path: /training/graphics/opengl/environment.html
    357     - title: Defining Shapes
    358       path: /training/graphics/opengl/shapes.html
    359     - title: Drawing Shapes
    360       path: /training/graphics/opengl/draw.html
    361     - title: Applying Projection and Camera Views
    362       path: /training/graphics/opengl/projection.html
    363     - title: Adding Motion
    364       path: /training/graphics/opengl/motion.html
    365     - title: Responding to Touch Events
    366       path: /training/graphics/opengl/touch.html
    367   - title: Animating Views Using Scenes and Transitions
    368     path: /training/transitions/index.html
    369     path_attributes:
    370     - name: description
    371       value: How to animate state changes in a view hierarchy using transitions.
    372     section:
    373     - title: The Transitions Framework
    374       path: /training/transitions/overview.html
    375     - title: Creating a Scene
    376       path: /training/transitions/scenes.html
    377     - title: Applying a Transition
    378       path: /training/transitions/transitions.html
    379     - title: Creating Custom Transitions
    380       path: /training/transitions/custom-transitions.html
    381   - title: Adding Animations
    382     path: /training/animation/index.html
    383     path_attributes:
    384     - name: description
    385       value: How to add transitional animations to your user interface.
    386     section:
    387     - title: Crossfading Two Views
    388       path: /training/animation/crossfade.html
    389     - title: Using ViewPager for Screen Slide
    390       path: /training/animation/screen-slide.html
    391     - title: Displaying Card Flip Animations
    392       path: /training/animation/cardflip.html
    393     - title: Zooming a View
    394       path: /training/animation/zoom.html
    395     - title: Animating Layout Changes
    396       path: /training/animation/layout.html
    397 
    398 - title: Building Apps with Connectivity & the Cloud
    399   path: /training/building-connectivity.html
    400   section:
    401   - title: Connecting Devices Wirelessly
    402     path: /training/connect-devices-wirelessly/index.html
    403     path_attributes:
    404     - name: description
    405       value: How to find and connect to local devices using Network Service Discovery and how to create peer-to-peer connections with Wi-Fi.
    406     section:
    407     - title: Using Network Service Discovery
    408       path: /training/connect-devices-wirelessly/nsd.html
    409     - title: Creating P2P Connections with Wi-Fi
    410       path: /training/connect-devices-wirelessly/wifi-direct.html
    411     - title: Using Wi-Fi P2P for Service Discovery
    412       path: /training/connect-devices-wirelessly/nsd-wifi-direct.html
    413   - title: Performing Network Operations
    414     path: /training/basics/network-ops/index.html
    415     path_attributes:
    416     - name: description
    417       value: How to create a network connection, monitor the connection for changes in connectivity, and perform transactions with XML data.
    418     section:
    419     - title: Connecting to the Network
    420       path: /training/basics/network-ops/connecting.html
    421     - title: Managing Network Usage
    422       path: /training/basics/network-ops/managing.html
    423     - title: Optimizing Network Data Usage
    424       path: /training/basics/network-ops/data-saver.html
    425     - title: Parsing XML Data
    426       path: /training/basics/network-ops/xml.html
    427   - title: Transferring Data Without Draining the Battery
    428     path: /training/efficient-downloads/index.html
    429     path_attributes:
    430     - name: description
    431       value: How to minimize your app's impact on the battery when performing downloads and other network transactions.
    432     section:
    433     - title: Optimizing Downloads for Efficient Network Access
    434       path: /training/efficient-downloads/efficient-network-access.html
    435     - title: Minimizing the Effect of Regular Updates
    436       path: /training/efficient-downloads/regular_updates.html
    437     - title: Redundant Downloads are Redundant
    438       path: /training/efficient-downloads/redundant_redundant.html
    439     - title: Modifying Patterns Based on the Connectivity Type
    440       path: /training/efficient-downloads/connectivity_patterns.html
    441   - title: Backing up App Data to the Cloud
    442     path: /training/backup/index.html
    443     path_attributes:
    444     - name: description
    445       value: How to sync and back up app and user data to remote web services in the cloud and how to restore the data back to multiple devices.
    446     section:
    447     - title: Configuring Auto Backup
    448       path: /training/backup/autosyncapi.html
    449     - title: Using the Backup API
    450       path: /training/backup/backupapi.html
    451   - title: Resolving Cloud Save Conflicts
    452     path: /training/cloudsave/conflict-res.html
    453     path_attributes:
    454     - name: description
    455       value: How to design a robust conflict resolution strategy for apps that save data to the cloud.
    456   - title: Transferring Data Using Sync Adapters
    457     path: /training/sync-adapters/index.html
    458     path_attributes:
    459     - name: description
    460       value: How to transfer data between the cloud and the device using the Android sync adapter framework
    461     section:
    462     - title: Creating a Stub Authenticator
    463       path: /training/sync-adapters/creating-authenticator.html
    464     - title: Creating a Stub Content Provider
    465       path: /training/sync-adapters/creating-stub-provider.html
    466     - title: Creating a Sync Adapter
    467       path: /training/sync-adapters/creating-sync-adapter.html
    468     - title: Running a Sync Adapter
    469       path: /training/sync-adapters/running-sync-adapter.html
    470   - title: Transmitting Network Data Using Volley
    471     path: /training/volley/index.html
    472     path_attributes:
    473     - name: description
    474       value: How to perform fast, scalable UI operations over the network using Volley
    475     section:
    476     - title: Sending a Simple Request
    477       path: /training/volley/simple.html
    478     - title: Setting Up a RequestQueue
    479       path: /training/volley/requestqueue.html
    480     - title: Making a Standard Request
    481       path: /training/volley/request.html
    482     - title: Implementing a Custom Request
    483       path: /training/volley/request-custom.html
    484 
    485 - title: Building Apps with Location & Maps
    486   path: /training/building-location.html
    487   section:
    488   - title: Making Your App Location-Aware
    489     path: /training/location/index.html
    490     path_attributes:
    491     - name: description
    492       value: How to add location-aware features to your app by getting the user's current location.
    493     section:
    494     - title: Getting the Last Known Location
    495       path: /training/location/retrieve-current.html
    496     - title: Changing Location Settings
    497       path: /training/location/change-location-settings.html
    498     - title: Receiving Location Updates
    499       path: /training/location/receive-location-updates.html
    500     - title: Displaying a Location Address
    501       path: /training/location/display-address.html
    502     - title: Creating and Monitoring Geofences
    503       path: /training/location/geofencing.html
    504   - title: Adding Maps
    505     path: /training/maps/index.html
    506     path_attributes:
    507     - name: description
    508       value: How to add maps and mapping information to your app.
    509 
    510 - title: Building Apps with User Info & Sign-In
    511   path: /training/building-userinfo.html
    512   section:
    513   - title: Accessing Contacts Data
    514     path: /training/contacts-provider/index.html
    515     path_attributes:
    516     - name: description
    517       value: How to use Android's central address book, the Contacts Provider, to display contacts and their details and modify contact information.
    518     section:
    519     - title: Retrieving a List of Contacts
    520       path: /training/contacts-provider/retrieve-names.html
    521     - title: Retrieving Details for a Contact
    522       path: /training/contacts-provider/retrieve-details.html
    523     - title: Modifying Contacts Using Intents
    524       path: /training/contacts-provider/modify-data.html
    525     - title: Displaying the Quick Contact Badge
    526       path: /training/contacts-provider/display-contact-badge.html
    527   - title: Adding Sign-In
    528     path: /training/sign-in/index.html
    529     path_attributes:
    530     - name: description
    531       value: How to add user sign-in functionality to your app.
    532 
    533 - title: Building Apps for Wearables
    534   path: /training/building-wearables.html
    535   section:
    536   - title: Adding Wearable Features to Notifications
    537     path: /training/wearables/notifications/index.html
    538     path_attributes:
    539     - name: description
    540       value: How to build handheld notifications that are synced to and look great on wearables.
    541     section:
    542     - title: Creating a Notification
    543       path: /training/wearables/notifications/creating.html
    544     - title: Receiving Voice Input in a Notification
    545       path: /training/wearables/notifications/voice-input.html
    546     - title: Adding Pages to a Notification
    547       path: /training/wearables/notifications/pages.html
    548     - title: Stacking Notifications
    549       path: /training/wearables/notifications/stacks.html
    550   - title: Creating Wearable Apps
    551     path: /training/wearables/apps/index.html
    552     path_attributes:
    553     - name: description
    554       value: How to build apps that run directly on wearables.
    555     section:
    556     - title: Creating and Running a Wearable App
    557       path: /training/wearables/apps/creating.html
    558     - title: Creating Custom Layouts
    559       path: /training/wearables/apps/layouts.html
    560     - title: Keeping Your App Visible
    561       path: /training/wearables/apps/always-on.html
    562     - title: Adding Voice Capabilities
    563       path: /training/wearables/apps/voice.html
    564     - title: Packaging Wearable Apps
    565       path: /training/wearables/apps/packaging.html
    566     - title: Debugging over Bluetooth
    567       path: /training/wearables/apps/bt-debugging.html
    568   - title: Creating Custom UIs
    569     path: /training/wearables/ui/index.html
    570     path_attributes:
    571     - name: description
    572       value: How to create custom user interfaces for wearable apps.
    573     section:
    574     - title: Defining Layouts
    575       path: /training/wearables/ui/layouts.html
    576     - title: Creating Cards
    577       path: /training/wearables/ui/cards.html
    578     - title: Creating Lists
    579       path: /training/wearables/ui/lists.html
    580     - title: Creating a 2D Picker
    581       path: /training/wearables/ui/2d-picker.html
    582     - title: Showing Confirmations
    583       path: /training/wearables/ui/confirm.html
    584     - title: Exiting Full-Screen Activities
    585       path: /training/wearables/ui/exit.html
    586   - title: Sending and Syncing Data
    587     path: /training/wearables/data-layer/index.html
    588     path_attributes:
    589     - name: description
    590       value: How to sync data between handhelds and wearables.
    591     section:
    592     - title: Accessing the Wearable Data Layer
    593       path: /training/wearables/data-layer/accessing.html
    594     - title: Syncing Data Items
    595       path: /training/wearables/data-layer/data-items.html
    596     - title: Transferring Assets
    597       path: /training/wearables/data-layer/assets.html
    598     - title: Sending and Receiving Messages
    599       path: /training/wearables/data-layer/messages.html
    600     - title: Handling Data Layer Events
    601       path: /training/wearables/data-layer/events.html
    602   - title: Creating Watch Faces
    603     path: /training/wearables/watch-faces/index.html
    604     path_attributes:
    605     - name: description
    606       value: How to create watch faces for wearables.
    607     section:
    608     - title: Designing Watch Faces
    609       path: /training/wearables/watch-faces/designing.html
    610     - title: Building a Watch Face Service
    611       path: /training/wearables/watch-faces/service.html
    612     - title: Drawing Watch Faces
    613       path: /training/wearables/watch-faces/drawing.html
    614     - title: Showing Information in Watch Faces
    615       path: /training/wearables/watch-faces/information.html
    616     - title: Creating Interactive Watch Faces
    617       path: /training/wearables/watch-faces/interacting.html
    618     - title: Providing Configuration Activities
    619       path: /training/wearables/watch-faces/configuration.html
    620     - title: Addressing Common Issues
    621       path: /training/wearables/watch-faces/issues.html
    622     - title: Optimizing Performance and Battery Life
    623       path: /training/wearables/watch-faces/performance.html
    624   - title: Detecting Location
    625     path: /training/articles/wear-location-detection.html
    626     path_attributes:
    627     - name: description
    628       value: How to detect location data on Android Wear devices.
    629   - title: Requesting Permissions
    630     path: /training/articles/wear-permissions.html
    631     path_attributes:
    632     - name: description
    633       value: How to request permissions on Android Wear devices.
    634   - title: Using the Speaker
    635     path: /training/wearables/wearable-sounds.html
    636     path_attributes:
    637     - name: description
    638       value: How to use the speaker on Android Wear devices.
    639 
    640 - title: Building Apps for TV
    641   path: /training/tv/index.html
    642   section:
    643   - title: Building TV Apps
    644     path: /training/tv/start/index.html
    645     path_attributes:
    646     - name: ja-lang
    647       value: TV 
    648     - name: description
    649       value: How to start building TV apps or extend your existing app to run on TV devices.
    650     section:
    651     - title: Getting Started with TV Apps
    652       path: /training/tv/start/start.html
    653       path_attributes:
    654       - name: ja-lang
    655         value: TV 
    656     - title: Handling TV Hardware
    657       path: /training/tv/start/hardware.html
    658       path_attributes:
    659       - name: ja-lang
    660         value: TV 
    661     - title: Building TV Layouts
    662       path: /training/tv/start/layouts.html
    663       path_attributes:
    664       - name: ja-lang
    665         value: TV 
    666     - title: Creating TV Navigation
    667       path: /training/tv/start/navigation.html
    668       path_attributes:
    669       - name: ja-lang
    670         value: TV 
    671   - title: Building TV Playback Apps
    672     path: /training/tv/playback/index.html
    673     path_attributes:
    674     - name: ja-lang
    675       value: TV 
    676     - name: description
    677       value: How to build apps that provide media catalogs and play content.
    678     section:
    679     - title: Creating a Catalog Browser
    680       path: /training/tv/playback/browse.html
    681       path_attributes:
    682       - name: ja-lang
    683         value:  
    684     - title: Providing a Card View
    685       path: /training/tv/playback/card.html
    686     - title: Building a Details View
    687       path: /training/tv/playback/details.html
    688       path_attributes:
    689       - name: ja-lang
    690         value: 
    691     - title: Displaying a Now Playing Card
    692       path: /training/tv/playback/now-playing.html
    693       path_attributes:
    694       - name: ja-lang
    695         value: 
    696     - title: Adding a Guided Step
    697       path: /training/tv/playback/guided-step.html
    698     - title: Enabling Background Playback
    699       path: /training/tv/playback/options.html
    700     - title: Adding Picture-in-picture
    701       path: /training/tv/playback/picture-in-picture.html
    702   - title: Helping Users Find Content on TV
    703     path: /training/tv/discovery/index.html
    704     path_attributes:
    705     - name: description
    706       value: How to help users discover content from your app.
    707     section:
    708     - title: Recommending TV Content
    709       path: /training/tv/discovery/recommendations.html
    710     - title: Making TV Apps Searchable
    711       path: /training/tv/discovery/searchable.html
    712     - title: Searching within TV Apps
    713       path: /training/tv/discovery/in-app-search.html
    714   - title: Building TV Games
    715     path: /training/tv/games/index.html
    716     path_attributes:
    717     - name: description
    718       value: How to build games for TV.
    719   - title: Building TV Channels
    720     path: /training/tv/tif/index.html
    721     path_attributes:
    722     - name: description
    723       value: How to build channels for TV.
    724     section:
    725     - title: Developing a TV Input Service
    726       path: /training/tv/tif/tvinput.html
    727     - title: Working with Channel Data
    728       path: /training/tv/tif/channel.html
    729     - title: Managing User Interaction
    730       path: /training/tv/tif/ui.html
    731     - title: Supporting Content Recording
    732       path: /training/tv/tif/content-recording.html
    733   - title: TV Apps Checklist
    734     path: /training/tv/publishing/checklist.html
    735     path_attributes:
    736     - name: description
    737       value: An itemized list of requirements for TV apps.
    738 
    739 - title: Building Apps for Auto
    740   path: /training/auto/index.html
    741   section:
    742   - title: Getting Started with Auto
    743     path: /training/auto/start/index.html
    744     path_attributes:
    745     - name: description
    746       value: How to start building or extending apps that work with Auto devices.
    747   - title: Playing Audio for Auto
    748     path: /training/auto/audio/index.html
    749     path_attributes:
    750     - name: description
    751       value: How to extend audio apps to play content on Auto devices.
    752   - title: Messaging for Auto
    753     path: /training/auto/messaging/index.html
    754     path_attributes:
    755     - name: description
    756       value: How to extend text messaging apps to work with Auto devices.
    757   - title: Testing for Auto
    758     path: /training/auto/testing/index.html
    759     path_attributes:
    760     - name: description
    761       value: How to use DHU to test Auto apps.
    762 
    763 - title: Best Practices for Interaction & Engagement
    764   path: /training/best-ux.html
    765   section:
    766   - title: Designing Effective Navigation
    767     path: /training/design-navigation/index.html
    768     path_attributes:
    769     - name: description
    770       value: How to plan your app's screen hierarchy and forms of navigation so users can effectively and intuitively traverse your app content using various navigation patterns.
    771     section:
    772     - title: Planning Screens and Their Relationships
    773       path: /training/design-navigation/screen-planning.html
    774     - title: Planning for Multiple Touchscreen Sizes
    775       path: /training/design-navigation/multiple-sizes.html
    776     - title: Providing Descendant and Lateral Navigation
    777       path: /training/design-navigation/descendant-lateral.html
    778     - title: Providing Ancestral and Temporal Navigation
    779       path: /training/design-navigation/ancestral-temporal.html
    780     - title: "Putting it All Together: Wireframing the Example App"
    781       path: /training/design-navigation/wireframing.html
    782   - title: Implementing Effective Navigation
    783     path: /training/implementing-navigation/index.html
    784     path_attributes:
    785     - name: description
    786       value: How to implement various navigation patterns such as swipe views, a navigation drawer, and up navigation.
    787     section:
    788     - title: Creating Swipe Views with Tabs
    789       path: /training/implementing-navigation/lateral.html
    790     - title: Creating a Navigation Drawer
    791       path: /training/implementing-navigation/nav-drawer.html
    792     - title: Providing Up Navigation
    793       path: /training/implementing-navigation/ancestral.html
    794     - title: Providing Proper Back Navigation
    795       path: /training/implementing-navigation/temporal.html
    796     - title: Implementing Descendant Navigation
    797       path: /training/implementing-navigation/descendant.html
    798   - title: Notifying the User
    799     path: /training/notify-user/index.html
    800     path_attributes:
    801     - name: description
    802       value: How to display messages called notifications outside of your application's UI.
    803     section:
    804     - title: Building a Notification
    805       path: /training/notify-user/build-notification.html
    806     - title: Preserving Navigation when Starting an Activity
    807       path: /training/notify-user/navigation.html
    808     - title: Updating Notifications
    809       path: /training/notify-user/managing.html
    810     - title: Using Big View Styles
    811       path: /training/notify-user/expanded.html
    812     - title: Displaying Progress in a Notification
    813       path: /training/notify-user/display-progress.html
    814   - title: Supporting Swipe-to-Refresh
    815     path: /training/swipe/index.html
    816     path_attributes:
    817     - name: description
    818       value: How to modify your app's layout to support manual content updates triggered by the swipe-to-refresh gesture.
    819     section:
    820     - title: Adding Swipe-to-Refresh To Your App
    821       path: /training/swipe/add-swipe-interface.html
    822     - title: Responding to a Refresh Gesture
    823       path: /training/swipe/respond-refresh-request.html
    824   - title: Adding Search Functionality
    825     path: /training/search/index.html
    826     path_attributes:
    827     - name: description
    828       value: How to properly add a search interface to your app and create a searchable database.
    829     section:
    830     - title: Setting up the Search Interface
    831       path: /training/search/setup.html
    832     - title: Storing and Searching for Data
    833       path: /training/search/search.html
    834     - title: Remaining Backward Compatible
    835       path: /training/search/backward-compat.html
    836   - title: Making Your App Content Searchable by Google
    837     path: /training/app-indexing/index.html
    838     path_attributes:
    839     - name: description
    840       value: How to enable deep linking and indexing of your application content so that users can open this content directly from their mobile search results.
    841     section:
    842     - title: Enabling Deep Links for App Content
    843       path: /training/app-indexing/deep-linking.html
    844     - title: Specifying App Content for Indexing
    845       path: /training/app-indexing/enabling-app-indexing.html
    846   - title: Optimizing Content for the Assistant
    847     path: /training/articles/assistant.html
    848     path_attributes:
    849     - name: description
    850       value: Support contextually relevant actions through the Assist API.
    851   - title: Handling App Links
    852     path: /training/app-links/index.html
    853     path_attributes:
    854     - name: description
    855       value: How to enable the system to handle web requests by taking the user directly to your app instead of your website.
    856 
    857 - title: Best Practices for User Interface
    858   path: /training/best-ui.html
    859   section:
    860   - title: Designing for Multiple Screens
    861     path: /training/multiscreen/index.html
    862     path_attributes:
    863     - name: es-lang
    864       value: Cmo disear aplicaciones para varias pantallas
    865     - name: ja-lang
    866       value: 
    867     - name: zh-cn-lang
    868       value: 
    869     - name: description
    870       value: How to build a user interface that's flexible enough to fit perfectly on any screen and how to create different interaction patterns that are optimized for different screen sizes.
    871     section:
    872     - title: Supporting Different Screen Sizes
    873       path: /training/multiscreen/screensizes.html
    874       path_attributes:
    875       - name: es-lang
    876         value: Cmo admitir varios tamaos de pantalla
    877       - name: ja-lang
    878         value: 
    879       - name: ko-lang
    880         value:    
    881       - name: zh-cn-lang
    882         value: 
    883     - title: Supporting Different Screen Densities
    884       path: /training/multiscreen/screendensities.html
    885       path_attributes:
    886       - name: es-lang
    887         value: Cmo admitir varias densidades de pantalla
    888       - name: ja-lang
    889         value: 
    890       - name: zh-cn-lang
    891         value: 
    892     - title: Implementing Adaptive UI Flows
    893       path: /training/multiscreen/adaptui.html
    894       path_attributes:
    895       - name: es-lang
    896         value: Cmo implementar interfaces de usuario adaptables
    897       - name: ja-lang
    898         value:  UI 
    899       - name: zh-cn-lang
    900         value: 
    901   - title: Adding the App Bar
    902     path: /training/appbar/index.html
    903     path_attributes:
    904     - name: description
    905       value: How to use the support library's toolbar widget to implement an app bar that displays properly on a wide range of devices.
    906     section:
    907     - title: Setting Up the App Bar
    908       path: /training/appbar/setting-up.html
    909     - title: Adding and Handling Actions
    910       path: /training/appbar/actions.html
    911     - title: Adding an Up Action
    912       path: /training/appbar/up-action.html
    913     - title: Action Views and Action Providers
    914       path: /training/appbar/action-views.html
    915   - title: Showing Pop-Up Messages
    916     path: /training/snackbar/index.html
    917     path_attributes:
    918     - name: description
    919       value: How to use the support library's Snackbar widget to display a brief pop-up message.
    920     section:
    921     - title: Building and Displaying a Pop-Up Message
    922       path: /training/snackbar/showing.html
    923     - title: Adding an Action to a Message
    924       path: /training/snackbar/action.html
    925   - title: Creating Custom Views
    926     path: /training/custom-views/index.html
    927     path_attributes:
    928     - name: description
    929       value: How to build custom UI widgets that are interactive and smooth.
    930     section:
    931     - title: Creating a Custom View Class
    932       path: /training/custom-views/create-view.html
    933     - title: Implementing Custom Drawing
    934       path: /training/custom-views/custom-drawing.html
    935     - title: Making the View Interactive
    936       path: /training/custom-views/making-interactive.html
    937     - title: Optimizing the View
    938       path: /training/custom-views/optimizing-view.html
    939   - title: Creating Backward-Compatible UIs
    940     path: /training/backward-compatible-ui/index.html
    941     path_attributes:
    942     - name: description
    943       value: How to use UI components and other APIs from the more recent versions of Android while remaining compatible with older versions of the platform.
    944     section:
    945     - title: Abstracting the New APIs
    946       path: /training/backward-compatible-ui/abstracting.html
    947     - title: Proxying to the New APIs
    948       path: /training/backward-compatible-ui/new-implementation.html
    949     - title: Creating an Implementation with Older APIs
    950       path: /training/backward-compatible-ui/older-implementation.html
    951     - title: Using the Version-Aware Component
    952       path: /training/backward-compatible-ui/using-component.html
    953   - title: Implementing Accessibility
    954     path: /training/accessibility/index.html
    955     path_attributes:
    956     - name: description
    957       value: How to make your app accessible to users with vision impairment or other physical disabilities.
    958     section:
    959     - title: Developing Accessible Applications
    960       path: /training/accessibility/accessible-app.html
    961     - title: Developing Accessibility Services
    962       path: /training/accessibility/service.html
    963     - title: Accessibility Testing Checklist
    964       path: /training/accessibility/testing.html
    965   - title: Managing the System UI
    966     path: /training/system-ui/index.html
    967     path_attributes:
    968     - name: description
    969       value: How to hide and show status and navigation bars across different versions of Android, while managing the display of other screen components.
    970     section:
    971     - title: Dimming the System Bars
    972       path: /training/system-ui/dim.html
    973     - title: Hiding the Status Bar
    974       path: /training/system-ui/status.html
    975     - title: Hiding the Navigation Bar
    976       path: /training/system-ui/navigation.html
    977     - title: Using Immersive Full-Screen Mode
    978       path: /training/system-ui/immersive.html
    979     - title: Responding to UI Visibility Changes
    980       path: /training/system-ui/visibility.html
    981   - title: Creating Apps with Material Design
    982     path: /training/material/index.html
    983     path_attributes:
    984     - name: es-lang
    985       value: Crear aplicaciones con Material Design
    986     - name: in-lang
    987       value: Desain Bahan untuk Pengembang
    988     - name: ja-lang
    989       value:  
    990     - name: ko-lang
    991       value:    
    992     - name: pt-br-lang
    993       value: Material Design para desenvolvedores
    994     - name: ru-lang
    995       value:     Material Design
    996     - name: vi-lang
    997       value: Material Design cho Nh pht trin
    998     - name: zh-cn-lang
    999       value: 
   1000     - name: zh-tw-lang
   1001       value: 
   1002     - name: description
   1003       value: How to implement material design on Android.
   1004     section:
   1005     - title: Getting Started
   1006       path: /training/material/get-started.html
   1007       path_attributes:
   1008       - name: es-lang
   1009         value: Comencemos
   1010       - name: in-lang
   1011         value: Memulai
   1012       - name: ja-lang
   1013         value:  
   1014       - name: ko-lang
   1015         value: 
   1016       - name: pt-br-lang
   1017         value: Como iniciar
   1018       - name: ru-lang
   1019         value:  
   1020       - name: vi-lang
   1021         value: Bt u
   1022       - name: zh-cn-lang
   1023         value: 
   1024       - name: zh-tw-lang
   1025         value: 
   1026     - title: Using the Material Theme
   1027       path: /training/material/theme.html
   1028       path_attributes:
   1029       - name: es-lang
   1030         value: Usar el tema Material
   1031       - name: in-lang
   1032         value: Menggunakan Tema Bahan
   1033       - name: ja-lang
   1034         value:  
   1035       - name: ko-lang
   1036         value:   
   1037       - name: pt-br-lang
   1038         value: Como usar o tema do Material
   1039       - name: ru-lang
   1040         value:   Material Design
   1041       - name: vi-lang
   1042         value: S dng Ch  Material
   1043       - name: zh-cn-lang
   1044         value: 
   1045       - name: zh-tw-lang
   1046         value: 
   1047     - title: Creating Lists and Cards
   1048       path: /training/material/lists-cards.html
   1049       path_attributes:
   1050       - name: es-lang
   1051         value: Crear listas y tarjetas
   1052       - name: in-lang
   1053         value: Membuat Daftar dan Kartu
   1054       - name: ja-lang
   1055         value: 
   1056       - name: ko-lang
   1057         value:    
   1058       - name: pt-br-lang
   1059         value: Como criar listas e cartes
   1060       - name: ru-lang
   1061         value:    
   1062       - name: vi-lang
   1063         value: To Danh sch v Th
   1064       - name: zh-cn-lang
   1065         value: 
   1066       - name: zh-tw-lang
   1067         value: 
   1068     - title: Defining Shadows and Clipping Views
   1069       path: /training/material/shadows-clipping.html
   1070       path_attributes:
   1071       - name: es-lang
   1072         value: Definir vistas de recorte y sombras
   1073       - name: in-lang
   1074         value: Mendefinisikan Bayangan dan Memangkas Tampilan
   1075       - name: ja-lang
   1076         value:  
   1077       - name: ko-lang
   1078         value:     
   1079       - name: pt-br-lang
   1080         value: Como definir sombras e recortar visualizaes
   1081       - name: ru-lang
   1082         value:     
   1083       - name: vi-lang
   1084         value: nh ngha  bng v Dng xem Ct hnh
   1085       - name: zh-cn-lang
   1086         value: 
   1087       - name: zh-tw-lang
   1088         value: 
   1089     - title: Working with Drawables
   1090       path: /training/material/drawables.html
   1091       path_attributes:
   1092       - name: es-lang
   1093         value: Trabajar con interfaces dibujables
   1094       - name: in-lang
   1095         value: Bekerja dengan Drawable
   1096       - name: ja-lang
   1097         value: 
   1098       - name: ko-lang
   1099         value: Drawable 
   1100       - name: pt-br-lang
   1101         value: Como trabalhar com desenhveis
   1102       - name: ru-lang
   1103         value:    
   1104       - name: vi-lang
   1105         value: Lm vic vi Ni dung v c
   1106       - name: zh-cn-lang
   1107         value:  Drawables
   1108       - name: zh-tw-lang
   1109         value: 
   1110     - title: Defining Custom Animations
   1111       path: /training/material/animations.html
   1112       path_attributes:
   1113       - name: es-lang
   1114         value: Definir animaciones personalizadas
   1115       - name: in-lang
   1116         value: Mendefinisikan Animasi Custom
   1117       - name: ja-lang
   1118         value:  
   1119       - name: ko-lang
   1120         value:   
   1121       - name: pt-br-lang
   1122         value: Como definir animaes personalizadas
   1123       - name: ru-lang
   1124         value:   
   1125       - name: vi-lang
   1126         value: nh ngha Hot hnh Ty chnh
   1127       - name: zh-cn-lang
   1128         value: 
   1129       - name: zh-tw-lang
   1130         value: 
   1131     - title: Maintaining Compatibility
   1132       path: /training/material/compatibility.html
   1133       path_attributes:
   1134       - name: es-lang
   1135         value: Mantener la compatibilidad
   1136       - name: in-lang
   1137         value: Mempertahankan Kompatibilitas
   1138       - name: ja-lang
   1139         value: 
   1140       - name: ko-lang
   1141         value:  
   1142       - name: pt-br-lang
   1143         value: Como manter a compatibilidade
   1144       - name: ru-lang
   1145         value:  
   1146       - name: vi-lang
   1147         value: Duy tr Tnh tng thch
   1148       - name: zh-cn-lang
   1149         value: 
   1150       - name: zh-tw-lang
   1151         value: 
   1152 
   1153 - title: Best Practices for User Input
   1154   path: /training/best-user-input.html
   1155   section:
   1156   - title: Using Touch Gestures
   1157     path: /training/gestures/index.html
   1158     path_attributes:
   1159     - name: description
   1160       value: How to write apps that allow users to interact with the touch screen via touch gestures.
   1161     section:
   1162     - title: Detecting Common Gestures
   1163       path: /training/gestures/detector.html
   1164     - title: Tracking Movement
   1165       path: /training/gestures/movement.html
   1166     - title: Animating a Scroll Gesture
   1167       path: /training/gestures/scroll.html
   1168     - title: Handling Multi-Touch Gestures
   1169       path: /training/gestures/multi.html
   1170     - title: Dragging and Scaling
   1171       path: /training/gestures/scale.html
   1172     - title: Managing Touch Events in a ViewGroup
   1173       path: /training/gestures/viewgroup.html
   1174   - title: Handling Keyboard Input
   1175     path: /training/keyboard-input/index.html
   1176     path_attributes:
   1177     - name: description
   1178       value: How to specify the appearance and behaviors of soft input methods (such as on-screen keyboards) and how to optimize the experience with hardware keyboards.
   1179     section:
   1180     - title: Specifying the Input Method Type
   1181       path: /training/keyboard-input/style.html
   1182     - title: Handling Input Method Visibility
   1183       path: /training/keyboard-input/visibility.html
   1184     - title: Supporting Keyboard Navigation
   1185       path: /training/keyboard-input/navigation.html
   1186     - title: Handling Keyboard Actions
   1187       path: /training/keyboard-input/commands.html
   1188   - title: Supporting Game Controllers
   1189     path: /training/game-controllers/index.html
   1190     path_attributes:
   1191     - name: description
   1192       value: How to write apps that support game controllers.
   1193     section:
   1194     - title: Handling Controller Actions
   1195       path: /training/game-controllers/controller-input.html
   1196     - title: Supporting Controllers Across Android Versions
   1197       path: /training/game-controllers/compatibility.html
   1198     - title: Supporting Multiple Game Controllers
   1199       path: /training/game-controllers/multiple-controllers.html
   1200 
   1201 - title: Best Practices for Background Jobs
   1202   path: /training/best-background.html
   1203   section:
   1204   - title: Running in a Background Service
   1205     path: /training/run-background-service/index.html
   1206     path_attributes:
   1207     - name: description
   1208       value: How to improve UI performance and responsiveness by sending work to a Service running in the background
   1209     section:
   1210     - title: Creating a Background Service
   1211       path: /training/run-background-service/create-service.html
   1212     - title: Sending Work Requests to the Background Service
   1213       path: /training/run-background-service/send-request.html
   1214     - title: Reporting Work Status
   1215       path: /training/run-background-service/report-status.html
   1216   - title: Loading Data in the Background
   1217     path: /training/load-data-background/index.html
   1218     path_attributes:
   1219     - name: description
   1220       value: How to use CursorLoader to query data without affecting UI responsiveness.
   1221     section:
   1222     - title: Running a Query with a CursorLoader
   1223       path: /training/load-data-background/setup-loader.html
   1224     - title: Handling the Results
   1225       path: /training/load-data-background/handle-results.html
   1226   - title: Managing Device Awake State
   1227     path: /training/scheduling/index.html
   1228     path_attributes:
   1229     - name: description
   1230       value: How to use repeating alarms and wake locks to run background jobs.
   1231     section:
   1232     - title: Keeping the Device Awake
   1233       path: /training/scheduling/wakelock.html
   1234     - title: Scheduling Repeating Alarms
   1235       path: /training/scheduling/alarms.html
   1236 
   1237 - title: Best Practices for Performance
   1238   path: /training/best-performance.html
   1239   section:
   1240   - title: Managing Your App's Memory
   1241     path: /training/articles/memory.html
   1242     path_attributes:
   1243     - name: description
   1244       value: How to keep your app's memory footprint small in order to improve performance on a variety of mobile devices.
   1245   - title: Performance Tips
   1246     path: /training/articles/perf-tips.html
   1247     path_attributes:
   1248     - name: description
   1249       value: How to optimize your app's performance in various ways to improve its responsiveness and battery efficiency.
   1250   - title: Improving Layout Performance
   1251     path: /training/improving-layouts/index.html
   1252     path_attributes:
   1253     - name: description
   1254       value: How to identify problems in your app's layout performance and improve the UI responsiveness.
   1255     section:
   1256     - title: Optimizing Layout Hierarchies
   1257       path: /training/improving-layouts/optimizing-layout.html
   1258     - title: Re-using Layouts with <include/>
   1259       path: /training/improving-layouts/reusing-layouts.html
   1260     - title: Loading Views On Demand
   1261       path: /training/improving-layouts/loading-ondemand.html
   1262     - title: Making ListView Scrolling Smooth
   1263       path: /training/improving-layouts/smooth-scrolling.html
   1264   - title: Optimizing Battery Life
   1265     path: /training/monitoring-device-state/index.html
   1266     path_attributes:
   1267     - name: es-lang
   1268       value: Cmo optimizar la duracin de la batera
   1269     - name: ja-lang
   1270       value: 
   1271     - name: zh-cn-lang
   1272       value: 
   1273     - name: description
   1274       value: How to minimize the amount of power your app requires by adapting to current power conditions and performing power-hungry tasks at proper intervals.
   1275     section:
   1276     - title: Reducing Network Battery Drain
   1277       path: /training/performance/battery/network/index.html
   1278       section:
   1279       - title: Collecting Network Traffic Data
   1280         path: /training/performance/battery/network/gather-data.html
   1281       - title: Analyzing Network Traffic Data
   1282         path: /training/performance/battery/network/analyze-data.html
   1283       - title: Optimizing User-Initiated Network Use
   1284         path: /training/performance/battery/network/action-user-traffic.html
   1285       - title: Optimizing App-Initiated Network Use
   1286         path: /training/performance/battery/network/action-app-traffic.html
   1287       - title: Optimizing Server-Initiated Network Use
   1288         path: /training/performance/battery/network/action-server-traffic.html
   1289       - title: Optimizing General Network Use
   1290         path: /training/performance/battery/network/action-any-traffic.html
   1291     - title: Optimizing for Doze and App Standby
   1292       path: /training/monitoring-device-state/doze-standby.html
   1293     - title: Monitoring the Battery Level and Charging State
   1294       path: /training/monitoring-device-state/battery-monitoring.html
   1295       path_attributes:
   1296       - name: es-lang
   1297         value: Cmo controlar el nivel de batera y el estado de carga
   1298       - name: ja-lang
   1299         value: 
   1300       - name: zh-cn-lang
   1301         value: 
   1302     - title: Determining and Monitoring the Docking State and Type
   1303       path: /training/monitoring-device-state/docking-monitoring.html
   1304       path_attributes:
   1305       - name: es-lang
   1306         value: Cmo determinar y controlar el tipo de conector y el estado de la conexin
   1307       - name: ja-lang
   1308         value: 
   1309       - name: zh-cn-lang
   1310         value: 
   1311     - title: Determining and Monitoring the Connectivity Status
   1312       path: /training/monitoring-device-state/connectivity-monitoring.html
   1313       path_attributes:
   1314       - name: es-lang
   1315         value: Cmo determinar y controlar el estado de la conectividad
   1316       - name: ja-lang
   1317         value: 
   1318       - name: zh-cn-lang
   1319         value: 
   1320     - title: Manipulating Broadcast Receivers On Demand
   1321       path: /training/monitoring-device-state/manifest-receivers.html
   1322       path_attributes:
   1323       - name: es-lang
   1324         value: Cmo manipular los receptores de emisin bajo demanda
   1325       - name: ja-lang
   1326         value:  
   1327       - name: zh-cn-lang
   1328         value: 
   1329   - title: Sending Operations to Multiple Threads
   1330     path: /training/multiple-threads/index.html
   1331     path_attributes:
   1332     - name: description
   1333       value: How to improve the performance and scalability of long-running operations by dispatching work to multiple threads.
   1334     section:
   1335     - title: Specifying the Code to Run on a Thread
   1336       path: /training/multiple-threads/define-runnable.html
   1337     - title: Creating a Manager for Multiple Threads
   1338       path: /training/multiple-threads/create-threadpool.html
   1339     - title: Running Code on a Thread Pool Thread
   1340       path: /training/multiple-threads/run-code.html
   1341     - title: Communicating with the UI Thread
   1342       path: /training/multiple-threads/communicate-ui.html
   1343   - title: Keeping Your App Responsive
   1344     path: /training/articles/perf-anr.html
   1345     path_attributes:
   1346     - name: description
   1347       value: How to keep your app responsive to user interaction so the UI does not lock-up and display an "Application Not Responding" dialog.
   1348   - title: JNI Tips
   1349     path: /training/articles/perf-jni.html
   1350     path_attributes:
   1351     - name: description
   1352       value: How to efficiently use the Java Native Interface with the Android NDK.
   1353   - title: SMP Primer for Android
   1354     path: /training/articles/smp.html
   1355     path_attributes:
   1356     - name: description
   1357       value: Tips for coding Android apps on symmetric multiprocessor systems.
   1358 
   1359 - title: Best Practices for Security & Privacy
   1360   path: /training/best-security.html
   1361   section:
   1362   - title: Security Tips
   1363     path: /training/articles/security-tips.html
   1364     path_attributes:
   1365     - name: description
   1366       value: How to perform various tasks and keep your app's data and your user's data secure.
   1367   - title: Security with HTTPS and SSL
   1368     path: /training/articles/security-ssl.html
   1369     path_attributes:
   1370     - name: description
   1371       value: How to ensure that your app is secure when performing network transactions.
   1372   - title: Network Security Configuration
   1373     path: /training/articles/security-config.html
   1374     path_attributes:
   1375     - name: description
   1376       value: Customize the behavior of your app's secure network connections safely.
   1377   - title: Updating Your Security Provider to Protect Against SSL Exploits
   1378     path: /training/articles/security-gms-provider.html
   1379     path_attributes:
   1380     - name: description
   1381       value: How to use and update Google Play services security provider, to protect against SSL exploits.
   1382   - title: Checking Device Compatibility with SafetyNet
   1383     path: /training/safetynet/index.html
   1384     path_attributes:
   1385     - name: description
   1386       value: How to use the SafetyNet service to analyze a device where your app is running and get information about its compatibility with your app.
   1387   - title: Checking URLs with the Safe Browsing API
   1388     path: /training/safebrowsing/index.html
   1389     path_attributes:
   1390     - name: description
   1391       value: How to use the SafetyNet service to determine if a URL is designated as a known threat.
   1392   - title: Verifying Hardware-backed Key Pairs with Key Attestation
   1393     path: /training/articles/security-key-attestation.html
   1394     path_attributes:
   1395     - name: description
   1396       value: How to retrieve and verify the properties of a device's hardware-backed key pair.
   1397   - title: Enhancing Security with Device Management Policies
   1398     path: /work/device-management-policy.html
   1399     path_attributes:
   1400     - name: description
   1401       value: How to create an application that enforces security policies on devices.
   1402   - title: Supporting Direct Boot
   1403     path: /training/articles/direct-boot.html
   1404     path_attributes:
   1405     - name: description
   1406       value: How use device encrypted storage during Direct Boot mode.
   1407   - title: Using Scoped Directory Access
   1408     path: /training/articles/scoped-directory-access.html
   1409     path_attributes:
   1410     - name: description
   1411       value: How to use scoped directory access to request access to external storage directories.
   1412 
   1413 - title: Best Practices for Permissions & Identifiers
   1414   path: /training/best-permissions-ids.html
   1415   section:
   1416   - title: Permissions and User Data
   1417     path: /training/articles/user-data-overview.html
   1418     path_attributes:
   1419     - name: description
   1420       value: Overview of app permissions on Android and how they affect your users.
   1421   - title: Best Practices for App Permissions
   1422     path: /training/articles/user-data-permissions.html
   1423     path_attributes:
   1424     - name: description
   1425       value: How to manage permissions the right way for users.
   1426   - title: Best Practices for Unique Identifiers
   1427     path: /training/articles/user-data-ids.html
   1428     path_attributes:
   1429     - name: description
   1430       value: Unique identifiers available and how to choose the right one for your use case.
   1431 
   1432 - title: Best Practices for Testing
   1433   path: /training/testing/index.html
   1434   section:
   1435   - title: Getting Started with Testing
   1436     path: /training/testing/start/index.html
   1437     path_attributes:
   1438     - name: description
   1439       value: How to get started with testing your Android applications.
   1440   - title: Building Effective Unit Tests
   1441     path: /training/testing/unit-testing/index.html
   1442     path_attributes:
   1443     - name: description
   1444       value: How to build effective unit tests for Android apps.
   1445     section:
   1446     - title: Building Local Unit Tests
   1447       path: /training/testing/unit-testing/local-unit-tests.html
   1448     - title: Building Instrumented Unit Tests
   1449       path: /training/testing/unit-testing/instrumented-unit-tests.html
   1450   - title: Automating UI Tests
   1451     path: /training/testing/ui-testing/index.html
   1452     path_attributes:
   1453     - name: description
   1454       value: How to automate your user interface tests for Android apps.
   1455     section:
   1456     - title: Testing UI for a Single App
   1457       path: /training/testing/ui-testing/espresso-testing.html
   1458     - title: Testing UI for Multiple Apps
   1459       path: /training/testing/ui-testing/uiautomator-testing.html
   1460   - title: Testing App Component Integrations
   1461     path: /training/testing/integration-testing/index.html
   1462     path_attributes:
   1463     - name: description
   1464       value: How to build effective integration tests for Android apps.
   1465     section:
   1466     - title: Testing Your Service
   1467       path: /training/testing/integration-testing/service-testing.html
   1468     - title: Testing Your Content Provider
   1469       path: /training/testing/integration-testing/content-provider-testing.html
   1470   - title: Testing Display Performance
   1471     path: /training/testing/performance.html
   1472     path_attributes:
   1473     - name: description
   1474       value: How to automate UI performance testing.
   1475 
   1476 - title: Using Google Play to Distribute & Monetize
   1477   path: /training/distribute.html
   1478   section:
   1479   - title: Selling In-app Products
   1480     path: /training/in-app-billing/index.html
   1481     path_attributes:
   1482     - name: description
   1483       value: How to sell in-app products from your application using In-app Billing.
   1484     section:
   1485     - title: Preparing Your App
   1486       path: /training/in-app-billing/preparing-iab-app.html
   1487     - title: Establishing Products for Sale
   1488       path: /training/in-app-billing/list-iab-products.html
   1489     - title: Purchasing Products
   1490       path: /training/in-app-billing/purchase-iab-products.html
   1491     - title: Testing Your App
   1492       path: /training/in-app-billing/test-iab-app.html
   1493   - title: Maintaining Multiple APKs
   1494     path: /training/multiple-apks/index.html
   1495     path_attributes:
   1496     - name: description
   1497       value: How to publish your app on Google Play with separate APKs that target different devices, while using a single app listing.
   1498     section:
   1499     - title: Creating Multiple APKs for Different API Levels
   1500       path: /training/multiple-apks/api.html
   1501     - title: Creating Multiple APKs for Different Screen Sizes
   1502       path: /training/multiple-apks/screensize.html
   1503     - title: Creating Multiple APKs for Different GL Textures
   1504       path: /training/multiple-apks/texture.html
   1505     - title: Creating Multiple APKs with 2+ Dimensions
   1506       path: /training/multiple-apks/multiple.html
   1507