package Ġme . sweet ll . t uc ao . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . media . Ex if Interface Ċ import Ġandroid . os . Environment Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . style . Image Span Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . EditText Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠS weet Editor : ĠEditText Ġ{ ĊĊĠĠĠ Ġvar Ġimg Index Ġ= Ġ 1 ĊĊĠĠĠ Ġval Ġimg Mark Map Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( attrs : ĠAttributeSet ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Image ( image Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcursor Position Ġ= Ġselection Start ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Position Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Position Ġ= Ġtext . length ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġimg Mark Ġ= Ġ" ![ img $ img Index ]" ĊĊĠĠĠĠĠĠĠ Ġvar Ġspan Start Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġspan End Ġ= Ġimg Mark . length ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Position Ġ!= Ġ 0 Ġ&& Ġtext [ cursor Position Ġ- Ġ 1 ] Ġ!= Ġ'\ n ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Mark Ġ= Ġ'\ n ' Ġ+ Ġimg Mark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan Start ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan End ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Position Ġ== Ġtext . length Ġ|| Ġ( text . isNotEmpty () Ġ&& Ġtext [ cursor Position ] Ġ!= Ġ'\ n ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Mark Ġ+= Ġ'\ n ' ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġspan String Ġ= ĠSp ann able String ( img Mark ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfixed Path Ġ= Ġfix Image ( image Path , Ġwidth ) ĊĊĠĠĠĠĠĠĠ Ġimg Mark Map . put ("$ img Index ", Ġimage Path ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbmp Ġ= Ġget Raw Bitmap ( fixed Path ) ĊĠĠĠĠĠĠĠ Ġval Ġimg Span Ġ= ĠImage Span ( context , Ġbmp , ĠImage Span . ALIGN _ BASE LINE ) ĊĊĠĠĠĠĠĠĠ Ġspan String . set Span ( img Span , Ġspan Start , Ġspan End , ĠSp ann able . SPAN _ INCL USIVE _ EXCL USIVE ) ĊĊĠĠĠĠĠĠĠ Ġtext . insert ( cursor Position , Ġspan String ) ĊĊĠĠĠĠĠĠĠ Ġimg Index ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Files (): ĠList < Pair < String , ĠFile >> Ġ= ĊĠĠĠĠĠĠĠ Ġ"! \\ [ img (( \\ d + )) \\ ] ". to Regex (). findAll ( text ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġit . group Values [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġto ĠFile ( img Mark Map [ index ]) ĊĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠ Ġprivate Ġfun Ġget Raw Bitmap ( image Path : ĠString ): ĠBitmap Ġ{ Ċĉ ĉ val Ġoptions Ġ= ĠBitmap Factory . Options () Ċĉ ĉ options . in Just Decode Bounds Ġ= Ġfalse Ċĉ ĉ return ĠBitmap Factory . decode File ( image Path , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Image File (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss "). format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġimage FileName Ġ= Ġ" PNG _${ time Stamp }_ " ĊĠĠĠĠĠĠĠ Ġval Ġstorage Dir Ġ= Ġcontext . get External Files Dir ( Environment . DIRECTORY _ PI CTURE S ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠFile . create TempFile ( image FileName , Ġ". png ", Ġstorage Dir ) ĊĠĠĠĠĠĠĠ Ġreturn Ġimage ĊĠĠĠ Ġ} ĊĊ ĉ /** Ċĉ Ġ* Ġæł¹æį® view çļĦ å®½åº¦ ï¼Į åĬ¨æĢģ ç¼© æĶ¾ bitmap å° º å¯ ¸ ï¼Į æĹ ĭ è½¬ Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġwidth Ġview çļĦ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ä¿® å¤į åĲİçļĦ åĽ¾çīĩ è·¯å¾Ħ Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġfix Image ( image Path : ĠString , Ġwidth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġread Picture Degree ( image Path ) ĊĊĉ ĉ val Ġoptions Ġ= ĠBitmap Factory . Options () Ċĉ ĉ options . in Just Decode Bounds Ġ= Ġfalse Ċĉ ĉ val Ġraw B mp Ġ= ĠBitmap Factory . decode File ( image Path , Ġoptions ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrotated Raw B mp Ġ= Ġrotate Bitmap ( raw B mp , Ġangle ) ĊĊĠĠĠĠĠĠĠ Ġval Ġraw Out Stream Ġ= ĠFileOutputStream ( image Path ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotated Raw B mp . compress ( Bitmap . Compress Format . JPEG , Ġ 8 0 , Ġraw Out Stream ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Out Stream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotated Raw B mp . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĉ ĉ val Ġsample Size Ġ= Ġif Ġ( rot ated Raw B mp . width Ġ> Ġwidth ) Ġrotated Raw B mp . width Ġ/ Ġwidth Ġ+ Ġ 1 Ġelse Ġ 1 Ċĉ ĉ options . in Just Decode Bounds Ġ= Ġfalse Ċĉ ĉ options . in Sample Size Ġ= Ġsample Size Ċĉ ĉ val Ġcompressed B mp Ġ= Ġ ĠBitmap Factory . decode File ( image Path , Ġoptions ) ĊĊĠĠĠĠĠĠĠ Ġval Ġimage File Ġ= Ġcreate Image File () ĊĊĠĠĠĠĠĠĠ Ġval Ġout Stream Ġ= ĠFileOutputStream ( image File ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompressed B mp . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġout Stream ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Stream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompressed B mp . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġimage File . absolute Path Ċ ĉ } ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯»åıĸ çħ§ çīĩ æĹ ĭ è½¬ è§Ĵ åº¦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Path Ġ çħ§ çīĩ è·¯å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġ è§Ĵ åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġread Picture Degree ( image Path : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdegree Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexit Interface Ġ= ĠEx if Interface ( image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġexit Interface . getAttribute Int ( Ex if Interface . TAG _ OR IENTATION , ĠEx if Interface . OR IENTATION _ NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdegree Ġ= Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 Ġ-> Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 1 8 0 Ġ-> Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 2 7 0 Ġ-> Ġ 2 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdegree ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĹ ĭ è½¬ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġbmp Ġ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġangle Ġ è§Ĵ åº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æĹ ĭ è½¬ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrotate Bitmap ( bmp : ĠBitmap , Ġangle : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( angle . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġrotate B mp : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate B mp Ġ= ĠBitmap . create Bitmap ( bmp , Ġ 0 , Ġ 0 , Ġbmp . width , Ġbmp . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠError ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rotate B mp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate B mp Ġ= Ġbmp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( rotate B mp Ġ!= Ġbmp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbmp . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrotate B mp ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ