/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . example . android . track mys leep quality . sleep tracker Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . android . track mys leep quality . database . Sleep Database Dao Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġpretty Ġmuch Ġbo iler Ġplate Ġcode Ġfor Ġa ĠViewModel ĠFactory . Ċ Ġ* Ċ Ġ* ĠProvides Ġthe ĠSleep Database Dao Ġand Ġcontext Ġto Ġthe ĠViewModel . Ċ Ġ*/ ĊĊ Ċ // Sleep Tracker ViewModel Factory Ġtakes Ġthe Ġsame Ġarguments Ġas Ġthe ĠView Mode Ċ // class ĠSleep Tracker ViewModel Factory ( Ċ // Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġval ĠdataSource : ĠSleep Database Dao , Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġval Ġapplication : ĠApplication ) Ġ: ĠViewModel Provider . Factory Ġ{ Ċ // Ċ // ĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ċ // ĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Sleep Tracker ViewModel :: class . java )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSleep Tracker ViewModel ( dataSource , Ġapplication ) Ġas ĠT Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown ĠViewModel Ġclass ") Ċ // ĠĠĠ Ġ} Ċ //} Ċ Ċ // Sleep Tracker ViewModel Factory Ġextends ĠViewModel Provider . Factory ĊĊĊĊĠ Ġclass ĠSleep Tracker ViewModel Factory Ġ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠdataSource : ĠSleep Database Dao , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp : Application ) Ġ: ViewModel Provider . Factory { ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĊĠĠĠ Ġ// Ġoverrides Ġcreate () Ġgeneric Ġfunction ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/* isAssignableFrom () Ġdetermines Ġif Ġthe Ġmodel Class Ġis Ġeither ĊĠĠĠĠĠĠĠ Ġthe Ġsame Ġas , Ġor Ġis Ġa Ġsuperclass Ġof Ġthe Ġspecified ĠClass Ġparameter .*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Sleep Tracker ViewModel :: class . java )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSleep Tracker ViewModel ( dataSource , Ġapp ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow Ġ ĠIllegalArgumentException (" Unknown ĠView ĠModel ĠClass ") ĊĠĠĠ Ġ} ĊĠ Ġ}