package Ġaz . s if to sh ka . habit ube . presentation . screens . search Ċ Ċ import Ġandroidx . compose . foundation . Border Stroke Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Grid Cells Ċ import Ġandroidx . compose . foundation . lazy . Lazy Vertical Grid Ċ import Ġandroidx . compose . foundation . lazy . items Indexed Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . foundation . text . Keyboard Actions Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . focus . Focus Request er Ċ import Ġandroidx . compose . ui . focus . focus Request er Ċ import Ġandroidx . compose . ui . platform . Local Software Keyboard Controller Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Array Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . input . I me Action Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġaz . s if to sh ka . habit ube . R Ċ import Ġaz . s if to sh ka . habit ube . domain . model . Media Lite Ċ import Ġaz . s if to sh ka . habit ube . domain . util . Constants . PAGE _ SIZE Ċ import Ġaz . s if to sh ka . habit ube . domain . util . Search Type Ċ import Ġaz . s if to sh ka . habit ube . presentation . components . screen . Empty Screen Ċ import Ġaz . s if to sh ka . habit ube . presentation . components . screen . Loading Screen Ċ import Ġaz . s if to sh ka . habit ube . presentation . components . text . Animated Placeholder Ċ import Ġaz . s if to sh ka . habit ube . presentation . screens . search . components . Search Card Ċ import Ġaz . s if to sh ka . habit ube . presentation . theme . spacing Ċ import Ġaz . s if to sh ka . habit ube . presentation . util . Screen Ċ Ċ /** Ċ Ġ* ĠComp osable Ġfunction Ġof Ġthe ĠSearch ĠScreen . Ċ Ġ*/ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ @ Composable Ċ fun ĠSearch Screen ( ĊĠĠĠ Ġnav Controller : ĠNav Controller , ĊĠĠĠ ĠviewModel : ĠSearch ViewModel Ġ= Ġh ilt ViewModel () Ċ ) Ġ{ ĊĠĠĠ Ġval Ġsearch State Ġ= ĠviewModel . search State . value ĊĠĠĠ Ġval Ġpage Ġ= ĠviewModel . search Page . value ĊĊĠĠĠ ĠSurface ( color Ġ= ĠMaterial Theme . colors . background , Ġmodifier Ġ= ĠModifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch View () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search State . isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search State . media . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells Ġ= ĠGrid Cells . Fixed ( 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( Material Theme . spacing . medium ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Indexed ( search State . media ) Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onChange Search Position ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( index Ġ+ Ġ 1 ) Ġ>= Ġ( page Ġ* ĠPAGE _ SIZE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get More SearchResults () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Card ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation ( item , Ġnav Controller , ĠviewModel . media Type . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ @ Composable Ċ fun ĠSearch View ( ĊĠĠĠ ĠviewModel : ĠSearch ViewModel Ġ= Ġh ilt ViewModel () Ċ ) Ġ{ ĊĠĠĠ Ġval Ġquery Ġ= ĠviewModel . search Query . value ĊĠĠĠ Ġval Ġkeyboard Controller Ġ= ĠLocal Software Keyboard Controller . current ĊĠĠĠ Ġval Ġfocus Request er Ġ= ĠFocus Request er () ĊĊĠĠĠ ĠLa unched Effect ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query . isBlank ()) Ġfocus Request er . request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠCard ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 1 5 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= ĠMaterial Theme . spacing . default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= ĠMaterial Theme . spacing . default ), ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠMaterial Theme . shapes . large , ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠMaterial Theme . colors . surface , ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 4 . dp ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOut lined TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Line Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder Ġ= Ġ{ ĠAnimated Placeholder ( string Array Resource ( id Ġ= ĠR . array . text _ search _ hints )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( Material Theme . spacing . small ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Request er ( focus Request er ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ( keyboard Type Ġ= ĠKeyboard Type . Text , Ġ ime Action Ġ= ĠI me Action . Search ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= ĠKeyboard Actions ( on Search Ġ= Ġ{ Ġkeyboard Controller ?. hide () Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠMaterial Theme . shapes . large , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= ĠTextField Defaults . outlined TextField Colors ( un focused BorderColor Ġ= ĠMaterial Theme . colors . primary ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĠviewModel . on Query Changed ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrailing Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Query Changed ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Controller ?. hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 2 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ close ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( id Ġ= ĠR . string . text _ cancel ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= ĠMaterial Theme . spacing . default ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Between ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Tab ( Search Type . Multi ) Ġ{ ĠviewModel . change Search Type ( Search Type . Multi ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Tab ( Search Type . Movie ) Ġ{ ĠviewModel . change Search Type ( Search Type . Movie ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Tab ( Search Type . Tv Show ) Ġ{ ĠviewModel . change Search Type ( Search Type . Tv Show ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Tab ( Search Type . Person ) Ġ{ ĠviewModel . change Search Type ( Search Type . Person ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Material Api :: class , ĠExperimental Compose Ui Api :: class ) Ċ @ Composable Ċ fun ĠSearch Tab ( ĊĠĠĠ Ġsearch Type : ĠSearch Type , ĊĠĠĠ ĠviewModel : ĠSearch ViewModel Ġ= Ġh ilt ViewModel (), ĊĠĠĠ Ġon Item Click : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġmedia Type Ġ= ĠviewModel . media Type . value ĊĠĠĠ Ġval Ġkeyboard Controller Ġ= ĠLocal Software Keyboard Controller . current ĊĠĠĠ Ġval ĠbackgroundColor Ġ= Ġif Ġ( media Type Ġ== Ġsearch Type ) ĠMaterial Theme . colors . primary Ġelse ĠMaterial Theme . colors . surface ĊĠĠĠ Ġval Ġstroke Color Ġ= Ġif Ġ( media Type Ġ== Ġsearch Type ) ĠMaterial Theme . colors . primary Ġelse ĠMaterial Theme . colors . secondary Variant ĊĠĠĠ Ġval ĠtextColor Ġ= Ġif Ġ( media Type Ġ== Ġsearch Type ) ĠMaterial Theme . colors . on Primary Ġelse ĠMaterial Theme . colors . on Surface ĊĠĠĠ Ġval Ġtitle Ġ= Ġwhen Ġ( search Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch Type . Multi Ġ-> Ġstring Resource ( id Ġ= ĠR . string . text _ tab _ multi ) ĊĠĠĠĠĠĠĠ ĠSearch Type . Movie Ġ-> Ġstring Resource ( id Ġ= ĠR . string . text _ tab _ movie ) ĊĠĠĠĠĠĠĠ ĠSearch Type . Tv Show Ġ-> Ġstring Resource ( id Ġ= ĠR . string . text _ tab _ show ) ĊĠĠĠĠĠĠĠ ĠSearch Type . Person Ġ-> Ġstring Resource ( id Ġ= ĠR . string . text _ tab _ person ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠCard ( ĊĠĠĠĠĠĠĠ Ġborder Ġ= ĠBorder Stroke ( 1 . dp , Ġstroke Color ), ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( 1 0 0 . dp ), ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠbackgroundColor , ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Controller ?. hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠtextColor , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= ĠMaterial Theme . spacing . medium , Ġvertical Ġ= ĠMaterial Theme . spacing . small ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġnavigation ( ĊĠĠĠ Ġitem : ĠMedia Lite , ĊĠĠĠ Ġnav Controller : ĠNav Controller , ĊĠĠĠ Ġsearch Type : ĠSearch Type Ċ ) Ġ{ ĊĠĠĠ Ġwhen Ġ( item . media Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" movie " Ġ-> Ġnav Controller . navigate ( Screen . Movie Screen . route Ġ+ Ġ"/ ${ item . id }") ĊĠĠĠĠĠĠĠ Ġ" tv " Ġ-> Ġnav Controller . navigate ( Screen . Tv Show Screen . route Ġ+ Ġ"/ ${ item . id }") ĊĠĠĠĠĠĠĠ Ġ" person " Ġ-> Ġnav Controller . navigate ( Screen . Person Screen . route Ġ+ Ġ"/ ${ item . id }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhen Ġ( search Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch Type . Movie Ġ-> Ġnav Controller . navigate ( Screen . Movie Screen . route Ġ+ Ġ"/ ${ item . id }") ĊĠĠĠĠĠĠĠ ĠSearch Type . Tv Show Ġ-> Ġnav Controller . navigate ( Screen . Tv Show Screen . route Ġ+ Ġ"/ ${ item . id }") ĊĠĠĠĠĠĠĠ ĠSearch Type . Person Ġ-> Ġnav Controller . navigate ( Screen . Person Screen . route Ġ+ Ġ"/ ${ item . id }") ĊĠĠĠ Ġ} Ċ }