package Ġcom . shal atan . dev jo ke . ui . overview Ċ Ċ 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 Ġandroidx . core . view . children Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Extras Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . shal atan . dev jo ke . R Ċ import Ġcom . shal atan . dev jo ke . databinding . Fragment Overview Binding Ċ import Ġcom . shal atan . dev jo ke . util . Zoom Out Page Transformer Ċ import Ġcom . shal atan . dev jo ke . util . share View Ċ Ċ const Ġval ĠTAG Ġ= Ġ" Overview Fragment Ġ: Ġ" Ċ const Ġval ĠVIEW _ P AGER _ POSITION Ġ= Ġ" com . shal atan . dev jo ke . VIEW _ P AGER _ POSITION " Ċ const Ġval Ġshare Text Ġ= ĊĠĠĠ Ġ" Install Ġhttps :// play . google . com / store / apps / details ? id = com . shal atan . dev jo ke Ġfor Ġmore Ġsuch ĠDev J okes Ġand Ġshare Ġyour ĠDev J okes / P uns Ġwith Ġother Ġde vs " Ċ Ċ class ĠOverview Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel Factory : ĠOverview ViewModel Factory ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠOverview ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġj okes ViewPager : ĠView Pager 2 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Overview Binding ĊĠĠĠ Ġprivate Ġvar Ġis Red Active Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġview Pager Position Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Overview Binding . inflate ( in flater ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Factory Ġ= ĠOverview ViewModel Factory ( require NotNull ( activity ). application ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , ĠviewModel Factory ). get ( Overview ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġj okes ViewPager Ġ= Ġbinding . j okes Viewer ĊĠĠĠĠĠĠĠ Ġval Ġjo ke Adapter Ġ= ĠJo ke Adapter () ĊĠĠĠĠĠĠĠ Ġj okes ViewPager . adapter Ġ= Ġjo ke Adapter ĊĠĠĠĠĠĠĠ Ġj okes ViewPager . set Page Transformer ( Zoom Out Page Transformer ()) ĊĊĠĠĠĠĠĠĠ Ġ// observe Ġj okes Data Ġand Ġsubmit Ġit Ġto Ġview Pager Ġadapter ĊĠĠĠĠĠĠĠ ĠviewModel . j okes Data . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . let ( jo ke Adapter :: submit List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" J okes ĠF etched ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// when Ġsc rolled , Ġcheck Ġif Ġnew Ġjo ke Ġis Ġalready Ġlik ed Ġby Ġthe Ġuser ĊĠĠĠĠĠĠĠ Ġj okes ViewPager . register On Page Change Callback ( object Ġ: ĠView Pager 2 . On Page Change Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset Pixels : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager Position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Jo ke Saved In Database ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Button Like able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// observe Ġis Jo ke Exist In Db Ġto Ġcheck Ġif Ġcurrent Ġjo ke Ġis Ġalready Ġlik ed Ġor Ġnot ĊĠĠĠĠĠĠĠ ĠviewModel . is Jo ke Exist In Db . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Button Dis Like able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Button Like able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// save Ġthe Ġcurrent Ġjo ke Ġand Ġmake Ġnecessary Ġchanges Ġto Ġbutton ĊĠĠĠĠĠĠĠ Ġbinding . like Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjo ke Position Ġ= Ġj okes ViewPager . currentItem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Red Active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Jo ke ( jo ke Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( it , Ġ" Jo ke ĠRemoved ĠFrom ĠF avour ites ", ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Tint ( resources . getColor ( R . color . dark _ green )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Overview Fragment Ġ: Ġ", Ġ" deleted Ġjo ke ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Button Like able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Jo ke ( jo ke Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( it , Ġ" Jo ke ĠAdded ĠTo ĠF avour ites ", ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Tint ( resources . getColor ( R . color . dark _ green )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Overview Fragment Ġ: Ġ", Ġ" inserted Ġjo ke ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Button Dis Like able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// share Ġcar View Ġas Ġimage ĊĠĠĠĠĠĠĠ Ġbinding . share Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Card View ( binding . j okes Viewer . children . single ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . saved List Button . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġtrue ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( Overview Fragment Directions . action Overview Fragment To F avour ite Jo ke Fragment ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . add Jo ke Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextras Ġ= ĠFragment Navigator Extras ( binding . j okes Viewer Ġto Ġ" card _ transition ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirections Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOverview Fragment Directions . action Overview Fragment To Submit Jo ke Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( directions , Ġextras ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// call Ġthis Ġfunction Ġwhere ver Ġnecessary ĊĠĠĠ Ġprivate Ġfun Ġscroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. get SharedPreferences ( VIEW _ P AGER _ POSITION , ĠContext . MODE _ PRIVATE ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġview Pager Position Ġ= Ġshared Preferences . getInt ( VIEW _ P AGER _ POSITION , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG Ġ+ Ġ" Enter ĠPosition Ġ- Ġ", Ġview Pager Position . toString ()) ĊĠĠĠĠĠĠĠ Ġj okes ViewPager . setCurrent Item ( view Pager Position , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// save Ġthe Ġcurrent Ġposition Ġof Ġview Pager ĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. get SharedPreferences ( VIEW _ P AGER _ POSITION , ĠContext . MODE _ PRIVATE ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwith ( shared Preferences . edit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( VIEW _ P AGER _ POSITION , Ġview Pager Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG Ġ+ Ġ" Exit ĠPosition Ġ- Ġ", Ġshared Preferences . getInt ( VIEW _ P AGER _ POSITION , Ġ 0 ). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġset Ġthe Ġdrawable Ġto Ġred Ġheart Ġwhen Ġuser Ġlikes Ġthe Ġcurrent Ġjo ke Ġor Ġcurrent Ġjo ke Ġwas Ġalready Ġlik ed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake Button Dis Like able () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . like Button . setImage Resource ( R . drawable . ic _ red _ heart ) ĊĠĠĠĠĠĠĠ Ġis Red Active Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġset Ġthe Ġdrawable Ġto Ġwhite Ġheart Ġwhen Ġuser Ġun likes Ġthe Ġjo ke Ġor Ġcurrent Ġjo ke Ġwas Ġnot Ġalready Ġlik ed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake Button Like able () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . like Button . setImage Resource ( R . drawable . ic _ heart ) ĊĠĠĠĠĠĠĠ Ġis Red Active Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġfunction Ġto Ġcreate Ġa Ġbitmap Ġof Ġthe Ġview Ġand Ġsave Ġit Ġin Ġinternal Ġstorage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshare Card View ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġshare View ( require Context (), Ġview ) ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠ Ġshare Intent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ STREAM , Ġuri ) ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ TEXT , Ġshare Text ) ĊĠĠĠĠĠĠĠ Ġshare Intent . type Ġ= Ġ" image / png " ĊĠĠĠĠĠĠĠ ĠstartActivity ( share Intent ) ĊĠĠĠ Ġ} Ċ }