package Ġcom . matrix . autore ply . model Ċ Ċ import Ġcom . matrix . autore ply . model . preferences . Preferences Manager Ċ import Ġcom . matrix . autore ply . model . Custom Rep lies Data Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġcom . matrix . autore ply . R Ċ import Ġorg . json . JSONArray Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . text . Editable Ċ import Ġorg . json . JSONException Ċ Ċ /** Ċ Ġ* ĠMan ages Ġuser Ġentered Ġcustom Ġauto Ġreply Ġtext Ġdata . Ċ Ġ*/ Ċ class ĠCustom Rep lies Data Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġthis AppContext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpreferences Manager : ĠPreferences Manager ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġconstructor () Ġ{} ĊĠĠĠ Ġprivate Ġconstructor ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis AppContext Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠ Ġ_ shared Prefs Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get SharedPreferences ( APP _ SHARED _ PRE FS , ĠActivity . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġpreferences Manager Ġ= ĠPreferences Manager . get Preferences Instance ( this AppContext !! ) ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġthis Ġcode Ġwhen Ġthe Ġsingleton Ġis Ġfirst Ġcreated . ĠAll Ġthe Ġtasks Ġthat Ġneeds Ġto Ġbe Ġdone ĊĠĠĠĠ Ġ* Ġwhen Ġthe Ġinstance Ġis Ġfirst Ġcreated Ġgoes Ġhere . ĠFor Ġexample , Ġset Ġspecific Ġkeys Ġbased Ġon Ġnew Ġinstall ĊĠĠĠĠ Ġ* Ġor Ġapp Ġupgrade , Ġetc . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġdefault Ġauto Ġreply Ġmessage Ġon Ġfirst Ġinstall ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ shared Prefs !!. contains ( KEY _ CUSTOM _ REPLY _ ALL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( this AppContext !!. getString ( R . string . auto _ reply _ default _ message )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStores Ġgiven Ġauto Ġreply Ġtext Ġto Ġthe Ġdatabase Ġand Ġsets Ġit Ġas Ġcurrent ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Reply ĠString Ġthat Ġneeds Ġto Ġbe Ġset Ġas Ġcurrent Ġauto Ġreply ĊĠĠĠĠ Ġ* Ġ@ return ĠString Ġthat Ġis Ġstored Ġin Ġthe Ġdatabase Ġas Ġcurrent Ġcustom Ġreply ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( custom Reply : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid Custom Reply ( custom Reply )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprevious Custom Rep lies Ġ= Ġall ĊĠĠĠĠĠĠĠ Ġprevious Custom Rep lies . put ( custom Reply ) ĊĠĠĠĠĠĠĠ Ġif Ġ( previous Custom Rep lies . length () Ġ> ĠMAX _ NUM _ CUSTOM _ REPLY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Custom Rep lies . remove ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġ_ shared Prefs !!. edit () ĊĠĠĠĠĠĠĠ Ġeditor . putString ( KEY _ CUSTOM _ REPLY _ ALL , Ġprevious Custom Rep lies . toString ()) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠ Ġreturn Ġcustom Reply ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStores Ġgiven Ġauto Ġreply Ġtext Ġto Ġthe Ġdatabase Ġand Ġsets Ġit Ġas Ġcurrent ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Reply ĠEdit able Ġthat Ġneeds Ġto Ġbe Ġset Ġas Ġcurrent Ġauto Ġreply ĊĠĠĠĠ Ġ* Ġ@ return ĠString Ġthat Ġis Ġstored Ġin Ġthe Ġdatabase Ġas Ġcurrent Ġcustom Ġreply ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( custom Reply : ĠEdit able ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( custom Reply Ġ!= Ġnull ) Ġset ( custom Reply . toString ()) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġlast Ġset Ġauto Ġreply Ġtext ĊĠĠĠĠ Ġ* ĠP refer Ġusing Ġ[ :: getOrElse ][ Custom Rep lies Data ] Ġto Ġavoid Ġ` null ` ĊĠĠĠĠ Ġ* Ġ@ return ĠAuto Ġreply Ġtext Ġor Ġ` null ` Ġif Ġnot Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Custom Rep lies Ġ= Ġall ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( all Custom Rep lies . length () Ġ> Ġ 0 ) Ġall Custom Rep lies [ all Custom Rep lies . length () Ġ- Ġ 1 ] Ġas ĠString Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġlast Ġset Ġauto Ġreply Ġtext Ġif Ġpresent Ġor Ġelse Ġreturn Ġ{@ param Ġdefault Text } ĊĠĠĠĠ Ġ* Ġ@ param Ġdefault Text Ġdefault Ġauto Ġreply Ġtext ĊĠĠĠĠ Ġ* Ġ@ return ĠReturn Ġauto Ġreply Ġtext Ġif Ġpresent Ġor Ġelse Ġreturn Ġgiven Ġ{@ param Ġdefault Text } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget OrElse ( default Text : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Text Ġ= Ġget () ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Text Ġ?: Ġdefault Text !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetText ToSend OrElse ( default Text ToSend : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Text Ġ= Ġget () ĊĠĠĠĠĠĠĠ Ġif Ġ( preferences Manager !!. is Append Aut ore ply At tribution Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Text Ġ+= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ this AppContext !!. getString ( R . string . sent _ using _ autore ply )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Text Ġ?: Ġdefault Text ToSend !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġall : ĠJSONArray ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġall Custom Rep lies Ġ= ĠJSONArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Custom Rep lies Ġ= ĠJSONArray (_ shared Prefs !!. getString ( KEY _ CUSTOM _ REPLY _ ALL , Ġ" [] ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġall Custom Rep lies ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ CUSTOM _ REPLY _ ALL Ġ= Ġ" user _ custom _ reply _ all " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ NUM _ CUSTOM _ REPLY Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ STR _ LENGTH _ CUSTOM _ REPLY Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRTL _ ALIGN _ IN VISIBLE _ CHAR Ġ= Ġ" Ġ\ u 2 0 0 F \ u 2 0 0 F \ u 2 0 0 E Ġ" Ġ// Ġhttps :// android . stack exchange . com / a / 1 9 0 0 2 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAPP _ SHARED _ PRE FS Ġ= ĠCustom Rep lies Data :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġ_ shared Prefs : ĠSharedPreferences ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġ_ INSTANCE : ĠCustom Rep lies Data ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠCustom Rep lies Data ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ INSTANCE Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ INSTANCE Ġ= ĠCustom Rep lies Data ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ INSTANCE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisValid Custom Reply ( user Input : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Input Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! user Input . isEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Input . length Ġ<= ĠMAX _ STR _ LENGTH _ CUSTOM _ REPLY ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisValid Custom Reply ( user Input : ĠEdit able ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Input Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Custom Reply ( user Input . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }