package Ġio . github . tak us an 2 3 . ka is end on mk 2 . Bottom Fragment Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Switch Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ import Ġio . github . tak us an 2 3 . ka is end on mk 2 . MainActivity Ċ import Ġio . github . tak us an 2 3 . ka is end on mk 2 . R Ċ import Ġkotlinx . android . synt hetic . main . bottom _ fragment _ timeline _ setting .* Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠTL è¨Ńå®ļ Bottom Fragment ãĢĤ çĶ» åĥı éĿŀ è¡¨ç¤º ãģªãģ© Ċ Ġ* Ġ*/ Ċ class ĠTime Line Setting Bottom Sheet Ġ: ĠBottom Sheet Dialog Fragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġpref Setting : ĠSharedPreferences ĊĊĠĠĠ Ġ// Ġ èĥĮæĻ¯ çĶ» åĥı ãĥª ãĤ¯ ãĤ¨ ãĤ¹ãĥĪ ãĤ³ãĥ¼ãĥī ĊĠĠĠ Ġval ĠREQ UR ST _ CODE Ġ= Ġ 8 1 6 ĊĊĠĠĠ Ġ// ĠãĥķãĤ © ãĥ³ãĥĪ ãĥª ãĤ¯ ãĤ¨ ãĤ¹ãĥĪ ãĤ³ãĥ¼ãĥī ĊĠĠĠ Ġval ĠF ONT _ REQUEST _ CODE Ġ= Ġ 1 1 4 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . bottom _ fragment _ timeline _ setting , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġpref Setting Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è¨Ńå®ļ éģ© çĶ¨ ãĥ» èªŃãģ¿ è¾¼ ãģ¿ ĊĠĠĠĠĠĠĠ Ġinit Setting Switch ( bottom _ fragment _ timeline _ setting _ streaming , Ġ" timeline _ setting _ disable _ streaming ") Ġ// Ġ ãĤ¹ãĥĪ ãĥª ãĥ¼ãĥ Ł ãĥ³ãĤ° ĊĠĠĠĠĠĠĠ Ġinit Setting Switch ( bottom _ fragment _ timeline _ setting _ image , Ġ" timeline _ setting _ image _ hide ") Ġ// Ġ çĶ» åĥı ãĤĴ éĿŀ è¡¨ç¤º ĊĠĠĠĠĠĠĠ Ġinit Setting Switch ( bottom _ fragment _ timeline _ setting _ mobile _ image , Ġ" timeline _ setting _ image _ hide _ mobile ") Ġ// Ġãĥ ¢ ãĥĲ ãĤ¤ãĥ« ãĥĩãĥ¼ãĤ¿ åĽŀ ç· ļ ãģª ãĤī éĿŀ è¡¨ç¤º ĊĠĠĠĠĠĠĠ Ġinit Setting Switch ( bottom _ fragment _ timeline _ setting _ gif , Ġ" timeline _ setting _ image _ gif _ stop ") Ġ// ĠGIF ãĤ¢ ãĥĭ ãĥ¡ æŃ¢ ãĤģ ãĤĭ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ èĥĮæĻ¯ çĶ» åĥı ĊĠĠĠĠĠĠĠ Ġbottom _ fragment _ timeline _ setting _ background _ set . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQ UR ST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbottom _ fragment _ timeline _ setting _ background _ reset . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Background Img () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠãĥķãĤ © ãĥ³ãĥĪ è¨Ńå®ļ ĊĠĠĠĠĠĠĠ Ġbottom _ fragment _ timeline _ setting _ font _ set . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" font /* " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠF ONT _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbottom _ fragment _ timeline _ setting _ font _ reset . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Font () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠãĥķãĤ © ãĥ³ãĥĪ åīĬéĻ¤ ĊĠĠĠ Ġprivate Ġfun Ġdelete Font () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("${ context ?. get External Files Dir ( null ) }/ font . ttf ") ĊĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠMainActivity )?. getTime Line Fragment ()?. time Line Adapter ?. font Ġ= ĠType face . DEFAULT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQ UR ST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħĪ å®¢ ãģ¯ æ¶Ī ãģĻ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Background Img () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¢ãĥĹãĥª åĽº æľī ãĥĩãĤ£ ãĥ¬ ãĤ¯ãĥĪ ãĥª ãģ« ãĤ³ ãĥĶ ãĥ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata ?. data Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("${ context ?. get External Files Dir ( null ) }/ background ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . mkdir () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥĶ ãĥ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage File Ġ= ĠFile ("${ file . path }/${ get FileName ( uri )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage File . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġcontext ?. content Resolver ?. open InputStream ( uri )?. read Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( byteArray Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage File . write Bytes ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éģ© çĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠMainActivity )?. getTime Line Fragment ()?. setTime Line Background Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ONT _ REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĥķãĤ © ãĥ³ãĥĪ è¨Ńå®ļ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Font () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¢ãĥĹãĥª åĽº æľī ãĥĩãĤ£ ãĥ¬ ãĤ¯ãĥĪ ãĥª ãģ« ãĤ³ ãĥĶ ãĥ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata ?. data Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("${ context ?. get External Files Dir ( null ) }/ font . ttf ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģĵ ãģ ´ ãĥ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġcontext ?. content Resolver ?. open InputStream ( uri )?. read Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( byteArray Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . write Bytes ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdapter ãģ« éģ© çĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠMainActivity )?. getTime Line Fragment ()?. setFont () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUri ãģĭãĤī ãĥķãĤ¡ãĤ¤ãĥ« åĲį åıĸå¾Ĺ éĸ¢æķ° ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġget FileName ( uri : ĠUri ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠfileName Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext ?. content Resolver ?. query ( uri , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġcursor ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To First () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName Ġ= Ġcursor . getString ( this . getColumnIndex ( Open able Columns . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠfileName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĥĮæĻ¯ çĶ» åĥı æ¶Ī ãģĻ è¨Ńå®ļ ãĢĤ ĊĠĠĠĠ Ġ* Ġ èĥĮæĻ¯ è¨Ńå®ļ ãģ® ãģŁãĤģ ãģ« ãĤ¢ãĥĹãĥª åĽº æľī ãĥĩãĤ£ ãĥ¬ ãĤ¯ãĥĪ ãĥª åĨħ ãģ« ãĤ³ ãĥĶ ãĥ¼ ãģĹãģŁ ãģ®ãģ§ ãģĿãĤĮ ãĤĴ æ¶Ī ãģĻ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġdelete Background Img () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("${ context ?. get External Files Dir ( null ) }/ background ") ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . list Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ éģ© çĶ¨ ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠMainActivity )?. getTime Line Fragment ()?. setTime Line Background Image () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSwitch ãģ« è¨Ńå®ļ ãģ® åĢ¤ ãĤĴ èªŃãģ¿ è¾¼ ãģ¿ ãĥ» æĽ¸ ãģį è¾¼ ãģ¿ ãģ§ãģįãĤĭ éĸ¢æķ° ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġ è¨Ńå®ļ ãģ® ä¿ĿåŃĺ ãģķãĤĮãĤĭ ãĤŃ ãĥ¼ ĊĠĠĠĠ Ġ* Ġ@ param Ġswitch Ġ ãĤ¹ ãĤ¤ ãĥĥ ãĥģ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Setting Switch ( switch : ĠSwitch , Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġswitch . setOn Checked ChangeListener Ġ{ Ġbutton View , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Setting . edit Ġ{ Ġput Boolean ( key , Ġis Checked ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġswitch . isChecked Ġ= Ġpref Setting . getBoolean ( key , Ġfalse ) ĊĠĠĠ Ġ} Ċ Ċ }