package Ġcom . jak ting . share clean Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . jak ting . share clean . utils .* Ċ import Ġcom . top john wu . superuser . Shell Ċ import Ġkotlinx . android . synt hetic . main . activity _ apps .* ĊĊ Ċ open Ġclass ĠManage Activity Ġ: ĠBase Activity () Ġ{ ĊĠĠĠ Ġopen Ġvar Ġtag Ġ= Ġ"" ĊĊĠĠĠ Ġvar Ġadapter : ĠRecyclerView . Adapter < *> ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġre cyclerView LayoutManager : ĠRecyclerView . LayoutManager ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Show System App Ġ= Ġfalse ĊĠĠĠ Ġvar Ġintent DataList : ĠArrayList < Apps Adapter . Intent Data > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Search View : ĠSearch View ĊĊĠĠĠ Ġ@ Suppress Lint (" Commit Pref Ed its ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ apps ) ĊĠĠĠĠĠĠĠ Ġtag Ġ= Ġintent . getString Extra (" tag "). toString () ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById ( R . id . toolbar )) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Search View . query . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġm Search View . java Class . getDeclared Method (" onClose Clicked ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( m Search View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapps _ swipe Layout . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Enable Refresh ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Primary Colors Id ( R . color . color Accent , ĠR . color . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapps _ swipe Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView LayoutManager Ġ= ĠGrid LayoutManager ( this @ Manage Activity , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġre cycler _ view !!. layout Manager Ġ= Ġre cyclerView LayoutManager ĊĠĠĠĠĠĠĠ Ġclear IF W () ĊĠĠĠĠĠĠĠ Ġinit Fab () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġclear IF W () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( clear IF W ( tag )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapps _ swipe Layout . auto Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler _ view ?. s bar ( getString ( R . string . manage _ start )) ?. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġinit ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar !!. title Ġ= Ġget Manage Type Title ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscroll To Hide Fab () ĊĠĠĠĠĠĠĠ Ġis Show System App Ġ= Ġsetting SharedPreferences . getBoolean (" switch _ show System App ", Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġapk Info Ġ= ĠA pk Info ( this , Ġtag ) ĊĠĠĠĠĠĠĠ Ġintent DataList Ġ= Ġapk Info . getAll Installed A pk Info ( is Show System App ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠApps Adapter ( intent DataList ) ĊĠĠĠĠĠĠĠ Ġre cycler _ view ?. adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġfor Ġ( intent Data Index Ġin Ġintent DataList . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent List SharedPreferences . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ intent DataList [ intent Data Index ]. package _ name }/${ intent DataList [ intent Data Index ]. activity }/ $ tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent DataList [ intent Data Index ]. check Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġintent DataList . sort With ( compare By ({ Ġit . check Ġ}, Ġ{ Ġ"${ it . app _ name } Ġ- Ġ${ it . activity _ name }" Ġ})) ĊĠĠĠĠĠĠĠ Ġ( adapter Ġas ĠApps Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġapps _ swipe Layout . finish Refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscroll To Hide Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æ»ĳ åĬ¨ éļĲèĹı ĠF AB ĊĠĠĠĠĠĠĠ Ġre cycler _ view ?. add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ> Ġ 0 Ġ&& Ġextended Fab . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dy Ġ< Ġ 0 Ġ&& Ġextended Fab . visibility Ġ!= ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġextended Fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġif w Ġ= Ġ"< rules >\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( intent Data Ġin Ġintent DataList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent List SharedPreferences Editor . put Boolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ intent Data . package _ name }/${ intent Data . activity }/ $ tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Data . check ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Data . check ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif w Ġ+= Ġget IF W Content ( tag , Ġ"${ intent Data . package _ name }/${ intent Data . activity }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif w Ġ+= Ġ"</ rules >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent List SharedPreferences Editor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġget IF W Path ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Shell . su (" touch Ġ$ filePath "). exec (). is Success Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell . su (" echo Ġ'$ if w ' Ġ> Ġ$ filePath "). exec (). is Success ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . setIcon Resource ( R . drawable . ic _ baseline _ check _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . text Ġ= ĠgetString ( R . string . manage _ apply _ success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . setIcon Resource ( R . drawable . ic _ round _ error _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . text Ġ= ĠgetString ( R . string . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch Item Ġ= Ġmenu !!. find Item ( R . id . search _ menu ) ĊĠĠĠĠĠĠĠ Ġval Ġselect All Item Ġ= Ġmenu . find Item ( R . id . select _ all _ menu ) ĊĠĠĠĠĠĠĠ Ġval Ġclear Select Item Ġ= Ġmenu . find Item ( R . id . clear _ select _ menu ) ĊĠĠĠĠĠĠĠ Ġm Search View Ġ= Ġsearch Item . action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġval Ġsearch Frame LL Ġ= Ġm Search View . findViewById ( R . id . search _ edit _ frame ) Ġas ĠLinearLayout ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġparams . weight Ġ= Ġ 1 F ĊĠĠĠĠĠĠĠ Ġparams . set Margins ( dip 2 px (- 8 ), 0 , dip 2 px ( 3 2 ), 0 ) ĊĠĠĠĠĠĠĠ Ġsearch Frame LL . layout Params Ġ= Ġparams Ċ // ĠĠĠĠĠĠĠ Ġm Search View . maxWidth Ġ= Ġandroid . R . attr . width ĊĠĠĠĠĠĠĠ Ġm Search View . setOn Search ClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect All Item . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Select Item . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Search View . setOn Close Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect All Item . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Select Item . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Search View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( s : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( s : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextended Fab . visibility Ġ= Ġif Ġ( s . isNotEmpty ()) ĠView . IN VISIBLE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog d (" æŃ¤ æĹ¶çļĦ æĲľç´¢ åŃĹç¬¦ä¸² æĺ¯ Ġ$ s ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( adapter Ġas ĠApps Adapter ). filter . filter ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( adapter Ġas ĠApps Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . select _ all _ menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( intent Data Index Ġin Ġintent DataList . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent DataList [ intent Data Index ]. check Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( adapter Ġas ĠApps Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . clear _ select _ menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( intent Data Index Ġin Ġintent DataList . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent DataList [ intent Data Index ]. check Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( adapter Ġas ĠApps Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ