package Ġcom . mal in sk iy . mar athon . android . adam . execution Ċ Ċ import Ġcom . mal in sk iy . adam . android . contract . TestRunner Contract Ċ import Ġcom . mal in sk iy . adam . request . forwarding . Remote Tcp Port Spec Ċ import Ġcom . mal in sk iy . mar athon . android . adam . Adam Android Device Ċ import Ġcom . mal in sk iy . mar athon . config . Configuration Ċ import Ġcom . mal in sk iy . mar athon . config . vendor . Vendor Configuration Ċ import Ġcom . mal in sk iy . mar athon . config . vendor . android . Test Access Configuration Ċ import Ġcom . mal in sk iy . mar athon . log . Mar athon Logging Ċ Ċ class ĠArguments Factory ( private Ġval Ġdevice : ĠAdam Android Device ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠMar athon Logging . logger (" Arguments Factory ") ĊĊĊĠĠĠ Ġfun Ġgenerate ( configuration : ĠConfiguration , Ġandroid Configuration : ĠVendor Configuration . Android Configuration ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable Map Of < String , ĠString >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput All ( android Configuration . instrumentation Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput All ( generate Test Access Args ( android Configuration . test Access Configuration )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( configuration . is Code Coverage Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" coverage ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Test Access Args ( configuration : ĠTest Access Configuration ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadditional Args Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( configuration . adb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . is Local Em ulator () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . adb Port Argument Name ] Ġ= Ġdevice . client . port . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . adb Host Argument Name ] Ġ= ĠE MUL ATOR _ HOST _ LOOP BACK _ ADDR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . device Serial Argument Name ] Ġ= Ġdevice . adb Serial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . port Forwarding Rules . containsKey (" adb ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġ( device . port Forwarding Rules [" adb "] ?. local Spec Ġas ? ĠRemote Tcp Port Spec )?. port ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( port Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . adb Port Argument Name ] Ġ= Ġport ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . adb Host Argument Name ] Ġ= Ġ" localhost " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . device Serial Argument Name ] Ġ= Ġdevice . adb Serial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( configuration . console ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . is Local Em ulator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsole Port Ġ= Ġdevice . adb Serial . substring After (" emulator - "). trim (). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( console Port Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Unable Ġto Ġparse Ġemulator Ġconsole Ġport Ġfor Ġserial Ġ${ device . adb Serial }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . console Port Argument Name ] Ġ= Ġconsole Port . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . console Host Argument Name ] Ġ= ĠE MUL ATOR _ HOST _ LOOP BACK _ ADDR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( configuration . console Token . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . emulator AuthToken Argument Name ] Ġ= Ġconfiguration . console Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" Access Ġto Ġemulator Ġconsole Ġport Ġis Ġrequested , Ġbut Ġdevice Ġ${ device . adb Serial } Ġis Ġnot Ġa Ġlocal Ġemulator " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" If Ġ${ device . adb Serial } Ġis Ġan Ġemulator , Ġconnect Ġthe Ġa db Ġserver Ġinstead Ġof Ġ` adb Ġconnect ` Ġfor Ġthis Ġto Ġwork " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( configuration . grpc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . is Local Em ulator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsole Port Ġ= Ġdevice . adb Serial . substring After (" emulator - "). trim (). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( console Port Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Unable Ġto Ġparse Ġemulator Ġconsole Ġport Ġfor Ġserial Ġ${ device . adb Serial }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg RP CP ort : ĠInt Ġ= Ġconsole Port Ġ+ Ġ 3 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Ass uming ĠgRPC Ġport Ġis Ġconsole Ġport Ġ$ console Port Ġ+ Ġ 3 0 0 0 Ġ= Ġ$ g RP CP ort " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . grpc Port Argument Name ] Ġ= Ġg RP CP ort . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Args [ TestRunner Contract . grpc Host Argument Name ] Ġ= ĠE MUL ATOR _ HOST _ LOOP BACK _ ADDR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" Access Ġto Ġemulator ĠgRPC Ġport Ġis Ġrequested , Ġbut Ġdevice Ġ${ device . adb Serial } Ġis Ġnot Ġa Ġlocal Ġemulator " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" If Ġ${ device . adb Serial } Ġis Ġan Ġemulator , Ġconnect Ġthe Ġa db Ġserver Ġinstead Ġof Ġ` adb Ġconnect ` Ġfor Ġthis Ġto Ġwork " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġadditional Args . toMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠE MUL ATOR _ HOST _ LOOP BACK _ ADDR Ġ= Ġ" 1 0 . 0 . 2 . 2 " ĊĠĠĠ Ġ} Ċ } Ċ