package Ġcom . dew . ai h ua . player . helper Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroidx . annotation . String Res Ċ import Ġcom . dew . ai h ua . R Ċ import Ġorg . sch abi . new pipe . extractor . Media Format Ċ import Ġorg . sch abi . new pipe . extractor . stream . Audio Stream Ċ import Ġorg . sch abi . new pipe . extractor . stream . Video Stream Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ ĠCreated Ġby ĠEd ward Ġon Ġ 3 / 2 / 2 0 1 9 . Ċ Ġ*/ Ċ Ċ object ĠList Helper Ġ{ ĊĊĠĠĠ Ġ// ĠVideo Ġformat Ġin Ġorder Ġof Ġquality . Ġ 0 = lowest Ġquality , Ġn = highest Ġquality ĊĠĠĠ Ġprivate Ġval ĠV IDE O _ FORMAT _ QUAL ITY _ RAN K ING Ġ= ĠArrays . asList ( Media Format . v 3 G PP , ĠMedia Format . WE BM , ĠMedia Format . M PEG _ 4 ) ĊĊĠĠĠ Ġ// ĠAudio Ġformat Ġin Ġorder Ġof Ġquality . Ġ 0 = lowest Ġquality , Ġn = highest Ġquality ĊĠĠĠ Ġprivate Ġval ĠA UDIO _ FORMAT _ QUAL ITY _ RAN K ING Ġ= ĠArrays . asList ( Media Format . MP 3 , ĠMedia Format . WEB MA , ĠMedia Format . M 4 A ) ĊĠĠĠ Ġ// ĠAudio Ġformat Ġin Ġorder Ġof Ġefficiency . Ġ 0 = most Ġefficient , Ġn = least Ġefficient ĊĠĠĠ Ġprivate Ġval ĠA UDIO _ FORMAT _ EFF IC I ENCY _ RAN K ING Ġ= ĠArrays . asList ( Media Format . WEB MA , ĠMedia Format . M 4 A , ĠMedia Format . MP 3 ) ĊĊĠĠĠ Ġprivate Ġval ĠHIGH _ RESOL UTION _ LIST Ġ= ĠArrays . asList (" 1 4 4 0 p ", Ġ" 2 1 6 0 p ", Ġ" 1 4 4 0 p 6 0 ", Ġ" 2 1 6 0 p 6 0 ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getDefault Resolution Index ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetDefault Resolution Index ( context : ĠContext , Ġvideo Streams : ĠList < Video Stream >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Resolution Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Default Resolution ( context , ĠR . string . default _ resolution _ key , ĠR . string . default _ resolution _ value ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetDefault Resolution WithDefault Format ( context , Ġdefault Resolution , Ġvideo Streams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getDefault Resolution Index ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Resolution Index ( context : ĠContext , Ġvideo Streams : ĠList < Video Stream >, Ġdefault Resolution : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetDefault Resolution WithDefault Format ( context , Ġdefault Resolution , Ġvideo Streams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getDefault Resolution Index ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Popup Default Resolution Index ( context : ĠContext , Ġvideo Streams : ĠList < Video Stream >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Resolution Ġ= Ġcompute Default Resolution ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . default _ popup _ resolution _ key , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . default _ popup _ resolution _ value ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetDefault Resolution WithDefault Format ( context , Ġdefault Resolution , Ġvideo Streams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getDefault Resolution Index ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Popup Resolution Index ( context : ĠContext , Ġvideo Streams : ĠList < Video Stream >, Ġdefault Resolution : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetDefault Resolution WithDefault Format ( context , Ġdefault Resolution , Ġvideo Streams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetDefault Audio Format ( context : ĠContext , Ġaudio Streams : ĠList < Audio Stream >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Format Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Format ( context , ĠR . string . default _ audio _ format _ key , ĠR . string . default _ audio _ format _ value ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġhas Ġchosen Ġto Ġlimit Ġresolution Ġto Ġcon serve Ġmobile Ġdata Ġusage ĊĠĠĠĠĠĠĠ Ġ// Ġthen Ġwe Ġshould Ġalso Ġlimit Ġour Ġaudio Ġusage . ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Limit ing Data Usage ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Most Compact Audio Index ( default Format , Ġaudio Streams ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Highest Quality Audio Index ( default Format , Ġaudio Streams ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠJoin Ġthe Ġtwo Ġlists Ġof Ġvideo Ġstreams Ġ( video _ only Ġand Ġnormal Ġvideos ), Ġand Ġsort Ġthem Ġaccording Ġwith Ġdefault Ġformat ĊĠĠĠĠ Ġ* Ġchosen Ġby Ġthe Ġuser ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠ Ġcontext Ġto Ġsearch Ġfor Ġthe Ġformat Ġto Ġgive Ġpreference ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Streams ĠĠĠĠ Ġnormal Ġvideos Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Only Streams Ġvideo Ġonly Ġstream Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġascending Order ĠĠ Ġtrue Ġ-> Ġsmallest Ġto Ġgreatest Ġ| Ġfalse Ġ-> Ġgreatest Ġto Ġsmallest ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsorted Ġlist ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Sorted Stream Videos List ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġvideo Streams : ĠList < Video Stream >, ĊĠĠĠĠĠĠĠ Ġvideo Only Streams : ĠList < Video Stream > ?, ĊĠĠĠĠĠĠĠ Ġascending Order : ĠBoolean ĊĠĠĠ Ġ): ĠList < Video Stream > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġshow High er Resolution s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . getBoolean ( context . getString ( R . string . show _ high er _ resolution s _ key ), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Format Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Format ( context , ĠR . string . default _ video _ format _ key , ĠR . string . default _ video _ format _ value ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Sorted Stream Videos List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Format , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow High er Resolution s , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Streams , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Only Streams , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġascending Order ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĠĠĠ Ġ// ĠUtils ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĊĠĠĠ Ġprivate Ġfun Ġcompute Default Resolution ( context : ĠContext , Ġkey : ĠInt , Ġvalue : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġthe Ġprefer ed Ġresolution Ġotherwise Ġthe Ġbest Ġavailable ĊĠĠĠĠĠĠĠ Ġval Ġresolution : ĠString ? Ġ= Ġpreferences ?. getString ( context . getString ( key ), Ġcontext . getString ( value )) ĊĠĠĠĠĠĠĠ Ġvar Ġloc Resolution Ġ= Ġresolution Ġ?: Ġcontext . getString ( R . string . best _ resolution _ key ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Resolution : ĠString ? Ġ= Ġget Resolution Limit ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( loc Resolution Ġ!= Ġnull Ġ&& Ġmax Resolution Ġ!= Ġnull Ġ&& Ġcompare Video Stream Resolution ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloc Resolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ< Ġ 1 ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloc Resolution Ġ= Ġmax Resolution ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġloc Resolution ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġindex Ġof Ġthe Ġdefault Ġstream Ġin Ġthe Ġlist , Ġbased Ġon Ġthe Ġparameters ĊĠĠĠĠ Ġ* Ġdefault Resolution Ġand Ġdefault Format ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġindex Ġof Ġthe Ġdefault Ġresolution & format ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetDefault Resolution Index ( ĊĠĠĠĠĠĠĠ Ġdefault Resolution : ĠString , ĊĠĠĠĠĠĠĠ Ġbest Resolution Key : ĠString , ĊĠĠĠĠĠĠĠ Ġdefault Format : ĠMedia Format ?, ĊĠĠĠĠĠĠĠ Ġvideo Streams : ĠList < Video Stream >? ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( video Streams Ġ== Ġnull Ġ|| Ġvideo Streams . isEmpty ()) Ġreturn Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġsort Stream List ( video Streams , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( default Resolution Ġ== Ġbest Resolution Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdefault Stream Index Ġ= Ġget Video Stream Index ( default Resolution , Ġdefault Format , Ġvideo Streams ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġactually Ġan Ġerror , ĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġmaybe Ġthere Ġis Ġreally Ġno Ġstream Ġfitting Ġto Ġthe Ġdefault Ġvalue . ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( default Stream Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġdefault Stream Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠJoin Ġthe Ġtwo Ġlists Ġof Ġvideo Ġstreams Ġ( video _ only Ġand Ġnormal Ġvideos ), Ġand Ġsort Ġthem Ġaccording Ġwith Ġdefault Ġformat ĊĠĠĠĠ Ġ* Ġchosen Ġby Ġthe Ġuser ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdefault Format ĠĠĠĠĠĠ Ġformat Ġto Ġgive Ġpreference ĊĠĠĠĠ Ġ* Ġ@ param Ġshow High er Resolution s Ġshow Ġ> 1 0 8 0 p Ġresolution s ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Streams ĠĠĠĠĠĠĠĠĠ Ġnormal Ġvideos Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Only Streams ĠĠĠĠĠ Ġvideo Ġonly Ġstream Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġascending Order ĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġsmallest Ġto Ġgreatest Ġ| Ġfalse Ġ-> Ġgreatest Ġto Ġsmallest ĠĠĠ Ġ@ return Ġthe Ġsorted Ġlist ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsorted Ġlist ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Sorted Stream Videos List ( ĊĠĠĠĠĠĠĠ Ġdefault Format : ĠMedia Format ?, ĊĠĠĠĠĠĠĠ Ġshow High er Resolution s : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġvideo Streams : ĠList < Video Stream > ?, ĊĠĠĠĠĠĠĠ Ġvideo Only Streams : ĠList < Video Stream > ?, ĊĠĠĠĠĠĠĠ Ġascending Order : ĠBoolean ĊĠĠĠ Ġ): ĠList < Video Stream > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret List Ġ= ĠArrayList < Video Stream >() ĊĠĠĠĠĠĠĠ Ġval Ġhash Map Ġ= ĠHashMap < String , ĠVideo Stream >() ĊĊĠĠĠĠĠĠĠ Ġvideo Only Streams ?. forEach Ġ{ Ġvideo Stream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show High er Resolution s Ġ|| Ġ! HIGH _ RESOL UTION _ LIST . contains ( video Stream . get Resolution ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret List . add ( video Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvideo Streams ?. forEach Ġ{ Ġvideo Stream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show High er Resolution s Ġ|| Ġ! HIGH _ RESOL UTION _ LIST . contains ( video Stream . get Resolution ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret List . add ( video Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġall Ġto Ġthe Ġhash map ĊĠĠĠĠĠĠĠ Ġfor Ġ( video Stream Ġin Ġret List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Map [ video Stream . get Resolution ()] Ġ= Ġvideo Stream ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠOverride Ġthe Ġvalues Ġwhen Ġthe Ġkey Ġ== Ġresolution , Ġwith Ġthe Ġdefault Format ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġshould Ġbe Ġredundant Ġas Ġvideos Ġstore Ġby Ġresolution Ġalready Ġ-- Ġcommented Ġby ĠEd ward ĊĠĠĠĠĠĠĠ Ġfor Ġ( video Stream Ġin Ġret List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( video Stream . get Format () Ġ== Ġdefault Format ) Ġhash Map [ video Stream . get Resolution ()] Ġ= Ġvideo Stream ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġret List . clear () ĊĠĠĠĠĠĠĠ Ġret List . addAll ( hash Map . values ) ĊĠĠĠĠĠĠĠ Ġsort Stream List ( ret List , Ġascending Order ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġret List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSort Ġthe Ġstreams Ġlist Ġdepending Ġon Ġthe Ġparameter Ġascending Order ; ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġworks Ġlike Ġthat :< br ></ br > ĊĠĠĠĠ Ġ* Ġ- ĠTake Ġa Ġstring Ġresolution , Ġremove Ġthe Ġletters , Ġreplace Ġ" 0 p 6 0 " Ġ( for Ġ 6 0 fps Ġvideos ) Ġwith Ġ" 1 " ĊĠĠĠĠ Ġ* Ġand Ġsort Ġby Ġthe Ġgreatest :< br ></ br > ĊĠĠĠĠ Ġ* Ġ< blockquote >< pre > ĊĠĠĠĠ Ġ* Ġ 7 2 0 p ĠĠĠĠ Ġ-> ĠĠ 7 2 0 ĊĠĠĠĠ Ġ* Ġ 7 2 0 p 6 0 ĠĠ Ġ-> ĠĠ 7 2 1 ĊĠĠĠĠ Ġ* Ġ 3 6 0 p ĠĠĠĠ Ġ-> ĠĠ 3 6 0 ĊĠĠĠĠ Ġ* Ġ 1 0 8 0 p ĠĠĠ Ġ-> ĠĠ 1 0 8 0 ĊĠĠĠĠ Ġ* Ġ 1 0 8 0 p 6 0 Ġ Ġ-> ĠĠ 1 0 8 1 ĊĠĠĠĠ Ġ* Ġ< br ></ br > ĊĠĠĠĠ Ġ* Ġascending Order Ġ Ġ? Ġ 3 6 0 Ġ< Ġ 7 2 0 Ġ< Ġ 7 2 1 Ġ< Ġ 1 0 8 0 Ġ< Ġ 1 0 8 1 ĊĠĠĠĠ Ġ* Ġ! ascending Order Ġ? Ġ 1 0 8 1 Ġ< Ġ 1 0 8 0 Ġ< Ġ 7 2 1 Ġ< Ġ 7 2 0 Ġ< Ġ 3 6 0 </ pre ></ blockquote > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Streams ĠĠ Ġlist Ġthat Ġthe Ġsorting Ġwill Ġbe Ġapplied ĊĠĠĠĠ Ġ* Ġ@ param Ġascending Order Ġtrue Ġ-> Ġsmallest Ġto Ġgreatest Ġ| Ġfalse Ġ-> Ġgreatest Ġto Ġsmallest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsort Stream List ( video Streams : ĠList < Video Stream >, Ġascending Order : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvideo Streams . sorted With ( kotlin . Comparator Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompare Video Stream Resolution ( o 1 , Ġo 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġ 0 ) Ġ 0 Ġelse Ġif Ġ( ascending Order ) Ġresult Ġelse Ġ- result ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġaudio Ġget Tab From Ġthe Ġlist Ġwith Ġthe Ġhighest Ġquality . ĠFormat Ġwill Ġbe Ġignored Ġif Ġit Ġyields ĊĠĠĠĠ Ġ* Ġno Ġresults . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaudio Streams Ġlist Ġthe Ġaudio Ġstreams ĊĠĠĠĠ Ġ* Ġ@ return Ġindex Ġof Ġthe Ġaudio Ġwith Ġthe Ġhighest Ġaverage Ġbit rate Ġof Ġthe Ġdefault Ġmedia Format ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Highest Quality Audio Index ( media Format : ĠMedia Format ?, Ġaudio Streams : ĠList < Audio Stream >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġformat Ġ= Ġmedia Format ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( audio Streams Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( result Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprev Stream : ĠAudio Stream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġaudio Streams . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġaudio Streams [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( format Ġ== Ġnull Ġ|| Ġstream . get Format () Ġ== Ġformat ) Ġ&& Ġ( prev Stream Ġ== Ġnull Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompare Audio Stream Bit rate ( prev Stream , Ġstream , ĠA UDIO _ FORMAT _ QUAL ITY _ RAN K ING ) Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Stream Ġ= Ġstream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġidx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġ- 1 Ġ&& Ġformat Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġaudio Ġget Tab From Ġthe Ġlist Ġwith Ġthe Ġlowest Ġbit rate Ġand Ġefficient Ġformat . ĠFormat Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġignored Ġif Ġit Ġyields Ġno Ġresults . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġformat ĠThe Ġtarget Ġformat Ġtype Ġor Ġnull Ġif Ġit Ġdoesn 't Ġmatter ĊĠĠĠĠ Ġ* Ġ@ param Ġaudio Streams Ġlist Ġthe Ġaudio Ġstreams ĊĠĠĠĠ Ġ* Ġ@ return Ġindex Ġof Ġthe Ġaudio Ġstream Ġthat Ġcan Ġproduce Ġthe Ġmost Ġcompact Ġresults Ġor Ġ- 1 Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Most Compact Audio Index ( format : ĠMedia Format ?, Ġaudio Streams : ĠList < Audio Stream >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġformat 1 Ġ= Ġformat ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( audio Streams Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( result Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprev Stream : ĠAudio Stream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġaudio Streams . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġaudio Streams [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( format 1 Ġ== Ġnull Ġ|| Ġstream . get Format () Ġ== Ġformat 1 ) Ġ&& Ġ( prev Stream Ġ== Ġnull Ġ|| Ġcompare Audio Stream Bit rate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Stream , Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA UDIO _ FORMAT _ EFF IC I ENCY _ RAN K ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Stream Ġ= Ġstream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġidx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġ- 1 Ġ&& Ġformat 1 Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat 1 Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoc ates Ġa Ġpossible Ġmatch Ġfor Ġthe Ġgiven Ġresolution Ġand Ġformat Ġin Ġthe Ġprovided Ġlist . ĊĠĠĠĠ Ġ* ĠIn Ġthis Ġorder : ĊĠĠĠĠ Ġ* Ġ 1 . ĠFind Ġa Ġformat Ġand Ġresolution Ġmatch ĊĠĠĠĠ Ġ* Ġ 2 . ĠFind Ġa Ġformat Ġand Ġresolution Ġmatch Ġand Ġignore Ġthe Ġrefresh ĊĠĠĠĠ Ġ* Ġ 3 . ĠFind Ġa Ġresolution Ġmatch ĊĠĠĠĠ Ġ* Ġ 4 . ĠFind Ġa Ġresolution Ġmatch Ġand Ġignore Ġthe Ġrefresh ĊĠĠĠĠ Ġ* Ġ 5 . ĠFind Ġa Ġresolution Ġjust Ġbelow Ġthe Ġrequested Ġresolution Ġand Ġignore Ġthe Ġrefresh ĊĠĠĠĠ Ġ* Ġ 6 . ĠGive Ġup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Video Stream Index ( ĊĠĠĠĠĠĠĠ Ġtarget Resolution : ĠString , Ġtarget Format : ĠMedia Format ?, ĊĠĠĠĠĠĠĠ Ġvideo Streams : ĠList < Video Stream > ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfull Match Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġfull Match No Refresh Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġres Match Only Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġres Match Only No Refresh Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġlower Res Match No Refresh Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġtarget Resolution No Refresh Ġ= Ġ( target Resolution Ġas ĠCharSequence ). replace (" p \\ d +$ ". to Regex (), Ġ" p ") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġvideo Streams . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġif Ġ( target Format Ġ== Ġnull ) Ġnull Ġelse Ġvideo Streams [ index ]. get Format () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolution Ġ= Ġvideo Streams [ index ]. get Resolution () Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolution No Refresh Ġ= Ġ( resolution Ġas ĠCharSequence ). replace (" p \\ d +$ ". to Regex (), Ġ" p ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Ġ== Ġtarget Format Ġ&& Ġresolution Ġ== Ġtarget Resolution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Match Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Ġ== Ġtarget Format Ġ&& Ġresolution No Refresh Ġ== Ġtarget Resolution No Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Match No Refresh Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Match Only Index Ġ== Ġ- 1 Ġ&& Ġresolution Ġ== Ġtarget Resolution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Match Only Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Match Only No Refresh Index Ġ== Ġ- 1 Ġ&& Ġresolution No Refresh Ġ== Ġtarget Resolution No Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Match Only No Refresh Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lower Res Match No Refresh Index Ġ== Ġ- 1 Ġ&& Ġcompare Video Stream Resolution ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolution No Refresh , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Resolution No Refresh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ< Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Res Match No Refresh Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Match Index Ġ!= Ġ- 1 Ġ-> Ġfull Match Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Match No Refresh Index Ġ!= Ġ- 1 Ġ-> Ġfull Match No Refresh Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Match Only Index Ġ!= Ġ- 1 Ġ-> Ġres Match Only Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Match Only No Refresh Index Ġ!= Ġ- 1 Ġ-> Ġres Match Only No Refresh Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlower Res Match No Refresh Index ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF etches Ġthe Ġdesired Ġresolution Ġor Ġreturns Ġthe Ġdefault Ġif Ġit Ġis Ġnot Ġfound . ĠThe Ġresolution ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġreduced Ġif Ġvideo Ġch ock ing Ġis Ġactive . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetDefault Resolution WithDefault Format ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġdefault Resolution : ĠString , ĊĠĠĠĠĠĠĠ Ġvideo Streams : ĠList < Video Stream > ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Format Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Format ( context , ĠR . string . default _ video _ format _ key , ĠR . string . default _ video _ format _ value ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetDefault Resolution Index ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . best _ resolution _ key ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Format , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Streams ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetDefault Format ( context : ĠContext , Ġ@ String Res Ġdefault Format Key : ĠInt , Ġ@ String Res Ġdefault Format Value Key : ĠInt ): ĠMedia Format ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdefault Format Ġ= Ġcontext . getString ( default Format Value Key ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Format String Ġ= Ġpreferences . getString ( context . getString ( default Format Key ), Ġdefault Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException (" Did n 't Ġset Ġdefault ĠFormat ") ĊĠĠĠĠĠĠĠ Ġvar Ġdefault Media Format Ġ= Ġget Media Format From Key ( context , Ġdefault Format String ) ĊĠĠĠĠĠĠĠ Ġif Ġ( default Media Format Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString ( context . getString ( default Format Key ), Ġdefault Format ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Media Format Ġ= Ġget Media Format From Key ( context , Ġdefault Format ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Media Format ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Media Format From Key ( context : ĠContext , Ġformat Key : ĠString ): ĠMedia Format ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( format Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . video _ web m _ key ) Ġ-> ĠMedia Format . WE BM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . video _ mp 4 _ key ) Ġ-> ĠMedia Format . M PEG _ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . video _ 3 gp _ key ) Ġ-> ĠMedia Format . v 3 G PP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . audio _ web m _ key ) Ġ-> ĠMedia Format . WEB MA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . audio _ m 4 a _ key ) Ġ-> ĠMedia Format . M 4 A ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠComp ares Ġthe Ġquality Ġof Ġtwo Ġaudio Ġstreams ĊĠĠĠ Ġprivate Ġfun Ġcompare Audio Stream Bit rate ( ĊĠĠĠĠĠĠĠ Ġstream A : ĠAudio Stream ?, Ġstream B : ĠAudio Stream ?, ĊĠĠĠĠĠĠĠ Ġformat Ranking : ĠList < Media Format > ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stream A Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( stream B Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( stream A . average Bit rate Ġ< Ġstream B . average Bit rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( stream A . average Bit rate Ġ> Ġstream B . average Bit rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSame Ġbit rate Ġand Ġformat ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Ranking . indexOf ( stream A . get Format ()) Ġ- Ġformat Ranking . indexOf ( stream B . get Format ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Video Stream Resolution ( r 1 : ĠString , Ġr 2 : ĠString ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġres 1 Ġ= ĠInteger . parseInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( r 1 Ġas ĠCharSequence ). replace (" 0 p \\ d +$ ". to Regex (), Ġ" 1 ") Ġas ĠCharSequence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("[ ^ \\ d .] ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġres 2 Ġ= ĠInteger . parseInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( r 2 Ġas ĠCharSequence ). replace (" 0 p \\ d +$ ". to Regex (), Ġ" 1 ") Ġas ĠCharSequence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("[ ^ \\ d .] ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġres 1 Ġ- Ġres 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠComp ares Ġthe Ġquality Ġof Ġtwo Ġvideo Ġstreams . ĊĠĠĠ Ġprivate Ġfun Ġcompare Video Stream Resolution ( stream A : ĠVideo Stream ?, Ġstream B : ĠVideo Stream ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stream A Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( stream B Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġres Comp Ġ= Ġcompare Video Stream Resolution ( stream A . get Resolution (), Ġstream B . get Resolution ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( res Comp Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres Comp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSame Ġbit rate Ġand Ġformat ĊĠĠĠĠĠĠĠ Ġreturn ĠList Helper . VIDEO _ FORMAT _ QUAL ITY _ RAN K ING . indexOf ( stream A . get Format ()) Ġ- ĠList Helper . VIDEO _ FORMAT _ QUAL ITY _ RAN K ING . indexOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream B . get Format () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġis Limit ing Data Usage ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Resolution Limit ( context ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġmaximum Ġresolution Ġallowed ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠApp Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġmaximum Ġresolution Ġallowed Ġor Ġnull Ġif Ġthere Ġis Ġno Ġmaximum ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Resolution Limit ( context : ĠContext ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresolution Limit : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Wifi Active ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdef Value Ġ= Ġcontext . getString ( R . string . limit _ data _ usage _ none _ key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġpreferences . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . limit _ mobile _ data _ usage _ key ), Ġdef Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Limit Ġ= Ġif Ġ( value Ġ== Ġdef Value ) Ġnull Ġelse Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresolution Limit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAre Ġwe Ġconnected Ġto Ġwifi ? ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠApp Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġconnected Ġto Ġwifi ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġis Wifi Active ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager . active Network Info Ġ!= Ġnull Ġ&& Ġmanager . active Network Info . type Ġ== ĠConnect ivity Manager . TYPE _ WIFI ĊĠĠĠ Ġ} Ċ } Ċ