/* Ċ Ġ* ĠDevelop ed ĠBy ĠSh ud ipt o ĠTr af der Ċ Ġ* Ġon Ġ 8 / 1 7 / 1 8 Ġ 1 2 : 4 9 ĠPM Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠSh ud ipt o ĠTr af der . Ċ Ġ*/ Ċ Ċ package Ġcom . i ams dt . p ssd . ui . main Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Search Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Search Recent Suggestions Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . appcompat . widget . Share Action Provider Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Intent Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . core . view . MenuItem Compat Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . google . android . material . navigation . Navigation View Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġcom . i ams dt . and roi dex t ension .* Ċ import Ġcom . i ams dt . p ssd . R Ċ import Ġcom . i ams dt . p ssd . database . Word Table Ċ import Ġcom . i ams dt . p ssd . ui . App About Activity Ċ import Ġcom . i ams dt . p ssd . ui . add . Add Activity Ċ import Ġcom . i ams dt . p ssd . ui . callback . ClickListener Ċ import Ġcom . i ams dt . p ssd . ui . color . Theme Utils Ċ import Ġcom . i ams dt . p ssd . ui . details . Details Activity Ċ import Ġcom . i ams dt . p ssd . ui . dev . Developer Activity Ċ import Ġcom . i ams dt . p ssd . ui . fav our ite . F avour ite Activity Ċ import Ġcom . i ams dt . p ssd . ui . flash . Flash Card Activity Ċ import Ġcom . i ams dt . p ssd . ui . search . My Suggestion Provider Ċ import Ġcom . i ams dt . p ssd . ui . settings . Settings Activity Ċ import Ġcom . i ams dt . p ssd . utils . Bookmark Ċ import Ġcom . i ams dt . p ssd . utils . Constants . Companion . Privacy Pol ices Ċ import Ġcom . i ams dt . p ssd . utils . Restore Data Ċ import Ġcom . i ams dt . p ssd . utils . Settings Utils Ċ import Ġcom . i ams dt . p ssd . utils . Sp Utils Ċ import Ġcom . i ams dt . p ssd . utils . sync . Sync Task Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . app _ bar _ main .* Ċ import Ġkotlinx . android . synt hetic . main . content _ details .* Ċ import Ġkotlinx . android . synt hetic . main . content _ main .* Ċ import Ġorg . k oin . android . ext . android . inject Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġtim ber . log . Tim ber Ċ import Ġuk . co . sam uel wall . material tap target prompt . Material Tap Target Prompt Ċ import Ġuk . co . sam uel wall . material tap target prompt . Material Tap Target Sequence Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity (), ĊĠĠĠĠĠĠĠ ĠNavigation View . On Navigation ItemSelected Listener , ĊĠĠĠĠĠĠĠ ĠClick Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsync Task : ĠSync Task Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġsettings Utils : ĠSettings Utils Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġsp Utils : ĠSp Utils Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain VM Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġval Ġrestore Data : ĠRestore Data Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġvar Ġsuggestions : ĠSearch Recent Suggestions ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġtheme Request Code Ġ= Ġ 1 2 1 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Search View : ĠSearch View ĊĊĠĠĠ Ġprivate Ġvar Ġtwo Pen UI : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Query : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ// share ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshare Action Provider : ĠShare Action Provider ĊĊĠĠĠ Ġ// menu ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmenu Item : ĠMenuItem ĊĊĠĠĠ Ġprivate Ġvar Ġis Book marked Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġword Ġ= ĠWord Table () ĊĊĠĠĠ Ġ// text Ġsize ĊĠĠĠ Ġvar Ġsize Ġ= Ġ 1 8 F ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠTheme Utils . initialize ( this ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( main _ toolbar ) ĊĊĠĠĠĠĠĠĠ Ġmain R cv . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠMain Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġmain R cv . adapter Ġ= Ġadapter Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġde co Ġ= ĠDiv ider Item Decoration ( this , ĠDiv ider Item Decoration . VERTICAL ) Ċ // ĠĠĠĠĠĠĠ Ġ@ Suppress (" NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS ") Ċ // ĠĠĠĠĠĠĠ Ġde co . set Drawable ( get Drawable ( der cor ation )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠComplete : Ġ 8 / 2 2 / 1 8 Ġadd Ġitem Ġdecoration Ċ // ĠĠĠĠĠĠĠ Ġmain R cv . addItem Decoration ( deco ) ĊĊĠĠĠĠĠĠĠ Ġ// tell Ġthe ĠviewModel Ġwith Ġempty Ġsearch ĊĠĠĠĠĠĠĠ ĠviewModel . submit Query () ĊĠĠĠĠĠĠĠ ĠviewModel . my LiveData . observe ( this , ĠObserver Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" List ĠSize : Ġ${ list . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// for Ġtwo Ġpen Ġui ĊĠĠĠĠĠĠĠ Ġif Ġ( findViewById < Frame Layout >( R . id . details _ container ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Pen UI Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Single Word ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( two Pen UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Word ĠID :${ word . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . single Word . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let (:: details UI ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . single Live Event . observe ( this , ĠObserver Ġ{ Ġbookmark Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(:: menuItem . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Book marked Ġ= Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook mark . SET Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast y (" Book marked ", ĠToast Type . SUCCESS FUL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . setIcon ( R . drawable . ic _ like _ fill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook mark . DELETE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast y (" Bookmark Ġremoved ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . setIcon ( R . drawable . ic _ like _ blank ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ ĠviewModel . search Event . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( two Pen UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetails UI ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Status Ġis Ġtrue ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠDetails Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , Ġit . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// save Ġrecent Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Recent Query ( it . word ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast y (" Word Ġnot Ġfound ", ĠToast Type . WARNING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(:: m Search View . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . set Query ( m Query , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomplete : Ġ 8 / 2 2 / 1 8 Ġadd Ġrandom Ġlayout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠRandom Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show ( support FragmentManager , Ġ" Random ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// rand Ġshown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan a Ġ= ĠFirebase Analytics . getInstance ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" search ", Ġ" Random Ġdata Ġshown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan a . log Event (" Random _ Data ", Ġbundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuggestions Ġ= ĠSearch Recent Suggestions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Suggestion Provider . AUTH ORITY , ĠMy Suggestion Provider . MODE ) ĊĠĠĠĠĠĠĠ Ġhandle Search ( intent ) ĊĊĠĠĠĠĠĠĠ Ġsetup Search View () ĊĊĠĠĠĠĠĠĠ Ġ// show Ġnotification ĊĠĠĠĠĠĠĠ Ġ// get Remote Data Status ( this , ĠpackageName ) ĊĊĠĠĠĠĠĠĠ Ġ// restore Ġdata ĊĠĠĠĠĠĠĠ Ġrestore Data () ĊĊĠĠĠĠĠĠĠ Ġval Ġtoggle Ġ= Ġobject Ġ: ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġdrawer _ layout , Ġmain _ toolbar , ĠR . string . navigation _ drawer _ open , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ close ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Opened ( drawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Drawer Opened ( drawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠInput Method Manager ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . hide Soft Input From Window ( current Focus ?. window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdrawer _ layout . add Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠ Ġtoggle . sync State () ĊĊĠĠĠĠĠĠĠ Ġnav _ view . set Navigation ItemSelected Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sp Utils . is App Run First Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtap Target () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp Utils . is App Run First Time Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtap Target () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Tap Target Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Prompt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Tap Target Prompt . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTarget ( fab ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Primary Text (" Random ĠWord ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Secondary Text (" When Ġyou Ġclick Ġthis Ġicon Ġit Ġwill Ġbe Ġshown Ġa Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" random Ġword Ġevery Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Dismiss ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Capture Touch Event Outside Prompt ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Capture Touch Event On F ocal ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// set Ġsearch Ġview ĊĠĠĠ Ġprivate Ġfun Ġsetup Search View () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Search View Ġ= Ġsearch View ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Manager Ġ= Ġget System Service ( Context . SEARCH _ SERVICE ) Ġas ĠSearch Manager ĊĠĠĠĠĠĠĠ Ġm Search View . set Search able Info ( search Manager . get Search able Info ( component Name )) ĊĊĠĠĠĠĠĠĠ Ġm Search View . is Query Ref inement Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġm Search View . setOn Suggestion Listener ( object Ġ: ĠSearch View . On Suggestion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Suggestion Select ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" call ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Suggestion Click ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" call ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected View Ġ= Ġsearch View . suggestions Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġselected View . getItem ( position ) Ġas ĠCursor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcursor . getColumnIndex OrThrow ( Search Manager . SU G GEST _ COLUMN _ TEXT _ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . set Query ( cursor . getString ( index ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġm Search View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" call ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . submit ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// search Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Query Ġ= Ġquery Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan a Ġ= ĠFirebase Analytics . getInstance ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" search ", Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan a . log Event ( Firebase Analytics . Event . SEARCH , Ġbundle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" call ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Text ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" new Ġtext Ġis Ġ$ new Text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . submit Query ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Query Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab . g one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġm Search View . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Show Keyboard () Ġ&& Ġ:: m Search View . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Search View . clear Focus () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Search View . find Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Search View . on Action View Expanded () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( two Pen UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Single Word ( id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠDetails Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Details Ġdata */ ĊĠĠĠ Ġprivate Ġfun Ġdetails UI ( word Table : ĠWord Table ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// update Ġui ĊĠĠĠĠĠĠĠ Ġif Ġ( word . id Ġ!= Ġword Table . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails _ word ?. add Text ( word Table . word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails _ des ?. add Text ( word Table . des ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ" Reference : Ġ${ word Table . reference }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails _ ref . add Text ( r ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġword Ġ= Ġword Table . copy () ĊĊĠĠĠĠĠĠĠ Ġis Book marked Ġ= Ġword Table . bookmark ĊĊĠĠĠĠĠĠĠ Ġreset S ap () ĊĊĠĠĠĠĠĠĠ Ġ// update Ġicon ĊĠĠĠĠĠĠĠ Ġif Ġ(:: menuItem . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Book marked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . setIcon ( R . drawable . ic _ like _ fill ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . setIcon ( R . drawable . ic _ like _ blank ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Restore Ġdata */ ĊĠĠĠ Ġprivate Ġfun Ġrestore Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠRestore Data . io Status . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// only Ġone Ġtype Ġprovide ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast y ( model . message , ĠToast Type . SUCCESS FUL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġrestore Data Helper ( restore Data , Ġthis , Ġsp Utils ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Recent Query ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuggestions ?. save Recent Query ( query , Ġnull ) ĊĠĠĠĠĠĠĠ Ġm Query Ġ= Ġquery ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Search ( intent ) ĊĠĠĠĠĠĠĠ ĠTim ber . i (" voice Ġsearch ") ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Search ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ SEARCH Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġintent . getString Extra ( Search Manager . QUERY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomplete : Ġ 6 / 1 4 / 2 0 1 8 Ġsearch ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . submit ( query ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Search ĠCalled ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Query Ġ= Ġquery Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer _ layout . is Drawer Open ( Gravity Compat . START ) Ġ-> Ġdrawer _ layout . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab . is G one Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġsync Task . initialize ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction text Ġ= Ġmenu . find Item ( R . id . action _ txt ) ĊĠĠĠĠĠĠĠ Ġval Ġshare Menu Ġ= Ġmenu . find Item ( R . id . share ) ĊĠĠĠĠĠĠĠ Ġmenu Item Ġ= Ġmenu . find Item ( R . id . action _ fav our ite ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! two Pen UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction text . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Menu . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Book marked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . setIcon ( R . drawable . ic _ like _ fill ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Action Provider Ġ= ĠMenuItem Compat . getAction Provider ( share Menu ) Ġas ĠShare Action Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Action Provider . set Share Intent ( create Share Intent ( word )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ fav our ite Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . request Bookmark ( word . id , Ġis Book marked ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ clear Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuggestions ?. clear History () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ txt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Increase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ ĠIncrease Ġtext Ġsize Ġon Ġtablet Ġmode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtext Increase () Ġ{ ĊĠĠĠĠĠĠĠ Ġsize ++ ĊĠĠĠĠĠĠĠ Ġdetails _ des . text Size Ġ= Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset S ap () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: share Action Provider . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Intent . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġ" https :// play . google . com / store / apps / details ? id = com . i ams dt . p ssd " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Ġ= Ġ"${ word . word }:${ word . des } Ġ-> Ġ${ getString ( R . string . app _ name )}" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G play -$ link " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ TEXT , Ġshare ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Action Provider . set Share Intent ( share Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigation ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġnavigation Ġview Ġitem Ġclicks Ġhere . ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ fav our ite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Activity < F avour ite Activity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ card Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Activity < Flash Card Activity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Activity < Add Activity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ settings Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// to Next Activity ( Settings Activity :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( Settings Activity . create Intent ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Request Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ notice Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAck nowledge Sheet () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show ( support FragmentManager , Ġ" ack nowledge ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ pol ice Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Tab ( Privacy Pol ices ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ use Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠT ms Sheet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show ( support FragmentManager , Ġ" t ms ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Activity < App About Activity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ developer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Activity < Developer Activity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdrawer _ layout . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// re create Ġthe Ġactivity ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġtheme Request Code Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAppCompatActivity . custom Tab ( link : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCustom Tabs Intent . Builder () ĊĠĠĠĠĠĠĠ Ġbuilder . set Toolbar Color ( R . attr . color Primary ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Show Title ( true ) ĊĠĠĠĠĠĠĠ Ġbuilder . add Default Share MenuItem () ĊĠĠĠĠĠĠĠ Ġ// builder . set Close Button Icon ( Bitmap Factory . decode Resource ( ĊĠĠĠĠĠĠĠ Ġ// resources , ĠR . drawable . dialog _ back )) ĊĠĠĠĠĠĠĠ Ġval Ġcustom Tabs Intent Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġcustom Tabs Intent . launch Url ( this , ĠUri . parse ( link )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġis Show Keyboard () Ġ= Ġsettings Utils . search Icon Ċ } Ċ