/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 . ĠExplo re Ġin ĠH MS . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . h ms . reference app . hu aw e il ens . tr t . processor Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Log Ċ import Ġcom . h ms . reference app . hu aw e il ens . main . present ers . Tr t Fragment Presenter . Send Lang Code . Companion . lang code Ċ import Ġcom . h ms . reference app . hu aw e il ens . tr t . helper . Detect And Translate Helper Ċ import Ġcom . h ms . reference app . hu aw e il ens . tr t . views . Graphic Overlay Ċ import Ġcom . h ms . reference app . hu aw e il ens . tr t . views . Graphic Overlay . Graphic Ċ import Ġcom . hu awei . h ms . ml sdk . text . ML Text Ċ import Ġkotlin . math . abs ĊĊ Ċ /** Ċ Ġ* ĠGraph ic Ġinstance Ġfor Ġrendering ĠText Block Ġposition , Ġsize , Ġand ĠID Ġwithin Ġan Ġassociated Ġgraphic Ċ Ġ* Ġoverlay Ġview . Ċ Ġ*/ Ċ class ĠText Graphic Ġinternal Ġconstructor ( ĊĠĠĠ Ġoverlay : ĠGraph ic Overlay ?, ĊĠĠĠ Ġprivate Ġval Ġml Text : ĠML Text . Text Line ? Ċ ) Ġ: ĠGraph ic ( overlay !! ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrect Paint : ĠPaint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġtext Paint : ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġtranslated : String ?= null ĊĊĊĠĠĠ Ġ/** ĠDraw s Ġthe Ġtext Ġblock Ġannotations Ġfor Ġposition , Ġsize , Ġand Ġraw Ġvalue Ġon Ġthe Ġsupplied Ġcanvas . Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( ml Text ) Ġ{ Ġ" At tempting Ġto Ġdraw Ġa Ġnull Ġtext ." Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠDraw s Ġthe Ġbounding Ġbox Ġaround Ġthe ĠText Block . ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect F ( ml Text . border ) ĊĠĠĠĠĠĠĠ Ġrect . left Ġ= ĠtranslateX ( rect . left ) ĊĠĠĠĠĠĠĠ Ġrect . top Ġ= ĠtranslateY ( rect . top ) ĊĠĠĠĠĠĠĠ Ġrect . right Ġ= ĠtranslateX ( rect . right ) ĊĠĠĠĠĠĠĠ Ġrect . bottom Ġ= ĠtranslateY ( rect . bottom ) ĊĠĠĠĠĠĠĠ Ġcanvas !!. draw Rect ( rect , Ġrect Paint ) ĊĠĠĠĠĠĠĠ Ġset Text Size For Width and Height ( rect . height ()/ 2 , text Paint , rect . width (), ml Text . stringValue ) ĊĠĠĠĠĠĠĠ Ġtext Paint . letter Spacing = 0 f ĊĠĠĠĠĠĠĠ Ġval Ġdetected Language Ġ= ĠDetect And Translate Helper . detect And Translate Language Return ( ml Text . stringValue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( lang code Ġ== Ġ" none " Ġ&& Ġml Text . language ! ="" Ġ&& Ġdetected Language ! ="") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Center Text ( ml Text . stringValue , rect , canvas , text Paint ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslated Ġ= Ġif ( detected Language ! =" "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang code ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetect And Translate Helper . translate Text Remote With Return ( ml Text . stringValue , Ġdetected Language , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( translated Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text Size For Width and Height ( rect . height (), text Paint , rect . width (), translated !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Center Text ( translated , rect , canvas , text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Center Text ( ml Text . stringValue , rect , canvas , text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Center Text ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString ?, ĊĠĠĠĠĠĠĠ Ġrect F : ĠRect F , ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġpaint : ĠPaint ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalign : ĠPaint . Align Ġ= Ġpaint . textAlign ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠFloat ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalign Ġ=== ĠPaint . Align . LEFT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X () Ġ- Ġpaint . measure Text ( text ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalign Ġ=== ĠPaint . Align . CENTER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X () Ġ+ Ġpaint . measure Text ( text ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġpaint . font Metrics ĊĠĠĠĠĠĠĠ Ġval Ġac ent : ĠFloat Ġ= Ġabs ( metrics . as cent ) ĊĠĠĠĠĠĠĠ Ġval Ġdesc ent : ĠFloat Ġ= Ġabs ( metrics . desc ent ) ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġrect F . center Y () Ġ+ Ġ( ac ent Ġ- Ġdesc ent ) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( text !! , Ġx , Ġy , Ġpaint ) ĊĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gh ui ", Ġ" top :" Ġ+ Ġmetrics . top . toString () Ġ+ Ġ", as cent :" Ġ+ Ġmetrics . as cent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ Ġ", dsc ent :" Ġ+ Ġmetrics . desc ent . toString () Ġ+ Ġ", leading :" Ġ+ Ġmetrics . leading . toString () Ġ+ Ġ", bottom " Ġ+ Ġmetrics . bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Text Size For Width and Height ( ĊĠĠĠĠĠĠĠ Ġsize : Float , paint : ĠPaint , Ġdesired Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġtext : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġpaint . getText Bounds ( text , Ġ 0 , Ġtext . length , Ġbounds ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġdesired Text Size Ġ= Ġsize Ġ* Ġdesired Width Ġ/ Ġbounds . width () ĊĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġdesired Text Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠST RO KE _ WIDTH Ġ= Ġ 4 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrect Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġrect Paint . stroke Width Ġ= ĠST RO KE _ WIDTH ĊĠĠĠĠĠĠĠ Ġrect Paint . color Ġ= Ġ ĠText Recognition Processor . Send Image Color . get Back Ground Color () ?: Color . WHITE ĊĠĠĠĠĠĠĠ Ġrect Paint . mask Filter Ġ= ĠBl ur Mask Filter ( 1 0 f , ĠBl ur Mask Filter . Blur . NORMAL ) ĊĠĠĠĠĠĠĠ Ġtext Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġtext Paint . is Anti Alias = false ĊĠĠĠĠĠĠĠ Ġtext Paint . letter Spacing = 0 f ĊĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= ĠText Recognition Processor . Send Image Color . getText Color () ?: Color . BLACK ĊĠĠĠĠĠĠĠ Ġtext Paint . is Linear Text = true ĊĠĠĠĠĠĠĠ Ġtext Paint . textAlign Ġ= ĠPaint . Align . CENTER ; ĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĊĠĠĠ Ġ} Ċ Ċ }