package Ġcom . m re bol lob . draw aday . ui . drawing Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . tool ing . preview . Devices Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . google . ac comp an ist . in sets . navigation Bars Padding Ċ import Ġcom . m re bol lob . draw aday . R Ċ import Ġcom . m re bol lob . draw aday . components . Inset Aware Top AppBar Ċ import Ġcom . m re bol lob . draw aday . shared . domain . model . Draw Image Ċ import Ġcom . m re bol lob . draw aday . state . Ui State Ċ import Ġcom . m re bol lob . draw aday . ui . theme . Draw AD ay Theme Ċ import Ġcom . m re bol lob . draw aday . utils . TestData Utils Ċ import Ġcom . m re bol lob . draw aday . utils . support Wide Screen Ċ import Ġorg . k oin . android x . compose . get ViewModel Ċ import Ġorg . k oin . core . parameter . parameters Of ĊĊ Ċ @ Composable Ċ fun ĠDraw ing Screen ( ĊĠĠĠ Ġdrawing Id : ĠString , ĊĠĠĠ Ġon Back : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval ĠviewModel Ġ= Ġget ViewModel < Drawing ViewModel > Ġ{ Ġparameters Of ( drawing Id ) Ġ} ĊĠĠĠ Ġval Ġimage Ġ= ĠviewModel . drawImage . collect As State () ĊĊĠĠĠ Ġvar Ġis Black And White Ġby Ġremember Save able Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġvar Ġgrid Size Ġby Ġremember Save able Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠ Ġval Ġscale Ġ= Ġremember Ġ{ Ġmutable State Of ( 1 f ) Ġ} ĊĠĠĠ Ġval Ġrotation Ġ= Ġremember Ġ{ Ġmutable State Of ( 0 f ) Ġ} ĊĊĠĠĠ ĠDraw ing Screen ( ĊĠĠĠĠĠĠĠ Ġdraw Image Ġ= Ġimage . value , ĊĠĠĠĠĠĠĠ Ġon Back Ġ= Ġon Back , ĊĠĠĠĠĠĠĠ Ġis Black And White Ġ= Ġis Black And White , ĊĠĠĠĠĠĠĠ Ġgrid Size Ġ= Ġgrid Size . dp , ĊĠĠĠĠĠĠĠ Ġscale Ġ= Ġscale . value , ĊĠĠĠĠĠĠĠ Ġrotation Ġ= Ġrotation . value , ĊĠĠĠĠĠĠĠ Ġon Toggle Black And White Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Black And White Ġ= Ġis Black And White . not () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Toggle Grid Size Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Size Ġ= Ġwhen Ġ( grid Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ-> Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Toggle Scale Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale . value Ġ= Ġwhen Ġ( scale . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġ-> Ġ 1 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 5 f Ġ-> Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 f Ġ-> Ġ 2 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Toggle Rotation Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotation . value Ġ= Ġrotation . value Ġ+ Ġ 9 0 f ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Credits Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrowser Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( image . value . data ?. source )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( browser Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDraw ing Screen ( ĊĠĠĠ Ġdraw Image : ĠUi State < Draw Image >, ĊĠĠĠ Ġon Back : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġis Black And White : ĠBoolean , ĊĠĠĠ Ġgrid Size : ĠD p , ĊĠĠĠ Ġscale : ĠFloat , ĊĠĠĠ Ġrotation : ĠFloat , ĊĠĠĠ Ġon Toggle Black And White : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Toggle Grid Size : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Toggle Scale : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Toggle Rotation : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Credits Click : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Aware Top AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdraw Image . title , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 2 , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠLocal Content Color . current Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġon Back ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠIcons . Filled . Arrow Back , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . cd _ navigate _ up ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Black And White Ġ= Ġis Black And White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Size Ġ= Ġgrid Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Black And White Ġ= Ġon Toggle Black And White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Grid Size Ġ= Ġon Toggle Grid Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Scale Ġ= Ġon Toggle Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Rotation Ġ= Ġon Toggle Rotation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Credits Click Ġ= Ġon Credits Click ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( drawImage . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw ing Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Image Ġ= Ġdraw Image . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Material Theme . colors . surface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( inner Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigation Bars Padding ( bottom Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. support Wide Screen (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Black And White Ġ= Ġis Black And White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Size Ġ= Ġgrid Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ= Ġrotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠBottom Bar ( ĊĠĠĠ Ġis Black And White : ĠBoolean , ĊĠĠĠ Ġgrid Size : ĠD p , ĊĠĠĠ Ġscale : ĠFloat , ĊĠĠĠ Ġon Toggle Black And White : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Toggle Grid Size : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Toggle Scale : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Toggle Rotation : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Credits Click : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠSurface ( elevation Ġ= Ġ 8 . dp ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigation Bars Padding () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġis Black And White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Toggle Black And White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Icon Ġ= ĠIcons . Filled . Palette , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Icon Ġ= ĠIcons . Filled . Filter B And W , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Text Ġ= ĠR . string . drawing _ screen _ color _ mode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Text Ġ= ĠR . string . drawing _ screen _ black _ and _ white _ mode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠMaterial Theme . colors . primary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġgrid Size Ġ== Ġ 5 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Toggle Grid Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Icon Ġ= ĠIcons . Filled . Grid Off , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Icon Ġ= ĠIcons . Filled . Grid On , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Text Ġ= ĠR . string . drawing _ screen _ hide _ grid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Text Ġ= ĠR . string . drawing _ screen _ show _ grid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠMaterial Theme . colors . primary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġscale Ġ== Ġ 2 . 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Toggle Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Icon Ġ= ĠIcons . Filled . Zoom Out , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Icon Ġ= ĠIcons . Filled . Zoom In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Text Ġ= ĠR . string . drawing _ screen _ zoom _ out , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Text Ġ= ĠR . string . drawing _ screen _ zoom _ in , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠMaterial Theme . colors . primary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Toggle Rotation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Icon Ġ= ĠIcons . Filled . Rotate Right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Icon Ġ= ĠIcons . Filled . Rotate Right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Text Ġ= ĠR . string . drawing _ screen _ rotate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Text Ġ= ĠR . string . drawing _ screen _ rotate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠMaterial Theme . colors . primary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . weight ( 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġon Credits Click () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . drawing _ screen _ credits ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . primary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview (" Article Ġscreen ") Ċ @ Preview (" Article Ġscreen Ġ( dark )", Ġui Mode Ġ= ĠConfiguration . UI _ MODE _ N IGHT _ YES ) Ċ @ Preview (" Article Ġscreen Ġ( big Ġfont )", Ġfont Scale Ġ= Ġ 1 . 5 f ) Ċ @ Preview (" Article Ġscreen Ġ( large Ġscreen )", Ġdevice Ġ= ĠDevices . PIXEL _ C ) Ċ @ Composable Ċ fun ĠArticle Preview () Ġ{ ĊĠĠĠ Ġval Ġdraw Image Ġ= ĠTest Data Utils . getTest Draw Image ("# 1 ") ĊĠĠĠ ĠDraw AD ay Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠDraw ing Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Image Ġ= ĠUi State ( data Ġ= Ġdraw Image ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Black And White Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Size Ġ= Ġ 1 0 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Black And White Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Grid Size Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Scale Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle Rotation Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Credits Click Ġ= Ġ{ Ġ/* TODO */ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ