---
title: "Hide and Reveal Areas"
canonical_url: "https://www.nutrient.io/guides/android/samples/hide-and-reveal-areas-kotlin/"
md_url: "https://www.nutrient.io/guides/android/samples/hide-and-reveal-areas-kotlin.md"
last_updated: "2026-05-15T19:10:04.916Z"
description: "Select areas on a page to hide or reveal content."
---

# Hide and Reveal Areas

Select areas on a page to hide or reveal content.

[Get Started](https://www.nutrient.io/sdk/android/getting-started.md)

[All Samples](https://www.nutrient.io/guides/android/samples.md)

[Download](https://www.nutrient.io/guides/android/downloads.md)

[Launch Demo](https://www.nutrient.io/demo/)

---

```kotlin

/*
 *   Copyright © 2020-2026 PSPDFKit GmbH. All rights reserved.
 *
 *   The PSPDFKit Sample applications are licensed with a modified BSD license.
 *   Please see License for details. This notice may not be removed from this file.
 */

package com.pspdfkit.catalog.examples.kotlin

import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.ColorFilter
import android.graphics.Matrix
import android.graphics.Paint
import android.graphics.PixelFormat
import android.graphics.RectF
import android.net.Uri
import android.view.Menu
import android.view.MenuItem
import android.view.MotionEvent
import androidx.annotation.IntRange
import androidx.annotation.UiThread
import androidx.lifecycle.lifecycleScope
import com.pspdfkit.annotations.Annotation
import com.pspdfkit.annotations.AnnotationType
import com.pspdfkit.annotations.SquareAnnotation
import com.pspdfkit.catalog.R
import com.pspdfkit.catalog.SdkExample
import com.pspdfkit.catalog.tasks.ExtractAssetTask.extract
import com.pspdfkit.configuration.activity.PdfActivityConfiguration
import com.pspdfkit.configuration.activity.ThumbnailBarMode
import com.pspdfkit.document.PdfDocument
import com.pspdfkit.preferences.PSPDFKitPreferences
import com.pspdfkit.ui.PdfActivity
import com.pspdfkit.ui.PdfActivityIntentBuilder
import com.pspdfkit.ui.drawable.PdfDrawable
import com.pspdfkit.ui.drawable.PdfDrawableProvider
import com.pspdfkit.utils.Size
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.json.JSONObject
import java.util.EnumSet

/**
 * This example allow users to select areas to hide/reveal on a page.
 */
class HideRevealAnnotationsCreationExample(context: Context) :
    SdkExample(context, R.string.hideRevealAnnotationsCreationTitle, R.string.hideRevealAnnotationsCreationDescription) {
    override fun launchExample(context: Context, configuration: PdfActivityConfiguration.Builder) {
        configuration
            // Turn off saving, so we have the clean original document every time the example is launched..autosaveEnabled(false)
            // Disable thumbnail bar..setThumbnailBarMode(ThumbnailBarMode.THUMBNAIL_BAR_MODE_NONE)
            // Disable annotation copy and paste..copyPastEnabled(false)
            // Disable text selection..textSelectionEnabled(false)

        // The annotation creator written into newly created annotations. If not set, or set to null
        // a dialog will normally be shown when creating an annotation, asking you to enter a name.
        // We are going to skip this part and set it as "John Doe" only if it was not yet set.
        if (!PSPDFKitPreferences.get(context).isAnnotationCreatorSet) {
            PSPDFKitPreferences.get(context).setAnnotationCreator("John Doe")
        }
        // Extract the document from the assets.
        extract("Classbook.pdf", title, context) { documentFile ->
            val intent =
                PdfActivityIntentBuilder.fromUri(context, Uri.fromFile(documentFile)).configuration(configuration.build()).activityClass(HideRevealAnnotationsCreationActivity::class).build()
            context.startActivity(intent)
        }
    }
}

class HideRevealAnnotationsCreationActivity : PdfActivity() {
    /**
     * A square annotation representing an area to hide on the page. Once the document is loaded,
     * we extract any existing hide area annotation from the document and store its reference here. When no
     * hide annotation is in the document, this reference holds `null`.
     */
    private var hideArea: SquareAnnotation? = null

    /**
     * A square annotation representing an area to reveal on the page. Once the document is loaded,
     * we extract any existing reveal annotation from the document and store its reference here. When no
     * reveal annotation is in the document, this reference holds `null`.
     */
    private var revealArea: SquareAnnotation? = null

    /**
     * To hide the entire page around the reveal annotation, we use a custom drawable provider that serves
     * drawables to the [PdfFragment]. We keep reference to it, so we can remove the drawable provider upon removing
     * the reveal annotation from the document.
     */
    private var revealAreaDrawableProvider: PdfDrawableProvider? = null

    /** This drawable implements the drawing logic for covering the page in black. */
    private var revealAreaDrawable: RevealAreaDrawable? = null

    /**
     * Create the two buttons for handling hide and reveal areas.
     */
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        super.onCreateOptionsMenu(menu)
        // Loading the document is an asynchronous process. Depending on the lifecycle state of the activity,
        // the document might not be loaded when this method is called, in which case we don't populate the menu.
        if (document == null) {
            return false
        }

        menu.clear()
        // Set hide button state.
        if (hideArea == null) {
            // Annotation is not present.
            val addHideAreaItem = menu.add(0, HIDE_ITEM_ID, 0, "Hide Area")
            showWithText(addHideAreaItem)
        } else {
            // Annotation is present.
            val resetHideAreaItem = menu.add(0, RESET_HIDE_ITEM_ID, 0, "Reset Hide Area")
            showWithText(resetHideAreaItem)
        }

        // Set reveal button state.
        if (revealArea == null) {
            // Annotation is not present.
            val addRevealAreaItem = menu.add(0, REVEAL_ITEM_ID, 1, "Reveal Area")
            showWithText(addRevealAreaItem)
        } else {
            // Annotation is present.
            val resetRevealAreaItem = menu.add(0, RESET_REVEAL_ITEM_ID, 1, "Reset Reveal Area")
            showWithText(resetRevealAreaItem)
        }
        return true
    }

    /** Helper to show buttons with text. */
    private fun showWithText(menuItem: MenuItem) {
        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM or MenuItem.SHOW_AS_ACTION_WITH_TEXT)
    }

    /** Set the corresponding action for every button in the toolbar. */
    override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
        HIDE_ITEM_ID -> {
            hideArea()
            true
        }

        RESET_HIDE_ITEM_ID -> {
            resetHideArea()
            true
        }

        REVEAL_ITEM_ID -> {
            revealArea()
            true
        }

        RESET_REVEAL_ITEM_ID -> {
            resetRevealArea()
            true
        }

        else -> {
            super.onOptionsItemSelected(item)
        }
    }

    /** Adds a drawable provider which will serve the reveal area drawable for covering the page in black. */
    private fun addRevealAreaDrawableProvider(revealArea: SquareAnnotation?) {
        if (revealArea!= null) {
            revealAreaDrawableProvider =
                object : PdfDrawableProvider() {
                    override suspend fun getDrawablesForPage(
                        context: Context,
                        document: PdfDocument,
                        @IntRange(from = 0) pageIndex: Int,
                    ): List<PdfDrawable> = mutableListOf<PdfDrawable>().apply {
                        if (pageIndex == revealArea.pageIndex) {
                            val drawable = RevealAreaDrawable(document.getPageSize(pageIndex), revealArea)
                            revealAreaDrawable = drawable
                            add(drawable)
                        }
                    }
                }
            revealAreaDrawableProvider?.let {
                requirePdfFragment().addDrawableProvider(it)
            }
        }
    }

    @UiThread
    override fun onDocumentLoaded(document: PdfDocument) {
        lifecycleScope.launch {
            // Restore the state of previously added annotations if any.
            if (hideArea == null) {
                hideArea = getCustomAnnotationIfPresent(document, HIDE_AREA_KEY)
            }
            if (revealArea == null) {
                revealArea = getCustomAnnotationIfPresent(document, REVEAL_AREA_KEY)
                addRevealAreaDrawableProvider(revealArea)
            }
            invalidateOptionsMenu()
        }
    }

    /** Returns any annotation with the `customData` key set to `true`, or null if no such annotation exists. */
    private suspend fun getCustomAnnotationIfPresent(document: PdfDocument, customData: String): SquareAnnotation? {
        document.annotationProvider.getAllAnnotationsOfType(EnumSet.of(AnnotationType.SQUARE)).forEach {
            if (it.customData?.optBoolean(customData) == true) {
                return it as SquareAnnotation
            }
        }

        return null
    }

    @SuppressLint("Range")
    private fun hideArea() {
        // Initial rect for the hide area annotation.
        val rect = RectF(360f, 632.5f, 561f, 80.5f)
        SquareAnnotation(pageIndex, rect).apply {
            hideArea = this
            fillColor = Color.BLACK
            customData =
                JSONObject().apply {
                    put(HIDE_AREA_KEY, true)
                }
            addAnnotationToDocument(this)
            invalidateOptionsMenu()
        }
    }

    private fun resetHideArea() {
        val document = document?: return
        val hideArea = hideArea?: return
        runBlocking { document.annotationProvider.removeAnnotationFromPage(hideArea) }
        this.hideArea = null
        invalidateOptionsMenu()
    }

    @SuppressLint("Range")
    private fun revealArea() {
        // Initial rect for the reveal area annotation.
        val rect = RectF(51f, 630f, 360f, 462f)
        SquareAnnotation(pageIndex, rect).apply {
            revealArea = this
            fillColor = Color.TRANSPARENT
            customData =
                JSONObject().apply {
                    put(REVEAL_AREA_KEY, true)
                }
            addAnnotationToDocument(this)
            addRevealAreaDrawableProvider(this)
            invalidateOptionsMenu()
        }
    }

    private fun resetRevealArea() {
        val document = document?: return
        val revealArea = revealArea?: return
        revealAreaDrawableProvider?. let {
            requirePdfFragment().removeDrawableProvider(it)
            val thumbnailGridView = pspdfKitViews.thumbnailGridView
            thumbnailGridView?.removeDrawableProvider(it)
            revealAreaDrawableProvider = null
        }
        runBlocking { document.annotationProvider.removeAnnotationFromPage(revealArea) }
        this.revealArea = null
        invalidateOptionsMenu()
    }

    /**
     * Whenever there's a touch event and the reveal area is selected, we turn it transparent for
     * simpler annotation placement.
     */
    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        val revealArea = revealArea
        val revealAreaDrawable = revealAreaDrawable
        if (revealArea!= null && revealAreaDrawable!= null) {
            if (ev.actionMasked == MotionEvent.ACTION_UP) {
                // Set it fully opaque.
                revealAreaDrawable.alpha = 255
            } else if (ev.actionMasked == MotionEvent.ACTION_DOWN && requirePdfFragment().selectedAnnotations.contains(revealArea)) {
                // Set alpha channel at 80%.
                revealAreaDrawable.alpha = 204
            }
        }
        return super.dispatchTouchEvent(ev)
    }

    /**
     * Add the annotation to the document, and update the annotation in the UI.
     */
    private fun addAnnotationToDocument(annotation: com.pspdfkit.annotations.Annotation) {
        requirePdfFragment().addAnnotationToPage(annotation, false)
    }

    /** Custom drawable that implements the logic for covering the area around the reveal area in black. */
    internal class RevealAreaDrawable(pageSize: Size, private val revealArea: Annotation) : PdfDrawable() {
        private val paint = Paint()
        private val pageCoordinates: RectF = RectF(0f, pageSize.height, pageSize.width, 0f)

        /** Auxiliary field used for keeping the screen coordinates of a page. */
        private val screenCoordinates = RectF()

        /** Auxiliary field used for keeping the screen coordinates of an annotation. */
        private val annotationScreenCoordinates = RectF()

        /** Auxiliary field used for keeping the page coordinates of an annotation. */
        private val annotationPageCoordinates = RectF()

        init {
            paint.color = Color.BLACK
            paint.style = Paint.Style.FILL
            paint.alpha = 255
        }

        /**
         * The annotation bounding box is first decreased to a narrower rectangle to make sure
         * there are no gaps in the black area. The rectangle is then converted from page coordinates
         * to screen coordinates and as a final step four black rectangles will be drawn around the
         * reveal area that will cover the whole page to give a reveal area effect.
         */
        override fun draw(canvas: Canvas) {
            revealArea.getBoundingBox(annotationPageCoordinates)
            // Decrease the transparent hole to make sure there are no gaps.
            // Using small values to make the rectangle narrower.
            // The `dy` value is negative because the annotation is in page coordinates.
            annotationPageCoordinates.inset(1f, -1f)
            getPdfToPageTransformation().mapRect(annotationScreenCoordinates, annotationPageCoordinates)
            val bounds = bounds
            // Left.
            canvas.drawRect(
                bounds.left.toFloat(),
                bounds.top.toFloat(),
                annotationScreenCoordinates.left,
                bounds.bottom.toFloat(),
                paint,
            )
            // Top.
            canvas.drawRect(
                annotationScreenCoordinates.left,
                bounds.top.toFloat(),
                annotationScreenCoordinates.right,
                annotationScreenCoordinates.top,
                paint,
            )
            // Right
            canvas.drawRect(
                annotationScreenCoordinates.right,
                bounds.top.toFloat(),
                bounds.right.toFloat(),
                bounds.bottom.toFloat(),
                paint,
            )
            // Bottom
            canvas.drawRect(
                annotationScreenCoordinates.left,
                annotationScreenCoordinates.bottom,
                annotationScreenCoordinates.right,
                bounds.bottom.toFloat(),
                paint,
            )
        }

        /**
         * Nutrient calls this method every time the page was moved or resized on screen.
         * It will provide a fresh transformation for calculating screen coordinates from
         * PDF coordinates.
         */
        override fun updatePdfToViewTransformation(matrix: Matrix) {
            super.updatePdfToViewTransformation(matrix)
            updateScreenCoordinates()
        }

        private fun updateScreenCoordinates() {
            // Calculate the screen coordinates by applying the PDF-to-view transformation.
            getPdfToPageTransformation().mapRect(screenCoordinates, pageCoordinates)
            // Rounding out ensure no clipping of content.
            val bounds = bounds
            screenCoordinates.roundOut(bounds)
            setBounds(bounds)
        }

        @UiThread
        override fun setAlpha(alpha: Int) {
            paint.alpha = alpha
            // Drawable invalidation is only allowed from a UI-thread.
            invalidateSelf()
        }

        @UiThread
        override fun setColorFilter(colorFilter: ColorFilter?) {
            paint.colorFilter = colorFilter
            // Drawable invalidation is only allowed from a UI-thread.
            invalidateSelf()
        }

        @Deprecated("Deprecated in Java")
        override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
    }

    companion object {
        private const val HIDE_ITEM_ID = 1234
        private const val RESET_HIDE_ITEM_ID = 1235
        private const val REVEAL_ITEM_ID = 1236
        private const val RESET_REVEAL_ITEM_ID = 1237
        private const val HIDE_AREA_KEY = "hideArea"
        private const val REVEAL_AREA_KEY = "revealArea"
    }
}

```

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.

---

## Related pages

- [Application Policy](/guides/android/samples/application-policy-kotlin.md)
- [Custom Form Highlight Color](/guides/android/samples/custom-form-highlight-color-java.md)
- [Custom Page Templates](/guides/android/samples/custom-page-templates-java.md)
- [Digital Signature (Basic)](/guides/android/samples/digital-signature-basic-kotlin.md)
- [Disabled Annotation Property](/guides/android/samples/disabled-annotation-property-java.md)
- [Image Document](/guides/android/samples/image-document-kotlin.md)
- [Compose Image Document](/guides/android/samples/compose-image-document-kotlin.md)
- [Inline Multimedia](/guides/android/samples/inline-multimedia-kotlin.md)
- [JavaScript Form Filling](/guides/android/samples/javascript-form-filling-kotlin.md)
- [Overlay Visibility](/guides/android/samples/overlay-visibility-kotlin.md)
- [PdfFragment](/guides/android/samples/pdffragment-kotlin.md)
- [Reader View](/guides/android/samples/reader-view-kotlin.md)
- [Playground](/guides/android/samples/playground-kotlin.md)
- [JavaScript Calculator](/guides/android/samples/javascript-calculator-kotlin.md)
- [Text Field Suggestions](/guides/android/samples/text-field-suggestions-kotlin.md)
- [Thumbnail Bar Modes](/guides/android/samples/thumbnail-bar-modes-kotlin.md)
- [Signature Storage Database](/guides/android/samples/signature-storage-database-kotlin.md)
- [Selection Customization](/guides/android/samples/selection-customization-java.md)
- [Password Protected PDF](/guides/android/samples/password-protected-pdf-kotlin.md)
- [Scientific Paper](/guides/android/samples/scientific-paper-kotlin.md)
- [Try Instant](/guides/android/samples/try-instant-kotlin.md)
- [Merge Documents](/guides/android/samples/merge-documents-kotlin.md)
- [Annotation Rendering](/guides/android/samples/annotation-rendering-kotlin.md)
- [Custom Data Provider](/guides/android/samples/custom-data-provider-kotlin.md)
- [Annotations with Transparency](/guides/android/samples/annotations-with-transparency-kotlin.md)
- [Annotation Flags](/guides/android/samples/annotation-flags-kotlin.md)
- [AI Assistant (Multiple Documents, ViewPager)](/guides/android/samples/ai-assistant-multiple-documents-viewpager-kotlin.md)
- [Custom Sharing Menu](/guides/android/samples/custom-sharing-menu-java.md)
- [Add LTV to Existing Signature](/guides/android/samples/add-ltv-to-existing-signature-kotlin.md)
- [Custom Toolbar Grouping](/guides/android/samples/custom-toolbar-grouping-java.md)
- [Custom Layout](/guides/android/samples/custom-layout-kotlin.md)
- [Custom ActionBar Actions](/guides/android/samples/custom-actionbar-actions-kotlin.md)
- [Custom Activity Toolbars](/guides/android/samples/custom-activity-toolbars-java.md)
- [Custom Note Hinter](/guides/android/samples/custom-note-hinter-kotlin.md)
- [Custom Main Toolbar](/guides/android/samples/custom-main-toolbar-kotlin.md)
- [Annotation Configuration](/guides/android/samples/annotation-configuration-kotlin.md)
- [Annotation Selection Styling](/guides/android/samples/annotation-selection-styling-kotlin.md)
- [Custom Search UI (Compose)](/guides/android/samples/custom-search-ui-compose-kotlin.md)
- [Document Switcher](/guides/android/samples/document-switcher-java.md)
- [File Annotation Creation](/guides/android/samples/file-annotation-creation-kotlin.md)
- [Dynamic Pages on Scroll](/guides/android/samples/dynamic-pages-on-scroll-kotlin.md)
- [Custom Activity Form Editing](/guides/android/samples/custom-activity-form-editing-java.md)
- [Custom Stamp Annotations](/guides/android/samples/custom-stamp-annotations-java.md)
- [Custom Outline Provider](/guides/android/samples/custom-outline-provider-kotlin.md)
- [Compose Navigation](/guides/android/samples/compose-navigation-kotlin.md)
- [Fragment Runtime Configuration](/guides/android/samples/fragment-runtime-configuration-kotlin.md)
- [Annotation Overlay](/guides/android/samples/annotation-overlay-java.md)
- [Instant Document JSON](/guides/android/samples/instant-document-json-kotlin.md)
- [DocumentView Composable](/guides/android/samples/documentview-composable-kotlin.md)
- [Form Creation](/guides/android/samples/form-creation-kotlin.md)
- [Document Download](/guides/android/samples/document-download-kotlin.md)
- [JavaScript Actions](/guides/android/samples/javascript-actions-kotlin.md)
- [Instant JSON Attachment](/guides/android/samples/instant-json-attachment-kotlin.md)
- [Digital Signature (Manual)](/guides/android/samples/digital-signature-manual-kotlin.md)
- [Digital Signature (Third-Party)](/guides/android/samples/digital-signature-third-party-kotlin.md)
- [Inline Search](/guides/android/samples/inline-search-java.md)
- [Form Filling](/guides/android/samples/form-filling-kotlin.md)
- [Form Click Intercept (Compose)](/guides/android/samples/form-click-intercept-compose-kotlin.md)
- [Document Sharing](/guides/android/samples/document-sharing-java.md)
- [Custom Download Dialog](/guides/android/samples/custom-download-dialog-java.md)
- [Download Progress](/guides/android/samples/download-progress-kotlin.md)
- [Popup Toolbar Customization](/guides/android/samples/popup-toolbar-customization-kotlin.md)
- [Custom Sharing Dialog](/guides/android/samples/custom-sharing-dialog-java.md)
- [PDF from Image](/guides/android/samples/pdf-from-image-kotlin.md)
- [Digital Signature (Two-Step)](/guides/android/samples/digital-signature-two-step-kotlin.md)
- [Remote URL](/guides/android/samples/remote-url-kotlin.md)
- [PdfUiFragment](/guides/android/samples/pdfuifragment-kotlin.md)
- [Runtime Configuration](/guides/android/samples/runtime-configuration-kotlin.md)
- [Sound Extraction](/guides/android/samples/sound-extraction-kotlin.md)
- [Document from Canvas](/guides/android/samples/document-from-canvas-kotlin.md)
- [Tabbed Documents](/guides/android/samples/tabbed-documents-kotlin.md)
- [Watermarks](/guides/android/samples/watermarks-kotlin.md)
- [Programmatic Zoom](/guides/android/samples/programmatic-zoom-kotlin.md)
- [Signature Parcelize](/guides/android/samples/signature-parcelize-kotlin.md)
- [OCR](/guides/android/samples/ocr-kotlin.md)
- [Vertical Scrollbar](/guides/android/samples/vertical-scrollbar-java.md)
- [Split View](/guides/android/samples/split-view-java.md)
- [XFDF Import/Export](/guides/android/samples/xfdf-import-export-kotlin.md)
- [UI View Modes](/guides/android/samples/ui-view-modes-kotlin.md)
- [LTV Signature](/guides/android/samples/ltv-signature-kotlin.md)
- [Bookmark Highlighting](/guides/android/samples/bookmark-highlighting-kotlin.md)
- [Custom Annotation Inspector](/guides/android/samples/custom-annotation-inspector-java.md)
- [Annotation Sidebar](/guides/android/samples/annotation-sidebar-kotlin.md)
- [AI Assistant (Single Document)](/guides/android/samples/ai-assistant-single-document-kotlin.md)
- [AI Assistant (Multiple Documents, Compose)](/guides/android/samples/ai-assistant-multiple-documents-compose-kotlin.md)
- [Document Comparison](/guides/android/samples/document-comparison-kotlin.md)
- [Document Processing](/guides/android/samples/document-processing-kotlin.md)
- [Custom Annotation Creation Toolbar](/guides/android/samples/custom-annotation-creation-toolbar-java.md)
- [Custom Electronic Signature](/guides/android/samples/custom-electronic-signature-java.md)
- [E-Learning](/guides/android/samples/e-learning-kotlin.md)
- [Electronic + Digital Signing](/guides/android/samples/electronic-digital-signing-kotlin.md)
- [Generate PDF Report](/guides/android/samples/generate-pdf-report-kotlin.md)
- [Multimedia Annotations](/guides/android/samples/multimedia-annotations-kotlin.md)
- [Forms with JavaScript](/guides/android/samples/forms-with-javascript-kotlin.md)
- [External Document](/guides/android/samples/external-document-kotlin.md)
- [Overlay Views](/guides/android/samples/overlay-views-kotlin.md)
- [Kiosk Grid](/guides/android/samples/kiosk-grid-kotlin.md)
- [Search Indexing](/guides/android/samples/search-indexing-kotlin.md)
- [Annotation Creation](/guides/android/samples/annotation-creation-kotlin.md)
- [Filterable Thumbnail Grid](/guides/android/samples/filterable-thumbnail-grid-kotlin.md)
- [Tabbed Documents (Persistent)](/guides/android/samples/tabbed-documents-persistent-kotlin.md)
- [Measurement Tools](/guides/android/samples/measurement-tools-kotlin.md)
- [HTML-to-PDF Conversion](/guides/android/samples/html-to-pdf-conversion-kotlin.md)
- [AES Encrypted File](/guides/android/samples/aes-encrypted-file-java.md)
- [Construction Floor Plan](/guides/android/samples/construction-floor-plan-kotlin.md)
- [Multiple Documents (Compose Pager)](/guides/android/samples/multiple-documents-compose-pager-kotlin.md)
- [Screen Reader](/guides/android/samples/screen-reader-java.md)
- [Custom Search UI (Views)](/guides/android/samples/custom-search-ui-views-java.md)

