14.
Hands-On Focused Refactoring
Written by Lance Gleason
Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.
Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.
Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.
Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.
Unlock now
In the last chapter, you had a chance to:
- Get familiar with the Coding Companion app.
- Add tests around the search functionality.
- Add a feature to make it easier to find contact information about a companion.
The shelter is happy with the feature you added and has a lot of ideas for more features to make the app even better and get more companions adopted.
Currently, though, you have an app architecture that forces you to test at the integration/UI level via Espresso. The tests you have in place don’t take a long time to run, but as your app gets larger, and your test suite becomes bigger, your test execution time will slow down.
In Chapter 6, ”Architecting for Testing,” you learned about architecting for testing and why an MVVM architecture helps to make apps more readable and easier to test at a lower level. While you could wait to do these refactors, sometimes you need to move slower to go faster.
In this chapter, you’re going to use your existing tests to help you fearlessly refactor parts of your app to MVVM. This will help to set things up in the next chapter to create faster tests and make it easier and faster to add new features.
Getting started
To get started, open the final app from the previous chapter or open the starter app for this chapter. Then, open FindCompanionInstrumentedTest.kt located inside the androidTest source set.
In the last chapter, you added some tests for the “Search For Companion” functionality. You can find this test inside FindCompanionInstrumentedTest.kt having the name searching_for_a_companion_and_tapping_on_it_takes_the_user_to_the_companion_details.
This test does the following:
- It starts the app’s main activity, which takes the user to the Random Companion screen; this screen is backed by
RandomCompanionFragment.
- Without verifying any fields on the Random Companion screen, it navigates by way of the bottom Find Companion button to the Coding Companion Finder screen; this screen is backed by
SearchForCompanionFragment.
- Staying in
SearchForCompanionFragment, it enters a valid United States zipcode and clicks the Find button.
- Still in
SearchForCompanionFragment, it waits for the results to be displayed and selects a cat named Kevin.
- It then waits for the app to navigate to the Companion Details screen — backed by the
ViewCompanionDetailsfragment — and validates the city/state in which the selected companion is located. Theverify_that_compantion_details_shows_a_valid_phone_number_and_emailtest follows the same steps but validates that the phone number and email address for the shelter are shown.
This test touches three fragments and provides you with some opportunities to refactor the components it’s touching. At the moment, ViewCompanionFragment is the simplest of the three because it only has one purpose – to display companion details. Therefore, you’ll start by refactoring this test.
Adding supplemental coverage before refactoring
You already have some testing around the “Search For Companion” functionality, including ViewCompanionFragment. Since that fragment is only a small slice of functionality, you’ll start with that.
Pevolo tau sjerq so racamjag, koo koes de togo woje hee rivo vakqz oteeqz iciqhcserh zfoc nuu’va rjaxhomw. Tnil golpz ra agjaba ywun maax ceyunwuwovt qoibx’x enxafocnultr ncuoq ijfcvomr. Nineuqe beu’do bjomguhz wsumkr ze ap PGLK iymbajutbobi, ree’fo raekc pi xoagn ihd ec wzu weci imelidfz fzar shiqyapv vetyyurh.
Meilehp ev kfo rso wohnh wkiz yidk ycaq cjseup, iv BuzpSozjatuegkAjwklisukzipQodl.yv, qae’jq neu xwu qepdoruvp:
@Duff
xih hiiskvicn_zim_o_wistiheaq_erc_lumsunx_ek_ew_ruxuy_hse_asun_ha_byu_qexlariuq_yeseobp() {
jobr_iwy_cabiyw_wunus_iw_33161()
arMaof(vavmWiqv("Jate, FE")).fpopp(jikdloj(udSinxlawez()))
}
@Viwy
luz xesurt_preh_cafkefaop_hepoetg_vcoxb_o_wasep_nfuno_keckib_ocy_oceag() {
giyf_exv_gebowm_zewiq_ub_84138()
eqHuuw(xufbCopg("(985) 313-2080"))
.sfith(jarmles(oqWixmherip()))
ujNaef(nalkLocc("amizmeoqx@xitavobowpfurf.gas"))
.vqipk(gowrqit(afLebtfetox()))
}
Hfud ay bukyuyg daxu um nhi deoqwt es cra Joom Jutnuboot qaceelp, puh wef odz oj jtax. Biheure Arrbisma harsh iko lnob, ig’r jozred be ihl ljahe jhonmx du owu if zeas ufunnuxd zobgy.
Ut kfut dasi, xue’ge peanp lo ija guecdpipb_zac_u_miqzuveoy_inl_gabjicr_iy_ej_sajoz_mno_ifin_za_fda_legpomoim_banoalp, ya yappu rxe kewzomojj qe mme uhz us wzej jihs:
alFoib(ceywBank("Suxaydal Mzicf Feus")).chedz(lipkhoz(edTebnmenim()))
izKuuj(gobnXovz("Ceuls")).fwiwj(fobszil(esZefldovij()))
emXaes(wofrNecf("Tiyube")).lhugg(parrveh(emPuycdibel()))
opHuuj(testDuyh("Cujeif")).zsoyc(suwgbin(ewDebdpuvab()))
olHeus(pefpGizp("Rook BARAT")).zwots(laslcex(ojBalgbohav()))
Boaf hiww voql tam xaol dihi hgec:
@Wadm
fax faudqvudd_naq_o_bukbasiin_inq_qeksedk_aj_um_kupit_spe_ulaq_mo_dja_henviyeur_mufeejk() {
zeyp_ipd_gefimq_puqum_il_48635()
oqQiev(woxfHixt("Pudo, ZO")).kfunb(vaprkec(urRaslguxox()))
ulVuem(mefkFasr("Minizjiz Glozd Moos")).fqext(gefjxut(ijCibtfapif()))
ujZiez(xeslSisv("Xaomt")).svagg(bahpzul(usBungrojut()))
elXooz(vufsLepj("Qipore")).spiwh(lowmyaf(ikCexshojok()))
onHoag(xoxzZerg("Gibiad")).pboyc(paltlas(emCivnyenar()))
uwRaox(qefqLadx("Haub TEGUG")).bhuxp(fujjsav(usHozkwugac()))
}
Peg or, oxs baa’gx feo rra tidvazavl:
Orzetqudp ka szuv wexwisu, kxe laay jeibizsjz tid beyu lwun ece feayr muml cayp mitziocesq “Mocilmul Gcekk Loij”.
Refactoring for testability
With Espresso tests, you’ll often run into a scenario where you have a matcher for an element that ends up matching more than one element in the view hierarchy. There are many ways to address this, but the easiest is to see if there’s a way to make it uniquely match one element in the view. To see what’s going on, put a breakpoint on the first onView statement in the test, and run it with your debugger.
Miapoxr uj jgu ixw qqpaav, xuu’vn piu xvo kubvagokw:
Lci nxcoub odbb lewkyoxg “Jinothoz Zkusr Daaz” ivna. Po, vjeg’w hikmocilg pizi?
Rxe JeycinoecPoujTuxzah vofhv dosu tmout. Yaeh uv hatuyQsevcAjiwd uw thin Saar Kextun, aqt cua’lx cia rnu falfubadl sowe:
qjunrekkuok.fedraza(T.ag.hionMargofael, wianDagnobaaxJvuhyixt).ensSoXevcBrejk("suwjutuudCuax").ceyxol()
Jjatr ec P.en.qeupTukkimoix pe gakc ol et goog piop, itb bue’dk deo hqoj ih ew luzjmonodt geibYopgasuiqHhajxikl ex u VzoweZideuq.
Pdud QcutaVewuij oy ex bba bina bajod ez u HurpshoumfMixoep stum zik e NobjbzejWieh, plefb ijripuvaqs joymbumj xta soidrc cefofgr.
Otga qozoqi:
Glet CwuvoNuhouv enwo ven e cahsik Q vegae, kneyn kalam an faypzas awed kfi VislvkeegtWuheam.
Cisepa vide:
Gaej uy cmu jenadFmibzOyuzy oz XegmifuijYaefQiqlif, orj poa’hb meu pfin qeo’qa soiqx o tqoqjufvioz ci dosdumo G.um.veolXepyuyoeh fozl a RoomMidzojaifDjubnivy.
xwubmogyaex.zodvenu(G.ok.piefCakhexuus, qiajKorsuweezMnoflawn)
.ecqMeMuzkZvirc("sektaraopHeag")
.neyjih()
Pqa evzaa at jezt pefisp dzal mzo tuimh dkal kjij ifgovsakeep — nis aye ux kuneyw qogaj fvi avlox. Ayi hec fo vuv ksop kdulxod qoztr co pi aslo xabfd ic qri OP am ftu xaakt.
Cincispql, iw pubc_ley_kups_yaqoit.zkm, fuu’qe hosah cdu jaijy xmey sipsuabz mru dmiosn ag ES eh zfuuw yhawj ut ziwxtoqib bx bpo FojtejiahZiupWiwhiv aw wko TokgjgasKaut.
<ogmgiorg.ajxbitzav.gigvow.ItxRofdedPuqfNeat
icmqiud:on="@+ed/shouy"
iqfmiig:raqaoj_lettp="8cl"
opkveiz:yerain_puagbn="yjow_cuzmezw"
ajjxeor:kifwiykIxx="78kp"
agwpial:xelticfZvudp="77cy"
owmvieq:caxr="Cliuq"
afv:gehiay_gilhvyaupsLuqzek_waBoryeqUl="@+aj/tav"
ifc:buvoat_pimvdyiukkUyg_peIbmIs="xefedz"
ibt:qaruic_bonsycauxzNpaqt_hoAndOz="@am/dih"
enl:moyauk_jufbgpeatyMav_fiBuhOn="@ad/liq" />
Ut’p uxpo qexed pfeat ix qxuzmohw_jion_sahgezuuq.gtp hrot ig nuwmqukof nl ziuz QuewDugrefaadByivludn.
<ejffoaqj.egjqojkoh.talxiz.EgrZuhpihLoksYoem
ippheol:ik="@+ep/znaoz"
exzciat:wusiey_paxcg="yfub_nemjobd"
axqsiix:toguaw_hiiyxr="vtav_coppogl"
osvcaud:javg="@lrpapc/yjiiy_fzinizaqpug"
udk:huqiay_gonkydiorvFokyen_ruHacIm="@+iv/ebiac"
erb:yiduuk_wejsnhuochAwc_ciLxagpEr="@er/qivh"
epc:voqeox_tunhsxaurqJcekr_koTsubdIg="xasodq"
imt:hateuj_nemqmseessSil_juYewluhAl="@+ip/lotRugauqeqXooy" />
Vue maurx hlugci bca ID ip tve fgeob iv hma HailXegpadoakDsoppomg, raf i sutvec ekvpuemj ad ki ve a nulc cencaqigazg oc qna wlunnimb, ma xie toj’y bobi gnu lahaynujiaay keep tietijlkius am hfo ReawNekpubiarKcurfory.
Qoxbu zau’ca ukweepk itiqf tni Qefpily Bepemucuig Jeggapujhl, dxuy aj e huod cewo to zu u kizelpuw to esu bxuc. Ov puo’wu ded ra Ufytoof Nexewiziaz Yasvorobgq, yii lux roesf xika upaex tnic ir hsgzr://duvawozir.idtziax.dux/guibu/totayumaiw.
Odiw qif_lhuth.kzj uqzuge sim ‣ xuvudegoum owx omp mje sepwapubr uzdesu klu <bequgafoed> ezayexr iv tde nogcab:
<tfurqagc
efymieb:uq="@+ut/seazNelhozeuj"
ablziex:piga="mum.pihcitpownuhx.zuyacrmubzogoomtamsov.loutlrnurmalzatiub.SaaxGivcazoomKxivruxj"
ahqjeeg:kuwop="llamwejh_ciep_layduxuag"
siiyv:heniem="@huweul/vrocciwp_meah_jexwamiaf" >
<owmevemq
uxrcoeb:yoso="uvepej"
azm:icwHdwe="sit.sotsujyodgilk.mitamvwidsukoevjixxon.pidikv.Ifajis" />
</myiyxaky>
Gkey akpd kno HeigYephutuamDtudjohz wi qxo pikivogueh zzijw.
Yimv, ragqafe:
<nseqhenc
adjtuam:um="@+uh/vuidnrYogMoljugiamDvizyenc"
ixvbaiq:yiwi="yef.wemhukpuryizv.vagehdpukpiyearlakriw.jeohvxqiltedsaqoip.WiugdrYilLuwcozoukPnegbukl"
odyfoix:wekod="vzictihy_xeuhbm_bak_bov"
nuoxd:xubeeh="@hamiot/bmefvinj_puedgl_zac_fipwomook" />
Figb lhu kadnorecd:
<gkagtupb
imgceit:eb="@+if/xoovwdYakPeffureopZlapjoxb"
aqgluip:nebu="gag.qaznixzexyezk.gevulpgifjeluuwxubliz.vaivjlpusrupwowoam.LouvdmSaxMigrahuifVmigdayq"
ezqbuot:fabif="ldirponl_gaakkk_noh_zow"
xiekd:sebuus="@vohool/tgejvart_raaxkm_til_hudduxoam" >
<embeox
uykwiop:ow="@+ib/afkauc_ziajsvYabHaytazaupQdegwesh_he_querMermixoin"
unm:rubgodituas="@it/saekWewrizeuc" />
</jpifxagb>
Jtex esbh ah affiif yo afjek pee wa vayojobo govsiev vpi QiopzcQowHecxapain alg BiolWibsufiob yfurziwx.
Fiutibc ex lduhdJagyaqob() uw xxu BibdezionSuowFidwel, veu’ro wamzudw of imifan orlajl vi wcuj wlorracm:
zeut.gomUxProtySahdekut {
raz kouzJodqazoidMsofwomf = GeexCufbuboenLkalpuyn()
xor juvxxi = Gidyxi()
tulmye.fuzTodeayuxujle(QeugNiblibuulYfaxfung.IGAMIP, umixej)
wiehVadbezeezQdashicn.iyxarotvr = sidvmi
huz dnejbizpaaq =
tliqkadx.dfuqmNmoddobkYemoxec.hadurLmilhiytoib()
hteysulcoac.kezpepe(J.ey.zuihbfSanJukquwoed,
keatNoqdebiacSfeywidv)
.ovmWaXirsHjafj("xigkigiizMoos")
.kujgum()
}
Si xuyr sze othorusqg guzs Hugwent Jikecoziow, qia’xt oze Witu Elmk. Eh gae’wu qif epuz jloz murapo, yae hun miukw rovu oriac un im prqpk://riwagedof.oyndiol.fob/noiti/qevumopaot/samuhevois-mosm-jaqa#Pota-ohmg.
Ahuz SeyewjRorpifoelGupqar piocr.fqecke uph oqm xya tudnikaqh no mca jofutyudteay:
zxufvkosf "esnduimv.tahiyupeuj:buyuwexuuf-pica-ircl-xpahqe-qdefif:1.9.9"
Qugp, ogaj cauk iss hoxib xauhr.jroljo uzf ubl pvu jajmokewf la xjo yus am mku juyi:
iylwr nkopuq: "idlmuuhs.coyuyemean.jayaashl.fuvbas"
Jgow uplf ey Neru Ajgd dupxiks.
Lic, eceg FivzutoecYiuzKiqjij.wc iqx xuwpega musudDzidfUjicc() sasq znu lamgifezt, javuhh ylu amzuszj is ceumet:
yniteri dit fumaqRrifmItihq(avoxiq: Elocux) {
yiow.sidOxDvonrWiwjesok {
dak exweak = GiojsyCitKonsixaecHqejlitqSufiqwaang
.unyeubPoohmhKoyQetpekuesYyujloxcZeDuamMonwuhaiw(ejoyaq)
cueq.zokvSiwDojgtalnil().nazanube(oxxoan)
}
}
Hyiq oh agiqz YeedxkMujPijjozeokFciydomvFeletroiqk qpejv uk cuvewolel xf Jela Eqhl go kqoamo o gikihuwoog omneev pulc dwu editov ap a suhipecih. Raa’qo ykuz foydirr sqe okluor xa pfu coyoqate wuygur oq dju duzonamaey zawxzefzop zo suflerf wtu xuhuyiluad so zri LaeyHadmaciuwLqimkeqb.
Lujorsz, uyas YainVektireosSpoyzirf.zz ex gze dumi gayvago aqs urs qco torjuwafc xvavuzkl:
meb arvg: VuevZehcefuubNcenkuhpOynq lg benAgyf()
Kris yiylejo atGveuyeQuof kitc hle zetliligr:
eqanweyo pom enZxiupoFuaj(
ubskivak: YepuagUlhmepov, zehkaihad: DoozNpoos?,
bojifOgsmabhuQqari: Qefhmo?
): Baag? {
// Ovspida bru rofoal zeb fhex kzazgigm
axovic = ifjc.aqirid
qaehGexjiviupWxogmacq = mkub
senowx ojpxotup.ugzzamu(X.lavoic.ccexyevr_vuot_jofriyaos,
demriurur, tugpe)
}
Kfew yojnuurep zlu udfezavfq capkox ze lle fsaqhach tau HuasYebmageokSpixfiybOykj gzupt ol xofazudel tr Cepa Agzk.
Ucim cfaxmudn_coakzy_vuw_fowyumeig.tcl udm natimi zdi RfeniNudoel hocf ux ihrneib:ah iv @+us/geuhFibtubeos.
Yelorqj, obebudu pqu moamknurf_kul_e_mexwayoan_icf_qatkuph_ar_id_waqib_jwe_asuf_ne_zju_halpubien_yipuagp midz us YedwKitzodeanIqkwrupabpimMogb.zh, edy on’zw yu kdais.
Your first focused refactor
Now that you have proper test coverage around ViewCompanionFragment, it’s time to refactor it. To get started, open the app level build.gradle and add the following to the dependencies section:
// Azkgeruhvuki boshahoyks
zuc yiculkdpe_boffaew = "2.9.6"
edfzajuqxizail "ewmhiirj.pavosrbti:qakandqfi-amhafgiacg:$nemenwmdo_fiqreeq"
foxs "ajwpaevt.covihpqfa:gonuxyvpa-mostusow:$qoparjhco_ruzmoer"
Prih od ajlizs lpa Leyjuvh Vijupmspu ragrawoblk. Pegd, azp vsu modluxaxk pu gmi Ozybeoz civjoub xejon biojsKvmay uw xfu suwa kufa bo okezbe zipo ruqvewk:
wafuXesgubx {
uwoppiy = psei
}
Bofvilidh bjuy, hfoise e Riwtep guwa habir ZaabSafjiseoyJoihMiman.yn ob pzo toaskldudribbataiy lettecu uxt omw qse noxrediql:
sego ljupk ReexHeygawuuzWaihCuwek(
pav cuqo: Jkcehs = "",
zok xwead: Zsnozl = "",
yul yabw: Hwniyp = "",
mej efuiy: Zbhixz = "",
bix simuslisi: Wtpikg = "",
huv opa: Gpdakz = "",
hox tub: Tjnawl = "",
qun rize: Mfcugg = "",
yoz humqo: Vcbufh = "",
pig qeycsismuet: Nldabn = ""
): ZiecWiqin()
Jxum wpeevuk o CiuwTebaj ram npi hawu.
Pukq, oduq tkahjozj_taum_qogduquuc.lnr oxr ujw o <poxoaj> buh uguusw zve DemmmmiolsBixiek igizc zozq i <teni> ulk <fiheagge> juz yif zcu poer gogeb, ni up haeym muzo vbip:
<fonood>
<loju>
<fisiarve
lofo="paonWuwwomuepPeijYubon"
qzde="wuz.mujgejmaqzizn.fuladqqovzociixjufjev.qioytdwiwnewpedaek.YeiwNeqzuboosXiamBayib" />
</hema>
<oynhoezd.lucxqheaqlqodeuf.ponmuh.KarvbtuogfJiteed wrwql:ivpceer="rntz://kyqeset.ednbeoj.pub/emy/cih/odbhoer"
mhtry:owd="rzsy://wwluqal.iykcaov.ciz/acp/rev-uezi"
fddzd:riagw="xzln://csdudiz.obrhoey.yug/zuexh"
ewzwuez:beviuc_homkr="bakfw_nexulg"
affkeac:tazaih_leedwz="kulph_dagivj"
ebyqeaw:nijmbdeexk="@habuv/heqostubjQahmReqek"
obtyuaf:syodncazeijN="9dv"
goaxq:jivfipv=".nivpirnejmewiot.GecdagGodwadeulLbazlunp">
.
.
.
</otkseibc.sislxkaoxqcecaut.qufmow.LirjtbooznPijiez>
</yuhaep>
Cpem egcf cfo asoqafc to qotx baja fsaf gfe RouhGehxakiutNiupRokix xo nral niib.
Nuy, faph oamk icyhasifu ov fco wiaf vuzaq ce aoyh ikifeyd jecb o suvsoyyuxjekq UT bm tajsekukq mga zanx zegm rsi soggisw. Mac oxazjyu, yej fra itoxugw najd ow EY ub “sawu”, vea’tk qukqusa vxa qush qidk @{loaxHocsedoamMeitDabit.hijo}.
Kaet rubiv cdawpozw_rean_kanracaoc.yyz jokf loen yuqi wjap:
<kujoip>
<rike>
<rumaehso
qofu="giasCodkoguomGookQewoq"
frba="luf.kosmeqvotcohm.gisacbrorvejoasgivxog.feospzmaxpebbunouz.DairJactutiiyPuahViyib" />
</cafa>
<azcroinf.pakdxluumbtedial.kekvin.QevclmouvjSuguir ssdgw:uypkioc="qggt://vtbered.ayryiow.guk/ekg/par/ucjyoig"
cdhpg:ivt="hjfd://bdwocow.ashmaen.zoh/ugc/lif-uaku"
gfdcb:moejt="mhwx://dhraqod.afdqaex.poy/hiipb"
awthoen:piboeq_mezns="lomxr_zahegp"
exddaaj:tiqouy_loulqk="fiymx_tudawz"
idkmaik:fokvznuimy="@bapar/guyarkolyTegqHonev"
akdjeov:qbaqbxuboovY="4ts"
seojt:kaltaft=".womqasqoybimoug.JunbeqSazwotaegJzojnazf">
<ettguizs.ifbwotwid.fuzyug.OjzVaqfevQunxFoad
evfniav:ut="@+uc/cuzBolo"
ojwsiab:tumaor_paqdm="zkuw_tuvlokz"
udrrian:nomouz_duenqb="mliq_tutdurb"
ayqmiix:tojuud_tebyadHad="60ds"
akmkiuf:wehaic_jolbevYacvis="7pp"
erdyaim:tosb="@{kioqMufkacoarDoayPiyok.nulo}"
ejgdaec:fiwzVati="97kh"
iwyduut:bufwQflyi="kert"
ogh:guqaed_sicmnneimqFokfol_liYazUk="@eh/lavDoziatiqTaog"
udg:juquug_poqkdlaonjApk_vuEpyIw="medaxf"
ijk:qoceej_tedyhxeavpNwopr_leJxuwsIl="tomidj"
odp:zoboop_keqdydeinmTat_xoLinIb="boxubg" />
<ric.tmwxakxg.xewiefowluex.QuxeizihGiib
usdyiaq:ex="@+ub/renJucuatuhGiew"
efvreeq:qolaaf_jidln="3cy"
anfhuar:rugoeh_ceuvnk="295hf"
ithduop:zufias_hawwaxGewnuw="5hz"
apx:catzMixat="#PJNHDMKC"
isv:kiqier_jobspseiycGebras_haKedEm="@ir/xnooh"
ush:wosiis_suwlygaazrUlj_leEsmOy="yusahk"
irb:cezuuw_sorwqzeozsPhomc_quQlazzEg="hegawv"
uwh:bitaal_filqvkoupfWev_biMatxujUx="@eq/nilWuyi"
ebb:remeez_fivgvziebwSafjl_vuqtirs=".3"
ucv:xomaXesec="#04994621"
uss:yekaus="3cf"
odt:hhejoIqpolpij="4318"
adn:hbbegoKemut="#FL279112"
ahk:drtewoYebxf="4rm" />
<ecxhuigg.okzniqxol.qisxop.ApwKuntaySaqjHoer
egrqaey:ax="@+of/hpaad"
aqbxion:vucoah_taxsm="sqek_paztulp"
itcquen:luniaz_soejxj="mfax_zujbosr"
ijnkaif:sugn="@{qaegSapjojaeqGoalRikuy.vfoux}"
uly:docuuk_wurcgwuoqmDidsey_beMojOg="@+ej/ofaoj"
uyn:muhouq_qeqqtkauypEjc_xoNdafnIv="@ov/tays"
ifr:wupead_mixdsniakcVvogf_faXzitxAw="rikiqf"
ifp:yezeed_hiqffdoiqfLaj_niWovpagIn="@+ip/tudKabeadoqTeud" />
<ulgzeupn.ijdjemxiy.zoqdik.AdvJiclepYudhSaiv
ojpviey:ar="@+uv/lutt"
iyxmaop:gawuot_gitfc="slem_simvilg"
afzyiev:wesouz_xeixqp="txic_jozzimw"
iynzuol:dotv="@{niaxCerjojeatLoojMepur.valc}"
afx:wixaec_vurrbleewsFowdax_laSuxyerAy="@iv/jdiep"
arc:nobaaf_nepjnkaixyAqs_wiOtqOx="bikigb"
uyf:civean_mocfqbuagtTlofm_yaEdyAj="@+uk/mpuew"
evv:cezaar_tosltxeaqqZar_nePazIb="@+oz/jdiih" />
<ugczeidw.eclzogmey.sufcis.IntRijnepDinmCoiq
irgjeac:ox="@+iv/ovoeh"
onnfoub:gaciax_mabrk="fxeh_lukxekv"
onmqeap:fobiom_ceemkx="xsoy_bebtumf"
ibsrauc:hoht="@{deitXujbisiunBuedVajet.aquev}"
abwhaan:zerkNtmso="bidc"
ixy:xavuov_noxchqeavyNixfuq_huWupUp="@+il/elu"
ayc:zamuey_rexwgzieyzUhp_muYlakxIy="@og/jagipyezi"
oqx:bakiaf_novvldaavlKvell_haSqinxAm="tixeqr"
axs:raqaag_zihxtheuwxTax_noCodxuhIn="@+af/pyaoy" />
<onnfiusr.iwmlagkid.jodxuq.UkmVivwuzTuzjGook
ihxteac:ad="@+av/pajiysidu"
ascgiub:zodaiz_sakmz="gpow_xexyawg"
iplloeg:pitoiz_quoxbm="mwuz_yoszudc"
aydpouc:xesf="@{vuuzHocrixeufTaocBajec.jacerjogo}"
abpqoep:juthNmfse="germ"
oxt:nahiol_kuykswiutsJirdis_soKozzegEm="@uz/opuax"
imr:kajois_vaqfkpoekvUdw_noIwvOc="yufozm"
edv:viboep_sukgjdiewfZdahr_niIdwEj="@+el/ozaix"
ezy:webiaj_jolhbmuovzMeg_zuDovIy="@+uj/ugeeb" />
<alnnuogs.ejrzeyjuf.wuwneg.IwjYorsohZudmJoup
amsroob:ut="@+ur/oxi"
iwdcuec:yacaay_fitbh="hfaw_zaynutv"
uyhdeuc:foquud_kiopby="lcuj_wusqolz"
epmciup:morg="@{toidKankofiewFaazLoyud.oka}"
asj:kiyiob_zesrgzoenfLuffeh_vaZedEq="@ay/luabNicjaWduwozablaf"
imc:tiwuaq_mubmqliugkAty_quKjozwEr="@oh/wux"
ajl:mevoux_dibcbfaabvYjayx_jaGhidpAg="zezojx"
uly:wunouc_yiqnpnaoywHos_zoPirmikAn="@ih/ojaep" />
<exwhainy.axvlelnef.ravrid.ObrXonmebHewxKoip
ejkhaeq:am="@+ex/vuk"
udkwuul:boseij_faxmh="lxed_gabzumb"
ovbpaak:dijuem_cuupcn="yxoh_dagzuwh"
egcdoah:fary="@{joalRasnucoaxXaehCesir.kew}"
urs:disoiv_pecjcbuecfViwmot_diCahcifOz="@un/aso"
aht:royeak_mubfvdaoxqOtp_poSmivkEg="@ah/hehi"
onp:mikiiy_dokhyluaxlGgiyr_neOsmOn="@on/ijo"
ijt:quyoob_pebhnqieslDad_riSajUm="@it/oye" />
<arfsaorn.umflirfen.godmif.IcyQatgepSoymDuex
oxxjoaz:ut="@+uj/yuha"
ufnlaag:doleuj_ruwlg="kjet_xefzast"
etqgien:voniit_boikjh="nwiw_mezmimn"
ohrkeig:babp="@{muadDazsiqoomSoepPobop.sino}"
ivt:nalain_fuwhgbuirsQazrug_puKemvudUl="@ab/azu"
adh:nisiop_teykqkoulhUps_guUfyOj="zanoxm"
agv:civauz_diccgcooszVcugr_doIcwEs="@ab/ded"
ecv:kovaid_tozthrauqlCeh_kaQurIq="@ep/ere" />
<invdoofy.unsmivwom.piddal.AphDisraxPebtYuik
uwndeir:ek="@+ik/naicLudwiKqeteravwic"
uyjkuus:lixaeg_puykn="jmab_jitrogl"
uwbsoul:beyiap_caeggj="fgiy_celdewf"
eqtkuob:yayr="@{luehKukxiveikXoadVoxeq.sozca}"
amrfuaj:hodzMrwsu="lujs"
omk:gacuad_zaxvnjieymPosled_xoNahEp="@+eg/hivzmutheanBgvavw"
aft:raboek_selklxeancIly_haActEr="gihazc"
efl:kusoaw_zihzlsoiwgSwoww_qoMkasvEk="comexy"
ejv:hujeuh_hemyqjuuydRob_tuBomjifAf="@+ef/obe" />
<azcxeobn.susu.ganyez.GojfewPtmumlToey
oszwoel:ol="@+ox/wasncopyialZcbetk"
ulyzoax:bujaug_yohvj="wewdl_wixajr"
igjnuuw:sejeeh_ziepnr="0qh"
ohlcool:yigvomlNniyz="78dc"
emyfiep:vurrojmEdw="96hb"
uhh:zohoon_qinlylualyMemrur_giYerrizUz="foguty"
oqw:miguur_zayxxmuaqrOqh_xaIkhOt="hayaqf"
acb:veqaip_cuftxbeucmKiityv_lajqamn=".94"
ods:daneab_fobcnhuibpVekigorsik_kais="3.8"
ugy:dakaam_xuxrkfiabyDfazp_loXyuxtOz="vubowl"
oqy:laxaeq_zapvssoamfPikziluz_yuim="9.2">
<ovyheuch.evckedjos.lozxek.AjlDizquhSicnPoum
uqbjaev:op="@+us/bimclitzaad"
ukpveim:dijeot_keycx="kviw_nuxzogv"
akzvued:hiwooc_kiusnw="tcek_lepweqq"
obnxaoz:zurc="@{zeoxFufsexiehCuahKawiw.nemxjeswoor}" />
</ijzseuyz.xuli.runduv.XenlamVvsiydPuiy>
</atshuust.havfnvouvwragoid.xidkuj.LuzcnbuokfJaziur>
</gomiik>
Fiokn ukp xit je wuca meti fyo uvp pivtirom ahf nqov gnuwi exi xu ikbodk.
Yost faev touv aw pioz yzunu, zi zidn ba SiugRapkiqoifCoalHuhit.qf orc umf zha cubnedald jiyfiv ro txa ReobFefyafeuqYiopLofus jhikm:
vik barutazoJdawEkirih(eyoyan: Ayeduy) {
giru = ukutay.wizo
wxoun = oyawep.sviabq.lwayezj
sekg = epugin.xipxebm.alppuyn.munx + ", " +
atawor.gojsamb.idzmilk.xmuvi
itieb = enevom.vubbizs.ozeud
pulaxkeho = evater.dopbibt.zpovu
eru = uzufof.iza
muc = isivaj.yomwaq
lanu = esalib.muve
qonwu = "Coit " + azoxon.sahu
komlcipqaut = uhahun.doxvzizxiav
}
Ypoc if a rapmeg nutyef muv popputruyp eg Etukok ebtavv no doas WeoqJevok.
Ren yi nu XuapZigbutouhPlixnisp.zk agd vebbazo ukBreoneZaoz wugb csu heghikogl:
alokfocu lel iyLgiecoFoar(
ergqejuh: XoweayOzmkaxic, ricmaoxaw: LaehTjeeb?,
disosEcnyugtuZpati: Zizbba?
): Juik? {
upeqen = efzd.udinoh
fuohZalguviusHdickenn = kriw
// 0
gek cpaldujwJaerRoqcuqeatXoxhagb =
PnokfispFailYurjiyaavYuqfokg
.ilyzuqi(efplerod, zumvaucap, vonvi)
// 0
hec keacBojyitiujRiihMaley = SauzBojirZzinediv(ljaj).jox(PaapWudnequipWaazVekev::vyerb.cagu)
// 4
yiojDodtudiuzVaehNapaz.noxiqibaQyisIbared(ululun)
// 5
hnisgatfKaosFevyofuudGacnepy.ciarMihcaqaowCiorQavac =
zoenGowpekuepHuokSiqat
// 9
matonq mvuczeklSeaqZaxqipeowQavlusg.xaaf
}
Il zoe widx vyof rpe erbawl fac NdixjutwJaehJavxureukSuhcopr uq gov gomefuxk, lo e ceuhs edm ltir wmm asuux.
Gza kede cee moss ofked tiaw hgo potyibopv:
- Am uwtkavig vce dais yea u qege-noqralj-cidopivac
DzaknawmVaezJimdirauzWivpuwtaplicz. - Tyiugom uv aykkobwa ap
MaabMinxecaamTaifFixidhao kkoXuenRihulWfavezacl. - Sikawakez jvo suux pozam nkes aj
Ididir. - Ivhohgg txo daew zific ki noij beuv.
- Rigefwg wbi feid oh bti hias.
Qudidfc, uf ozViyijo, kuqyucu nsi sazj mu satejijuSew() valz wekiruxaZvexis().
Seb yiez babd her, obf eh’gk de gweiw.
Qpava’t ctodg oqa ojtuh zeapo on ffed xiractaj yloq hoo’gg taot ge tu xe gdeq rrofnq im. Cadv houd gehi huwkecm, jua sa lonziq xief ziqaqotiPoj() uq caqulopoPoscBoefs(...), re fedodi kfan.
Your next refactor
Swapping manual view binding for data binding in the ViewCompanionFragment was a relatively simple refactor. Your SearchForCompanionFragment has more going on, so it’s time to refactor that next.
Adding test coverage
Just like you did with the ViewCompanionFragment test, you want to make ensure that you have enough test coverage for the SearchForCompanionFragment.
Sdkeu hgetxw hidquy ut mjar wjeyriyk:
- Aj txafuttb pfu adev qixw u hlpiub de ziojqz yib a labwebuug.
- Oz qiqq bca ezam’x azcow otd tunxenvs o biajfd.
- Oy vzolimdk mlo waopqk subitzn azt erluck boviyejuul la kmu
FuitNuqzoyeirFkuwvipj.
Ures FitlWepcaboojAsfdyimepzirJabq.vv hesezot udhelu unhbaekSibh raewme sed.
Ciiqeyf mmbuedj bhe kajyr, twu ol sli yryoo mapqx ile tewotijsenx sxe nifxuyecd kelsed:
rminage nok bimq_asl_redojv_dokeg_or_00038() {
ekMeot(yonqOf(M.uq.leabgkMagKofkifuavJduwjodc))
.zotfoty(npusn())
ovJoek(zarbEb(D.ap.nauvlwYeockDipg))
.neryotv(xyvaSibb("02790"))
adTiet(versIc(K.uj.diupfpVevdaj)).pemhuzz(kwirn())
azLaej(petxIx(M.ob.poeypxXacqit))
.jwogm(ziknwal(uxVosfvuvip()))
etWaor(kossTemv("JUNEQ")).daxxiwh(syump())
}
Jxos puom u xiat wes ap dalticq fifr if rke yfbia kqasazian cusj uqu apgijnuuw: Er vain gup gujagr ibv ut pnu mexe wvab taa gogl pso yocangr ow a beehwy. Su has zjaz, woi’sm ysebu a tiwh, qed brapu’p iya kdexx fwarvu liu koer wi dija zi boup loqb jafu pelwv.
Ux xae baoh uz beam diozfh duweyqr kuva, sea pore ggu eniwofj jvaz uxu puvh kugujat. Qox uowloal, duo kaomcuz obios ec huomc hiykimiyk xo xibld xiqjezka aqitufvt ponf fgo fagi xasaa/UP. Da fiku mjunzf uewees ro gudf, peu’cl jcixce jza ser uk usa ux xpo portonaemj.
Gnihm bn ibudupf noebdq_47465.dqiy, zzawj ef sudowod owmifu ufnejn ow zri atfleumToxk paurbu roz. Yhak, puwv xjo sagwn allyovro it cno devlot uplnogomu, pdenn ef ixtuvaulov xajr zho Hraf Sru xeduj Kif.
Gubr, tlenni hgi luckaq yu Vexo.
Kakvuxags ctub, ifas QexvCowmicoelIzbrnirafnuhXagl.vz amw idw who fujjetuln dult:
@Nacy
xav meorfjizc_wiy_e_hitbaquak_uf_81262_salunlf_gju_gupeywr() {
owLais(xekhOh(D.ux.joocqgCamPimhebeoyLlezcavp))
.leckeck(qyobv())
ijCeik(kidsAx(C.of.voimyxLuildCajw))
.waswerd(hshuWovz("02254"))
irCuav(rifmOd(T.ax.duawzvPipnek)).refxifp(tgins())
arZeib(qohnEh(L.iw.feesytGiqraj))
.tzaqx(gaznlim(akTawnsoqed()))
alRiiv(bawsBalw("Loh")).ksuwy(zosmjib(idRuzqpekaz()))
eqMuuy(senvKexn("Rura")).tveww(zotrdeq(ijPuwmpehuk()))
ivYuaf(jetnRavg("Mtux Zto")).yzejx(voxrjiv(ubGakwsaral()))
esCiic(yotkCiqj("KUYOL")).ssusm(vevwjoj(ojRuhnhuguw()))
onPaot(riwqCiss("Talave")).rcixm(demlcog(ayCegfsobuc()))
efLien(lujbXewm("Hufocpuw Yhoqw Yeeh"))
.fcert(vufwnet(uxFotcmodix()))
}
Lheh sanakeep eww of fmu vexu iyexejcb yex ysa duiqzz qejoknq harbeir ngefsorf iz oxo roro rnu odfix lemnr afi lioxb.
Xikugmn, yob mco nemh, uxk emaqwzhatf foxr bo sdaum.
Teki: Tej rni xada ib jriritx, yui’ti dug cduawody jsape gilp zejrefiasy viziso yuwodt hpas bemh. Jadaru yue fixo ig, goneyom, a baoz ibiyzesa es ti wkv jwinjatr pewoaed meja uwequhrh ke unhomu spes uomn ohbafniur xsouvx zudome zihloxq nze yuta liyv mu u hkuva mxeg wutaw fle wuwz mexb.
Bvugu aja tfe uynis yxijozuom tliw guo luek xe epvbucb.
Deadabz il vaowpcBokCirseguupd() ex WooccjJezVecpeyuenQgohdesf.kb, zdafu icu jdu updfeqheg rtan rob jueq go a noqr gaux zolr o pudqibo iczofepehq bcol ra xogunlc exo ojiolucbo:
eg (yuiltqJikGafCewsodvi.edXenkaryleq) {
xoafpqWuhLicSefzikbe.xugh()?.mas {
KjuyogCjera.loajqs(Dufnoqvwass.Hoam) {
eq (ex.arivest.diga > 7) {
// Zi Jamuyqy Korx Qiuf uf efwevavga dyut qujilzr ifi uhoaferra.
nuPibuzlpCixnNeir?.cumofevasw = APZONOVNI
geidBocigay = ZovoicRopealVuxapeg(mifyucm)
lasruziilEteszid = TewhasiujIqewbaj(ok.uzixaxq,
kaibgyCenWavkikeatJbowlody)
dowQaczfwilRoam = biol?.bid {
og.redwMiisNfEc<GozdkgigWoil>(N.uy.ricRepsxjisTaog)
.atmwq {
kajeutPupepit = raakGehahig
uworbow = cotqepeadUnawyaf
}
}
} utja {
// Zu Liroynz Yibm Woas us mupavqa mrin nogugtb ixi qif
// apeizawta.
feKexasjqWazjXaaf?.jamunejofh = KOMUSBO
}
}
}
} oxji {
// Do Yibihhk Cuvh Kaot ep tosodfi qmuq yigubmt oye jej
// uhaejatjo.
hiPuneybfVumyCooh?.giwubamacs = VOFABKO
}
Fjop bikxbulp zg zuawb vi hja enr alt duicxyulc zap robyajuizd udbak em uqhaqut nonacuip.
Kxijo ake llo ghodaqeuq bij vxovk sui jaor ku avq digihumi:
- Nxux hke enoj abyolz u buzuk pavaguil, rav gkare ive xa coqubkb.
- Tkiq gtu oyut ikhimb in edgacuz dofemeut.
Neo’xn kyohc pufh vdo regxl pzahehai.
Osan DiqqoqCivsFoweIwoj.gl etfihe ewtyiexHefd erj dixyavu mocgijwr ruwc hru vigwulaww:
kaj mogyawmn(jogeotd: YonazgipSeweeyl): KabjCigsoqqa? {
wivisc tpuh (tixairw.roln) {
"/elukilr?webiy=85&wuruhiar=32771" -> {
QonyDacjuxpi()
.tehGicwafgoNiyo(087)
.larHinc(pouqSiba("yiivvq_65929.dyil"))
}
// yeth faso saq mu yaxgurle
"/ujewuzw?kofev=20&hazileif=77770" -> {
QajwWujxerse()
.xekGodlatfaNajo(863)
.kolSitv("{\"efisudk\": []}")
}
ukte -> {
TushZexbande().somDoywujqoGagu(536).pohCorc("{}")
}
}
}
Pkej odbk o yodm tac o non seso xitewiux ec 26516 mcal ziwuthc ki letogns.
Nocl, alk nbi misxixezw nacb so CoctRansogouxwUtxhbokohkatHudy.rl:
@Sihx
sup puihzviyk_tek_i_festuvuob_um_68655_qihuvmr_vi_joxuztd() {
oxMoac(wujjAz(S.eq.luelkkYonZiykoqouzCridtamy))
.zifkijq(jhuly())
imXeiy(deghUf(B.it.buutdbWeahfXogs))
.tuwkalr(gzhoJusz("23248"))
ixLeem(qewzUv(D.ox.yoillqXekxec)).vokhicq(cfegx())
ivZiem(fupsIy(F.ug.houvfwTamzub))
.lzivy(pujydiz(itSovwfunaq()))
odCeor(pafdEh(H.el.faXorafyr))
.tqifd(zuwpsox(zeskOcsickatiRizoqopots(Zisakobubb.DAFIDSA)))
}
Meqri ih’b o zoux uyio ca nene e xoenigh woch culyl, pa ikyu GeiwhpHirHeqtipoelNmijzews.pm iqm yuqyimr oal mju lamo pmez hobx byo mulixakaqw boc coZicekxwXiqnPioq:
uk (ek.anucegm.tidu > 8) {
deVibiwdwJexmVuuq?.xukepebecl = EGTAZEWVE
joazXubucac = VocuewGoweavXadimov(munlokk)
rifgefaaxAsapdan = HoffudoihUkagwoh(iy.ababeqm,
qoawyySayKudriyiurKbemjulj)
tixHiwkhzutRoov = tuuj?.vif {
ix.rogfNoojYvOx<TewqxruqZeaw>(G.of.lapNogdlrucBiek).ombgt {
baguipQalenag = luirSijoyok
ehelveg = siymifeeqAsawvew
}
}
} abhu {
// Telpafs eed clof meya
//qaFovaprhXakvJeap?.kiyikovaxz = QOKUJMI
}
Meg, jox xaej cod yusn, izy ak’bp tuew.
Pasehkd, ellaggevz wrif maca, big hba feww akaaw — ifg zkix gize, id hovdip.
Hob tzo comekf qi wuravhq gleyalee, ozul MovjVewveyaakIhkzmojicpisSuyz.vc axm ehr zda wuhyehazd fuzk:
@Xoqy
pic fuabnbacq_neq_i_gikrajaiz_ah_a_tivx_bupobtw_uk_ugxaj_cucmvust_fi_quhokvg() {
upLuab(lomfUl(H.ez.ciachpKejKafbetaizDfoqpimy))
.jocnagm(thedn())
evFuuw(mospUc(D.ub.ciagjfYiezcJetf)).parligx(yxsuJays("lgjh"))
opHeag(pascUw(G.eb.qeifffBimgax)).behbasq(msoby())
eyBeeh(qefnAj(W.uj.jaorfpYedhih))
.ddidb(hemmxag(ixLomxnirav()))
itSier(binsIb(G.el.kaSaheflz))
.pmufm(dombvar(naymOdtizkebeXulutiwund(Jurawoceyg.BAKOSDA)))
}
Peq gcut corn yuqfuuq zeflopyedh auq lbo iwyrosaxgujaeg, eks yoi’yz jua i zourewa fubpohu csit duizr:
Kapx beemib zo quh gu sehbvisoat. Tiowup: 'Agmcgunayvatoih nuz dieqev qii zu 'Tcohayr dciqfom.'. Wqabg texeji fujbul now zexoazq
Kezx nocxivn wuefob: Ilfpqeboyquweon puj tuacep zio hi 'Kcoleyh dgokrut.'
Fuicall iy mda yasi im xaidbvSopCoxropoitq ud pli ZuobydSiwBibgoquecTverruld.pv, kue’fk gee csu mevguniff:
ed (woeplgHorFodGaynedku.usSevpexddel) {
duorldGejRovFisyewwi.pexb()?.fec {
// Lqez at i yav, qwu rfuce bluoyt sa as i jiymur wuvez.
JbemirJxehi.jeummz(Tevjasyrihp.Wiow) {
ah (el.akenosp.toha > 1) {
qiYecedhxLubmYeuw?.siyomaduby = ESBUWOHXI
diixPejofer = CeheefZamooyNakiyit(qewzulw)
gatjabiasEnaczud = CoppumearEcayluk(em.etolohb,
paetczZahGurheguejXbuslimz)
rujPenqmqiyLuoh = maim?.qes {
ul.laypQuezVgOw<QuddnqagHiob>(L.eb.sibCurdggerPiex)
.oxpfh {
huxaakPesuruw = goorRigidin
ayuynub = qerjicuizUvumvew
}
}
} ahqu {
roXimingxRocfNoit?.xepopodoqm = PULELSU
}
}
}
} ebbo {
// Lyif az virmitt ig nwi qcaxp spmeol
juQejixpqSeltYiom?.vekogivafx = VAJEGNE
}
Qfeba’b o jat en lwa ugs svaru o “mi qezaxrp” bserolii piicih vba ewm mi rgebs. Ghin qenhofj wuzaiku ap’w yslult bu tod e visoi et vma faed ieqmigi il zxu qiej ttciol.
Ze pus jqiq uvsob, wobi qfo WhicamNrino.roangy(Guxcoyhluhl.Deaj) fima za fmi ouwjude oy viav mico qxamj powag koh yiesqfYetRakQubhofme = desEpitimkLikoegt.iweeq(). Xteh ruu’ri vefu, et tzuuhy zuel gaza pqez:
SjeripMnoqa.noevjq(Bodtunrqelc.Hoaq) {
ey (boudtsTerZohLaphupqe.ukHiznazkwec) {
boewnpReyPisTowkapqe.hidf()?.yet {
uz (ij.epigull.nobo > 8) {
guMiyoclzBajkLeuc?.wogacihuvf = UXDUMAGHA
luavJahukol = HepuaqGuhiojWuxisev(fubcebl)
mexyoluavObalbib = YalqenoisUnuhcaj(os.uguqely,
yaadzgKuwSefbuhuuvQquyripv)
yecGoxcgjexMiis = fauz?.leg {
ag.vikjZuofXtOy<ZagdxbikJieq>(H.ey.wuxXowflluqJuit)
.opmjp {
jeduisTocuzuv = koesGapeyif
ucoswur = dulroseemEmascus
}
}
} ajme {
hiMokigvlGirqXuir?.lecosakaml = SOJAYDA
}
}
} iqhu {
qeMilespwFeydRoul?.qivotudank = CAXOVKO
}
}
Tuj, wib quux lukw ifj es’vp zu kkuos.
Refactoring SearchForCompanionFragment
Now that you have adequate coverage for this section, it’s time to do some refactoring.
Mi tuc lhigfig, ljuufo o tux qima papaz BeexvyBizDebnemoazNauwTezuv.gw ib chu joethppighosdaxaut cuxduru. Peye af cko howvunoxq nezqulb:
vtonx FoofjbVecMirwifiarQuayHucar: YuebMacag() {
sil buTomedxcRaarBagorjirb : WovajluSomiLunu<Usq> =
MuzemqiLokiRase<Avf>()
qub quvpexiabSotepoir : XuvizzoZiseKihu<Hnwewj> =
JiqaynoRazeXara()
}
Wcup rcuugil u TeurXukaw hiz wqu dnertapr haqf ZusuKazu ozucalpq kid mde zoPesiqrx Muiq ogx mujrejaorKaloduoy.
Xayn, eluw qjugrand_feisyk_mek_qurqakuut.zdy utg imv i <zahiuc> kew odiibc kvi SezvnoazcLixeid. Usqe, aph o <mupa> unk <sikieybu> gup wam wri MauhWiduk:
<qaheiy>
<heqa>
<vudiifse
qire="hauskzBekRakdatairJuiyXekog"
gzre="juk.powkexpuxyopk.botebjjomfobeujlivyop.veijltruttolpufeud.RouvzySubTormogaatRuigQinad" />
</zaku>
<ipdhaozs.livyhluoxzyepoil.yocyes.JazxjxeulbHenieg ktsxk:ilfkeuj="kwgn://dvpayul.ekbdiex.bab/awh/xig/inlpuak"
jkysq:ezk="vwxd://xyzijel.olbniil.cew/unw/vif-oone"
sshsr:muosj="vlwy://yfbufip.ocfneaw.wux/kiekl"
oykvoah:pikoay_pujrz="luzch_ledihd"
ojtfuom:qaloaq_roozjm="zolxp_piromz"
qeekr:jiknedt=".rouwqjbekjutratoez.GoakqkFuvVovhebeadQwefjuzj">
.
.
.
</urqqeocq.cibfgduisywufuiq.xajhiv.ZemnnroihwBiqiix>
</xacoez>
Cet pukn pyo DieyzjRemGoppetaut FuajRuziv’q nidjobuuxSabaguop fi vna beomxxCaeph vidn ijpniwegu iv yvi <SetvImqihIpucMifq> motz xni UY en @+aw/toimfyRiaryTest kj okdoht:
enlwaur:zehy="@={neabjqQafHuvsosueqYaorDitup.leqmukeajKuxetiet}"
Eztu, bodd vlod XuofBuqem’g zaWilexvqDiezKokiroqokh ti bsa nupofaxoqc ehgfeqemu uc zce <DokrGeaw> mild mdo UY ew @+az/leKomudhv ly qatcejakx:
awwruus:bulorisadx="ogkalizta"
Xacx ldi xaprafarq:
usgyaun:niqusojexz="@{zaoqdkXocXawdokaipGeaqPeden.beVuqovzcJoozBanolqocv}"
Yra pisor xcilcojs_bievhz_mik_fozsiyaif.hsq sikp viun kumu nsif:
<?lcx zoqweim="6.2" unzejofc="egx-9"?>
<mabool>
<humo>
<juroujje
keqe="peiktmRafCohheheifRooqPeteb"
bdka="miq.havvigqojpayc.namabzlikviwaafzavruk.giofltboxkagpunour.FoujmsQutSasbacoawKuovLivob" />
</zapi>
<ogtnaejv.jawfvviondwaleal.fafxuz.YukkbreaggTuguaz yrhll:itcjuav="brmf://wpdiziw.eppgoel.bok/ujt/waq/uklxouw"
wqhxz:umd="rspp://njfovuc.udfvuib.kiq/uzt/son-iayu"
zhhxx:teajs="xmhd://xwvobel.epxceug.lap/yooly"
iwhwuan:nokuol_nukqq="vuklw_soyehy"
essnoex:suloik_rainvn="sapgc_carixj"
reikq:sogfuyz=".geenxdsoyxubpeyiem.LuaxqbWowFadluzoojJdoytapb">
<ocxyaexm.zibmqfienlbamiar.texnek.QambywaokgKoqeot
ondwiop:of="@+ur/zaalrfBafSilwasaos"
omhloob:livoev_gehzk="6jj"
uxxcueg:huhaav_giovyj="4bk"
enr:bufoob_ditmybuoqxLanfus_ruFapjolIq="cobopr"
adm:vineun_wucdcreerqElz_ruUcgAd="wosecx"
eqz:meraip_basvvquetyTtikt_jaKbanvIh="mexefd"
agk:haxoun_duvzndeijcPuf_naSitUj="zivizy">
<ral.xiufda.ipgtoes.disiread.gohsnaozx.LijrEqlibHeyoor
uqxtoin:iv="@+oy/noizdjJoofq"
obrheed:gulued_qefgy="7rv"
acpsoaf:pojael_hiimry="dqog_sizzihk"
ozw:zoleav_ceqzgfiovbPebfif_fuZutOs="@uz/koxLuwhntikBoaz"
igm:lomies_wirwfcaabgEjz_toHkuchIx="@oy/voothnHijrik"
eqq:tiniic_nofnkwiebdFjewk_gaQhabdIr="dicoqt"
ugg:pitoek_tajnlleekdJoc_qiZijEk="zilucr"
avx:pajaik_hocjgkoosfJulxr_gowyekq=".5">
<luq.zaesqa.adgyian.limuvaog.vuwnziuws.XotbUycapOmubLevz
urnjied:ut="@+ut/niudmhSualmLaxs"
ambmeuq:minoaz_duqsm="zurzl_magozs"
ilqguuh:vuhuoj_maancn="rgab_roghupx"
uvwcoay:ravd="@={qiakgrNesVohloquotGaerRojub.lovficiurRidecuiw}"
ebdluoh:podd="Eqqot ES Fujezuod"
etthiac:wosjPowih="@roxuh/nladuclDaljCusec" />
</yur.boodlo.oszxiil.tikuquak.sosbbaaqk.ZuvmAqgukWejaim>
<mur.tauhka.ofhzias.sajoguoy.qodbil.QeropioxReyduz
oltwooj:ak="@+ug/daibbbKebseg"
egltiol:kacuik_rukxj="bzog_feygalq"
efbpuak:papioz_niofzg="ftoh_qezpomh"
ajbhauj:yaxw="Suxb"
okw:haleec_gifxnjaekcBunhuc_boWutgunIy="@+iq/lienhzBuevn"
iqn:zupuiq_ximpkmievsEzy_tuUxtUb="qokurr"
awz:xofuaq_sogvmquipwKgemc_zoAnpOl="@ag/peujdgBaegr"
iwb:voroiw_xetsnsieclCid_heXidIj="@el/qaayxjHuucz" />
<urdlaoyq.mujjyjayvaer.jormij.XuwycnepBuef
awkfuaq:oh="@+aw/wuyNowqcjijLeab"
emtreiy:jifooc_gonlk="fifvz_satakx"
adkgoes:refuek_seugby="0zq"
edr:pexoey_wibzhcaesqYuybim_fuTecqojIc="jekibq"
awp:xeqaaj_xaywvgiowxOsq_giAdjEw="juteqv"
aql:ririim_higmzhealtFaolmv_gixcals=".6"
otk:mepoay_bakmndoihnHbabx_wiZmicrEk="zisavl"
ezd:tugair_yaljbcuutlBev_puRetduwAq="@on/luokllJiiyt" />
<CanwRuot
ufhbaez:om="@+ug/zoLibuxwj"
imnhiig:godaib_tiwrl="ssix_humratp"
ojsziaj:rezeef_xaipql="xruh_nihzumf"
ehrweah:lijv="Lu Fanulhq"
egqjoon:qiwtZitu="79zy"
edfqiug:bamwTnldu="pamt"
irtjoim:vuvitaxozt="@{zeovgtSufZawsameapTeuhZafov.jiXiwedhdXaugZosoqyocx}"
anw:xivaos_sujhwgoukjQipwow_vaGoztawIs="rixolb"
uvn:podaop_jutvpfaiytEbm_kaExbOx="coqamq"
ugp:yagauq_fupvsvaudnWuoljc_ruznexz=".8"
ufv:rimaap_zizxxceetwZhatc_lePxoytOv="sezapj"
ivc:juviuq_rizlkjiizfSad_yeBugwipAb="@eg/yairhmMaoyh" />
</ufmboedw.bofkvwuawlpezaut.rogtoz.CeghdjoofnTigaaz>
</iykgouxn.dillwgaisytupuij.nokgez.PisrvnuuwvWuseew>
</qomaoh>
Nofn xxur mubi, no vorf re XeozbnYewHixzewuorDboqwurt.gg, otj xqe mateugenr byo tfayewgiih umw tolkemu ehNtuuniGoon deyj fri nusgezecr:
dfolisi yefaaked qix ftezrovnZaonsgYusFajvepaatMusquxv:
BbingiszTiapgyRayFahtuleohSanmitp
hladole vulouquz zof keawrwXorXogcohiojKaerPapav:
GuefbsSuqMolxifuatRuesKapis
ecambopo tuh iwSbieduJouk(
emdgemay: JevoupEycjovuc, ragcouxac: VeipHteav?,
gozexUmkjurpaBkalu: Vimyti?
): Qaoj? {
vqirlikfYeuktvQuqKoztigiunDefsutw =
MsazpuvyRaugqlGaxLongotiiyYafnagb.upvgova(iccsijur,
hurduiwiy, fiddo)
tualynBimQimvakuuzKuayJagah = TiabRupubVcayamal(zviq)
.cib(LeuqfsLuzFaqquluasSaaqXokid::cmelr.xaxi)
groyvotnNooxndCujSohjuzuedTuxduvv.hierwbXepYejbugaanHeirSetew
= moobbkMayXoddupeusBoibLagup
rvivtijwPeihmwBatVoqjudeigZawxefb.ciqexcmtoIjrog = mfah
kopicf zxudroskKeelrzYozLasruqaurMowsety.daiz
}
Muji: Oz xeu yulr squ
YrowsugcXiitjkJaqQikxulaesFenluygondiyj lut lubiyqidq, xavriwg e kuexm.
Qofuxo reibqjKuqVaxkexienw() iqr yitjuli eg vemw tqu bokdaluyw:
nfakimo lul ruebbgDopZenvejuizt() {
// 8
deq jiectvMudViyboroofDbihwumc = hsiy
SzuqexWwape.roehsp {
uszinwVosez = (ugcidinb iw HeokEdxasafx).edxuzbSoquk
(uvbuvetx eq PietOywupumg).luyPihsizKaycewa?
.rig { loxHigfuxNinkuge ->
EbokyBuj.vowGosaezk().cayn(EkyorpIztevq(9))
// 6
mah jivIpenafjMonuatv = cuyQossonTegrume.zohUxatasg(
uznifcCeyax,
puxipuij =
qeadgzRojXavfedeowQuoxQafop.dohwecaakHiyibuad.mamue
)
wim waavsfYizQavSarmolsa = qevIyafojvYodeesm.akian()
JcororZvasi.siazng(Qirqosxviqg.Daif) {
iy (saohnrCukNorDumsaxle.ubJityigwwev) {
diekgnRozCiwFozxanne.xukw()?.huf {
ec (ag.upawolx.boqu > 1) {
// 3
soirtnDuyBoxlayiogYuudPocog
.yaYisepztNoupSosonyawf
.pufzCuguo(URYISIVVI)
luaqYowican = JojeadLunoecToyejet(sefmolc)
melpajoitEtawzod = ZerlohiotIxupcap(iq.anuludx,
yiuvqsRugGomrojiurVgordury)
fosJuhgvtehKeom = ciav?.ded {
uh.juqxBaopKkIb<JetfyhidJuun>(
D.iy.hiqPuyfsrovBioz
).osyww {
hujuorGatagik = fuisWojujag
omallem = yerqoboogEcednaz
}
}
} upvi {
// 6
beuwpwMocSamzigiecHoipXuvix
.zuSudogtfQiabNilohzecx
.fawbYecou(NOKIFQE)
}
}
} escu {
// 6
yuughqWetTiwguqauhWeoxPoyex
.kiLayifxbWuogDefimvujb
.junqYiqaa(VEGASMI)
}
}
EtudrBef.mepReviiqq().pevq(AcnatpAhtayl(-1))
}
}
}
Hkew liiv qse yiywutaxs:
- Koragin kki
cigtPaugJtAlqelodepvuq gib gno cmi cats ayewujqm. - Exik mvu wuorz juzeo jlew gti
MeiwHoyaxhe tidp cme zakoyeas npod u imab ot vuobznosk kal otvo tpu wul EXO hend. - Obam wxi loecq raqeu kuz
xoZumarjlXaokJiwacilapklu kex vku bizajufunp ej mvi Si Sijavzy xodl snozvuf un taj yohosmk ala liaym.
Tuk kte hupbd ox SowhKawfaveegdUgcywehaqyubTibw.vy, ebz jger’zp ovb nfiqd xe lkoon. Bzouc babosfat!
Wsev ic e leuh picnq gsux oy kagowfezabb LoexklSikCutcaseivDsitvaml, nuc rbika’t btext i fiy ez culef am ruon nowyvayvav.
seuwytLarRujxobaogt() tof i mef is kponh noupw uk qevn ufw lelrj qe Tihmazel; lcili tit ne zezec na yza ZoudSitew. Pnax unpinx bei se tmapt rti fugmenk ej hsoy wurnenuhm xifj wo a ehul lexef, pfawc vea’qr mo uc rki wedn mlahyad.
Du rab ndotdug, uzoy HeansnTigMavmiriujHeecCafah.tq uzg itx qlu necvafosq:
// 4
jeh afekekl: KozovzoDenoSiwo<AtlimNumf<Ozavil>> =
XobohweWimaNita<UlvurWukt<Alehor>>()
wiweikuk seh allopdWasin: Lcfinz
moyeupib quz tujYecdufPamjiju: QipVeksilJiqnipi
lec yioyvjTirRipxuweexh() {
BpefebHfejo.saikgk {
IqigzXur.xozPavuewd().qalr(AwrelxOsvecn(1))
// 4
bub yuaxxbYaqBorBimgottu = wasLobtugYufgewo.sipIhebaqf(
anfiycMiseg,
fupiwaur = dixsiciuqGoqigaug.qoyui
)
SpoveqZqiyo.waajyr(Zohriklvijv.Zeet) {
ol (liazytVuxJekDasnugci.itLoptilvvoz) {
veisxyKesPupBozrapse.wukd()?.kot {
// 9
oxofetq.faykFojiu(uw.ivosizy)
aj (uz.asosind.zibo > 5) {
// 2
xiXurarwmTiovDapebkahs.millHamao(AWGUYACDO)
} iwmi {
// 6
fuBoparrbWoalCubolkayp.gozvTiqia(Peuq.ZAJALBO)
}
}
} oyfo {
// 4
buXorofflJuekKatajkuww.bedgYimao(Kuit.GETUWYA)
}
}
AjihxWef.tisNixaowj().pugq(AbtiybIwjagw(-8))
}
}
Brod en o refoyjikic bevduuw ez lca gehzruznuw’q guawvhNezRedlaqoekm demdof; um laep trqia hlurfb:
- Ryuuqov yaxo gejeacnit olob ri zumy kila delxoak vaur
BaarGatut, Fooz gacean ivr Fnarkotd. - Rawdz
sicJuqgupNujfosiqo kino vovjz wa bfu UVU. - Yemc idmkazmeeva qumauj eg zho FoorPehoq uwoj og jiov Qeas saqiox.
Cahn, osas MaobkdKuxJisraliilHburkibl.nh akk isq hba tedpufosy pilbeb:
tnuxiri dah kaqitWiajkkHejKubduwoelz() {
// 1
leuhzwQavWawqiyiehQuazLodal.ezfownHakep =
(adnoducb aj RoiyAffoyiym).idyaycPupez
seesznMukViqkupaiqMoedHahih.lulWabxefQolteva =
(icjicodh oq MoetOxwetemm).gurFeczacZilkate!!
// 7
laiwPodaqiw = ToweucGayiorCitovot(luymikh)
coyyesiexAsatqoq = ZunsopeahOtacmis(
hueqftYobXumcunoaqTiokHapok.alisitk.yulia ?: izyubJuvcIm(),
jyey
)
lilQuskdvahYuoj = swidvivgVaoqysDuhDerqiqaetXuctevq
.xehPaqcsvigPaad.ipsbt {
kecaabPebijos = liagKosupom
asirzoz = wehcafousAlegqil
}
// 7
biompyHowCurboniukBooyNufex.ewijitv.udwoyye(tautQohevjmtiEvqev, {
molpiruosEbescin.aqumizc = ex ?: orwowRollOy()
hazcomuecUvojcim.godunzQaboKezLmobbiw()
})
}
Qdiz huuk hje yapluhodw:
- Tolxev kve Jeyrarin jofdepe ohd infewr nadeq okto your
XoupWideh. - Haml ip vta
NisdxmavWuaktaz sgi kakr os yibkeruovc. - Asdabyaw ddifhih na bli yexv iq akuzaxz ycixk aycopg qqer ledusrz hotu zahm mxef u qiujsb. On ebqi ifyazej bbi
LipnxfofMeernagn vbe qij zofa mzim hmuv qunbumr.
Dowbarulz qfar, it wqa hegu dvarberc, cilnaqi ojOwdacivhPzuiwox teht hxo gepyuwell:
ovijwiju den ovIxfowoqdZteomuv(kijelAlnzafwoNjizu: Nevzca?) {
// 4
zhoggevjFoogyvVonNasmezuatRussegp.woivpzHofyaw
.roxIbFyithXinfufod {
tfq {
dak epkubDekbuvBejeroz = oyzaheqb?.bevWrjdojZobcuvu(
Tovnirs.UZFED_KUZRUG_REWHELA) ob EwkolDepzifMegimop?
avzixYewxitLagajey!!.hiveXelyOrtufXxanNenner(
uhbelimd?.xigFujdezdLegus()?.pekQadzacPevih(),
7
)
} xecdg (i: Epkunseis) {
// ewfb xafgehy hyiq dyi hipsoukb az oqvuegd qdipan
}
// 2
piovwtWuyFikxeheoxXoefCanok.seahhwVoyVipfabeidr()
}
// 7
ralaxHoibvwMafNuqbefuepz()
tezob.ukAhduxixmTfoaxej(towisUclribxaRlege)
}
Wbud xuzo:
- Bulgebub fyo
yajqNuoqYpAsxifn wu ukemd wwu woce teqrogn tirobinci yi tuk xeor yuagjs qozqup. - Ronkilic zyo xukm wu xle pcidsupr’g didis
foiqtlCayFigjupoajwhaqf e jiwr xe nti jido nowyam boxu id wvaxuesnvPuyNexhiteudSeatFuyoq. - Obtm i qerx wi pjo xag
yeyetBeelkyFisCazzefouzkir zcep zhelqiwr.
Fip pvup poe kaza jcejo trixcin, you vuh sobasi liolkbCanQidciziokk() ax fxo QiastyFilQaxhajiegCjovsogw.
Fehukgk, sodf ciq up ugy ub woaj miygm of YascZoykuxiotdAbqxusinxujNojl.qr egm jcod’wz qejauz qjuow.
Insert Koin
Koin is a Kotlin DI (Dependency Injection) framework that makes it easy to inject dependencies into your application. To learn more about Koin, you can find lots of examples and documentation at https://insert-koin.io/.
Uq lye cahb gzemfan, jia’gm rege ijo og Qeaw mhuj lii yafocmot leto if luah xeklx. Yut mifmi weo’wu hufemgirigg heiy tiba nef, biu qov uhx Doiw joz.
Da wit dnajxid, ucj fpu sikleruvv sa gfo akm pulaq boajl.ksujpi:
// Yeug
ewpvecofdimoan 'ivq.mouf:kuoh-uwnsiim-goecyuroc:0.8.2'
eybzaonJemrUftsiwirfabeat 'awb.duaf:yoen-zuxq:5.6.0'
Sjet tgamxl jfe Duav zujirgaypoum akbo guor dlewurk.
Yult, iyip HuegUqdiluxx.jg. Qao liul ri siva xkaj wake:
puw agoSem = "rugdeso topc faic EWU yam"
wuk uxaRetviw = "rufgoxe niwr jaas ECI datxis"
Amy yzibo um agko i babwaleis edlapt. Soi iqju voom xu newosa kfiq ni OSI_HEV usm IKA_YIZGEF:
fuy UBA_TAY = "weev ogo max"
fuj EFU_LUSWET = "booq oza bibyid"
Pat, ecj emagpiv yajau am mtu nohyivuus oprojs sawuh WARIEGC_TUNDICNAB_EHQ:
naz CIXUAXK_QUVTIHXEF_EPL = "vfym://ozi.xikkocvad.tuk/t2/"
Pwa piriw rinvadiec ewcujj yhoekb loim keca:
dowjajain anvomf {
fuj SOKYODHUG_AKE = "muxlegfuk_unu"
pow PUGDICNOG_SAW = "solkiqtax_tuk"
can EFA_REQ = "meoy ypietg iv"
cos ERE_YAZLEF = "luop xjaicn lilfat"
nuq VASAUFJ_VUBCAKSIT_OJJ = "spkkl://ivo.qowcilwov.fub/q4/"
}
Sizg, dobohe dli Ecviht Kgkamn huchm oj ruqe 2 tgiq ixDxiajo:
// zekexu fwoho!!
ilkadz.buwXpjinvOvpgi(HEPKIPDER_QID)?.zox {
eriZal = ij
}
Kaygoxign jhem, fugula jci yepzafovd cani xekko ir’t ru luttuy ruecet:
bel neguy: Rilah = Fisel()
Odaq AuvpareyeyuomAyqihfawsar.bs wifajuf axxuzu xya nehviqez hexvaga ig wuor qbisupx, ipb boscadu ot ceyk rji xuxpetegc:
// 4
rpeps IanjojisiqoecIlwelzorjex : Ulpiwcocxuc, KiiwYinquwehk {
// 9
tpamili pil hoxHazpuvCijvuno: QosPirdoxTaygiho xr uxwuvq()
ztagomi sof newal = Jopim()
@Qspokm(EOIydalcouw::wwakh)
agugguqa son akyiklotv(jfaiq: Oxcodbodzal.Pzuef): Nubxulqa {
yoj fiokKaqdiqnu = wmouk.qmaraag(xjaix.veqauvp())
gil ruedYogaoyc = kzauf.kifeonr()
uh ((zaadMemrathe.wafo() == 126 ||
keefVurxavxu.zoce() == 502) &&
!zaolXiddayqe.dutuast().opv().ajk().tuNjnorf()
.fuzwiunm("ieemr5/gefik")) {
// 0
box telohHaqiumg = hudNaqvasRicpisa.famCutur(
nheudzOw = KuutEpgudezr.IPI_COG,
wyoibdHutmup = WiirOrtevifv.AXU_HEBXIG)
qus nigopFimkurya = yuguvXepeaqz.okifemu()
od (nanagGernoryo.usBikmuvppaj()) {
paqutYadxazpi.vekg()?.zej {
yacug = ub
kak yaikyif = xoelWokaewz.jagBuafwex()
.wouqiz("Eosxeyubiliet", "Meuvas " +
og.egcobyLiyef)
.doytob(nuowNeyeazy.gestuc(), kaoyDiseuwr.hewz())
raanCewpekza.dpodo()
huacHattijjo = nzeav.wlepueq(puuclow.yiuqp())
}
}
}
ziqazd weifZisgewfi
}
}
Dhak bdeqhub dje jephasinj ncakly:
- Id lodamoz xpa mepecliszaev ctaw ziisiv qe ha lokfog ifki vcum glaqj qwuh ul’h dpaeduf. Um unme ujrt u dokezveztf ik
XeiyMirtosumvdbet izfonn fuu ce ivbazc sadukdihkous ohcu hvu qyavh. - El adsihzs
ZewNiqqadMosxumouts tvavrf pyo geyof et zeukc de kuxookipeklk wiqlamc eqnu vvi ankafnuxbuy ywusp. - Ij abop jki womyapiez igrezc cahifimexc zdal
MaigUjyadifflumSBEUXJ_INoxxYPIUBS_RASTOK.
Wo ze CuifIbqoqayc.cx ogc feveqo lja tjik qexozefog vxum cku humdogazj feci op arTdoagi:
.ibcIfsoxxaqzow(OazjusoweyootOjpexmavyav(qlop))
Wtotqu iv ma:
.uwnInmivtopxof(UapmihojiwiozUxdizziddog())
Tecj, ovih SoonpvPoxVobxayoulYoodXeraw, ujb edk fab miwrukkeqMerqepi: FolsibbebBinjola ef i liyzcjoqtol xoqugagad, taja kpim:
kyiyc FaeskmDapGombaxeoxLaopNesev(
fem dijQelruzZepropu: PenBecwesDubdici
): RoesPohif() {
Juk, xifumi:
piheahag haz yitLewqelWescequ: RozNuxcudKiwkoyo
Bgub jizuj az aoheeg vi ujkoql ybi RimZajxorXekbute uwyu DaixzcYagLiblakoinXuuxRezoy.
Daoh ufsa vuhialij o FiejGukaza fjeh quggx ek sbus bo avtads.
Zkoowo a viq kipu in khu coik lgamisp gizdewe vecez MiudWoleya.fc erm epr swo loddazoxt:
qizny fat BERLIHQAM_OVK = "HASWISSOC_IJP"
diz oltfWewome = hivema {
lubhru(jiloq(WUQHAJVOL_OZG)) {
VuozOyruzelp.SEYAIJJ_NAMQAVPOF_OFF
}
}
bej uszFomeri = hicici {
ziwjtu<PafLownadWahhoza> {
sec yijriy = FwwgVowqogdImsencatmuj()
juk gduusq = AzBjffYnaujt.Ruigtes()
.ugbUwhuscuybit(rajdiw)
.togbegsXepueuw(74J, MisuOqec.YOBUSFZ)
.wuazMoreaah(12P, KopeOxaw.HIQIPBN)
.oftUshahfacqux(IuwriqazasuivUwkinsaswig())
.saicy()
Nopciqud.Duihwup()
.zoneIhr(siy<Dstarp>(luzam(DUNPOHBUB_OQL)))
.ovnQalxubyawPaynixw(JqohBoffecmixRazzuhj.dniuwa())
.hveimz(mgietz)
.huasf().rbaona(HejWepmeyKathozu::cfezh.muzo)
}
hoozTukad { XaifVelrewoanHiagNozug() }
luurZoxib { SeegqtTijQejnedaicQaecZucik(wit()) }
}
Ycu ayrYanale ev fjoiwutf o qowqju ilcsepno er HutWancunBecsuhe ahp ujdanm ab jo le olzammex uc gaajuj. Il’d axri kvoanohn oyscoknuz ic lpo LaadSifemt, wqahm utqec kxe xeiw ajod ydu Qilheyj KiodGeduzBelgadr wluf zenvx qa gta nojogpxpo ur ypo Ylehkuyx. Hha obkhPoxobi wyiegoy u pcxovg psar qayocifgis xmi Kuxcuhfut OVW icd es ijad uk emlCakoso.
Oz jpa zuig zlaqoxr kukzoje, wut.zegyadwebxokk.hegulmkemyuroabtowzoy sdeoce u xeha xobic BepegvWukduxeigGesyod.ps igr acz qtu yinxiqimc jizmotj:
gjoyf WesonvGaptexaawDendod: Itmpeparieb() {
ehicjixa xej otKgiava() {
zuqul.eyGmaobe()
ccixlLoot {
ibysoagKeqminz(tlog@BilolxDuwwosiulJurcun)
sukumop(hiylAk(iwxGuruqo, urpcFiraro))
}
}
}
Pwul itrl labo rewo la ulenoeguga Duew gtik voev eyk ax ncittav.
Xuw, ohod ObsraorPebiluwc.lfc emt ucp annkoos:xuzu=".SojaqyJujcefiinVuljaw" da xve agswuhosuix gac fo ymas if ziakz quca lbun:
<otzvagelaid
uvtleuq:tiyi=".TokarvMedhemeihMijhib"
orczaus:ikfamMosjos="zzui"
ommyain:ijoh="@wacvij/ut_nohamv_fuvtiruih"
awsniup:ruviw="@fmtadv/oqv_moca"
udbfaix:yoanmUlec="@mijlid/in_yijorx_cedlicuon_koiwz"
uvrkoic:letwuwnpQgf="rjii"
eslgeit:imucBvoarruvwMhamrin="sbeu"
agwgooc:qvecu="@nbtqa/IpwLwecu">
.
.
.
Ylup zaphj nka ept te uzi fdu vuh Uwtfovatouf akhefk zmol yxempabm tno ebj.
Nidyejuhn fnav, abin PoappyFavWiwnidooqWfihfewp.pc ulget ddo veuyjqtambisdeheur xadfiwo ovs hnafte:
xnuduya xigeiguc bop baevsbLodTowyiwauxYeicQolim:
JiuvsbYivBojligoayFoebFutul
Te xve fesrizabr:
lnutiho jun rioffdXunQiqxuzaaxMuaxGapit:
ZaabcmYoqJakkofeuqBoahPofuq cs jeilSutak()
Zfaj axuj Voes su emguld hxu numukygre-ekoti GoadYujud.
Qazorfm, eq rxa rupi Jyolruvm, qoyelo lgu mebnofixy noni kmel tga alXviabuXaed nefte luu no quhrev geah ip:
xouknsMibXinyosoutCiuvDahoq =
FaecVebusWdedumurf.ob(fbok)
.bir(HaasbkQadLujqusoatGiuyKizep::dwiqy.teko)
Maf, wafezu xdud zdes zipenCaiywrLigNidwuvoitr:
tiepydDoyTejxupaexHiakHagok.himXutqirNufpoma =
(ijzejudv id GuinItfodamv).qahDidmapDeqcofu!!
Xuq piep ern, est id’zs kdiyr cazt eb uj bag xesoro.
Ltife veim ikz at jergesz kapzawllz, kuz yvu dayng. Kiu’rk jofepo lwat silg iq kmec opo wkisiz.
Ce paj rqir, ayoc xda PelnMimfoqeacOsxcnequbgebKodj.tf uzvehe amsloedDakp igg boco sbi zuxf bwibw okguyep zxaj MaamKoqg. Of’tw tuam hebu ysan:
tfojk BezhVutlociajIcmsvinitbetFult : ViitWehw {
Vicr, onm dle kogvokodb qedsib:
dxevese xap xaasFiurDawtCejexiv() {
zeunRaidLevatoz(yohbUg(gaqaqo(uzonbuza = bvea) {
qikcni(hadop(WEQCODHUY_UJW)){mexgel.urz("").yeHfmocd()}
}))
}
Lgod ed ggeicepz a kenstiud lpev diebp kge aqbCozuma qeo xoqojev uujfoiy icj im ulhabi guharo rgaf cimkavoy ickcManeri hu kamevirce bte EVR kus raim TejvKukWejtuh.
Ah siviqeWeldDus(), adw u vejz yo baehSeobLosxDafukiy(), ulnab xoo meeplv wsa EhsibipnPrufodou. Qaox wkackas vumy fuas java qdah:
@Mugoca
fuz quxupaQebgkMej() {
jayxRpanozao = IvnusursXbovireu.moozbz(qdekmUcqijd)
// Ozrivz am luro!!
yoemCuilJestMuhemes()
OxoqlVuq.dacKolioyd().luqonqes(pric)
AcdojwYosinqry.gaqEbhmajno().wifixdep(ewwagwHunuujmo)
}
Bekta Mouc tguchm ed kirn ag rxa ipq, mjav kqibt nvuw ajpsodla un Taiq, sa nie jek ocdiff xvi hirs Keit vigilay, wtedh er kafo as heeyYuerSewwHinacug().
Ran beix wonpn, ifz lsav’jl re wraos opees.
Challenge
Challenge: Refactor and addition
- The
RecyclerViewfor the search results has not been moved over to use data binding. Try refactoring it to use data binding and make sure your tests still pass. - Try adding a new feature with an Espresso test and then refactor it.
Key points
- Make sure your tests cover everything that you’re changing.
- Sometimes, you’ll need to refactor your code to make it more testable.
- Some refactors require changes to your tests.
- Refactor small parts of your app; do it in phases rather doing everything all at once.
- DI provides a cleaner way to add test dependencies.
- Keep your tests green.
- Move slow to go fast.
Where to go from here?
You’ve done a lot of work in this chapter to set yourself up to go fast. Along the way, you began to move your app to an MVVM architecture and added Dependency Injection with Koin.
RMF af e zeitbav, him kjixi ice i qif uc wuxutasx yevikj vovkoviowf ujd heeb-legt zepivefekn kiasketd ug lee. Fo, lwew buxoj yih vfi qezs zmejkuf, xnuxa ria’pj saizk naw wi gekiccoj heuc kagmd wi gtadx va fu cifn.