/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 0 ĠZX ing Ġauthors Ċ Ġ* ĠCopyright Ġ 2 0 1 1 ĠRobert ĠThe is Ċ Ġ* Ċ Ġ* Ġ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 Ġt br s . ocr . camera ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . WindowManager Ċ Ċ import Ġt br s . ocr . Preferences Activity Ċ Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Collections Ċ import Ġjava . util . Comparator Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġwhich Ġdeals Ġwith Ġreading , Ġparsing , Ġand Ġsetting Ġthe Ġcamera Ġparameters Ġwhich Ġare Ġused Ġto Ċ Ġ* Ġconfigure Ġthe Ġcamera Ġhardware . Ċ Ġ* Ċ Ġ* ĠThe Ġcode Ġfor Ġthis Ġclass Ġwas Ġadapted Ġfrom Ġthe ĠZX ing Ġproject : Ġhttp :// code . google . com / p / zx ing Ċ Ġ*/ Ċ internal Ġclass ĠCamera Configuration Manager ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġvar Ġscreen Resolution : ĠPoint ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġcamera Resolution : ĠPoint ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReads , Ġone Ġtime , Ġvalues Ġfrom Ġthe Ġcamera Ġthat Ġare Ġneeded Ġby Ġthe Ġapp . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit From Camera Parameters ( camera : ĠCamera ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcamera . parameters ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġmanager . default Display ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġdisplay . width ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġdisplay . height ĊĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġlandscape - only , Ġand Ġhave Ġapparently Ġseen Ġissues Ġwith Ġdisplay Ġthinking Ġit 's Ġpor trait ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġw aking Ġfrom Ġsleep . ĠIf Ġit 's Ġnot Ġlandscape , Ġassume Ġit 's Ġmist aken Ġand Ġreverse Ġthem : ĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Display Ġreports Ġpor trait Ġorientation ; Ġassuming Ġthis Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġtemp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscreen Resolution Ġ= ĠPoint ( width , Ġheight ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Screen Ġresolution : Ġ" Ġ+ Ġscreen Resolution !! ) ĊĠĠĠĠĠĠĠ Ġcamera Resolution Ġ= Ġfind Best Preview Size Value ( parameters , Ġscreen Resolution !! ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Camera Ġresolution : Ġ" Ġ+ Ġcamera Resolution !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Desired Camera Parameters ( camera : ĠCamera ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcamera . parameters ĊĊĠĠĠĠĠĠĠ Ġif Ġ( parameters Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Device Ġerror : Ġno Ġcamera Ġparameters Ġare Ġavailable . ĠPro ceeding Ġwithout Ġconfiguration .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĊĠĠĠĠĠĠĠ Ġinitialize Torch ( parameters , Ġprefs ) ĊĠĠĠĠĠĠĠ Ġvar Ġfocus Mode : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . getBoolean ( Preferences Activity . KEY _ AUTO _ FOCUS , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefs . getBoolean ( Preferences Activity . KEY _ DISABLE _ CONT IN UO US _ FOCUS , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Mode Ġ= Ġfind Set table Value ( parameters . supported Focus Modes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FOCUS _ MODE _ AUTO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Mode Ġ= Ġfind Set table Value ( parameters . supported Focus Modes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" continuous - video ", Ġ// ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO Ġin Ġ 4 . 0 + ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" continuous - picture ", Ġ// ĠCamera . Param ters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE Ġin Ġ 4 . 0 + ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FOCUS _ MODE _ AUTO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠMaybe Ġselected Ġauto - focus Ġbut Ġnot Ġavailable , Ġso Ġfall Ġthrough Ġhere : ĊĠĠĠĠĠĠĠ Ġif Ġ( focus Mode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Mode Ġ= Ġfind Set table Value ( parameters . supported Focus Modes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FOCUS _ MODE _ MACRO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ed of ") Ġ// ĠCamera . Parameters . FOCUS _ MODE _ ED OF Ġin Ġ 2 . 2 + ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( focus Mode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Mode Ġ= Ġfocus Mode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġparameters . set Preview Size ( camera Resolution !!. x , Ġcamera Resolution !!. y ) ĊĠĠĠĠĠĠĠ Ġcamera . parameters Ġ= Ġparameters ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Torch ( camera : ĠCamera , Ġnew Setting : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcamera . parameters ĊĠĠĠĠĠĠĠ Ġdo Set Torch ( parameters , Ġnew Setting ) ĊĠĠĠĠĠĠĠ Ġcamera . parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Setting Ġ= Ġprefs . getBoolean ( Preferences Activity . KEY _ TO GGLE _ LIGHT , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( current Setting Ġ!= Ġnew Setting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġprefs . edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . put Boolean ( Preferences Activity . KEY _ TO GGLE _ LIGHT , Ġnew Setting ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Best Preview Size Value ( parameters : ĠCamera . Parameters , Ġscreen Resolution : ĠPoint ): ĠPoint Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠSort Ġby Ġsize , Ġdescending ĊĠĠĠĠĠĠĠ Ġval Ġsupported Preview Sizes Ġ= ĠArrayList ( parameters . supported Preview Sizes ) ĊĠĠĠĠĠĠĠ ĠCollections . sort < Camera . Size >( supported Preview Sizes , ĠComparator < Camera . Size > Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Pixels Ġ= Ġa . height Ġ* Ġa . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Pixels Ġ= Ġb . height Ġ* Ġb . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b Pixels Ġ< Ġa Pixels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b Pixels Ġ> Ġa Pixels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Log . is Log gable ( TAG , ĠLog . INFO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Sizes String Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( supported Preview Size Ġin Ġsupported Preview Sizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Sizes String . append ( supported Preview Size . width ). append (' x ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( supported Preview Size . height ). append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Supported Ġpreview Ġsizes : Ġ$ preview Sizes String ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġbest Size : ĠPoint ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġscreen AspectRatio Ġ= Ġscreen Resolution . x . toFloat () Ġ/ Ġscreen Resolution . y . toFloat () ĊĊĠĠĠĠĠĠĠ Ġvar Ġdiff Ġ= Ġjava . lang . Float . POSITIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġfor Ġ( supported Preview Size Ġin Ġsupported Preview Sizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Width Ġ= Ġsupported Preview Size . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Height Ġ= Ġsupported Preview Size . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixels Ġ= Ġreal Width Ġ* Ġreal Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pixels Ġ< ĠMIN _ PRE VIEW _ PIXEL S Ġ|| Ġpixels Ġ> ĠMAX _ PRE VIEW _ PIXEL S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Candidate Por trait Ġ= Ġreal Width Ġ< Ġreal Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaybe F lipped Width Ġ= Ġif Ġ( is Candidate Por trait ) Ġreal Height Ġelse Ġreal Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaybe F lipped Height Ġ= Ġif Ġ( is Candidate Por trait ) Ġreal Width Ġelse Ġreal Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( maybe F lipped Width Ġ== Ġscreen Resolution . x Ġ&& Ġmaybe F lipped Height Ġ== Ġscreen Resolution . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexact Point Ġ= ĠPoint ( real Width , Ġreal Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Found Ġpreview Ġsize Ġexactly Ġmatching Ġscreen Ġsize : Ġ$ exact Point ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexact Point ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaspect Ratio Ġ= Ġmaybe F lipped Width . toFloat () Ġ/ Ġmaybe F lipped Height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Diff Ġ= ĠMath . abs ( aspect Ratio Ġ- Ġscreen AspectRatio ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Diff Ġ< Ġdiff ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Size Ġ= ĠPoint ( real Width , Ġreal Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Ġ= Ġnew Diff ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( best Size Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Size Ġ= Ġparameters . preview Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Size Ġ= ĠPoint ( default Size . width , Ġdefault Size . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" No Ġsuitable Ġpreview Ġsizes , Ġusing Ġdefault : Ġ$ best Size ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Found Ġbest Ġapproximate Ġpreview Ġsize : Ġ$ best Size ") ĊĠĠĠĠĠĠĠ Ġreturn Ġbest Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Camera Configuration " ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġbigger Ġthan Ġthe Ġsize Ġof Ġa Ġsmall Ġscreen , Ġwhich Ġis Ġstill Ġsupported . ĠThe Ġroutine ĊĠĠĠĠĠĠĠ Ġ// Ġbelow Ġwill Ġstill Ġselect Ġthe Ġdefault Ġ( pres um ably Ġ 3 2 0 x 2 4 0 ) Ġsize Ġfor Ġthese . ĠThis Ġprevents ĊĠĠĠĠĠĠĠ Ġ// Ġaccident al Ġselection Ġof Ġvery Ġlow Ġresolution Ġon Ġsome Ġdevices . ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMIN _ PRE VIEW _ PIXEL S Ġ= Ġ 4 7 0 Ġ* Ġ 3 2 0 Ġ// Ġnormal Ġscreen ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMAX _ PRE VIEW _ PIXEL S Ġ= Ġ 8 0 0 Ġ* Ġ 6 0 0 Ġ// Ġmore Ġthan Ġlarge / HD Ġscreen ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinitialize Torch ( parameters : ĠCamera . Parameters , Ġprefs : ĠSharedPreferences ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Setting Ġ= Ġprefs . getBoolean ( Preferences Activity . KEY _ TO GGLE _ LIGHT , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Set Torch ( parameters , Ġcurrent Setting ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdo Set Torch ( parameters : ĠCamera . Parameters , Ġnew Setting : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflash Mode : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Setting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Mode Ġ= Ġfind Set table Value ( parameters . supported Flash Modes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FLASH _ MODE _ TOR CH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FLASH _ MODE _ ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Mode Ġ= Ġfind Set table Value ( parameters . supported Flash Modes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Parameters . FLASH _ MODE _ OFF ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flash Mode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . flash Mode Ġ= Ġflash Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfind Set table Value ( supported Values : ĠCollection < String > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġdesired Values : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Supported Ġvalues : Ġ" Ġ+ Ġsupported Values !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( supported Values Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( desired Value Ġin Ġdesired Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( supported Values . contains ( desired Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġdesired Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Set table Ġvalue : Ġ" Ġ+ Ġresult !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ