/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠCl iff ord ĠLi u Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . mad ness . collision . unit . api _ view ing . list Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Guide line Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ import Ġcom . google . android . material . card . Material Card View Ċ import Ġcom . google . android . material . chip . Chip Group Ċ import Ġcom . mad ness . collision . R Ċ import Ġcom . mad ness . collision . main . Main ViewModel Ċ import Ġcom . mad ness . collision . misc . Misc App Ċ import Ġcom . mad ness . collision . unit . api _ view ing . Api View ing ViewModel Ċ import Ġcom . mad ness . collision . unit . api _ view ing . App Tag Ċ import Ġcom . mad ness . collision . unit . api _ view ing . Utils Ċ import Ġcom . mad ness . collision . unit . api _ view ing . data . Api View ing App Ċ import Ġcom . mad ness . collision . unit . api _ view ing . data . Easy Access Ċ import Ġcom . mad ness . collision . unit . api _ view ing . data . Ver Info Ċ import Ġcom . mad ness . collision . unit . api _ view ing . databinding . Av Share Binding Ċ import Ġcom . mad ness . collision . unit . api _ view ing . se al . Se al Manager Ċ import Ġcom . mad ness . collision . util .* Ċ import Ġcom . mad ness . collision . util . controller . edge To Edge Ċ import Ġcom . mad ness . collision . util . os . Os Utils Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . File Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . round ToInt Ċ import Ġcom . mad ness . collision . unit . api _ view ing . R Ġas ĠMy R Ċ Ċ internal Ġclass ĠApi Info Pop : ĠBottom Sheet Dialog Fragment (), ĠView . OnClickListener { ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġpackage Cool A pk Ġ= ĠApi View ing App . package Cool A pk ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġpackage Play Store Ġ= ĠApi View ing App . package Play Store ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġpackage Settings Ġ= Ġ" com . android . settings " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" API Info Pop " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ APP Ġ= Ġ" app " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinitialized Store Link Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstore Map Ġ= Ġmutable Map Of < String , ĠBitmap >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear Stores () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialized Store Link Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( app : ĠApi View ing App ) Ġ= ĠApi Info Pop (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( ARG _ APP , Ġapp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Wrong View Cast ") ĊĠĠĠ Ġclass ĠViewHolder ( val Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Api : ĠApi ViewHolder Ġ= ĠApi ViewHolder ( view . findViewById ( My R . id . sdk _ info _ api _ target )) ĊĠĠĠĠĠĠĠ Ġval Ġmin Api : ĠApi ViewHolder Ġ= ĠApi ViewHolder ( view . findViewById ( My R . id . sdk _ info _ api _ min )) ĊĠĠĠĠĠĠĠ Ġval Ġapp : ĠApp ViewHolder Ġ= ĠApp ViewHolder ( view . findViewById ( My R . id . av Info Pop App )) ĊĠĠĠĠĠĠĠ Ġval Ġver : ĠAppCompat TextView Ġ= Ġview . findViewById ( My R . id . api Info Ver ) Ġas ĠAppCompat TextView ĊĠĠĠĠĠĠĠ Ġval Ġguide line Bottom : ĠGuide line Ġ= Ġview . findViewById ( My R . id . sdk _ info _ guide line _ bottom ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent : ĠConstraint Layout Ġ= Ġview . findViewById ( My R . id . api _ content ) ĊĠĠĠĠĠĠĠ Ġval Ġcapture : ĠImage Button Ġ= Ġview . findViewById ( My R . id . av App Info Capture ) ĊĠĠĠĠĠĠĠ Ġval Ġoptions : ĠImage Button Ġ= Ġview . findViewById ( My R . id . av App Info Options ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Api . api Title . setText ( My R . string . sdk check _ dialog _ target sdk text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Api . api Title . setText ( My R . string . sdk check _ dialog _ min sdk text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Wrong View Cast ") ĊĠĠĠ Ġclass ĠApi ViewHolder ( val Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġback : ĠImageView Ġ= Ġview . findViewById ( My R . id . sdk _ info _ api _ target _ back ) ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠAppCompat TextView Ġ= Ġview . findViewById ( My R . id . sdk _ info _ api _ target _ chip ) Ġas ĠAppCompat TextView ĊĠĠĠĠĠĠĠ Ġval Ġapi : ĠAppCompat TextView Ġ= Ġview . findViewById ( My R . id . sdk check _ dialog _ ap pt arget sdk ) Ġas ĠAppCompat TextView ĊĠĠĠĠĠĠĠ Ġval Ġapi Title : ĠAppCompat TextView Ġ= Ġview . findViewById ( My R . id . sdk check _ dialog _ ap pt arget sdk I ) Ġas ĠAppCompat TextView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Wrong View Cast ") ĊĠĠĠ Ġclass ĠApp ViewHolder ( val Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġback : ĠImageView Ġ= Ġview . findViewById ( My R . id . api _ info _ back ) ĊĠĠĠĠĠĠĠ Ġval Ġicon : ĠImageView Ġ= Ġview . findViewById ( My R . id . sdk check _ dialog _ logo ) ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠAppCompat TextView Ġ= Ġview . findViewById ( My R . id . sdk check _ dialog _ app name ) Ġas ĠAppCompat TextView ĊĠĠĠĠĠĠĠ Ġval Ġbadge : ĠImageView Ġ= Ġview . findViewById ( My R . id . api _ info _ ai _ icon ) ĊĠĠĠĠĠĠĠ Ġval Ġtags : ĠCh ip Group Ġ= Ġview . findViewById ( My R . id . av App Info App Tags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠApi Info ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Views : ĠViewHolder ĊĊĠĠĠ Ġprivate Ġval Ġmv App : ĠApp ViewHolder ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Views . app ĊĠĠĠ Ġprivate Ġval Ġmv Min : ĠApi ViewHolder ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Views . min Api ĊĠĠĠ Ġprivate Ġval Ġmv Target : ĠApi ViewHolder ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Views . target Api ĊĊĠĠĠ Ġprivate Ġval ĠViewHolder . min : ĠMaterial Card View ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmin Api . view Ġas ĠMaterial Card View ĊĠĠĠ Ġprivate Ġval ĠViewHolder . target : ĠMaterial Card View ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget Api . view Ġas ĠMaterial Card View ĊĊĠĠĠ Ġprivate Ġvar Ġpop Store : ĠCollision Dialog ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġis Ai Available Ġ= ĠX . above On ( X . O ) ĊĊĠĠĠ Ġprivate Ġvar Ġitem Length Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠBottom Sheet Dialog Ġstyle , Ġset Ġenable Edge To Edge Ġto Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġ( and Ġnavigation Bar Color Ġset Ġto Ġtransparent Ġor Ġtrans luc ent ) ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġdisable Ġautomatic Ġin sets Ġhandling ĊĠĠĠĠĠĠĠ Ġset Style ( STYLE _ NORMAL , ĠR . style . App Theme _ Pop ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Views Ġ= ĠViewHolder ( in flater . inflate ( My R . layout . av _ info _ pop , Ġcontainer , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġreturn Ġm Views . view ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġview Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . from ( root View . parent Ġas ĠView ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġpop Store ?. dismiss () ĊĠĠĠĠĠĠĠ Ġsuper . dismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġedge To Edge ( main Application . in set Bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġkeep Ġstatus Ġbar Ġicon Ġcolor Ġun touched ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠActually Ġthis Ġworks Ġas Ġintended Ġonly Ġwhen Ġapp Ġtheme Ġis Ġset Ġto Ġfollow Ġsystem , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġconfiguring Ġthis Ġicon Ġcolor Ġmakes Ġit Ġfollow Ġdialog 's Ġstyle / theme , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhich Ġis Ġdefined Ġin Ġstyles . xml Ġand Ġit Ġfollows Ġsystem Ġdark Ġmode Ġsetting . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġfix Ġthis , Ġset Ġit Ġto Ġthe Ġwindow Ġconfig Ġof Ġthe Ġactivity Ġbefore Ġthis . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfix Ġstatus Ġbar Ġicon Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. window ?. let Ġ{ Ġwindow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dark Icon Ġ= ĠSystem Util . is Dark Status Icon ( window ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Surface Ġ= ĠTheme Util . getColor ( context , ĠR . attr . color AS urface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġif Ġ( is Dark Icon Ġ== Ġtrue Ġ&& ĠOs Utils . dis satisf y ( Os Utils . O )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor Util . dar ken As ( color Surface , Ġ 0 . 9 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Surface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransparent Bar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġedge - to - edge Ġis Ġnot Ġenabled Ġbelow ĠO ĊĠĠĠĠĠĠĠ Ġif Ġ( Os Utils . satisf y ( Os Utils . O )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Margin Ġ= ĠX . size ( context , Ġ 1 0 f , ĠX . DP ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextra Margin Ġ= Ġmax ( main Application . in set Bottom , Ġmin Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Views . guide line Bottom . set Guide line End ( extra Margin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġbelow : Ġconfigure Ġviews ĊĠĠĠĠĠĠĠ Ġmv App . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . setOnClickListener Ġ{ Ġback . perform Click () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags . setOnClickListener Ġ{ Ġback . perform Click () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . setOn Long ClickListener Ġ{ Ġback . perform Long Click () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags . setOn Long ClickListener Ġ{ Ġback . perform Long Click () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Ai Available ) Ġm Views . app . badge . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġabove : Ġconfigure Ġviews ĊĊĠĠĠĠĠĠĠ Ġitem Length Ġ= ĠX . size ( context , Ġ 4 5 f , ĠX . DP ). round ToInt () ĊĠĠĠĠĠĠĠ Ġarguments ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . app Ġ= ĠMutable LiveData ( get Parcelable ( ARG _ APP ) Ġ?: ĠApi View ing App ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . app . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. run Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Info Ġ= Ġcontext . package Manager . getApplication Info ( packageName , ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ// Ġtodo Ġarchive Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Views . ver . text Ġ= Ġver Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmv App . name . text Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmv App . icon . setImage Bitmap ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ai Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adaptive Icon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Views . app . badge . drawable . set Tint ( X . getColor ( context , ĠR . color . android Robot Green )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Views . app . badge . drawable . set Tint ( Color . LT GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Tag . inflate All Tags Async ( context , Ġmv App . tags , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose API Info ( Ver Info . target Display ( this ), Ġmv Target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose API Info ( Ver Info . min Display ( this ), Ġmv Min ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠarrayOf ( m Views . target , Ġm Views . min , Ġmv App . icon , Ġmv App . back , Ġm Views . capture , Ġm Views . options ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdispose API Info ( ver : ĠVer Info , Ġapi ViewHolder : ĠApi ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapi Card : ĠMaterial Card View Ġ= Ġapi ViewHolder . view Ġas ĠMaterial Card View ĊĠĠĠĠĠĠĠ Ġval Ġview Android Version : ĠTextView Ġ= Ġapi ViewHolder . name ĊĠĠĠĠĠĠĠ Ġval Ġview Api Level : ĠTextView Ġ= Ġapi ViewHolder . api ĊĠĠĠĠĠĠĠ Ġval Ġview Api : ĠTextView Ġ= Ġapi ViewHolder . api Title ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġview Api Level . text Ġ= Ġver . api . toString () ĊĠĠĠĠĠĠĠ Ġview Android Version . text Ġ= Ġver . display Sdk ĊĠĠĠĠĠĠĠ Ġif Ġ( Easy Access . is S weet ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Text Ġ= ĠSe al Manager . getItem Color Text ( ver . api ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠarrayOf ( view Android Version , Ġview Api Level , Ġview Api ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( view Ġin Ġviews ) Ġview . setTextColor ( color Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap Ġ= ĠSe al Manager . dispose Se al Back ( context , Ġver . letter , Ġitem Length ) ĊĠĠĠĠĠĠĠ Ġval Ġparams Target Ġ= Ġapi Card . layout Params Ġas ĠConstraint Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġparams Target . width Ġ= Ġbitmap . width ĊĠĠĠĠĠĠĠ Ġparams Target . height Ġ= Ġbitmap . height ĊĠĠĠĠĠĠĠ Ġval Ġapi Back Ġ= Ġapi ViewHolder . back ĊĠĠĠĠĠĠĠ Ġapi Back . setImage Bitmap ( bitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠviewModel . app . value !! ĊĠĠĠĠĠĠĠ Ġwhen ( v . id ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy R . id . sdk _ info _ api _ target Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġver Letter Ġ= ĠUtils . get Android Letter By API ( app . target API ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi De cent Fragment . newInstance ( app , ĠApi De cent Fragment . TYPE _ TARGET , Ġver Letter , Ġitem Length ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm vm : ĠMain ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm vm . display Fragment ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy R . id . sdk _ info _ api _ min Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġver Letter Ġ= ĠUtils . get Android Letter By API ( app . min API ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi De cent Fragment . newInstance ( app , ĠApi De cent Fragment . TYPE _ MIN IMUM , Ġver Letter , Ġitem Length ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm vm : ĠMain ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm vm . display Fragment ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy R . id . sdk check _ dialog _ logo Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Icon Fragment . newInstance ( app . name , Ġapp . packageName , Ġapp . app Package . basePath , Ġapp . is Archive ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm vm : ĠMain ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm vm . display Fragment ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy R . id . api _ info _ back Ġ-> Ġaction Stores ( context , Ġapp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy R . id . av App Info Capture Ġ-> Ġaction Share ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy R . id . av App Info Options Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġparent Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ! is ĠApp List ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . show App Options ( app ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaction Stores ( context : ĠContext , Ġapp : ĠApi View ing App ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! initialized Store Link ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! init Stores ( context )) Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdismiss Ġafter ĠviewModel Ġaccess Ġin Ġinit Stores ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Stores ( context , Ġapp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Stores ( context , Ġapp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Stores ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġby Ġactivity ViewModels () Ġmay Ġproduce ĠIllegalArgumentException Ġdue Ġto ĠgetActivity Ġnull Ġvalue ĊĠĠĠĠĠĠĠ Ġ// Ġby Ġactivity ViewModels () Ġmay Ġproduce ĠIllegalStateException [ java . lang . IllegalStateException : ĠCan 't Ġaccess ĠView Models Ġfrom Ġdet ached Ġfragment ] ĊĠĠĠĠĠĠĠ Ġ// Ġdue Ġto Ġfragment Ġbeing Ġdet ached ? ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull Ġ|| Ġis Detached Ġ|| Ġ! is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX . toast ( context , ĠR . string . text _ error , ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinitialized Store Link Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġsearch Size Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġav ViewModel : ĠApi View ing ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠĠĠĠĠ Ġ// Ġfind Ġfrom Ġloaded Ġapps ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Ġ= Ġav ViewModel . find Apps ( search Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpn Ġ= Ġit . packageName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpn Ġ== Ġpackage Cool A pk Ġ|| Ġpn Ġ== Ġpackage Play Store Ġ|| Ġpn Ġ== Ġpackage Settings ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġload Ġthem Ġif Ġnot Ġloaded ĊĠĠĠĠĠĠĠ Ġfor Ġ( list App Ġin Ġfiltered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list App . preload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist App . load ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist App . icon ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore Map [ list App . packageName ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġmanually Ġinitialize Ġthose Ġnot Ġfound Ġin Ġloaded Ġapps ĊĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin ĠarrayOf ( package Cool A pk , Ġpackage Play Store , Ġpackage Settings )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( store Map [ name ] Ġ!= Ġnull ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpi Ġ= ĠMisc App . get Package Info ( context , ĠpackageName Ġ= Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġapp : ĠApi View ing App ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pi Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Ġ= ĠApi View ing App ( context , Ġpi , Ġpreload Process Ġ= Ġtrue , Ġarchive Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . load ( context , Ġpi . application Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( name Ġ== Ġpackage Settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Ġ= ĠApi View ing App . icon () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . load ( context , Ġ{ ĠContext Compat . get Drawable ( context , ĠR . mip map . logo _ settings ) !! Ġ}, Ġ{ Ġnull Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġapp ?. icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Ġ!= Ġnull ) Ġstore Map [ name ] Ġ= Ġicon ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Stores ( context : ĠContext , Ġapp : ĠApi View ing App ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Cool A pk Ġ: ĠImageView ĊĠĠĠĠĠĠĠ Ġval Ġv Play Store Ġ: ĠImageView ĊĠĠĠĠĠĠĠ Ġval Ġv Settings : ĠImageView ĊĠĠĠĠĠĠĠ Ġpop Store Ġ= ĠCollision Dialog ( context , ĠR . string . text _ forget it ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Listener Ġ{ Ġdismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle Collision ( R . string . av Store Link , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Custom Content ( My R . layout . pop _ av _ store _ link ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Cool A pk Ġ= ĠfindViewById ( My R . id . v Cool A pk ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Play Store Ġ= ĠfindViewById ( My R . id . v Play Store ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Settings Ġ= ĠfindViewById ( My R . id . v Settings ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġicon Width Ġ= ĠX . size ( context , Ġ 6 0 f , ĠX . DP ). round ToInt () ĊĠĠĠĠĠĠĠ Ġval Ġstore Packages Ġ= ĠarrayOf ( package Cool A pk Ġto Ġstore Map [ package Cool A pk ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Play Store Ġto Ġstore Map [ package Play Store ]) ĊĠĠĠĠĠĠĠ Ġfor Ġ(( name , Ġstore Icon ) Ġin Ġstore Packages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlistener : ĠView . OnClickListener ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( store Icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( app . store Page ( name , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( app . store Page ( name , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Store ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Cool A pk Ġ-> Ġv Cool A pk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Play Store Ġ-> Ġv Play Store ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( store Icon Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( X . to Target ( store Icon , Ġicon Width , Ġicon Width )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsettings Icon Ġ= Ġstore Map [ package Settings ] ĊĠĠĠĠĠĠĠ Ġif Ġ( settings Icon Ġ!= Ġnull Ġ&& Ġ( app . isNot Archive Ġ|| ĠX . below Off ( X . Q ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Settings . setImage Bitmap ( X . to Target ( settings Icon , Ġicon Width , Ġicon Width )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Settings . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app . isNot Archive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( app . settings Page ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( app . apk Page ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollision Dialog . info Copy able ( context , Ġapp . app Package . basePath ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Store ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Settings . set Padding ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop Store ?. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaction Share ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= Ġm Views ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠviewModel . app . value !!. name ĊĠĠĠĠĠĠĠ Ġval Ġfm Ġ= Ġparent FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠAv Share Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠCollision Dialog ( context , ĠR . string . text _ cancel ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle Collision ( 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Custom Content ( views . root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Listener Ġ{ Ġdismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Api Info Pop . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġget Share Image ( context , ĠviewHolder ) ĊĠĠĠĠĠĠĠ Ġviews . av Share Full Image . setImage Bitmap ( images [ 0 ]) ĊĠĠĠĠĠĠĠ Ġviews . av Share St rok ed Image . setImage Bitmap ( images [ 1 ]) ĊĠĠĠĠĠĠĠ Ġval Ġshare : Ġ( is Full : ĠBoolean ) Ġ-> ĠUnit Ġ= Ġ{ Ġis Full Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre Ġ= Ġimages [ if Ġ( is Full ) Ġ 0 Ġelse Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Title Ġ= Ġ"${ name }_ share _${ if Ġ( is Full ) Ġ" full " Ġelse Ġ" st rok ed "} " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ"$ file Title . png " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠF . create Path ( F . cache Public Path ( context ), Ġ" App ", Ġ" Logo ", ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( F . prepare 4 ( path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX . save PNG ( re , Ġpath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠFile ( path ). get Provider Uri ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Res Ġ= Ġif Ġ( is Full ) ĠMy R . string . av _ share _ full Ġelse ĠMy R . string . av _ share _ st rok ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Pop . by ( context , Ġuri , Ġ" image / png ", Ġtitle Res , Ġuri , Ġfile Title ). show ( fm , ĠFile Pop . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġviews . av Share Full Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare . invoke ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġviews . av Share St rok ed Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare . invoke ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Share Image ( context : ĠContext , Ġviews : ĠViewHolder ): ĠList < Bitmap > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshare Image ( context , Ġviews , Ġ{ Ġcanvas , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Color ( Theme Util . getColor ( context , ĠR . attr . color AS urface )) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġcanvas , Ġwidth , Ġheight , Ġpadding Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġmax ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġ( length Ġ/ Ġ 2 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpadding Float Ġ= Ġpadding . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠGraphics Util . getS qu ircle Path ( padding Float , Ġpadding Float , Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠTheme Util . getColor ( context , ĠR . attr . color AS urface ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= ĠX . size ( context , Ġ 1 f , ĠX . DP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠTheme Util . getColor ( context , ĠR . attr . color Stroke ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshare Image ( context : ĠContext , Ġviews : ĠViewHolder , Ġvar arg Ġback : Ġ( canvas : ĠCanvas , Ġwidth : ĠInt , Ġheight : ĠInt , Ġpadding : ĠInt ) Ġ-> ĠUnit ): ĠList < Bitmap > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= ĠX . size ( context , Ġ 1 0 f , ĠX . DP ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġpadding Float Ġ= Ġpadding . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġpadding Bottom Ġ= ĠX . size ( context , Ġ 3 0 f , ĠX . DP ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġo Width Ġ= Ġviews . content . width ĊĠĠĠĠĠĠĠ Ġval Ġo Height Ġ= Ġviews . content . height ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġviews . content . width Ġ+ Ġpadding Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġviews . content . height Ġ+ Ġpadding Ġ* Ġ 2 Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġmax ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġ(( length Ġ- Ġwidth ) Ġ/ Ġ 2 ). toFloat () Ġ+ Ġpadding Float ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ(( length Ġ- Ġheight ) Ġ/ Ġ 2 ). toFloat () Ġ+ Ġpadding Float ĊĊĠĠĠĠĠĠĠ Ġviews . target Api . back . setImage Bitmap ( X . circular Bitmap ( X . drawable To Bitmap ( views . target Api . back . drawable ). collision Bitmap )) ĊĠĠĠĠĠĠĠ Ġviews . min Api . back . setImage Bitmap ( X . circular Bitmap ( X . drawable To Bitmap ( views . min Api . back . drawable ). collision Bitmap )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( back . isEmpty ()) Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠMutable List < Bitmap > Ġ= ĠArrayList ( back . size ) ĊĠĠĠĠĠĠĠ Ġback . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre Ġ= ĠBitmap . create Bitmap ( length , Ġlength , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( re ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . invoke ( canvas , Ġo Width , Ġo Height , Ġpadding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( left , Ġtop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . content . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( re ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ }