package Ġcom . lass i . presentation . media Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroidx . core . graphics . Blend Mode Color Filter Compat Ċ import Ġandroidx . core . graphics . Blend Mode Compat Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . lass i . R Ċ import Ġcom . lass i . common . utils . Crop Utils Ċ import Ġcom . lass i . common . utils . Key Utils Ċ import Ġcom . lass i . common . utils . Key Utils . SELECTED _ FOLDER Ċ import Ġcom . lass i . data . media . Mi Media Ċ import Ġcom . lass i . data . medi ad irectory . Folder Ċ import Ġcom . lass i . domain . media . L ass i Config Ċ import Ġcom . lass i . domain . media . MediaType Ċ import Ġcom . lass i . presentation . common . L ass i Base ViewModel Fragment Ċ import Ġcom . lass i . presentation . common . decoration . Grid Spacing Item Decoration Ċ import Ġcom . lass i . presentation . media . adapter . Media Adapter Ċ import Ġcom . lass i . presentation . vide op review . Video Preview Activity Ċ import Ġkotlinx . android . synt hetic . main . fragment _ media _ picker .* Ċ import Ġjava . io . File Ċ Ċ class ĠMedia Fragment Ġ: ĠL ass i Base ViewModel Fragment < Selected Media ViewModel >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmedia Adapter Ġby Ġlazy Ġ{ ĠMedia Adapter ( this :: on Item Click ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġfolder : ĠFolder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmedia Picker Config Ġ= ĠL ass i Config . getConfig () ĊĊĠĠĠ Ġoverride Ġfun ĠgetContent Resource () Ġ= ĠR . layout . fragment _ media _ picker ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( folder : ĠFolder ): ĠMedia Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmi Media Picker Fragment Ġ= ĠMedia Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( SELECTED _ FOLDER , Ġfolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmi Media Picker Fragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmi Media Picker Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init Views () ĊĠĠĠĠĠĠĠ Ġset Image Adapter () ĊĠĠĠĠĠĠĠ ĠprogressBar . in determinate Drawable . color Filter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBlend Mode Color Filter Compat . create Blend Mode Color Filter Compat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Picker Config . progress Bar Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlend Mode Compat . SRC _ AT OP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Bundle () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . get Bundle () ĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Ġ= Ġit . get Parcelable ( SELECTED _ FOLDER ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild ViewModel (): ĠSelected Media ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewModel Provider ( require Activity ())[ Selected Media ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Image Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Media . layout Manager Ġ= ĠGrid LayoutManager ( context , Ġmedia Picker Config . grid Size ) ĊĠĠĠĠĠĠĠ Ġrv Media . adapter Ġ= Ġmedia Adapter ĊĠĠĠĠĠĠĠ Ġrv Media . addItem Decoration ( Grid Spacing Item Decoration ( media Picker Config . grid Size , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġmedia Adapter . set List ( folder ?. medi as ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Item Click ( selected Med ias : ĠArrayList < Mi Media >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( L ass i Config . getConfig (). media Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . IMAGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( L ass i Config . getConfig (). max Count Ġ== Ġ 1 Ġ&& ĠL ass i Config . getConfig (). is Crop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . from File ( File ( selected Med ias [ 0 ]. path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC rop Utils . begin Crop ( require Activity (), Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( L ass i Config . getConfig (). max Count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . addAll Selected Media ( selected Med ias ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . addAll Selected Media ( selected Med ias ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result Ok ( selected Med ias ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . VIDEO , ĠMediaType . AUDIO , ĠMediaType . DOC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( L ass i Config . getConfig (). max Count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . addAll Selected Media ( selected Med ias ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVideo Preview Activity . start Video Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Med ias [ 0 ]. path !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Result Ok ( selected Media : ĠArrayList < Mi Media > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Key Utils . SELECTED _ MEDIA , Ġselected Media ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity ?. set Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmenu . find Item ( R . id . menu Camera ) ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} Ċ } Ċ