package Ġcom . fr aming . module . customer . ui . activity Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroidx . constraint layout . motion . widget . Motion Layout Ċ import Ġandroidx . core . os . Handler Compat . post Delayed Ċ import Ġandroidx . core . os . post Delayed Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġcom . fr aming . base lib . T Log Ċ import Ġcom . fr aming . common lib . base . IB ind ing Click Event Ċ import Ġcom . fr aming . common lib . inject . policy . Permission Policy Ċ import Ġcom . fr aming . common lib . network . Header Info Init Ċ import Ġcom . fr aming . common lib . network . Request Build Ċ import Ġcom . fr aming . common lib . utils . Bar Utils Ċ import Ġcom . fr aming . common lib . widget . Status Layout Ċ import Ġcom . young . aac . base . Mv vm Base Activity Ċ import Ġcom . fr aming . module . customer . databinding . C Container Activity Binding Ċ import Ġcom . fr aming . module . customer . ui . view model . C Container UI VM Ċ import Ġcom . fr aming . module . customer . data . view model . C Container Data VM Ċ import Ġcom . fr aming . module . customer . BR Ċ import Ġcom . fr aming . module . customer . Customer Share VM Ċ import Ġcom . fr aming . module . customer . R Ċ import Ġcom . fr aming . module . customer . data . bean . Simple Data Bean Ċ import Ġcom . young . bean . Page All Bean Ċ import Ġcom . young . business mv vm . data . repository . network . Net Request Manager Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠDes Ġ å®¹åĻ¨ ç±» Ġ æİ§åĪ¶ åĪĨ åıĳ Ġ æİ§åĪ¶ ä¸ļåĬ¡ Ġ çĽ¸ å½ĵ äºİ app Ġcontroller Ċ Ġ* ĠCreated Ġby ĠYo ung Ġon Ġ 2 0 2 0 - 0 8 - 1 1 Ġ 1 9 : 1 5 : 0 7 Ċ Ġ*/ Ċ class ĠC Container Activity Ġ: Ġ ĠM v vm Base Activity < C Container Activity Binding , ĠC Container UI VM , C Container Data VM >() Ġ, IB ind ing Click Event < Any >{ ĊĊĠĠĠ Ġprivate Ġvar Ġapp Share VM : Customer Share VM ?= null // app åħ±äº« ĠC Container Activity Ġdata VM Ġ çĽ®åīį ä¹Łæĺ¯ çĽ¸ å½ĵ äºİ app ĊĠĠĠ Ġprivate Ġvar Ġcontent Nav Ctrl : ĠNav Controller ?= null // ä¸» åĨħå®¹ åĪĨ åıĳ æİ§åĪ¶åĻ¨ ĊĠĠĠ Ġprivate Ġvar Ġstart Nav Ctrl : ĠNav Controller ?= null // åĲ¯åĬ¨ é¡µ åĪĨ åıĳ æİ§åĪ¶åĻ¨ ĊĊĠĠĠ Ġoverride Ġ Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġget Binding (). load Hide = Status Layout . StatusType . HIDE ĊĠĠĠĠĠĠĠ Ġapp Share VM = getApp ViewModel Provider ()?. get ( Customer Share VM :: class . java ) ĊĠĠĠĠĠĠĠ Ġcontent Nav Ctrl = find Nav Controller ( R . id . content _ fragment _ host ) ĊĠĠĠĠĠĠĠ Ġstart Nav Ctrl = find Nav Controller ( R . id . launch _ fragment _ host ) ĊĠĠĠĠĠĠĠ ĠNet Request Manager . get (). set Network Request Info ( Header Info Init ()) ĊĠĠĠĠĠĠĠ Ġui Logic () ĊĠĠĠĠĠĠĠ Ġpermission Run ( Permission Policy . P _ LOC ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĿĥéĻĲ è¯·æ±Ĥ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpermission Run ( Permission Policy . P _ CAM ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsch d ule Scope ?. launch { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Share VM ?. is Start Hide ?. post Value ( true ) Ġ// æī§è¡Į å®Į äºĨ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠgetData ViewModel ()?. request Data () // all ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠUI Ġæī§è¡Į éĢ»è¾ĳ æĺ¯ çĶ± Ġapp Ġshare Ġvm Ġ æİ§åĪ¶ åĪĨ åıĳ Ġ åĲ¯åĬ¨ é¡µ çĽ¸åħ³ Ġ è¿ĺæĺ¯ Ġ ä¸» åĨħå®¹ çĽ¸åħ³ ĊĠĠĠ Ġ* Ġ ä¸»è¦ģ Ġdata vm Ġ åıį è½¬ ç»Ļ UI vm Ġ æİ§åĪ¶ ĊĠĠĠ Ġ* ĠUi VM Ġpost Ġvalue Ġ è§¦åıĳ ui æĽ´æĸ° ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Resource As Color ") ĊĠĠĠ Ġprivate Ġfun Ġui Logic () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// UI Ġ çĬ¶æĢģ ĠåĴĮ Ġdata Ġä¸į ä¸Ģèĩ´ æīį å¤ĦçĲĨ Ġ åĲ¯åĬ¨ é¡µ å±ķç¤º ä¸İ åĲ¦ ĊĠĠĠĠĠĠĠ Ġapp Share VM ?. is Start Hide ?. observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( get UI ViewModel (). is Start Hide . value != it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget UI ViewModel (). is Start Hide . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// è§Ĥ å¯Ł Ġ æİ§åĪ¶ Ġ äº¤ ç»Ļ U iv m Ġdialog ĊĠĠĠĠĠĠĠ ĠgetData ViewModel ()?. is ShowDialog ?. observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT Log . log (" dialog _ post "," 1 1 1 $ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget UI ViewModel (). is Dialog Show . post Value ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// è§Ĥ å¯Ł Ġ åģļ dialog Ġ æĺ¾ç¤º éĢ»è¾ĳ ĊĠĠĠĠĠĠĠ Ġget UI ViewModel (). is Dialog Show . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( get UI ViewModel (). is Start Hide . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å±ķç¤º å¼¹ çªĹ Ġ ä¸Ķ åľ¨ éĿŀ åĲ¯åĬ¨ é¡µ éĢ»è¾ĳ æĥħåĨµ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Binding (). motion Layout ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Transition ( R . id . to _ dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition ToEnd () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Binding (). motion Layout ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Transition ( R . id . to _ dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition To Start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// çĽĳåĲ¬ åĬ¨ æķĪ æµģç¨ĭ Ġéħįç½® éĢ»è¾ĳ ĊĠĠĠĠĠĠĠ Ġget Binding (). motion Layout . add Transition Listener ( object Ġ: ĠMotion Layout . Transition Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Transition Trigger ( p 0 : ĠMotion Layout ?, Ġp 1 : ĠInt , Ġp 2 : ĠBoolean , Ġp 3 : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Log . log (" container _ motion Layout "," on Transition Trigger ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Transition Started ( p 0 : ĠMotion Layout ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Log . log (" container _ motion Layout "," on Transition Started ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Transition Change ( p 0 : ĠMotion Layout ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Log . log (" container _ motion Layout "," on Transition Change ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Transition Completed ( p 0 : ĠMotion Layout ?, Ġp 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Log . log (" container _ motion Layout "," on Transition Completed $ p 1 Ġ Ġ${ R . id . dialog }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( p 1 == R . id . dialog ){ // id Ġåľ¨ container åĬ¨ éĶĢ æī§è¡Į å®ĮæĪĲ åĨį æī§è¡Į dialog style Ġ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Binding (). dialog View ?. progress ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġinit Dialog (){ ĊĠĠĠĠĠĠĠ Ġget Binding (). dialog View . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetData ViewModel ()?. dialog Data ?. value ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetData ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick L is en ( this @ C Container Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView , Ġdata : ĠAny , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠT Log . log (" activity _ onclick ", view . toString ()) ĊĠĠĠĠĠĠĠ Ġwhen ( view . id ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . confirm _ btn ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget UI ViewModel (). is Go Click . value = true ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġget UI ViewModel (): ĠC Container UI VM Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetActivity ViewModel Provider ( this ). get ( C Container UI VM :: class . java ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠgetData ViewModel (): ĠC Container Data VM ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetActivity ViewModel Provider ( this ). get ( C Container Data VM :: class . java ) !! ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġbinding Variable : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠBR . c Container UI VM ĊĠĠĠ Ġoverride Ġval Ġlayout Id : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . layout . c _ container _ activity ĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* Ġ èĩªå®ļä¹ī è¿ĶåĽŀ ĊĠĠĠ Ġ* Ġ è¿ĩæ»¤ è¿ĶåĽŀ key back Ġ å®ļä¹ī æĸ°çļĦ æīĭ åĬ¿ æİ¨ åĩº äº¤ äºĴ ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġvar Ġclick Time : Long ?= null ĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠT Log . log (" on KeyDown ", event ?. action . toString ()) ĊĠĠĠĠĠĠĠ Ġwhen ( event ?. action ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ BACK , KeyEvent . ACTION _ DOWN ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( content Nav Ctrl ?. current Destination ?. label ?. equals (" Map Fragment ") !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( click Time != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc urre tn Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinterval Time Ġ= Ġc urre tn Time . minus ( click Time !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interval Time Ġ<= Ġ 1 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Time = System . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" åĨį æ¬¡ çĤ¹åĩ» éĢĢåĩº ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Time = System . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" åĨį æ¬¡ çĤ¹åĩ» éĢĢåĩº ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { // è¿ĩæ»¤ æŃ£å¸¸ è¿ĶåĽŀ éĶ® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} Ċ } Ċ