/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 7 ĠMu ham mad ĠR if qi ĠF atch ur ra h man ĠPut ra ĠDan ar Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 Ġio . github . mu hr if q ii . ma os . libs Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Call Super Ċ import Ġcom . trello . rx lifecycle 2 . android . Activity Event Ċ import Ġio . github . mu hr if q ii . ma os . ui . data . Ma os Activity Result Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠCreated Ġon ĠĠ Ġ: Ġ 2 3 / 0 1 / 1 7 Ċ Ġ* ĠAuthor ĠĠĠĠĠĠ Ġ: Ġmu hr if q ii Ċ Ġ* ĠName ĠĠĠĠĠĠĠĠ Ġ: ĠMu ham mad ĠR if qi ĠF atch ur ra h man ĠPut ra ĠDan ar Ċ Ġ* ĠGithub ĠĠĠĠĠĠ Ġ: Ġhttps :// github . com / mu hr if q ii Ċ Ġ* ĠLinked In ĠĠĠĠ Ġ: Ġhttps :// linkedin . com / in / mu hr if q ii Ċ Ġ*/ Ċ open Ġclass ĠActivity ViewModel < The View >( params : ĠViewModel Params ) Ġ// Ġenables Ġreflection Ġon Ġsubclass Ċ where ĠThe View Ġ: ĠLifecycle Activity Type Ġ{ ĊĊĠ Ġprivate Ġval Ġview Change : ĠPublish Subject < Lifecycle Activity Type > Ġ= ĠPublish Subject . create () ĊĠ Ġprivate Ġval Ġview : ĠObservable < The View > Ġ= ĊĠĠĠĠĠ Ġview Change . filter Ġ{ Ġit Ġ! is ĠEmpty Lifecycle Activity Type Ġ}. map Ġ{ Ġit Ġas ĠThe View Ġ} ĊĠ Ġprivate Ġval Ġactivity Result : ĠPublish Subject < Ma os Activity Result > Ġ= ĠPublish Subject . create () ĊĠ Ġprivate Ġval Ġintent : ĠPublish Subject < Intent > Ġ= ĠPublish Subject . create () ĊĠ Ġprotected Ġval Ġdis pos ables : ĠComposite Disposable Ġ= ĠComposite Disposable () ĊĊĠ Ġfun Ġset Activity Result ( activity Result : ĠM aos Activity Result ) Ġ= ĊĠĠĠĠĠ Ġthis . activity Result . onNext ( activity Result ) ĊĊĠ Ġfun Ġset Intent ( intent : ĠIntent ) Ġ= Ġthis . intent . onNext ( intent ) ĊĊĠ Ġprotected Ġfun ĠgetActivity Result () Ġ= Ġactivity Result . hide () ĊĠ Ġprotected Ġfun Ġget Intent () Ġ= Ġintent . hide () ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġlifecycle Ġstart , Ġbut Ġview model Ġshould Ġnot Ġbe Ġstarted Ġyet ĊĠĠ Ġ*/ ĊĠ Ġ@ Call Super Ġopen Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ ĠTim ber . d (" onCreate Ġ% s ", Ġthis . toString ()) ĊĠĠĠ Ġval Ġx Ġ= ĠEmpty Lifecycle Activity Type () ĊĠĠĠ Ġview Change . onNext ( x ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġbegin Ġto Ġchange Ġthe Ġview ĊĠĠ Ġ*/ ĊĠ Ġ@ Call Super Ġopen Ġfun Ġ< The View Ġ: ĠLifecycle Activity Type > Ġon Take View ( view : ĠThe View ) Ġ{ ĊĠĠĠ ĠTim ber . d (" on Take View Ġ% s Ġin Ġ% s ", Ġthis . toString (), Ġview . toString ()) ĊĠĠĠ Ġview Change . onNext ( view ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġstop Ġthe Ġview Ġwith Ġan Ġempty Ġtype Ġof Ġview ĊĠĠ Ġ*/ ĊĠ Ġ@ Call Super Ġopen Ġfun Ġon Drop View () Ġ{ ĊĠĠĠ ĠTim ber . d (" on Drop View Ġ% s ", Ġthis . toString ()) ĊĠĠĠ Ġval Ġx Ġ= ĠEmpty Lifecycle Activity Type () ĊĠĠĠ Ġview Change . onNext ( x ) ĊĠ Ġ} ĊĊĠ Ġ@ Call Super Ġopen Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ ĠTim ber . d (" on Destroy Ġ% s ", Ġthis . toString ()) ĊĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġview Change . onComplete () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAll Ġobservable s Ġin Ġa Ġview Ġmodel Ġmust Ġcompose Ġ` bind To Lifecycle ()` Ġbefore Ġcalling ĊĠĠ Ġ* Ġ` subscribe `. ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< T > Ġbind To Lifecycle () Ġ= ĠViewModel Lifecycle Transformer < T >( view ) Ċ } ĊĊĊ