/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠR az ew are ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠNot with standing Ġthe Ġfore going , Ġyou Ġmay Ġnot Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ċ Ġ* Ġdistribute , Ġsublicense , Ġcreate Ġa Ġderivative Ġwork , Ġand / or Ġsell Ġcopies Ġof Ġthe Ċ Ġ* ĠSoftware Ġin Ġany Ġwork Ġthat Ġis Ġdesigned , Ġintended , Ġor Ġmarket ed Ġfor Ġped ag og ical Ġor Ċ Ġ* Ġinstruction al Ġpurposes Ġrelated Ġto Ġprogramming , Ġcoding , Ġapplication Ġdevelopment , Ċ Ġ* Ġor Ġinformation Ġtechnology . Ġ ĠPermission Ġfor Ġsuch Ġuse , Ġcopying , Ġmodification , Ċ Ġ* Ġmer ger , Ġpublication , Ġdistribution , Ġsublic ensing , Ġcreation Ġof Ġderivative Ġworks , Ċ Ġ* Ġor Ġsale Ġis Ġexpress ly Ġwith held . Ċ Ġ* Ċ Ġ* ĠThis Ġproject Ġand Ġsource Ġcode Ġmay Ġuse Ġlibraries Ġor Ġframeworks Ġthat Ġare Ċ Ġ* Ġreleased Ġunder Ġvarious ĠOpen - Source Ġlicenses . ĠUse Ġof Ġthose Ġlibraries Ġand Ċ Ġ* Ġframeworks Ġare Ġgoverned Ġby Ġtheir Ġown Ġindividual Ġlicenses . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . ray w ender lich . android . pet realm . owners . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ import Ġcom . ray w ender lich . android . pet realm . R Ċ import Ġcom . ray w ender lich . android . pet realm . common . adapters . Image Adapter Ċ import Ġcom . ray w ender lich . android . pet realm . common . utils . add Tracker Ċ import Ġcom . ray w ender lich . android . pet realm . common . view models . Shared ViewModel Ċ import Ġcom . ray w ender lich . android . pet realm . databinding . Fragment Add Owner Binding Ċ import Ġcom . ray w ender lich . android . pet realm . owners . models . Owner Ċ import Ġcom . ray w ender lich . android . pet realm . owners . repository . Owner Data Status Ċ import Ġcom . ray w ender lich . android . pet realm . owners . utils . get Owners Images Ċ import Ġcom . ray w ender lich . android . pet realm . owners . view models . Add Owner ViewModel Ċ import Ġdagger . android . support . Android Support Injection Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠAdd Owner Fragment Ġ: ĠBottom Sheet Dialog Fragment () Ġ{ ĊĊĠ Ġ@ Inject ĊĠ Ġlateinit Ġvar Ġimages Adapter : ĠImage Adapter ĊĊĠ Ġ@ Inject ĊĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠ Ġprivate Ġval Ġargs : ĠAdd Owner Fragment Args Ġby Ġnav Args () ĊĠ Ġprivate Ġval ĠviewModel : ĠAdd Owner ViewModel Ġby Ġview Models Ġ{ ĠviewModel Factory Ġ} ĊĠ Ġprivate Ġval Ġshared ViewModel : ĠShared ViewModel Ġby Ġactivity ViewModels Ġ{ ĠviewModel Factory Ġ} ĊĠ Ġprivate Ġvar Ġbinding : ĠFragment Add Owner Binding ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ ĠAndroid Support Injection . inject ( this ) ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠ Ġbinding Ġ= ĠFragment Add Owner Binding . inflate ( layout Inflater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġreturn Ġbinding ?. root ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ Ġsetup RecyclerView () ĊĠĠĠ Ġsetup Selection Tracker () ĊĠĠĠ Ġsetup Button () ĊĊĠĠĠ Ġargs . owner Id ?. let Ġ{ Ġowner Id Ġ-> ĊĠĠĠĠĠ ĠviewModel . getOwner Info ( owner Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠviewModel . owner Data Status . observe ( view Lifecycle Owner ) Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOwner Data Status . Updated , ĊĠĠĠĠĠĠĠ ĠOwner Data Status . Added Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . reload () ĊĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠOwner Data Status . Owner Retrie ved Ġ-> Ġadd Owner Data ( status . owner ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Owner Data ( owner : ĠOwner ) Ġ{ ĊĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠ Ġedit Text Name . setText ( owner . name ) ĊĠĠĠĠĠ Ġowner . image ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġimages Adapter . select Image ( it ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġbutton Create . text Ġ= ĠgetString ( R . string . update _ owner ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠ Ġwith ( owner Images ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context (), ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġimages Adapter . add Images ( get Owners Images ()) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġimages Adapter ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Selection Tracker () Ġ{ ĊĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠ Ġimages Adapter . add Tracker ( owner Images ) Ġ{ Ġselected Image Ġ-> ĊĠĠĠĠĠĠĠ ĠviewModel . setSelected Image ( selected Image ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Button () Ġ{ ĊĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠ Ġbutton Create . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Input Layout Name . error Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġargs . owner Id Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Owner ( args . owner Id !! , Ġedit Text Name . text . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . isValid ( edit Text Name . text . toString ()) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Owner ( edit Text Name . text . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input Layout Name . error Ġ= ĠgetString ( R . string . name _ error ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ