package Ġcom . example . smart key _ ver 1 0 Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . location . Address Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . webkit . Web Settings Ċ import Ġandroid . widget .* Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . Exception Ċ Ċ class ĠSmart key Log Act Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġval ĠSTORAGE _ CODE Ġ= Ġ 9 9 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ smart key _ log ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbtn _ finish Ġ= ĠfindViewById < Button >( R . id . btn _ finish ) ĊĠĠĠĠĠĠĠ Ġval Ġget service Ġ= ĠRet rofit _ service . service ĊĠĠĠĠĠĠĠ Ġvar Ġcookie Ġ= ĠCookie Handler (). set Cookie () ĊĊĠĠĠĠĠĠĠ Ġval Ġkey num Ġ= Ġintent . getString Extra (" serial num ") ĊĠĠĠĠĠĠĠ Ġval Ġkey name Ġ= Ġintent . getString Extra (" key name ") ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġlog table Ġ: ĠList < Key Log > ĊĊĠĠĠĠĠĠĠ Ġval Ġgeo coder Ġ= ĠGeo coder ( this ) ĊĠĠĠĠĠĠĠ Ġvar Ġaddr list Ġ: ĠList < Address >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . table title ). text Ġ= Ġkey name Ġ+ Ġ" ìĿĺ ĠìĤ¬ìļ© ëĤ´ ìĹŃ " ĊĊĠĠĠĠĠĠĠ Ġget service . GetKey Log ( cookie id Ġ= Ġcookie , Ġser num Ġ= Ġkey num !! ). enqueue ( object Ġ: ĠCallback < GetKey record > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < GetKey record >, Ġresponse : ĠResponse < GetKey record >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . code () Ġ== Ġ 2 0 0 ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get ĠìĦ± ê³µ Ġìĭľ Ġíħ ĮìĿ´ ë¸Ķ Ġëł Ī ìĿ´ ìķĦ ìĽ ĥ ĠìĥĿìĦ± ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Smart key Log "," íħ ĮìĿ´ ë¸Ķ Ġê° ¯ ĠìĦ± ê³µ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog table Ġ= Ġresponse . body () !!. message ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtable size Ġ= Ġlog table . size - 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// íħ ĮìĿ´ ë¸Ķ ìĹĲ Ġëĵ¤ ìĸ´ ê° Ī ĠëĤ´ìļ© Ġê¸° ë¡Ŀ ( ì µľ ê·¼ ìĪ ľ ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġtable size Ġdown To Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtime _ text Ġ= ĠTextView ( this @ Smart key Log Act ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ text . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstate _ text Ġ= ĠTextView ( this @ Smart key Log Act ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate _ text . gravity Ġ= ĠGr avity . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmethod _ text Ġ= ĠTextView ( this @ Smart key Log Act ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod _ text . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgps _ text Ġ= ĠTextView ( this @ Smart key Log Act ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgps _ text . gravity Ġ= ĠGr avity . CENTER ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// íĥĢ ìŀĦ ìĬ¤ íĥ ¬ íĶĦ ë¥¼ ĠëĳĲ ì¤ Ħ ìĹĲ ĠëĤĺ ë Ī Ħ ìĸ´ ìĦľ Ġíĳľ íĺĦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp _ time _ 0 Ġ= Ġlog table [ i ]. Time . chunk ed ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp _ time _ 1 Ġ= Ġtemp _ time _ 0 [ 0 ]. chunk ed ( 1 0 ) Ġ// . ì§Ģ ìļ° ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtime T Ġ= Ġtemp _ time _ 1 [ 0 ] +"\ n "+ temp _ time _ 0 [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ text . text Ġ= Ġtime T ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate _ text . text Ġ= Ġlog table [ i ]. Key State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( log table [ i ]. Method . length Ġ> Ġ 1 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp _ method Ġ= Ġlog table [ i ]. Method . chunk ed ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmethod M Ġ= Ġtemp _ method [ 0 ] +"\ n "+ temp _ method [ 1 ] +"\ n "+ temp _ method [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod _ text . text Ġ= Ġmethod M ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġmethod _ text . text Ġ= Ġlog table [ i ]. Method ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( log table [ i ]. GP SL at Ġ!= Ġnull Ġ&& Ġlog table [ i ]. GP SL ong Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddr list Ġ= Ġgeo coder . get From Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog table [ i ]. GP SL at , Ġlog table [ i ]. GP SL ong , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( addr list Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( addr list ?. size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgps _ text . text Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaddr String Ġ= Ġaddr list !!. get ( 0 ). locality ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( addr String Ġ!= Ġnull Ġ&& Ġaddr String . length Ġ> Ġ 8 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Addr Ġ= Ġaddr String . chunk ed ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgps _ text . text Ġ= Ġtemp Addr [ 0 ] +"\ n "+ temp Addr [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġgps _ text . text Ġ= Ġaddr String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġgps _ text . text Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġgps _ text . text Ġ= Ġ" Ġ" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtable Layout Ġ= ĠfindViewById < Table Layout >( R . id . table _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtable Row Ġ= ĠTable Row ( this @ Smart key Log Act ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . addView ( time _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . addView ( state _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . addView ( method _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . addView ( gps _ text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Layout . addView ( table Row ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ë³´ ìķĪ ëª¨ ëĵľ ìĹĲìĦľ ĠìĤ¬ ì§Ħ Ġë°Ľ ìķĦ ìĺ¤ ëĬĶ Ġë©Ķ ìĦľ ëĵľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( log table [ i ]. Method Ġ== Ġ" ë³´ ìķĪ ëª¨ ëĵľ : ĠìĤ¬ ì§Ħ "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod _ text . setTextColor ( Color . parse Color ("# 0 0 0 0 ff ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod _ text . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget service . Get Security Image ( cookie id Ġ= Ġcookie , Ġser num Ġ= Ġkey num !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġlog table [ i ]. Time ). enqueue ( object Ġ: ĠCallback < Get Sec u Img > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Get Sec u Img >, Ġresponse : ĠResponse < Get Sec u Img >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . code () Ġ== Ġ 2 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse msg Ġ= Ġresponse . body () !!. message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOpen _ Image ( StringTo Bitmap ( response msg ), Ġlog table [ i ]. Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Smart key Log Act , Ġ" ìĺ¤ ë¥ĺ ê°Ģ Ġë°ľ ìĥĿ íĸĪ ìĬµëĭĪëĭ¤ .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ìĿ´ ë¯¸ ì§Ģ ", Ġresponse . body (). toString ()+ response . code ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Get Sec u Img >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Smart key Log "," t "+ t . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}// ë³´ ìķĪ ëª¨ ëĵľ ĠìĤ¬ ì§Ħ Ġë ģ Ŀ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < GetKey record >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Smart key Log "," t "+ t . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbtn _ finish . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// -------------------------------- --- method -------------------------------- ---------- // ĊĊĠĠĠ Ġfun ĠOpen _ Image ( img : ĠBitmap ?, Ġfilename _ time : ĠString ){ ĊĠĠĠĠĠĠĠ Ġval ĠImage _ dialog Ġ= ĠSmart key Dialog ( this ) ĊĠĠĠĠĠĠĠ ĠImage _ dialog . Security _ Img _ Open ( img !! ) ĊĊĠĠĠĠĠĠĠ Ġ// ëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ Ġìŀħëł¥ í ĽĦ Ġíģ ´ ë¦ Ń Ġìĭľ ĊĠĠĠĠĠĠĠ ĠImage _ dialog . setOnClickListener _ Sec u ( object Ġ: ĠSmart key Dialog . On Dialog ClickListener _ Sec u Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ed _ Sec u ( button : ĠButton ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Image To Gallery ( button , Ġimg , Ġfilename _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ë° Ľ ìķĦ ìĺ ¨ Ġë¹Ħ íĬ¸ ë§ µ ĠëĶĶ ì ½Ķ ëĶ © ĊĠĠĠ Ġfun ĠString To Bitmap ( encoded String : ĠString ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencode Byte : ĠByteArray Ġ= ĠBase 6 4 . decode ( encoded String , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode ByteArray ( encode Byte , Ġ 0 , Ġencode Byte . size ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ë° Ľ ìķĦ ìĺ ¨ Ġë¹Ħ íĬ¸ ë§ µ ìĿĦ Ġê° ¤ ëŁ¬ ë¦¬ ìĹĲ ĠìłĢìŀ¥ íķĺê¸° ĊĠĠĠ Ġprivate Ġfun Ġsave Image To Gallery ( button : ĠButton , Ġbitmap : ĠBitmap , Ġfilename _ time : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ê ¶ Į íķľ Ġì² ´ íģ¬ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! check Permission ( this , ĠManifest . permission . READ _ EXTERNAL _ STORAGE ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! check Permission ( this , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ê·¸ ë¦ ¼ ĠìłĢìŀ¥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! image External Save ( this , Ġbitmap , Ġthis . getString ( R . string . app _ name ), Ġfilename _ time )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" ê·¸ ë¦ ¼ ĠìłĢìŀ¥ ìĿĦ Ġìĭ¤ íĮ ¨ íķĺ ìĺ Ģ ìĬµëĭĪëĭ¤ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" ê·¸ ë¦ ¼ ìĿ´ Ġê° ¤ ëŁ¬ ë¦¬ ìĹĲ ĠìłĢìŀ¥ ëĲĺ ìĹĪ ìĬµëĭĪëĭ¤ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġimage External Save ( context : ĠContext , Ġbitmap : ĠBitmap , Ġpath : ĠString , Ġfilename _ time : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠ Ġif Ġ( Environment . MEDIA _ MOUNT ED Ġ== Ġstate ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Path Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . get External Storage Public Directory ( Environment . DIRECTORY _ PI CTURE S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Name Ġ= Ġ"/" Ġ+ Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġfilename _ time Ġ+ Ġ". png " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Path Ġ= ĠFile ( rootPath Ġ+ Ġdir Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Path . mkdir s () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( save Path , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġfile . delete () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , Ġout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ê° ¤ ëŁ¬ ë¦¬ Ġê° ± ìĭł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . send Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ MEDIA _ SCAN NER _ SCAN _ FILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" file ://" Ġ+ ĠEnvironment . get External Storage Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Permission ( activity : ĠActivity , Ġpermission : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermission Checker Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( activity . application Context , Ġpermission ) ĊĊĠĠĠĠĠĠĠ Ġ// ê ¶ Į íķľ ìĿ´ ĠìĹĨ ìľ¼ ë©´ Ġê ¶ Į íķľ ĠìļĶ ì²Ń ĊĠĠĠĠĠĠĠ Ġif Ġ( permission Checker Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( activity , ĠarrayOf ( permission ), ĠSTORAGE _ CODE ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊ Ċ }