package Ġcom . cv te . easy float . utils Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġcom . cv te . easy float . core . Floating WindowManager Ċ import Ġcom . cv te . easy float . enums . Show Pattern Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** ĊĊ Ġ* Ġ@ function : ĠéĢļè¿ĩ çĶŁåĳ½ åĳ¨æľŁ åĽŀè°ĥ ï¼Į åĪ¤æĸŃ ç³»ç»Ł æµ ® çªĹ çļĦ è¿ĩæ»¤ ä¿¡æģ¯ ï¼Į ä»¥åıĬ app æĺ¯åĲ¦ ä½į äºİ åīį åı° ï¼Į æİ§åĪ¶ æµ ® çªĹ æĺ¾ éļĲ Ċ Ġ* Ġ@ date : Ġ 2 0 1 9 - 0 7 - 1 1 ĠĠ 1 5 : 5 1 Ċ Ġ*/ Ċ internal Ġobject ĠLifecycle Utils Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġapplication : ĠApplication ĊĠĠĠ Ġprivate Ġvar Ġactivity Count Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Top Activity : ĠWeak Reference < Activity >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget Top Activity (): ĠActivity ? Ġ= Ġm Top Activity ?. get () ĊĊĠĠĠ Ġfun Ġset Lifecycle Callbacks ( application : ĠApplication ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . application Ġ= Ġapplication ĊĠĠĠĠĠĠĠ Ġapplication . register Activity Lifecycle Callbacks ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . Activity Lifecycle Callbacks Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Created ( activity : ĠActivity ?, ĠsavedInstanceState : ĠBundle ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Started ( activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ åĲ¯åĬ¨ çļĦ activity æķ° çĽ® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ Ġactivity Count ++ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Res umed ( activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Top Activity ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Top Activity Ġ= ĠWeak Reference < Activity >( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ¯ı æ¬¡ éĥ½ è¦ģ åĪ¤æĸŃ å½ĵåīį é¡µéĿ¢ æĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Show ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Paused ( activity : ĠActivity ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Stopped ( activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ åħ³éĹŃ çļĦ activity æķ° çĽ® ï¼Į å¹¶ åĪ¤æĸŃ å½ĵåīį App æĺ¯åĲ¦ å¤Ħ äºİ åĲİåı° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Count -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Hide ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Destroyed ( activity : ĠActivity ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Save InstanceState ( activity : ĠActivity ?, Ġout State : ĠBundle ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æµ ® çªĹ æĺ¯åĲ¦ éľĢè¦ģ æĺ¾ç¤º ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Show ( activity : ĠActivity ) Ġ= ĊĠĠĠĠĠĠĠ ĠFloating WindowManager . window Map . forEach Ġ{ Ġ( tag , Ġmanager ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . config . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵåīį é¡µéĿ¢ çļĦ æµ ® çªĹ ï¼Į ä¸įéľĢè¦ģ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Pattern Ġ== ĠShow Pattern . CURRENT _ ACTIVITY Ġ-> Ġreturn @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä»ħ åĲİåı° æĺ¾ç¤º æ¨¡å¼ı ä¸ĭ ï¼Į éļĲèĹı æµ ® çªĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Pattern Ġ== ĠShow Pattern . BACKGROUND Ġ-> Ġset Visible ( false , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æ²¡æľī æīĭåĬ¨ éļĲèĹı æµ ® çªĹ ï¼Į éľĢè¦ģ èĢĥèĻĳ è¿ĩæ»¤ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Show Ġ-> Ġset Visible ( activity . component Name . className Ġ! in Ġfilter Set , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æµ ® çªĹ æĺ¯åĲ¦ éľĢè¦ģ éļĲèĹı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Hide ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸įæĺ¯ finish ï¼Į å¹¶ä¸Ķ å¤Ħ äºİ åīį åı° ï¼Į æĹł éľĢ åĪ¤æĸŃ ĊĠĠĠĠĠĠĠ Ġif Ġ(! activity . is Finish ing Ġ&& Ġis Foreground ()) Ġreturn ĊĠĠĠĠĠĠĠ ĠFloating WindowManager . window Map . forEach Ġ{ Ġ( tag , Ġmanager ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ æµ ® çªĹ æĺ¯åĲ¦ éľĢè¦ģ åħ³éĹŃ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity . is Finish ing ) Ġmanager . params . token ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ token ä¸į ä¸ºç©º ï¼Į å¹¶ä¸Ķ æĺ¯ å½ĵåīį éĶĢ æ¯ ģ çļĦ Activity ï¼Į åħ³éĹŃ æµ ® çªĹ ï¼Į éĺ² æŃ¢ çªĹåı£ æ³ Ħ æ¼ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġactivity . window ?. decor View ?. window Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloating WindowManager . dismiss ( tag , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . config . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Foreground () Ġ&& Ġmanager . config . show Pattern Ġ!= ĠShow Pattern . CURRENT _ ACTIVITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵ app å¤Ħ äºİ åĲİåı° æĹ¶ ï¼Į åħ¨å±Ģ ãĢģ ä»ħ åĲİåı° æĺ¾ç¤º çļĦ æµ ® çªĹ ï¼Į å¦Ĥæŀľ æ²¡æľī æīĭåĬ¨ éļĲèĹı ï¼Į éľĢè¦ģ æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Visible ( show Pattern Ġ!= ĠShow Pattern . FO REG ROUND Ġ&& Ġneed Show , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Foreground () Ġ= Ġactivity Count Ġ> Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġset Visible ( is Show : ĠBoolean Ġ= Ġis Foreground (), Ġtag : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠ ĠFloating WindowManager . visible ( is Show , Ġtag ) Ċ Ċ }