TalkBack, 7 of 10: Name profile deletion targets - #6165
Draft
eliotcougar wants to merge 3 commits into
Draft
eliotcougar wants to merge 3 commits into
eliotcougar wants to merge 3 commits into
Conversation
eliotcougar
marked this pull request as ready for review
August 30, 2026 17:38
eliotcougar
force-pushed
the
fix/accessibility-named-profile-dialogs
branch
from
September 2, 2026 00:18
1b2ca2f to
b981992
Compare
eliotcougar
marked this pull request as draft
September 5, 2026 11:12
Use one dispatcher for the existing server menu actions and carry the display name alongside the stable GUID when requesting removal. The GUID remains the deletion identity; confirmation policy stays with MainScreen. This common prerequisite lets named confirmations and custom accessibility actions extend the same contract without conflicting or bypassing confirmation. Cover action routing, duplicate names and blank names with JVM regression tests.
Include the displayed profile, policy group, or proxy-chain member name in each applicable confirmation. Keep main-list deletion keyed by the immutable GUID even when the dialog captures a display name.
Use the saved profile name in custom-config and proxy-chain confirmations so an unsaved rename or blank remarks field cannot misidentify the item being deleted. Keep pending single-profile dialogs across activity recreation, saving only the main-list GUID and display name with a small Compose saver. Leave the unused legacy ServerActivity unchanged from upstream and remove imports made unnecessary by saveable dialog state. Keep shared server dispatch and stable-key proxy-chain removal intact for the companion main-list accessibility branch. Cover the saved target and absent-target state in existing JVM tests. Validation: all 67 JVM tests and the Play Store x86_64 debug build passed; emulator checks covered saved names after draft edits, cancellation, activity recreation, and deletion of the confirmed GUID. Pairwise merge checks passed against upstream and all nine companion branches in both orders.
eliotcougar
force-pushed
the
fix/accessibility-named-profile-dialogs
branch
from
September 10, 2026 09:37
b8ce732 to
c78df60
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Name the specific deletion target in the existing confirmation dialogs for server
profiles, policy groups, proxy-chain profiles, and individual proxy-chain members.
The localized question comes first, followed by the target name on a separate line.
This covers direct and overflow-menu deletion from the main server list and the
registered profile editors. Bulk-deletion questions stay generic.
Target identity and restoration
dialog uses the name only as text; confirmation still removes by GUID. Duplicate
names and list reordering cannot retarget the pending operation.
rememberSaveableand a smalllistSaver. No full profile or action callback isserialized.
remarks field. Renaming or clearing a draft therefore does not change the
identity in the destructive confirmation.
in the main list and the ordinary, custom-config, policy-group, and proxy-chain
editors.
current position and member name are resolved from that key, and confirmation
removes the member and its key together. A member that has already disappeared
is not replaced by another member at its former index.
Scope and accessibility approach
The existing Material confirmation dialog exposes its visible text through native
semantics. There are no custom announcements, focus manipulation, role overrides,
or role suppression.
The small server-menu dispatcher and stable-key member-removal helper are shared
with Part 9 so its custom actions use the same operation paths. This part does not
change server-row semantics, service behavior, deletion policy, or storage format.
Subscription, asset-file, and routing confirmations remain in their own parts.
The unused legacy
ServerActivityis left unchanged from upstream. Existinggeneric confirmation resources remain available to their existing callers.
Localization
The three named confirmation templates exist in all nine supported catalogs:
English, Arabic, Bengali, Bakhtiari, Persian, Russian, Vietnamese, Simplified
Chinese, and Traditional Chinese. All 27 entries parse as XML and contain exactly
one
%1$starget placeholder. The review fixes reuse those resources withoutintroducing new translated text.
Validation
Reviewed revision:
b8ce732ae6ac56e54169451cbd7c2bc08f29c5f0.:app:testPlaystoreDebugUnitTest: 67 tests passed, no failures, errors, or skips.This includes 10 focused dispatcher, pending-target saver, and stable-key
proxy-chain member tests. Saver coverage includes null, duplicate display names
under different GUIDs, empty names, non-Latin text, and embedded newlines.
:app:compilePlaystoreDebugKotlin: passed.:app:assemblePlaystoreDebug -PABI_FILTERS=x86_64: passed.text and exercised native accessibility click actions in ordinary, custom,
policy-group, and proxy-chain editors. Unsaved renames and blank remarks did not
change the saved deletion target. Cancel preserved each profile; actual
activity recreation preserved each pending dialog. These emulator checks used
the identical source tree immediately before committing; source-tree equality
was checked before the commit.
through the existing storage owner that only the captured GUID was removed.
Another profile and the selected-server GUID remained unchanged.
androidTestsource directory inthe PR. Removed its test fixtures and restored the emulator's original APK and
accessibility settings. The existing lab subscription was retained.
git merge-treechecks against fetched upstream and all nine companionbranches passed in both orders and produced identical trees.
git diff --check: passed. No instruction files or generated inputs are in thefeature diff.
Not run
interaction. Native-tree inspection and accessibility action execution do not
establish exact spoken output or gesture behavior.
full locale/theme/layout matrix. The emulator run used one English x86_64 debug
configuration; localized resources were checked structurally, not spoken in
every language.