/******************************************************************************* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġby ĠMax ĠL v Ġ< max . c . lv @ gmail . com > ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġby ĠMy god ĠStudio Ġ< contact - shadow socks - android @ my god . be > Ġ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify ĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby ĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor ĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , ĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense ĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ Ġalong Ġwith Ġthis Ġprogram . ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. ĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ************************************************************************* ******/ Ċ Ċ package Ġcom . github . shadow socks Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . github . shadow socks . plugin . AlertDialog Fragment Ċ import Ġcom . github . shadow socks . plugin . Empty Ċ import Ġcom . github . shadow socks . plugin . Plugin Contract Ċ import Ġcom . github . shadow socks . preference . DataStore Ċ import Ġcom . github . shadow socks . utils . Action Ċ import Ġcom . github . shadow socks . utils . Single Instance Activity Ċ Ċ class ĠProfile Config Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ CODE _ PLUGIN _ HELP Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUn saved Changes Dialog Fragment Ġ: ĠAlertDialog Fragment < Empty , ĠEmpty >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠAlertDialog . Builder . prepare ( listener : ĠDialog Interface . OnClickListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . un saved _ changes _ prompt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . yes , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( R . string . no , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Neutral Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġchild Ġby Ġlazy Ġ{ Ġsupport FragmentManager . find Fragment ById ( R . id . content ) Ġas ĠProfile Config Fragment Ġ} ĊĠĠĠ Ġprivate Ġvar ĠreadOnly Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠSingle Instance Activity . register ( this ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠreadOnly Ġ= Ġintent . getBoolean Extra ( Action . EXTRA _ PROFILE _ READ ONLY , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . layout _ profile _ config ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById ( R . id . toolbar )) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Home As Up Indicator ( R . drawable . ic _ navigation _ close ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . on Support Navigate Up ()) Ġfinish () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( if Ġ( readOnly ) ĠR . menu . profile _ config _ menu _ readonly Ġelse ĠR . menu . profile _ config _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ) Ġ= Ġchild . on Options ItemSelected ( item ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( DataStore . dirty ) ĠUn saved Changes Dialog Fragment (). show ( child , ĠProfile Config Fragment . REQUEST _ UN SA VED _ CHANG ES ) ĊĠĠĠĠĠĠĠ Ġelse Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ!= ĠREQUEST _ CODE _ PLUGIN _ HELP ) Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( data ?. get CharSequence Extra ( Plugin Contract . EXTRA _ HELP _ MESSAGE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} Ċ } Ċ