package Ġcom . dro ib it . android . custom tabs . launcher . internal Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent . ACTION _ VIEW Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Service ĊĊ Ċ internal Ġobject ĠCustom Tabs Package Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠPACK AGE _ CH ROME _ ST ABLE Ġ= Ġ" com . android . chrome " ĊĠĠĠ Ġprivate Ġconst Ġval ĠPACK AGE _ CH ROME _ B ETA Ġ= Ġ" com . chrome . beta " ĊĠĠĠ Ġprivate Ġconst Ġval ĠPACK AGE _ CH ROME _ DEV Ġ= Ġ" com . chrome . dev " ĊĠĠĠ Ġprivate Ġconst Ġval ĠPACK AGE _ CH ROME _ LOCAL Ġ= Ġ" com . google . android . apps . chrome " ĊĊĠĠĠ Ġval ĠCH ROME _ PACK AGES Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf ( PACKAGE _ CH ROME _ ST ABLE , ĠPACK AGE _ CH ROME _ B ETA , ĠPACK AGE _ CH ROME _ DEV , ĠPACK AGE _ CH ROME _ LOCAL ) ĊĊĠĠĠ Ġfun Ġget Non Chrome Custom Tabs Packages ( context : ĠContext ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Intent Ġ= ĠIntent ( ACTION _ VIEW , ĠUri . parse (" http :// ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Category ( Intent . CATEGORY _ BRO WS ABLE ) ĊĠĠĠĠĠĠĠ Ġval Ġflag Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . MATCH _ ALL ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . MATCH _ DEFAULT _ ONLY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠ Ġreturn Ġpm . query Intent Activities ( activity Intent , Ġflag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . activity Info . packageName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ! in ĠCH ROME _ PACK AGES Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Intent Ġ= ĠIntent ( Custom Tabs Service . ACTION _ CUSTOM _ TAB S _ CONNECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Package ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpm . resolve Service ( service Intent , Ġ 0 ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} Ċ }