package Ġcom . kp stv . xc lip per . data . model Ċ Ċ import Ġandroidx . room . Column Info Ċ import Ġandroidx . room . Entity Ċ import Ġandroidx . room . PrimaryKey Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . kp stv . bindings . Auto Generate List Converter Ċ import Ġcom . kp stv . bindings . Converter Type Ċ import Ġcom . kp stv . xc lip per . App Ċ import Ġcom . kp stv . xc lip per . data . converters . Date Converter Ċ import Ġcom . kp stv . xc lip per . data . converters . DateFormat Converter Ċ import Ġcom . kp stv . xc lip per . extensions . Clip Tag Map Ċ import Ġcom . kp stv . xc lip per . extensions . Logger Ċ import Ġcom . kp stv . xc lip per . extensions . enum Value OrNull Ċ import Ġcom . kp stv . xc lip per . extensions . plus Ċ import Ġcom . kp stv . xc lip per . extensions . utils . Clip Utils Ċ import Ġorg . json . JSONObject Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* Ċ Ċ @ Entity ( tableName Ġ= Ġ" table _ clip ") Ċ @ Auto Generate List Converter ( using Ġ= ĠConverter Type . G SON ) Ċ data Ġclass ĠClip ( ĊĠĠĠ Ġval Ġdata : ĠString , ĊĠĠĠ Ġval Ġtime : ĠDate , ĊĠĠĠ Ġval Ġis Pin ned : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġvar Ġtags : ĠList < Clip Tag Map >? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġ@ PrimaryKey ( auto Generate Ġ= Ġtrue ) ĊĠĠĠ Ġvar Ġid : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġtime String Ġ= Ġ" while Ġago " ĊĊĠĠĠ Ġfun Ġget Full Formatted Date (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat ( FULL _ DATA _ FORMAT , ĠLocale . getDefault ()). format ( time ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . w ( e , Ġ" Incorrect Ġdate Ġtime Ġformat : Ġ$ time ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" unknown " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFULL _ DATA _ FORMAT Ġ= Ġ" dd ĠM MM Ġy yyy , Ġhh : mm Ġa " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerates ĠClip Ġdata Ġalong Ġwith Ġthe Ġproperties Ġ" data ", Ġ" time " ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( json : ĠString ): ĠClip ? Ġ= Ġwith ( JSONObject ( json )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has (" data ")) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has (" time ")) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġthis [" data "]. toString () Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= ĠDate Converter . toDate FromString ( this [" time "]. toString ()) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġwill Ġupdate Ġthe Ġclip Ġwith Ġnew Ġtime Ġ& Ġtags . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( clip : ĠClip ): ĠClip Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag List : ĠList < Clip Tag Map > Ġ= Ġclip . tags Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclip . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= ĠCalendar . getInstance (). time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtag List Ġ+ ĠClip Utils . determine Tags ( clip . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġit . id Ġ= Ġclip . id Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( un encrypted Data : ĠString ): ĠClip Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfrom ( un encrypted Data , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerates ĠClip Ġwith Ġthe Ġproperties Ġ" data ", Ġ" time ", Ġ" tags " ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( un encrypted Data : ĠString , Ġtags : ĠList < Clip Tag Map >? ): ĠClip Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Map Ġ= Ġtags Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġun encrypted Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= ĠCalendar . getInstance (). time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pin ned Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtag Map Ġ+ ĠClip Utils . determine Tags ( un encrypted Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerates ĠClip Ġdata Ġalong Ġwith Ġthe Ġproperties Ġ" data ", Ġ" time " ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( json : ĠJson Element ): ĠClip ? Ġ= Ġparse ( json . toString ()) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġfunction Ġwhich Ġgenerates Ġ" time String " Ġproperty Ġfrom Ġ" time " ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġauto Fill ( clip : ĠClip ) Ġ= Ġwith ( clip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclip . time String Ġ= ĠDate Format Converter . get Formatted Date ( time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠClip Entry ( ĊĠĠĠ Ġval Ġdata : ĠString ?, ĊĠĠĠ Ġval Ġtime : ĠString ? Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( clip : ĠClip ): ĠClip Entry Ġ= Ġwith ( clip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClip Entry ( data , ĠDate Converter . from Date ToString ( time )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPartial Clip Tag Map ( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" tags ") ĊĠĠĠ Ġval Ġitems : ĠList < Clip Tag Map > Ġ// Ġmake Ġsure Ġit 's Ġnot Ġempty Ġwhen Ġchecked Ġfrom Ġquery . Ċ ) Ċ Ċ enum Ġclass ĠClip Tag Ġ{ ĊĠĠĠ ĠPH ONE , ĠDATE , ĠURL , ĠE MAIL , ĠMAP ; ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Value ( text : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum Value OrNull < Clip Tag >( text . toUpperCase ( Locale . ROOT )) ĊĠĠĠ Ġ} Ċ }