package Ġcom . ki y ot aka . jet pack demo . ui . fragment . main Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Documents Contract Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcn . ped ant . S weet Alert . S weet AlertDialog Ċ import Ġcom . blank j . util code . util . Toast Utils Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġcom . jak ew h art on . ret rofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġcom . ki y ot aka . jet pack demo . R Ċ import Ġcom . ki y ot aka . jet pack demo . common . Base Application Ċ import Ġcom . ki y ot aka . jet pack demo . databinding . Suggestion Fragment Binding Ċ import Ġcom . ki y ot aka . jet pack demo . http . API s Ċ import Ġcom . ki y ot aka . jet pack demo . http . App Content Ċ import Ġcom . ki y ot aka . jet pack demo . http . Base Bean Ċ import Ġcom . ki y ot aka . jet pack demo . http . Ret rofit Client Ċ import Ġcom . ki y ot aka . jet pack demo . model . Custom ViewModel Provider Ċ import Ġcom . ki y ot aka . jet pack demo . model . Suggestion ViewModel Ċ import Ġcom . ki y ot aka . jet pack demo . ui . activity . MainActivity Ċ import Ġcom . my l hy l . circ led ialog . Circle Dialog Ċ import Ġcom . my l hy l . circ led ialog . params . Dialog Params Ċ import Ġcom . my l hy l . circ led ialog . params . Items Params Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . fragment _ app . view .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . Multipart Body Ċ import Ġokhttp 3 . RequestBody Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠSuggest ion Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmodel : ĠSuggest ion ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠCustom ViewModel Provider . provider Suggestion Model () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġp Dialog : ĠS weet AlertDialog Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠS weet AlertDialog ( require Activity (), ĠS weet AlertDialog . PROGRESS _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text (" ä¸Ĭä¼ł ä¸Ń ...") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠSuggest ion Fragment Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Uri : ĠUri ĊĠĠĠ Ġprivate Ġvar ĠimageUrl : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcamera ImageUrl : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġval ĠTA KE _ PH OTO Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠC HO OSE _ PH OTO Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġval Ġimage List Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . suggestion _ fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinit Data () ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġon Subscribe Ui () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Subscribe Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Suggestion Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . model ?. is Show ?. observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġboolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav View : ĠBottom Navigation View Ġ= Ġrequire Activity (). findViewById ( R . id . nav _ view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . suggestion Submit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Ġ= Ġbinding . suggestion Issue . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser phone Ġ= Ġbinding . suggestion Connect . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( issue . isEmpty () Ġ|| Ġuser phone . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" è¯· å¡« å¥½ åıį é¦ Ī åĨħå®¹ ä»¥åıĬ æĤ¨çļĦ èģĶç³» æĸ¹å¼ı ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Suggestion ( issue , Ġuser phone ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . suggestion Select . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image List . size Ġ< Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Select Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" æľĢ å¤ļ æ·»åĬł 5 å¼ł åĽ¾çīĩ ï¼Į éķ¿ æĮī åĪłéĻ¤ çħ§ çīĩ ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . model Ġ= Ġmodel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 1 . setOn Long ClickListener ( View . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircle Dialog . Builder (). setTitle (" æĺ¯åĲ¦ åĪłéĻ¤ å½ĵåīį çħ§ çīĩ ï¼Ł "). set Positive (" æĺ¯ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image List . size Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative (" åĲ¦ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( fragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 2 . setOn Long ClickListener ( View . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircle Dialog . Builder (). setTitle (" æĺ¯åĲ¦ åĪłéĻ¤ å½ĵåīį çħ§ çīĩ ï¼Ł "). set Positive (" æĺ¯ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image List . size Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . remove At ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative (" åĲ¦ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( fragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 3 . setOn Long ClickListener ( View . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircle Dialog . Builder (). setTitle (" æĺ¯åĲ¦ åĪłéĻ¤ å½ĵåīį çħ§ çīĩ ï¼Ł "). set Positive (" æĺ¯ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image List . size Ġ>= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . remove At ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative (" åĲ¦ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( fragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 4 . setOn Long ClickListener ( View . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircle Dialog . Builder (). setTitle (" æĺ¯åĲ¦ åĪłéĻ¤ å½ĵåīį çħ§ çīĩ ï¼Ł "). set Positive (" æĺ¯ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image List . size Ġ>= Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . remove At ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative (" åĲ¦ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( fragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 5 . setOn Long ClickListener ( View . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircle Dialog . Builder (). setTitle (" æĺ¯åĲ¦ åĪłéĻ¤ å½ĵåīį çħ§ çīĩ ï¼Ł "). set Positive (" æĺ¯ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image List . size Ġ>= Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . remove At ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative (" åĲ¦ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( fragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġshow Select Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠarrayOf (" ä»İ æĭ į æĳ Ħ éĢī åıĸ ", Ġ" ä»İ çĽ¸ åĨĮ éĢī åıĸ ") ĊĠĠĠĠĠĠĠ ĠCircle Dialog . Builder () Ġ// Ġ. setType face ( type face ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMax Height ( 0 . 7 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. config Dialog Ġ{ Ġparams : ĠDialog Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . backgroundColor Press Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. config Items Ġ{ Ġparams : ĠItems Params Ġ-> Ġparams . divider Height Ġ= Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġview 1 3 : ĠView ?, Ġposition 1 3 : ĠInt Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( position 1 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray ( 1 ) Ġ{ ĠManifest . permission . CAMERA Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray ( 1 ) Ġ{ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Album () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative (" åıĸæ¶Ī ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( fragment Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĸ°å»º æĸĩä»¶å¤¹ Ġsuggestion åŃĺ æĶ¾ æĭ į æĳ Ħ çļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġopen Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( get SD Path () Ġ+ Ġ"/ consult Video / suggestion /") ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġfile . mkdir s () ĊĊĠĠĠĠĠĠĠ Ġcamera ImageUrl Ġ= Ġget SD Path () Ġ+ Ġ"/ consult Video / suggestion /" Ġ+ Ġget Photo FileName () ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Image Ġ= ĠFile ( camera ImageUrl ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! output Image . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Image . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Provider . get Uri For File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Base Application . context . packageName }. provider ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri Ġ= ĠUri . from File ( output Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" android . media . action . IMAGE _ CAPTURE ") ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġimage Uri ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠTA KE _ PH OTO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget SD Path (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsd Dir : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsd Card Ex sit Ġ= ĠEnvironment . get External Storage State (). equals ( Environment . MEDIA _ MOUNT ED ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sd Card Ex sit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsd Dir Ġ= ĠEnvironment . get External Storage Directory () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsd Dir . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Photo FileName (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ("' IMG '_ yyyy MM dd _ HH mm ss ") ĊĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . format ( date ). toString () Ġ+ Ġ". jpg " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Album () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" android . intent . action . GET _ CONTENT ") ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠC HO OSE _ PH OTO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Album () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" æ²¡æľī æĿĥéĻĲ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" æ²¡æľī æĿĥéĻĲ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTA KE _ PH OTO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera ImageUrl Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . add ( camera ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Image Ġ= ĠFile ( camera ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Image . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Image . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC HO OSE _ PH OTO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Image On Kit K at ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Image Before Kit K at ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġhandle Image Before Kit K at ( data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Path Ġ= ĠgetImage Path ( uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Path Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . add ( image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( 1 9 ) ĊĠĠĠ Ġprivate Ġfun Ġhandle Image On Kit K at ( data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage Path : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠ Ġif Ġ( Documents Contract . is Document Uri ( activity , Ġuri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= ĠDocuments Contract . getDocument Id ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" com . android . providers . media . documents ". equals ( uri !!. authority )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġdoc Id . split (": ")[ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ". equals ( uri . authority )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Uri Ġ= ĠContent U ris . with App ended Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" content :// downloads / public _ downloads "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Id . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= ĠgetImage Path ( content Uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" content ". equals ( uri !!. scheme )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= ĠgetImage Path ( uri , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" file ". equals ( uri . scheme )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Path Ġ= Ġuri . path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠimageUrl Ġ= Ġimage Path ĊĠĠĠĠĠĠĠ Ġif Ġ( image Path Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . add ( image Path ) ĊĠĠĠĠĠĠĠ Ġshow ImageList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĽ¾çīĩ path ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetImage Path ( uri : ĠUri , Ġselection : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpath : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġrequire Activity (). 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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éģįåİĨ bitmap å±ķç¤º åĽ¾çīĩ å¹¶ä¸Ķ åĽŀ æĶ¶ èµĦæºĲ ï¼Į éģ¿åħį å¤ª å¤§ äºĨ æº ¢ åĩº ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow ImageList () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 1 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 2 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 3 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 4 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġbinding . suggestion View 5 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġimage List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode File ( it , Ġoptions ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () Ġ Ġ// åĩº æĿ¥çļĦ åĽ¾çīĩ éĥ½ä¼ļ è¢« æĹ ĭ è½¬ äºĨ ï¼Į æĪĳ ä¹Ł ä¸į çŁ¥éģĵ ä¸ºä»Ģä¹Ī ï¼Į æīĢä»¥ è½¬ åĽŀ æĿ¥ ãĢĤãĢĤ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmatrix . post Rotate ( 3 6 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotated Bit Map Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( bitmap , Ġ 0 , Ġ 0 , Ġbitmap . width , Ġbitmap . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġbinding . suggestion View 1 . setImage Bitmap ( rot ated Bit Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġbinding . suggestion View 2 . setImage Bitmap ( rot ated Bit Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġbinding . suggestion View 3 . setImage Bitmap ( rot ated Bit Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġbinding . suggestion View 4 . setImage Bitmap ( rot ated Bit Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġbinding . suggestion View 5 . setImage Bitmap ( rot ated Bit Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠToast Utils . show Short (" æŁ¥æī¾ çħ§ çīĩ å¤±è´¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bitmap . is Re cyc led ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . recycle () Ġ// åĽŀ æĶ¶ åĽ¾çīĩ æīĢ åįł çļĦ åĨħåŃĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . gc () // æıĲ é ĨĴ ç³»ç»Ł åıĬ æĹ¶ åĽŀ æĶ¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åİĭç¼© ä¸Ģä¸ĭ åĽ¾çīĩ ï¼Į éģ¿åħį åİŁ åĽ¾ å¤ª å¤§ äºĨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompress Image ( list : ĠMutable List < String >): ĠMutable List < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult List : ĠMutable List < File > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold File Ġ= ĠFile ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquality Ġ= Ġ 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġget Small Bitmap ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Path Ġ= Ġget SD Path () Ġ+ Ġ"/ consult Video / cache /" Ġ+ Ġold File . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= ĠFile ( target Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! outputFile . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( outputFile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap !!. compress ( Bitmap . Compress Format . JPEG , Ġquality , Ġout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult List . add ( old File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult List . add ( outputFile ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Small Bitmap ( filePath : ĠString ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions : ĠBitmap Factory . Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue Ġ// åıª è§£æŀĲ åĽ¾çīĩ è¾¹ æ² ¿ ï¼Į èİ·åıĸ å®½ é«ĺ ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode File ( filePath , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ ç¼© æĶ¾ æ¯Ķ ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , Ġ 4 8 0 , Ġ 8 0 0 ) ĊĠĠĠĠĠĠĠ Ġ// Ġ å®Įæķ´ è§£æŀĲ åĽ¾çīĩ è¿ĶåĽŀ bitmap ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode File ( filePath , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate In Sample Size ( ĊĠĠĠĠĠĠĠ Ġoptions : ĠBitmap Factory . Options , ĊĠĠĠĠĠĠĠ Ġreq Width : ĠInt , Ġreq Height : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġoptions . out Height ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġoptions . out Width ĊĠĠĠĠĠĠĠ Ġvar Ġin Sample Size Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( height Ġ> Ġreq Height Ġ|| Ġwidth Ġ> Ġreq Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ratio Ġ= ĠMath . round ( height . toFloat () Ġ/ Ġreq Height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ratio Ġ= ĠMath . round ( width . toFloat () Ġ/ Ġreq Width . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Sample Size Ġ= Ġif Ġ( height Ratio Ġ< Ġwidth Ratio ) Ġheight Ratio Ġelse Ġwidth Ratio ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġin Sample Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupload Suggestion ( issue : ĠString , Ġmobile _ phone : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġp Dialog . show () ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl (" https :// api . gd brain view . com /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġimage Files Ġ= Ġcompress Image ( image List ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Builder Ġ= ĠMultip art Body . Builder () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Builder . setType ( Multipart Body . FORM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( image Files . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġimage Files . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Body : ĠRequest Body Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Body . create (" image / jpg ". to MediaType OrNull (), Ġimage Files [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Builder . add FormData Part ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image ${ i Ġ+ Ġ 1 }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Files [ i ]. name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Builder . add FormData Part (" phone ", ĠMainActivity . phone ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Builder . add FormData Part (" issue ", Ġissue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Builder . add FormData Part (" mobile _ phone ", Ġmobile _ phone ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġrequest Body Builder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobserve : ĠObservable < Base Bean < String >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . create ( API s :: class . java ). post Suggestion ( request Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve . subscribe On ( Schedulers . io ()). observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġio . reactivex . Observer < Base Bean < String >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( t : ĠBase Bean < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" æıĲäº¤ æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion Issue . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion Connect . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion View 1 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion View 2 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion View 3 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion View 4 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . suggestion View 5 . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile : ĠArray < File >? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( get SD Path () Ġ+ Ġ"/ consult Video / cache / "). list Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ?. forEach Ġ{ Ġit . delete () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" s ug g ", e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile : ĠArray < File >? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( get SD Path () Ġ+ Ġ"/ consult Video / cache / "). list Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ?. forEach Ġ{ Ġit . delete () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" èİ·åıĸ æĸĩä»¶ å¤±è´¥ ï¼ģ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }