// ĠSPDX - License - Identifier : ĠMIT Ċ package Ġru . ns u . bo bro fon . easy ssh fs Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . appcompat . app . ActionBar Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . ListView Ċ Ċ /** Ċ Ġ* ĠFragment Ġused Ġfor Ġmanaging Ġinteractions Ġfor Ġand Ġpresentation Ġof Ġa Ġnavigation Ġdrawer . Ċ Ġ*/ Ċ class ĠNavigation Drawer Fragment Ġ: ĠEasy SSH FS Fragment (), ĠDraw er Status Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġpointer Ġto Ġthe Ġcurrent Ġcallbacks Ġinstance Ġ( the ĠActivity ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġnavigation Drawer Callbacks : ĠNavigation Drawer Callbacks ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġcomponent Ġthat Ġt ies Ġthe Ġaction Ġbar Ġto Ġthe Ġnavigation Ġdrawer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer Toggle : ĠAction Bar Drawer Toggle ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer Layout : ĠDraw er Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer ListView : ĠListView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfragment Container View : ĠView ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Selected Position Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfrom Saved InstanceState : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġuser Learn ed Drawer : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġval Ġis Drawer Open : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdrawer Layout . is Drawer Open ( fragment Container View ) ĊĊĠĠĠ Ġprivate Ġval Ġaction Bar : ĠAction Bar ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġapp Activity ?. support ActionBar ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRead Ġin Ġthe Ġflag Ġindicating Ġwhether Ġor Ġnot Ġthe Ġuser Ġhas Ġdemonstr ated Ġaware ness Ġof Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġdrawer . ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠ Ġuser Learn ed Drawer Ġ= Ġsp . getBoolean ( PRE F _ USER _ LE ARN ED _ DRAW ER , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Position Ġ= ĠsavedInstanceState . getInt ( STATE _ SELECTED _ POSITION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Saved InstanceState Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠIndic ate Ġthat Ġthis Ġfragment Ġwould Ġlike Ġto Ġinfluence Ġthe Ġset Ġof Ġactions Ġin Ġthe Ġaction Ġbar . ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSelect Ġeither Ġthe Ġdefault Ġitem Ġ( 0 ) Ġor Ġthe Ġlast Ġselected Ġitem . ĊĠĠĠĠĠĠĠ Ġselect Item ( current Selected Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawer ListView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . fragment _ navigation _ drawer , Ġcontainer , Ġfalse ) Ġas ĠListView ĊĠĠĠĠĠĠĠ Ġdrawer ListView . on ItemClickListener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdapter View . On ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> Ġselect Item ( position ) Ġ} ĊĠĠĠĠĠĠĠ Ġdrawer ListView . adapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Bar !!. the med Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ list _ item _ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . text 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . title _ section 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . title _ section 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . title _ section 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . title _ section 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdrawer ListView . setItem Checked ( current Selected Position , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdrawer ListView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsers Ġof Ġthis Ġfragment Ġmust Ġcall Ġthis Ġmethod Ġto Ġset Ġup Ġthe Ġnavigation Ġdrawer Ġinteractions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Id ĠĠ ĠThe Ġandroid : id Ġof Ġthis Ġfragment Ġin Ġits Ġactivity 's Ġlayout . ĊĠĠĠĠ Ġ* Ġ@ param Ġlayout ĠThe ĠDraw er Layout Ġcontaining Ġthis Ġfragment 's ĠUI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUp ( fragment Id : ĠInt , Ġlayout : Ġandroidx . drawer layout . widget . Drawer Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Container View Ġ= Ġactivity ?. findViewById ( fragment Id ) !! ĊĠĠĠĠĠĠĠ Ġdrawer Layout Ġ= Ġlayout ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġa Ġcustom Ġshadow Ġthat Ġoverlay s Ġthe Ġmain Ġcontent Ġwhen Ġthe Ġdrawer Ġopens ĊĠĠĠĠĠĠĠ Ġdrawer Layout . set Drawer Shadow ( R . drawable . drawer _ shadow , ĠGr avity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġup Ġthe Ġdrawer 's Ġlist Ġview Ġwith Ġitems Ġand Ġclick Ġlistener ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Ġ= Ġaction Bar !! ĊĠĠĠĠĠĠĠ Ġaction Bar . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġaction Bar . set Home Button Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAction Bar Drawer Toggle Ġt ies Ġtogether Ġthe Ġthe Ġproper Ġinteractions ĊĠĠĠĠĠĠĠ Ġ// Ġbetween Ġthe Ġnavigation Ġdrawer Ġand Ġthe Ġaction Ġbar Ġapp Ġicon . ĊĠĠĠĠĠĠĠ Ġdrawer Toggle Ġ= Ġobject Ġ: ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , Ġ/* Ġhost ĠActivity Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout , Ġ/* ĠDraw er Layout Ġobject Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ open , Ġ/* Ġ" open Ġdrawer " Ġdescription Ġfor Ġaccessibility Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ close Ġ Ġ/* Ġ" close Ġdrawer " Ġdescription Ġfor Ġaccessibility Ġ*/ ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Closed ( drawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Drawer Closed ( drawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. invalidate Options Menu () Ġ// Ġcalls Ġon Prepare Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Opened ( drawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Drawer Opened ( drawer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! user Learn ed Drawer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser Ġmanually Ġopened Ġthe Ġdrawer ; Ġstore Ġthis Ġflag Ġto Ġprevent Ġauto - show ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġnavigation Ġdrawer Ġautomatically Ġin Ġthe Ġfuture . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Learn ed Drawer Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp . edit (). put Boolean ( PRE F _ USER _ LE ARN ED _ DRAW ER , Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. invalidate Options Menu () Ġ// Ġcalls Ġon Prepare Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġhasn 't Ġ' learn ed ' Ġabout Ġthe Ġdrawer , Ġopen Ġit Ġto Ġintroduce Ġthem Ġto Ġthe Ġdrawer , ĊĠĠĠĠĠĠĠ Ġ// Ġper Ġthe Ġnavigation Ġdrawer Ġdesign Ġguidelines . ĊĠĠĠĠĠĠĠ Ġif Ġ(! user Learn ed Drawer Ġ&& Ġ! from Saved InstanceState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . open Drawer ( fragment Container View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDe fer Ġcode Ġdependent Ġon Ġrest or ation Ġof Ġprevious Ġinstance Ġstate . ĊĠĠĠĠĠĠĠ Ġdrawer Layout . post Ġ{ Ġdrawer Toggle . sync State () Ġ} ĊĠĠĠĠĠĠĠ Ġdrawer Layout . add Drawer Listener ( drawer Toggle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Selected Position Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: drawer ListView . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer ListView . setItem Checked ( position , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: drawer Layout . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . close Drawer ( fragment Container View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnavigation Drawer Callbacks ?. on Navigation Drawer ItemSelected ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġnavigation Drawer Callbacks Ġ= Ġapp Activity !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigation Drawer Callbacks Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Int ( STATE _ SELECTED _ POSITION , Ġcurrent Selected Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠ Ġ// ĠForward Ġthe Ġnew Ġconfiguration Ġthe Ġdrawer Ġtoggle Ġcomponent . ĊĠĠĠĠĠĠĠ Ġdrawer Toggle . on Configuration Changed ( new Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġdrawer Ġis Ġopen , Ġshow Ġthe Ġglobal Ġapp Ġactions Ġin Ġthe Ġaction Ġbar . ĠSee Ġalso ĊĠĠĠĠĠĠĠ Ġ// Ġshow Global Context ActionBar , Ġwhich Ġcontrols Ġthe Ġtop - left Ġarea Ġof Ġthe Ġaction Ġbar . ĊĠĠĠĠĠĠĠ Ġif Ġ( is Drawer Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Global Context ActionBar () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdrawer Toggle . on Options ItemSelected ( item ) Ġ|| Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPer Ġthe Ġnavigation Ġdrawer Ġdesign Ġguidelines , Ġupdates Ġthe Ġaction Ġbar Ġto Ġshow Ġthe Ġglobal Ġapp ĊĠĠĠĠ Ġ* Ġ' context ', Ġrather Ġthan Ġjust Ġwhat 's Ġin Ġthe Ġcurrent Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Global Context ActionBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Ġ= Ġaction Bar !! ĊĠĠĠĠĠĠĠ Ġaction Bar . set Display Show Title Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġaction Bar . setTitle ( R . string . app _ name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback s Ġinterface Ġthat Ġall Ġactivities Ġusing Ġthis Ġfragment Ġmust Ġimplement . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠNavigation Drawer Callbacks Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġan Ġitem Ġin Ġthe Ġnavigation Ġdrawer Ġis Ġselected . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Navigation Drawer ItemSelected ( position : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRemember Ġthe Ġposition Ġof Ġthe Ġselected Ġitem . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTATE _ SELECTED _ POSITION Ġ= Ġ" selected _ navigation _ drawer _ position " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF _ USER _ LE ARN ED _ DRAW ER Ġ= Ġ" navigation _ drawer _ learn ed " ĊĠĠĠ Ġ} Ċ } Ċ