package Ġorg . jav am aster . fragment learning . utils Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Documents Contract Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġorg . jav am aster . fragment learning . common . App Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ Ċ /** Ċ Ġ* Ġ@ author Ġy ud ong Ċ Ġ* Ġ@ date Ġ 2 0 1 9 / 9 / 6 Ċ Ġ*/ Ċ object ĠImage Utils Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ PH OTO _ KEY Ġ= Ġ" user Photo FileName " ĊĊĠĠĠ Ġfun Ġsave User Photo ( suffix : ĠString , Ġt : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠApp . context . get Dir (" img ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠApp . get Login SharedPreferences () ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . putString ( USER _ PH OTO _ KEY , Ġ" user _ photo $ suffix ") ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( path , Ġ" user _ photo $ suffix ") ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( file ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStream Utils . copy ( t , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Photo (): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠApp . context . get Dir (" img ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! path . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠApp . get Login SharedPreferences () ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpreferences . getString ( USER _ PH OTO _ KEY , Ġ"") ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( path , Ġpreferences . getString ( USER _ PH OTO _ KEY , Ġ"")) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFileInputStream ( file ). use Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteArrayOutputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStream Utils . copy ( input , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġit . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Photo ( data : ĠIntent ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . 4 åıĬ ä»¥ä¸Ĭ ç³»ç»Ł ä½¿çĶ¨ è¿Ļä¸ª æĸ¹æ³ķ å¤ĦçĲĨ åĽ¾çīĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ Ġhandle Image On Kit K at ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . 4 ä»¥ä¸ĭ ç³»ç»Ł ä½¿çĶ¨ è¿Ļä¸ª æĸ¹æ³ķ å¤ĦçĲĨ åĽ¾çīĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ Ġhandle Image Before Kit K at ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( 1 9 ) ĊĠĠĠ Ġprivate Ġfun Ġhandle Image On Kit K at ( data : ĠIntent ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage Path : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" handle Image On Kit K at : Ġuri Ġis Ġ" Ġ+ Ġuri !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Documents Contract . is Document Uri ( App . context , Ġuri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ document ç±»åŀĭçļĦ Uri ï¼Į åĪĻ éĢļè¿ĩ document Ġid å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= ĠDocuments Contract . getDocument Id ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" com . android . providers . media . documents " Ġ== Ġuri . authority ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġdoc Id . split (" :" . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array ()[ 1 ] Ġ// Ġ è§£æŀĲ åĩº æķ°åŃĹ æł¼å¼ı çļĦ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= ĠMedia Store . Images . Media ._ ID Ġ+ Ġ"=" Ġ+ Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= ĠgetImage Path ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġselection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" com . android . providers . downloads . documents " Ġ== Ġuri . authority ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Uri Ġ= ĠContent U ris . with App ended Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" content :// downloads / public _ downloads "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . Long . valueOf ( doc Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= ĠgetImage Path ( content Uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" content ". equals ( uri . scheme !! , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ content ç±»åŀĭçļĦ Uri ï¼Į åĪĻ ä½¿çĶ¨ æĻ®éĢļ æĸ¹å¼ı å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= ĠgetImage Path ( uri , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" file ". equals ( uri . scheme !! , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ file ç±»åŀĭçļĦ Uri ï¼Į çĽ´æİ¥ èİ·åıĸ åĽ¾çīĩ è·¯å¾Ħ åį³åı¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= Ġuri . path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġimage Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Image Before Kit K at ( data : ĠIntent ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠ Ġreturn ĠgetImage Path ( uri , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage Path ( uri : ĠUri ?, Ġselection : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpath : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ// ĠéĢļè¿ĩ Uri åĴĮ selection æĿ¥ èİ·åıĸ çľŁ å®ŀ çļĦ åĽ¾çīĩ è·¯å¾Ħ ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= ĠApp . context . content Resolver . query ( uri !! , Ġnull , Ġselection , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Media Store . Images . Media . DATA )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpath ĊĠĠĠ Ġ} Ċ Ċ }