package Ġde . raph ae le b ner . room database backup . sample Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġde . raph ae le b ner . room database backup . core . Room Backup Ċ import Ġde . raph ae le b ner . room database backup . sample . database . main . F ruit Database Ċ import Ġde . raph ae le b ner . room database backup . sample . database . table . fruit . F ruit Ċ import Ġde . raph ae le b ner . room database backup . sample . database . table . fruit . F ruit ListAdapter Ċ import Ġde . raph ae le b ner . room database backup . sample . database . table . fruit . F ruit ViewModel Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ġ< p > Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠR aph ael ĠE b ner Ċ Ġ* Ġ< p > Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ġ< p > Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ġ< p > Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ class ĠMain Fragment Ġ: ĠFragment (), ĠF ruit ListAdapter . On ItemClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfruit ViewModel : ĠF ruit ViewModel ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" debug _ MainActivity " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . activity _ main , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- Link Ġitems Ġto ĠLayout ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView : ĠRecyclerView Ġ= Ġroot . findViewById ( R . id . rv _ fr uits ) ĊĠĠĠĠĠĠĠ Ġval Ġfab : ĠFloating ActionButton Ġ= Ġroot . findViewById ( R . id . btn _ add F ruit ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Backup : ĠButton Ġ= Ġroot . findViewById ( R . id . btn _ backup ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Restore : ĠButton Ġ= Ġroot . findViewById ( R . id . btn _ restore ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Properties : ĠButton Ġ= Ġroot . findViewById ( R . id . btn _ properties ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Language : ĠButton Ġ= Ġroot . findViewById ( R . id . btn _ switch _ language ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Fragment Activity : ĠButton Ġ= Ġroot . findViewById ( R . id . btn _ switch _ fragment _ activity ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Backup Location : ĠButton Ġ= Ġroot . findViewById ( R . id . btn _ backup _ location ) ĊĠĠĠĠĠĠĠ Ġval Ġtv F ru its : ĠTextView Ġ= Ġroot . findViewById ( R . id . tv _ fr uits ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠF ruit ListAdapter ( this ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( root . context ) ĊĊĠĠĠĠĠĠĠ Ġfruit ViewModel Ġ= ĠViewModel Provider ( this )[ F ruit ViewModel :: class . java ] ĊĊĠĠĠĠĠĠĠ Ġfruit ViewModel . all F ruit . observe ( view Lifecycle Owner ) Ġ{ Ġfru its Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( fr uits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtv F ru its . text Ġ= Ġ" F ru its ĠList Ġ( Kotlin ĠFragment )" ĊĠĠĠĠĠĠĠ Ġbtn Language . text Ġ= Ġ" switch Ġto ĠJava " ĊĠĠĠĠĠĠĠ Ġbtn Fragment Activity . text Ġ= Ġ" switch Ġto ĠActivity " ĊĊĠĠĠĠĠĠĠ Ġval Ġshared Prefs Ġ= Ġ" sample Backup " ĊĠĠĠĠĠĠĠ Ġval Ġsp Encrypt Backup Ġ= Ġ" encrypt Backup " ĊĠĠĠĠĠĠĠ Ġval Ġsp Storage Location Ġ= Ġ" storage Location " ĊĠĠĠĠĠĠĠ Ġval Ġsp Enable Log Ġ= Ġ" enable Log " ĊĠĠĠĠĠĠĠ Ġval Ġsp Use Max File Count Ġ= Ġ" use Max File Count " ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġroot . context . get SharedPreferences ( shared Prefs , ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- FAB ĠAdd ĠButton ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( root . context , ĠActivity Add Edit F ruit :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Add Edit Activity . launch ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- go Ġto ĠJava ĠFragment ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġbtn Language . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( root . context , ĠFragment Activity Java :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- go Ġto ĠKotlin ĠActivity Ġclass ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġbtn Fragment Activity . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( root . context , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġencrypt Backup Ġ= Ġshared Preferences . getBoolean ( sp Encrypt Backup , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġstorage Location Ġ= Ġshared Preferences . getInt ( sp Storage Location , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġenable Log Ġ= Ġshared Preferences . getBoolean ( sp Enable Log , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġuse Max File Count Ġ= Ġshared Preferences . getBoolean ( sp Use Max File Count , Ġfalse ) ĊĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- set ĠProperties ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġbtn Properties . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmulti Items Ġ= ĠarrayOf (" Encrypt ĠBackup ", Ġ" enable ĠLog ", Ġ" use Ġmax File Count Ġ= Ġ 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchecked Items Ġ= Ġboolean ArrayOf ( encrypt Backup , Ġenable Log , Ġuse Max File Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( root . context ). setTitle (" Change ĠProperties "). set Positive Button (" Ok ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Multi - choice Ġitems Ġ( initialized Ġwith Ġchecked Ġitems ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Multi Choice Items ( multi Items , Ġchecked Items ) Ġ{ Ġ_, Ġwhich , Ġchecked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRespond Ġto Ġitem Ġchosen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt Backup Ġ= Ġchecked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean ( sp Encrypt Backup , Ġencrypt Backup ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Log Ġ= Ġchecked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean ( sp Enable Log , Ġenable Log ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Max File Count Ġ= Ġchecked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean ( sp Use Max File Count , Ġuse Max File Count ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- set ĠBackup ĠLocation ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġbtn Backup Location . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstorage Items Ġ= ĠarrayOf (" Internal ", Ġ" External ", Ġ" Custom ĠDialog ", Ġ" Custom ĠFile ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( root . context ). setTitle (" Change ĠStorage "). set Positive Button (" Ok ", Ġnull ). set Single Choice Items ( storage Items , Ġstorage Location Ġ- Ġ 1 ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Location Ġ= ĠRoom Backup . BACKUP _ FILE _ LOCATION _ INTERNAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Int ( sp Storage Location , Ġstorage Location ). apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Location Ġ= ĠRoom Backup . BACKUP _ FILE _ LOCATION _ EXTERNAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Int ( sp Storage Location , Ġstorage Location ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Location Ġ= ĠRoom Backup . BACKUP _ FILE _ LOCATION _ CUSTOM _ DIALOG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Int ( sp Storage Location , Ġstorage Location ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Location Ġ= ĠRoom Backup . BACKUP _ FILE _ LOCATION _ CUSTOM _ FILE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Int ( sp Storage Location , Ġstorage Location ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment Activity Ġ= Ġ( activity Ġas ĠFragment Activity ) ĊĠĠĠĠĠĠĠ Ġval Ġbackup Ġ= Ġfragment Activity . backup ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- Backup Ġand ĠRestore ĠDatabase ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġbtn Backup . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . backup Location ( storage Location ). backup Location Custom File ( File ("${ root . context . files Dir }/ database backup / ge iles Backup . sqlite 3 ")). database ( F ruit Database . getInstance ( root . context )). enable Log Debug ( enable Log ). backup Is Encrypted ( encrypt Backup ). custom Encrypt Password ( MainActivity . SECRET _ PASSWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// max File Count : Ġelse Ġ 1 0 0 0 Ġbecause Ġi Ġcannot Ġsur round Ġit Ġwith Ġif Ġcondition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max File Count ( if Ġ( use Max File Count ) Ġ 5 Ġelse Ġ 1 0 0 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Listener Ġ{ Ġsuccess , Ġmessage , Ġexit Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" success : Ġ$ success , Ġmessage : Ġ$ message , Ġexit Code : Ġ$ exit Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . context , Ġ" success : Ġ$ success , Ġmessage : Ġ$ message , Ġexit Code : Ġ$ exit Code ", ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġrestart App ( Intent ( root . context , ĠFragment Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. backup () ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn Restore . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . backup Location ( storage Location ). backup Location Custom File ( File ("${ root . context . files Dir }/ database backup / ge iles Backup . sqlite 3 ")). database ( F ruit Database . getInstance ( root . context )). enable Log Debug ( enable Log ). backup Is Encrypted ( encrypt Backup ). custom Encrypt Password ( MainActivity . SECRET _ PASSWORD ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Listener Ġ{ Ġsuccess , Ġmessage , Ġexit Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" success : Ġ$ success , Ġmessage : Ġ$ message , Ġexit Code : Ġ$ exit Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . context , Ġ" success : Ġ$ success , Ġmessage : Ġ$ message , Ġexit Code : Ġ$ exit Code ", ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġrestart App ( Intent ( root . context , ĠFragment Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* --------------------- when Ġreturning Ġfrom Ġ| Activity Add Edit F ruit | Ġdo Ġsomething ---------------- ---------- */ ĊĠĠĠ Ġprivate Ġval Ġopen Add Edit Activity Ġ= Ġregister For Activity Result ( Activity Result Contracts . Start Activity For Result ()) Ġ{ Ġresult Ġ-> ĊĊĠĠĠĠĠĠĠ Ġ/* --------------------- If Ġthe ĠRequest Ġwas Ġsuccessful ---------------- ---------- */ ĊĠĠĠĠĠĠĠ Ġif Ġ( result . result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġdata !!. getString Extra ( Activity Add Edit F ruit . EXTRA _ NAME ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġdata . getInt Extra ( Activity Add Edit F ruit . EXTRA _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete F ruit Ġ= Ġdata . getBoolean Extra ( Activity Add Edit F ruit . EXTRA _ DELETE _ FR UIT , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfruit Ġ= ĠF ruit ( name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfruit ViewModel . insert ( fruit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfruit . id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete F ruit ) Ġfruit ViewModel . delete ( fruit ) Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfruit ViewModel . update ( fruit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* --------------------- on Item Clicked Ġlistener ---------------- ---------- */ ĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( fruit : ĠF ruit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( require Context (), ĠActivity Add Edit F ruit :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Activity Add Edit F ruit . EXTRA _ ID , Ġfruit . id ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Activity Add Edit F ruit . EXTRA _ NAME , Ġfruit . name ) ĊĠĠĠĠĠĠĠ Ġopen Add Edit Activity . launch ( intent ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ