@@ -933,8 +933,10 @@ adb_framework_ready_once() {
933933 log_interval=10
934934 fi
935935
936+ local start_time=$SECONDS
936937 local deadline=$(( SECONDS + phase_timeout))
937938 local last_log=$SECONDS
939+ local last_home_nudge=$SECONDS
938940
939941 while [ $SECONDS -lt $deadline ]; do
940942 local boot_ok dev_boot system_pid pm_ok pm_list_ok service_ok cmd_ok activity_ok resolve_ok service_status
@@ -975,16 +977,37 @@ adb_framework_ready_once() {
975977 fi
976978
977979 if [ " $boot_ok " = " 1" ] && [ " $dev_boot " = " 1" ] && [ -n " $system_pid " ] \
978- && [ $pm_ok -eq 1 ] && [ $pm_list_ok -eq 1 ] && [ $cmd_ok -eq 1 ] \
979- && [ $activity_ok -eq 1 ] && [ $resolve_ok -eq 1 ] && [ $service_ok -eq 1 ]; then
980- ba_log " Android framework ready on $serial (system_server=$system_pid )"
981- return 0
980+ && [ $pm_ok -eq 1 ] && [ $cmd_ok -eq 1 ] && [ $service_ok -eq 1 ]; then
981+ if [ $pm_list_ok -eq 1 ] || [ $activity_ok -eq 1 ] || [ $resolve_ok -eq 1 ]; then
982+ ba_log " Android framework ready on $serial (system_server=$system_pid )"
983+ return 0
984+ fi
985+
986+ local secondary_wait=" ${FRAMEWORK_READY_SECONDARY_GRACE_SECONDS:- 90} "
987+ if ! [[ " $secondary_wait " =~ ^[0-9]+$ ]]; then
988+ secondary_wait=90
989+ fi
990+ if [ $(( SECONDS - start_time)) -ge " $secondary_wait " ]; then
991+ ba_log " Android framework heuristically ready on $serial (system_server=$system_pid ; pm_list=$pm_list_ok activity=$activity_ok resolve=$resolve_ok )"
992+ return 0
993+ fi
982994 fi
983995
984996 if [ $(( SECONDS - last_log)) -ge $log_interval ]; then
985997 ba_log " Waiting for Android framework on $serial (system_server=${system_pid:- down} boot_ok=${boot_ok:- ?} /${dev_boot:- ?} pm_ready=$pm_ok pm_list_ready=$pm_list_ok cmd_ready=$cmd_ok activity_ready=$activity_ok package_service_ready=$service_ok resolve_ready=$resolve_ok )"
986998 last_log=$SECONDS
987999 fi
1000+
1001+ local home_retry=" ${FRAMEWORK_READY_HOME_RETRY_SECONDS:- 30} "
1002+ if ! [[ " $home_retry " =~ ^[0-9]+$ ]]; then
1003+ home_retry=30
1004+ fi
1005+ if [ $(( SECONDS - last_home_nudge)) -ge " $home_retry " ]; then
1006+ run_with_timeout " $per_try " " $ADB_BIN " -s " $serial " shell input keyevent 82 > /dev/null 2>&1 || true
1007+ run_with_timeout " $per_try " " $ADB_BIN " -s " $serial " shell \
1008+ am start -a android.intent.action.MAIN -c android.intent.category.HOME > /dev/null 2>&1 || true
1009+ last_home_nudge=$SECONDS
1010+ fi
9881011 sleep 2
9891012 done
9901013
0 commit comments