Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66e24f9f authored by Miranda Kephart's avatar Miranda Kephart
Browse files

Use live region for 'saving screenshot' announcement

Using announceForAccessibility is disruptive; switch to setting the
contentDescription on a view to get better behavior for the "saving
screenshot" announcement.

Bug: 383642111
Flag: com.android.systemui.screenshot_announce_live_region
Test: manual (with talkback on)
Change-Id: I4d3e5bb2bfe6021d280a2b2f3cbf2cc590cfddf7
parent 8abd55d5
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -736,6 +736,16 @@ flag {
    }
    }
}
}


flag {
    name: "screenshot_announce_live_region"
    namespace: "systemui"
    description: "Use live region for screenshot saving announcement"
    bug: "383642111"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
flag {
    name: "screenshot_action_dismiss_system_windows"
    name: "screenshot_action_dismiss_system_windows"
    namespace: "systemui"
    namespace: "systemui"
+7 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,13 @@
        android:layout_height="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false"
        android:clipChildren="false"
        android:clipToPadding="false">
        android:clipToPadding="false">
        <View
            android:id="@+id/screenshot_saving_live_region"
            android:layout_width="1dp"
            android:layout_height="1dp"
            android:accessibilityLiveRegion="polite"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>
        <View
        <View
            android:id="@+id/screenshot_preview_border"
            android:id="@+id/screenshot_preview_border"
            android:layout_width="0dp"
            android:layout_width="0dp"
+6 −1
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import android.window.WindowContext
import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnEnd
import com.android.internal.logging.UiEventLogger
import com.android.internal.logging.UiEventLogger
import com.android.settingslib.applications.InterestingConfigChanges
import com.android.settingslib.applications.InterestingConfigChanges
import com.android.systemui.Flags.screenshotAnnounceLiveRegion
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.clipboardoverlay.ClipboardOverlayController
import com.android.systemui.clipboardoverlay.ClipboardOverlayController
@@ -254,9 +255,13 @@ internal constructor(
    private fun prepareViewForNewScreenshot(screenshot: ScreenshotData, oldPackageName: String?) {
    private fun prepareViewForNewScreenshot(screenshot: ScreenshotData, oldPackageName: String?) {
        window.whenWindowAttached {
        window.whenWindowAttached {
            announcementResolver.getScreenshotAnnouncement(screenshot.userHandle.identifier) {
            announcementResolver.getScreenshotAnnouncement(screenshot.userHandle.identifier) {
                if (screenshotAnnounceLiveRegion()) {
                    viewProxy.setSavingAnnouncement(it)
                } else {
                    viewProxy.announceForAccessibility(it)
                    viewProxy.announceForAccessibility(it)
                }
                }
            }
            }
        }


        viewProxy.reset()
        viewProxy.reset()


+14 −1
Original line number Original line Diff line number Diff line
@@ -39,6 +39,7 @@ import androidx.appcompat.content.res.AppCompatResources
import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnStart
import androidx.core.animation.doOnStart
import com.android.internal.logging.UiEventLogger
import com.android.internal.logging.UiEventLogger
import com.android.systemui.Flags.screenshotAnnounceLiveRegion
import com.android.systemui.log.DebugLogger.debugLog
import com.android.systemui.log.DebugLogger.debugLog
import com.android.systemui.res.R
import com.android.systemui.res.R
import com.android.systemui.screenshot.LogConfig.DEBUG_DISMISS
import com.android.systemui.screenshot.LogConfig.DEBUG_DISMISS
@@ -208,6 +209,9 @@ constructor(
        screenshotTakenInPortrait: Boolean,
        screenshotTakenInPortrait: Boolean,
        onTransitionPrepared: Runnable,
        onTransitionPrepared: Runnable,
    ) {
    ) {
        if (screenshotAnnounceLiveRegion()) {
            setSavingAnnouncement("")
        }
        viewModel.setScrollingScrimBitmap(newScreenshot)
        viewModel.setScrollingScrimBitmap(newScreenshot)
        viewModel.setScrollableRect(scrollableAreaOnScreen(response))
        viewModel.setScrollableRect(scrollableAreaOnScreen(response))
        animationController.fadeForLongScreenshotTransition()
        animationController.fadeForLongScreenshotTransition()
@@ -262,7 +266,13 @@ constructor(
        view.requestFocus()
        view.requestFocus()
    }
    }


    fun announceForAccessibility(string: String) = view.announceForAccessibility(string)
    fun setSavingAnnouncement(string: String) {
        view.setSavingAnnouncement(string)
    }

    fun announceForAccessibility(string: String) {
        view.announceForAccessibility(string)
    }


    fun prepareEntranceAnimation(runnable: Runnable) {
    fun prepareEntranceAnimation(runnable: Runnable) {
        view.viewTreeObserver.addOnPreDrawListener(
        view.viewTreeObserver.addOnPreDrawListener(
@@ -278,6 +288,9 @@ constructor(
    }
    }


    fun fadeForSharedTransition() {
    fun fadeForSharedTransition() {
        if (screenshotAnnounceLiveRegion()) {
            setSavingAnnouncement("")
        }
        animationController.fadeForSharedTransition()
        animationController.fadeForSharedTransition()
    }
    }


+7 −0
Original line number Original line Diff line number Diff line
@@ -197,6 +197,13 @@ class ScreenshotShelfView(context: Context, attrs: AttributeSet? = null) :
        }
        }
    }
    }


    fun setSavingAnnouncement(string: String) {
        val announceRegion = findViewById<View>(R.id.screenshot_saving_live_region)
        // clear the description to make sure we announce for successive screenshots
        announceRegion.contentDescription = ""
        announceRegion.contentDescription = string
    }

    // Max function for two or more params.
    // Max function for two or more params.
    private fun max(first: Int, second: Int, vararg items: Int): Int {
    private fun max(first: Int, second: Int, vararg items: Int): Int {
        var largest = if (first > second) first else second
        var largest = if (first > second) first else second