package Ġcom . dic hes . d ich box mobile . view . userData Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . dic hes . d ich box mobile . R Ċ import Ġcom . dic hes . d ich box mobile . datat ypes . User Container Ċ import Ġcom . dic hes . d ich box mobile . mv . boxes DataManager . view States . BoxData ViewModel Ċ import Ġcom . dic hes . d ich box mobile . mv . boxes DataManager . view States . Opened Files ViewModel Ċ import Ġcom . dic hes . d ich box mobile . mv . input Pick ers . Color Picker Ċ import Ġcom . dic hes . d ich box mobile . mv . input Pick ers . Image Crop per Ċ import Ġcom . dic hes . d ich box mobile . mv . userData Manager . viewModel States . Edited ViewModel Ċ import Ġcom . dic hes . d ich box mobile . mv . userData Manager . viewModel States . UserData ViewModel Ċ import Ġcom . dic hes . d ich box mobile . mv . userData Manager . viewModel States . User State ViewModel Ċ import Ġcom . dic hes . d ich box mobile . mv . ver ifiers . edit Ver ifiers . logo Editors . User Logo Editor Ċ import Ġcom . dic hes . d ich box mobile . mv . ver ifiers . edit Ver ifiers . user . Saved Edit State Ċ import Ġcom . dic hes . d ich box mobile . mv . ver ifiers . edit Ver ifiers . user . User Editor Verifier Ċ import Ġcom . dic hes . d ich box mobile . tools . from Bitmap To Base 6 4 Ċ Ċ class ĠProfile Editor : ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchange Name Color Btn : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchange Desc Color Btn : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsubmit ter : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchange Logo Btn : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Picker : ĠImage Crop per ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Logo Editor : ĠUser Logo Editor ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġedit Handler : ĠUser Editor Verifier ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġname Color Btn : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdescription Color Btn : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠuserData ViewModel : ĠUser Data ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser State ViewModel : ĠUser State ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġopened Files ViewModel : ĠOpen ed Files ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbox Data ViewModel : ĠBox Data ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ= Ġinflater . inflate ( R . layout . fragment _ user _ editor , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠuserData ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( UserData ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġuser State ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( User State ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġopened Files ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( Opened Files ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġbox Data ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( BoxData ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġsubmit ter Ġ= Ġview . findViewById ( R . id . edit Profile Btn ) ĊĊĠĠĠĠĠĠĠ Ġvar ĠuserData Ġ= ĠuserData ViewModel . live Data . value !! ĊĊĠĠĠĠĠĠĠ Ġval Ġsaved State Ġ= Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠSaved Edit State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogo Ġ= ĠsavedInstanceState . getString (" logo "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Color Ġ= ĠsavedInstanceState . getInt (" name Color "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Color Ġ= ĠsavedInstanceState . getInt (" description Color "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpasswd Area Visible Ġ= ĠsavedInstanceState . getBoolean (" passwd Area ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġset Image Editor ( saved State , ĠuserData ) ĊĠĠĠĠĠĠĠ Ġval Ġedit Color Fields Ġ= ĠsetUser Verifier ( saved State ) ĊĠĠĠĠĠĠĠ Ġset Color Pick ers ( edit Color Fields , Ġsaved State , ĠuserData ) ĊĊĠĠĠĠĠĠĠ ĠuserData ViewModel . live Data . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull Ġ|| Ġit Ġ== ĠuserData ) Ġreturn @ observe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. detach ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Image Editor ( saved State : ĠSaved Edit State ?, ĠuserData : ĠUser Container . UserData ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Picker Ġ= ĠImage Crop per ( this ) ĊĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= Ġview ?. findViewById < ImageView >( R . id . edit User Logo ) !! ĊĠĠĠĠĠĠĠ Ġval Ġlogo Args Ġ= ĠPair ( imageView , Ġif Ġ( saved State Ġ== Ġnull ) ĠuserData . logo Ġelse Ġsaved State . logo ) ĊĠĠĠĠĠĠĠ Ġval Ġlogo Btn s Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . change User Logo Btn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . setDefault User Logo Btn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . cancel User Logo Btn ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġview ?. findViewById < Button >( it ) !! Ġ} ĊĊĠĠĠĠĠĠĠ Ġuser Logo Editor Ġ= ĠUser Logo Editor ( userData . logo , Ġlogo Args , Ġlogo Btn s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . KIT K AT ) ĊĠĠĠ Ġprivate Ġfun ĠsetUser Verifier ( saved State : ĠSaved Edit State ?): ĠPair < EditText , ĠEditText > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġrequire View (). findViewById < EditText >( R . id . edit Username ) !! ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġrequire View (). findViewById < EditText >( R . id . edit Description ) !! ĊĊĠĠĠĠĠĠĠ Ġedit Handler Ġ= ĠUser Editor Verifier ( submit ter , ĠuserData ViewModel . live Data . value !! ) ĊĠĠĠĠĠĠĠ Ġhandle Editor ( edit Handler , Ġsaved State ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( name , Ġdescription ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Editor ( editor : ĠUser Editor Verifier , Ġsaved State : ĠSaved Edit State ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġrequire View (). findViewById < EditText >( R . id . edit Username ) !! ĊĠĠĠĠĠĠĠ Ġval Ġname Warning Ġ= Ġview ?. findViewById < TextView >( R . id . edit UserName Warning ) !! ĊĠĠĠĠĠĠĠ Ġname Color Btn Ġ= Ġrequire View (). findViewById ( R . id . edit Username Color ) !! ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġrequire View (). findViewById < EditText >( R . id . edit Description ) !! ĊĠĠĠĠĠĠĠ Ġdescription Color Btn Ġ= Ġrequire View (). findViewById ( R . id . edit Description Color ) !! ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġview ?. findViewById < EditText >( R . id . edit Email ) !! ĊĠĠĠĠĠĠĠ Ġval Ġemail Warning Ġ= Ġview ?. findViewById < TextView >( R . id . edit User Email Warning ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġshow Pass wd Btn Ġ= Ġview ?. findViewById < Button >( R . id . change Pass wd Btn ) !! ĊĠĠĠĠĠĠĠ Ġval Ġpasswd Area Ġ= Ġview ?. findViewById < LinearLayout >( R . id . edit User Pass wd Area ) !! ĊĠĠĠĠĠĠĠ Ġval Ġpasswd Cancel Btn Ġ= Ġview ?. findViewById < Button >( R . id . cancel Change Pass wd Btn ) !! ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Pass wd Ġ= Ġview ?. findViewById < EditText >( R . id . edit User Pass wd ) !! ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Pass wd Warning Ġ= Ġview ?. findViewById < TextView >( R . id . edit User Pass wd Warning ) !! ĊĠĠĠĠĠĠĠ Ġval Ġnew Pass wd Ġ= Ġview ?. findViewById < EditText >( R . id . edit User New Pass wd ) !! ĊĠĠĠĠĠĠĠ Ġval Ġnew Pass wd Warning Ġ= Ġview ?. findViewById < TextView >( R . id . edit User New Pass wd Warning ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġedited ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( Edited ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġeditor . add Name Check ( name , Ġname Warning , Ġname Color Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Description Check ( description , Ġdescription Color Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. handle Saved State ( saved State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Email Check ( email , Ġemail Warning ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Pass wd Check ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpasswd Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( show Pass wd Btn , Ġpasswd Cancel Btn ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( current Pass wd , Ġcurrent Pass wd Warning ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( new Pass wd , Ġnew Pass wd Warning ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Logo Editor ( user Logo Editor , Ġimage Picker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Submit Cl b Ġ{ Ġedit Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedited Fields Ġ= Ġedit Data . edited ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Edited UserData ( edited Fields , Ġedit Data . logo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= Ġedited Fields . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Name Ġ!= Ġnull ) Ġset New Username ( new Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedited ViewModel . set Edited ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. detach ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Edited UserData ( edited Fields : ĠUser Container . Edited Fields , Ġlogo : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserData Ġ= ĠuserData ViewModel . live Data . value !! ĊĠĠĠĠĠĠĠ Ġval Ġedited Data Ġ= ĠuserData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġedited Fields . name Ġ?: ĠuserData . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġedited Fields . description Ġ?: ĠuserData . description , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname _ color Ġ= Ġedited Fields . name _ color Ġ?: ĠuserData . name _ color , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription _ color Ġ= Ġedited Fields . description _ color Ġ?: ĠuserData . description _ color , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġedited Fields . email Ġ?: ĠuserData . email , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogo Ġ= Ġif Ġ( logo Ġ== Ġ" removed ") Ġnull Ġelse Ġlogo ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( require Activity (). application , Ġ" Edited ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ ĠuserData ViewModel . set UserData ( edited Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset New Username ( new Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Name Ġ= ĠuserData ViewModel . live Data . value !!. name ĊĠĠĠĠĠĠĠ Ġuser State ViewModel . setState ( Pair ( new Name , ĠnewName )) ĊĠĠĠĠĠĠĠ Ġval Ġbox Data Ġ= Ġbox Data ViewModel . live Data . value ĊĠĠĠĠĠĠĠ Ġif Ġ( box Data Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbox Data ViewModel . set BoxData ( box Data . copy ( owner _ name Ġ= ĠnewName )) ĊĠĠĠĠĠĠĠ Ġval Ġopened Files Ġ= Ġopened Files ViewModel . live Data . value ĊĠĠĠĠĠĠĠ Ġif Ġ( opened Files Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopened Files ViewModel . rename Paths ("/ ${ old Name }", Ġ"/ $ new Name ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Color Pick ers ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpick able Fields : ĠPair < EditText , ĠEditText >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsaved State : ĠSaved Edit State ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserData : ĠUser Container . UserData ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( name , Ġdescription ) Ġ= Ġpick able Fields ĊĠĠĠĠĠĠĠ Ġchange Name Color Btn Ġ= Ġview ?. findViewById ( R . id . edit Username Color ) !! ĊĠĠĠĠĠĠĠ Ġchange Desc Color Btn Ġ= Ġview ?. findViewById ( R . id . edit Description Color ) !! ĊĠĠĠĠĠĠĠ Ġchange Logo Btn Ġ= Ġview ?. findViewById ( R . id . change User Logo Btn ) !! ĊĊĠĠĠĠĠĠĠ ĠColor Picker . get Dialog Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Btn ( change Name Color Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Username Ġcolor ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDefault Color ( saved State ?. name Color Ġ?: ĠColor . parse Color ( userData . name _ color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ok CL b Ġ{ Ġenvelope , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Handler . change Name Color ( name , Ġenvelope . color , Ġchange Name Color Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Dialog ( require Context ()) ĊĊĠĠĠĠĠĠĠ ĠColor Picker . get Dialog Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Btn ( change Desc Color Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Description Ġcolor ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDefault Color ( saved State ?. description Color Ġ?: ĠColor . parse Color ( userData . description _ color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ok CL b Ġ{ Ġenvelope , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Handler . change Description Color ( description , Ġenvelope . color , Ġchange Desc Color Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Dialog ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . P ) ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġimage Picker . handle Activity Result ( request Code , ĠresultCode , Ġdata ) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. findViewById < ImageView >( R . id . edit User Logo )?. setImage Bitmap ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Encoded Ġ= Ġfrom Bitmap To Base 6 4 ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Logo Editor . set Logo ( image Encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Handler . check All Added () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpasswd Area State Ġ= Ġedit Handler . get Pass wd Area State () ĊĠĠĠĠĠĠĠ Ġout State . put Boolean (" passwd Area ", Ġpasswd Area State ) ĊĠĠĠĠĠĠĠ Ġout State . putString (" logo ", Ġuser Logo Editor . get Logo (). first ) ĊĠĠĠĠĠĠĠ Ġout State . put Int (" name Color ", Ġname Color Btn . current TextColor ) ĊĠĠĠĠĠĠĠ Ġout State . put Int (" description Color ", Ġdescription Color Btn . current TextColor ) ĊĠĠĠ Ġ} Ċ }