package Ġcom . simple mobile tools . gallery . extensions Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . view . WindowManager Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . simple mobile tools . commons . extensions . getString Value Ċ import Ġcom . simple mobile tools . commons . extensions . human ize Path Ċ import Ġcom . simple mobile tools . commons . helpers . OT G _ PATH Ċ import Ġcom . simple mobile tools . gallery . activities . Settings Activity Ċ import Ġcom . simple mobile tools . gallery . as yn ct ask s . Get Directories As yn ct ask Ċ import Ġcom . simple mobile tools . gallery . as yn ct ask s . Get Media As yn ct ask Ċ import Ġcom . simple mobile tools . gallery . helpers . Config Ċ import Ġcom . simple mobile tools . gallery . helpers . NO MEDIA Ċ import Ġcom . simple mobile tools . gallery . helpers . SAVE _ DIRS _ CNT Ċ import Ġcom . simple mobile tools . gallery . helpers . SAVE _ MEDIA _ CNT Ċ import Ġcom . simple mobile tools . gallery . models . Directory Ċ import Ġcom . simple mobile tools . gallery . models . Medium Ċ import Ġjava . io . File Ċ Ċ val ĠContext . portrait Ġget () Ġ= Ġresources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT Ċ val ĠContext . audio Manager Ġget () Ġ= Ġget System Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager Ċ val ĠContext . window Manager : ĠWindow Manager Ġget () Ġ= Ġget System Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager Ċ val ĠContext . navigation Bar Right : ĠBoolean Ġget () Ġ= Ġusable Screen Size . x Ġ< Ġreal Screen Size . x Ċ val ĠContext . navigation Bar Bottom : ĠBoolean Ġget () Ġ= Ġusable Screen Size . y Ġ< Ġreal Screen Size . y Ċ val ĠContext . navigation Bar Height : ĠInt Ġget () Ġ= Ġif Ġ( navigation Bar Bottom ) Ġnavigation Bar Size . y Ġelse Ġ 0 Ċ val ĠContext . navigation Bar Width : ĠInt Ġget () Ġ= Ġif Ġ( navigation Bar Right ) Ġnavigation Bar Size . x Ġelse Ġ 0 Ċ Ċ internal Ġval ĠContext . navigation Bar Size : ĠPoint ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigation Bar Right Ġ-> ĠPoint ( real Screen Size . x Ġ- Ġusable Screen Size . x , Ġusable Screen Size . y ) ĊĠĠĠĠĠĠĠ Ġnavigation Bar Bottom Ġ-> ĠPoint ( usable Screen Size . x , Ġreal Screen Size . y Ġ- Ġusable Screen Size . y ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPoint () ĊĠĠĠ Ġ} Ċ Ċ val ĠContext . usable Screen Size : ĠPoint ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . getSize ( size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} Ċ Ċ val ĠContext . real Screen Size : ĠPoint ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Real Size ( size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} Ċ Ċ fun ĠContext . get Human ized Filename ( path : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġhuman ized Ġ= Ġhuman ize Path ( path ) ĊĠĠĠ Ġreturn Ġhuman ized . substring ( human ized . lastIndexOf ("/") Ġ+ Ġ 1 ) Ċ } Ċ Ċ fun ĠContext . launch Settings () Ġ{ ĊĠĠĠ ĠstartActivity ( Intent ( application Context , ĠSettings Activity :: class . java )) Ċ } Ċ Ċ val ĠContext . config : ĠConfig Ġget () Ġ= ĠConfig . newInstance ( application Context ) Ċ Ċ fun ĠContext . move Pin ned Directories To Front ( dirs : ĠArrayList < Directory >): ĠArrayList < Directory > Ġ{ ĊĠĠĠ Ġval Ġfound Folders Ġ= ĠArrayList < Directory >() ĊĠĠĠ Ġval Ġpinned Folders Ġ= Ġconfig . pinned Folders ĊĊĠĠĠ Ġdirs . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pinned Folders . contains ( it . path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfound Folders . add ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdirs . removeAll ( found Folders ) ĊĠĠĠ Ġdirs . addAll ( 0 , Ġfound Folders ) ĊĠĠĠ Ġreturn Ġdirs Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun ĠContext . get Sorted Directories ( source : ĠArrayList < Directory >): ĠArrayList < Directory > Ġ{ ĊĠĠĠ ĠDirectory . sorting Ġ= Ġconfig . directory Sorting ĊĠĠĠ Ġval Ġdirs Ġ= Ġsource . clone () Ġas ĠArrayList < Directory > ĊĠĠĠ Ġdirs . sort () ĊĠĠĠ Ġreturn Ġmove Pin ned Directories To Front ( dirs ) Ċ } Ċ Ċ fun ĠContext . get No Media Folders ( callback : Ġ( folders : ĠArrayList < String >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfolders Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠMedia Store . Files . getContent Uri (" external ") ĊĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Media Store . Files . File Columns . DATA ) ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġ"${ Media Store . Files . File Columns . MEDIA _ TYPE } Ġ= Ġ? ĠAND Ġ${ Media Store . Files . File Columns . TITLE } ĠLIKE Ġ? " ĊĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( Media Store . Files . File Columns . MEDIA _ TYPE _ NONE . toString (), Ġ"% $ NO MEDIA % ") ĊĠĠĠĠĠĠĠ Ġval Ġsort Order Ġ= Ġ"${ Media Store . Files . File Columns . DATE _ MODI FIED } ĠDESC " ĊĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġcontent Resolver . query ( uri , Ġprojection , Ġselection , Ġselection Args , Ġsort Order ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor ?. moveTo First () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġcursor . getString Value ( Media Store . Files . File Columns . DATA ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Media File Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( no Media File . exists () Ġ&& Ġno Media File . name Ġ== ĠNO MEDIA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfolders . add ("${ no Media File . parent }/ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( cursor . moveTo Next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcallback ( folders ) ĊĠĠĠ Ġ}. start () Ċ } Ċ Ċ fun ĠContext . is Path In Media Store ( path : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( path . startsWith ( OT G _ PATH )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Media Store . Images . Media . DATE _ MODI FIED ) ĊĠĠĠ Ġval Ġuri Ġ= ĠMedia Store . Files . getContent Uri (" external ") ĊĠĠĠ Ġval Ġselection Ġ= Ġ"${ Media Store . Media Columns . DATA } Ġ= Ġ? " ĊĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( path ) ĊĠĠĠ Ġval Ġcursor Ġ= Ġcontent Resolver . query ( uri , Ġprojection , Ġselection , Ġselection Args , Ġnull ) ĊĊĠĠĠ Ġcursor ?. use Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcursor . moveTo First () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ fun ĠContext . update Stored Folder Items ( path : ĠString ) Ġ{ ĊĠĠĠ ĠGet Media As yn ct ask ( this , Ġpath , Ġfalse , Ġfalse , Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstore Folder Items ( path , Ġit ) ĊĠĠĠ Ġ}. execute () Ċ } Ċ Ċ fun ĠContext . store Folder Items ( path : ĠString , Ġitems : ĠArrayList < Medium >) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub List Ġ= Ġitems . sub List ( 0 , ĠMath . min ( SAVE _ MEDIA _ CNT , Ġitems . size )) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠGson (). toJson ( sub List ) ĊĠĠĠĠĠĠĠ Ġconfig . save Folder Media ( path , Ġjson ) ĊĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠOut Of Memory Error ) Ġ{ ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠContext . update Stored Directories () Ġ{ ĊĠĠĠ ĠGet Directories As yn ct ask ( this , Ġfalse , Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! config . temp or arily Show Hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Directory Items ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. execute () Ċ } Ċ Ċ fun ĠContext . store Directory Items ( items : ĠArrayList < Directory >) Ġ{ ĊĠĠĠ Ġval Ġsub List Ġ= Ġitems . sub List ( 0 , ĠMath . min ( SAVE _ DIRS _ CNT , Ġitems . size )) ĊĠĠĠ Ġval Ġdirectories Ġ= ĠGson (). toJson ( sub List ) ĊĠĠĠ Ġconfig . directories Ġ= Ġdirectories Ċ } Ċ