Skip to content

android_zoom.py: fix Zoom 6.x control detection and harden the join flow - #359

Merged
goyalsaurabh06 merged 3 commits into
greearb:masterfrom
goyalsaurabh06:zoom_android_fix
Aug 13, 2026
Merged

android_zoom.py: fix Zoom 6.x control detection and harden the join flow#359
goyalsaurabh06 merged 3 commits into
greearb:masterfrom
goyalsaurabh06:zoom_android_fix

Conversation

@Narayana-CT

@Narayana-CT Narayana-CT commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Android participants running Zoom 6.x joined meetings but never turned their
camera on, so they contributed no uplink video to the results while the run
still exited 0 and produced a clean-looking report. This branch fixes that and
makes the join path more robust.

Three commits, all in py-scripts/real_application_tests/zoom_automation/android_zoom.py:

Commit Change
cff162b1 Pre-grant Zoom's runtime permissions over adb before joining
4fe2c89e Target the Zoom package on the meeting intent; raise the preview-screen timeout; explain the toolbar setting when A/V cannot be toggled
6bb72fde Match in-meeting control labels by prefix instead of exact equality

Root cause of the main bug

Zoom labels the same in-meeting controls differently between releases:

Zoom content-desc for the mic button
7.x Mute my audio, button
6.x Mute my audio Button 1 of 13

6.x drops the comma, capitalises Button, appends N of 13, and labels Leave
through text= with an empty content-desc. The matchers used exact equality
against the 7.x strings only, so on 6.x clients:

  • get_audio_control_info() / get_video_control_info() returned None
  • enable_audio_video() logged "button not visible" for all 15 retries and left
    the camera off
  • get_leave_control_info() found nothing and fell through to pressing back

This was confirmed by dumping the live UI hierarchy from a 6.6.0 device while it
sat in a meeting with the toolbar visible: the buttons were present and
readable; only the string comparison failed. Enabling Zoom's
"Always show meeting controls" does not help, because visibility was never the
problem.

_control_label() now reads content-desc, falls back to text when that is
empty, and callers compare on the label prefix, so both layouts resolve.

Other changes

  • Permission pre-granting reads the runtime permissions the package actually
    declares on that device, so one code path covers every API level, and sets
    SYSTEM_ALERT_WINDOW through appops since pm grant cannot. This replaces
    clicking the "While using the app" / "Allow" dialogs.
  • Meeting intent now names the Zoom package, so the deep link cannot be
    captured by a browser or a chooser dialog.
  • Preview-screen timeout raised 5s to 30s. This is load-bearing: one handset
    reached the preview screen only after 26 seconds and would have failed at 5s.

Testing

Three consecutive 2-minute runs on the interop testbed, host plus five Android
devices, covering Zoom 6.5.12, 6.6.0, 7.0.4, 7.1.6 and Android SDK 31, 33, 36
(OPPO CPH2725, Pixel 4a x2, Samsung SM-F415F, Samsung SM-A217F).

Every participating device joined, reported both audio and video enabled, and
left without falling back to the back key. Before this change, only the two
Zoom 7.x devices managed that; the three 6.x devices failed all 15 A/V retries.
Both label variants were exercised in the logs.

Verified with:

python3 lf_interop_zoom.py --duration 2 \
    --lanforge_ip 192.168.245.117 \
    --signin_email <zoom_email> --signin_passwd <zoom_passwd> \
    --participants 6 --audio --video \
    --upstream_port <upstream_ip> \
    --zoom_host 1.13 \
    --resources 1.13,1.12,1.15,1.16,1.22,1.25 \
    --api_stats_collection --env_file .env

Known limitations

  • Fresh OPPO/ColorOS devices have no permission fallback. That ROM refuses
    adb pm grant, and this branch removes the UI dialog handling that used to
    cover it. Devices where the mic/camera prompts were already accepted once are
    unaffected, which is why the OPPO in the testbed still passes.

Signed-off-by: Narayana-CT <narayana.pinapatruni@candelatech.com>
Signed-off-by: Narayana-CT <narayana.pinapatruni@candelatech.com>
Verified CLI:

python3 lf_interop_zoom.py --duration 2 \
        --lanforge_ip <lanforge_ip> \
        --signin_email <zoom_email> --signin_passwd <zoom_passwd> \
        --participants 6 --audio --video \
        --upstream_port <upstream_ip> \
        --zoom_host 1.13 \
        --resources 1.13,1.12,1.15,1.16,1.22,1.25 \
        --api_stats_collection --env_file .env

Signed-off-by: Narayana-CT <narayana.pinapatruni@candelatech.com>
@goyalsaurabh06
goyalsaurabh06 merged commit a865190 into greearb:master Aug 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants