package Ġcom . example . clone _ da um . ui . main . medi ase arch Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . animation .* Ċ import Ġandroidx . saved state . Saved State Registry Owner Ċ import Ġcom . example . clone _ da um . databinding . Media Search Fragment Binding Ċ import Ġcom . example . clone _ da um . ui . Navigator Ċ import Ġb rig it te .* Ċ import Ġb rig it te . binding adapter . Anim Params Ċ import Ġb rig it te . di . d agger . scope . Fragment Scope Ċ import Ġb rig it te . runtime permission . Permission Params Ċ import Ġb rig it te . runtime permission . runtime Permissions Ċ import Ġcom . example . clone _ da um . R Ċ import Ġdagger . Bind s Ċ import Ġdagger . android . Contribut es Android Injector Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġ< a Ġhref =" mailto : auc d 2 9 @ gmail . com "> Bur ke ĠCh oi </ a > Ġon Ġ 2 0 1 9 . Ġ 1 . Ġ 1 6 . Ġ< p /> Ċ Ġ*/ Ċ Ċ class ĠMedia Search Fragment Ġ@ Inject Ġconstructor ( Ċ ) Ġ: ĠBase D agger Fragment < Media Search Fragment Binding , ĠMedia Search ViewModel >(), ĠOn Back Pressed Listener Ġ{ ĊĠĠĠ Ġoverride Ġval Ġlayout Id Ġ= ĠR . layout . media _ search _ fragment ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Media Search Fragment :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN IM _ DURATION ĠĠĠĠ Ġ= Ġ 4 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN IM _ START _ DELAY Ġ Ġ= Ġ 2 5 0 L ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQ _ RECORD _ SPE E CH Ġ= Ġ 7 8 1 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQ _ RECORD _ M US IC Ġ Ġ= Ġ 7 8 1 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQ _ FLOW ER ĠĠĠĠĠĠĠ Ġ= Ġ 7 8 1 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQ _ BAR CODE ĠĠĠĠĠĠ Ġ= Ġ 7 8 1 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġnavigator : ĠNavigator ĊĊĠĠĠ Ġprivate Ġvar Ġpause Animator : ĠAn imator ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinit View Binding () Ġ= Ġbinding . run Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Search Extend Menu Container . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Y Ġ= Ġheight . toFloat () Ġ* Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Search Button Layout . translation Y Ġ= Ġmedia Search Button Layout . height . toFloat () Ġ* Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmedia Search Background . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìĪ ¨ ê¹ Ģ Ġìĺģ ìĹŃ ìĿĦ Ġì¡° ê¸Ī Ġê° Ĳ ì¶ ¤ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= Ġheight Ġ+ Ġ 2 0 . dp To Px ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" MEDIA ĠSEARCH ĠHEIGHT Ġ: Ġ$ height Ġ-> Ġ$ new Height ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Height ( new Height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ViewModel Events () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Search Button Layout Height Ġ= Ġbinding . media Search Button Layout . height . toFloat () Ġ* Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġover shoot Anim Ġ= ĠAnim Params ( 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġinit Value ĠĠĠ Ġ= Ġmedia Search Button Layout Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġduration ĠĠĠĠ Ġ= ĠAN IM _ DURATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġstart Delay ĠĠ Ġ= ĠAN IM _ START _ DELAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġinterpol ator Ġ= ĠOver shoot Interpolator ( 2 . 3 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġover shoot Anim . reverse Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Animator Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanimate Ġset ĠìĿ Ħ Ġì ĵ° ëĬĶ ê²Į ĠëĤĺ ìľ¼ ëł¤ ëĤĺ ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim ming Bg Alpha . set ( Anim Params ( 1 f , Ġduration Ġ= ĠAN IM _ DURATION )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Trans Y . set ( Anim Params ( 0 f , Ġduration Ġ= ĠAN IM _ DURATION )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġover shoot Trans Y . set ( over shoot Anim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġend Animation ( end Callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Extend Menu Height Ġ= Ġbinding . media Search Extend Menu Container . height . toFloat () Ġ* Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġdim ming Bg Alpha Anim Ġ Ġ= ĠAnim Params ( 0 f , Ġduration Ġ= ĠAN IM _ DURATION ) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Trans Y Anim Ġ= ĠAnim Params ( search Extend Menu Height , Ġduration Ġ= ĠAN IM _ DURATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġend Listener Ġ= Ġ{ Ġanim Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Callback ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim ming Bg Alpha Anim . start Delay Ġ Ġ= ĠAN IM _ START _ DELAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Trans Y Anim . start Delay Ġ= ĠAN IM _ START _ DELAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause Animator ?. resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim ming Bg Alpha . set ( dim ming Bg Alpha Anim ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Trans Y . set ( container Trans Y Anim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim ming Bg Alpha . set ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Trans Y . set ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////////// // ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠOn Back Pressed Listener ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////////// // ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" BACK ĠP RESSED ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġend Animation () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////////// // ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠICommand Event Aware ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////////// // ĊĊĠĠĠ Ġoverride Ġfun Ġon Command Event ( cmd : ĠString , Ġdata : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" COMMAND ĠEVENT Ġ: Ġ$ cmd ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMedia Search ViewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMD _ ANIM _ FIN ISH ĠĠĠ Ġ-> Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMD _ SEARCH _ SPE E CH Ġ Ġ-> Ġend Animation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Permissions ( Permission Params ( activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġarray ListOf ( Manifest . permission . RECORD _ AUDIO , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ{ Ġ_, Ġres Ġ-> Ġif Ġ( res ) Ġ{ Ġnavigator . speech Fragment () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠREQ _ RECORD _ SPE E CH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMD _ SEARCH _ M US IC ĠĠ Ġ-> Ġend Animation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Permissions ( Permission Params ( activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġarray ListOf ( Manifest . permission . RECORD _ AUDIO , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ{ Ġ_, Ġres Ġ-> Ġif Ġ( res ) Ġ{ Ġnavigator . music Fragment () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠREQ _ RECORD _ M US IC )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMD _ SEARCH _ FLOW ER Ġ Ġ-> Ġend Animation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Permissions ( Permission Params ( activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġarray ListOf ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ{ Ġ_, Ġres Ġ-> Ġif Ġ( res ) Ġ{ Ġnavigator . flower Fragment () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠREQ _ FLOW ER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMD _ SEARCH _ BAR CODE Ġ-> Ġend Animation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Permissions ( Permission Params ( activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġarray ListOf ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ{ Ġ_, Ġres Ġ-> Ġif Ġ( res ) Ġ{ Ġnavigator . barcode Fragment () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠREQ _ BAR CODE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////////// // ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠMODULE ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////////// // ĊĊĠĠĠ Ġ@ d agger . Module ĊĠĠĠ Ġabstract Ġclass ĠModule Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Fragment Scope ĊĠĠĠĠĠĠĠ Ġ@ Contribut es Android Injector ( modules Ġ= Ġ[ Media Search Fragment Module :: class ]) ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġcontribute Media Search Fragment Injector (): ĠMedia Search Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ d agger . Module ĊĠĠĠ Ġabstract Ġclass ĠMedia Search Fragment Module Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bind s ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġbind Saved State Registry Owner ( activity : ĠMedia Search Fragment ): ĠSaved State Registry Owner ĊĠĠĠ Ġ} Ċ } Ċ