package Ġcom . s ui han 7 4 . n edge . scenes . preferences Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . view . Window Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . core . view . Window Compat Ċ import Ġandroidx . core . view . Window Insets Compat Ċ import Ġandroidx . core . view . Window Insets Controller Compat Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . s ui han 7 4 . n edge . Application Ċ import Ġcom . s ui han 7 4 . n edge . R Ċ import Ġcom . s ui han 7 4 . n edge . data Store . Preferences Ċ import Ġcom . s ui han 7 4 . n edge . models . Clock Style Ċ import Ġcom . s ui han 7 4 . n edge . models . Multiple Notifications Solution Ċ import Ġcom . s ui han 7 4 . n edge . models . Unknown Notification Solution Ċ import Ġcom . s ui han 7 4 . n edge . repositories . Preferences Repository Ċ import Ġcom . s ui han 7 4 . n edge . scenes . lock Screen . Lock Screen Activity Ċ import Ġcom . s ui han 7 4 . n edge . scenes . preferences . dialog . Time Picker Dialog Fragment Ċ import Ġcom . s ui han 7 4 . utilities . fragment . AlertDialog Fragment Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . sync . Mutex Ċ import Ġkotlinx . coroutines . sync . with Lock Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . random . Random Ċ Ċ @ H ilt ViewModel Ċ class ĠPreferences ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapplication Ġ: ĠApplication , ĊĠĠĠ Ġprivate Ġval Ġpref Repo Ġ: ĠPreferences Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ/** Ġ éģ¸æĬŀ ä¸Ń ãģ® ãĥ¡ ãĥĭ ãĥ¥ ãĥ¼ éłħ çĽ® Ġ*/ ĊĠĠĠ Ġval Ġselected MenuItem Ġ= ĠMutable LiveData ( MenuItem . GENERAL ) ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġ/** Ġãĥ Ń ãĥĥãĤ¯ çĶ» éĿ¢ èµ· åĭķ çĽ´ å¾Į ãģ® çĶ» éĿ¢ ãģ® æĺİ ãĤĭ ãģķ Ġ*/ ĊĠĠĠ Ġval Ġlight Level On Ġ= ĠMutable LiveData < Float >() ĊĊĠĠĠ Ġ/** Ġãĥ Ĳ ãĥĥãĤ¯ ãĥ©ãĤ¤ ãĥĪ æ¶Ī çģ ¯ å¾Į ãģ® çĶ» éĿ¢ ãģ® æĺİ ãĤĭ ãģķ Ġ*/ ĊĠĠĠ Ġval Ġlight Level Off Ġ= ĠMutable LiveData < Float >() ĊĊĠĠĠ Ġ/** Ġ ãĥ©ãĤ¤ ãĥĪ ãĥ¬ ãĥĻ ãĥ« ãĤĴ ç· ¨ éĽĨ ä¸Ń Ġ*/ ĊĠĠĠ Ġval Ġediting Light Level Ġ= ĠMutable LiveData < Editing Light Level >() ĊĊĠĠĠ Ġ/** Ġ ãĥ©ãĤ¤ ãĥĪ ãĥ¬ ãĥĻ ãĥ« ãĥĹ ãĥ¬ ãĥĵ ãĥ¥ ãĥ¼ æĻĤ ãģ® åĢ¤ Ġ*/ ĊĠĠĠ Ġval Ġpreview Light Level Ġ= ĠMutable LiveData < Float >() ĊĊĠĠĠ Ġ/** Ġ` light Level On ` ãģ§ ç«¯ æľ« ãģ® ãĤ· ãĤ¹ãĥĨãĥł è¨Ńå®ļ åĢ¤ ãĤĴä½¿çĶ¨ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġval Ġuse System Light Level On Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġ/** Ġ ãĥ©ãĤ¤ ãĥĪ æ¶Ī çģ ¯ ãģ¾ãģ§ ãģ® å¾ħ æ©Ł æĻĤéĸĵ ( ç§Ĵ æķ° ãģ§ ç· ¨ éĽĨ ãģĹãģ¦ ãĥŁ ãĥª ç§Ĵ ãģ§ ä¿ĿåŃĺ ãģĻãĤĭ ) Ġ*/ ĊĠĠĠ Ġval Ġlight Off Interval Ġ= ĠMutable LiveData < Long >() ĊĊĠĠĠ Ġ/** Ġ éĢļçŁ¥ ãĤĴè¡Į ãĤı ãģªãģĦ æĻĤéĸĵ å¸ ¯ ( éĸĭå§ĭ æĻĤ åĪ» ) Ġ*/ ĊĠĠĠ Ġval Ġsilent Timezone Start Ġ= ĠMutable LiveData < Local Time >() ĊĊĠĠĠ Ġ/** Ġ éĢļçŁ¥ ãĤĴè¡Į ãĤı ãģªãģĦ æĻĤéĸĵ å¸ ¯ ( çµĤ äºĨ æĻĤ åĪ» ) Ġ*/ ĊĠĠĠ Ġval Ġsilent Timezone End Ġ= ĠMutable LiveData < Local Time >() ĊĊĠĠĠ Ġ/** Ġ éĢļçŁ¥ ãĤĴè¡Į ãģĨ ãģ® ãģ« å¿ħè¦ģ ãģª æľĢ ä½İ ãĥĲ ãĥĥ ãĥĨ ãĥª ãĥ¬ ãĥĻ ãĥ« Ġ*/ ĊĠĠĠ Ġval Ġrequired Battery Level Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġ/** Ġ ãĥ©ãĤ¤ ãĥĪ ãĥ¬ ãĥĻ ãĥ« ç· ¨ éĽĨ çĬ¶æħĭ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠEdit ing Light Level Ġ{ ĊĠĠĠĠĠĠĠ ĠNONE , ĊĠĠĠĠĠĠĠ ĠON , ĊĠĠĠĠĠĠĠ ĠOFF ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæ Ļ Ĥ åĪ» ãģ® è¡¨ç¤º å½¢å¼ı Ġ*/ ĊĠĠĠ Ġval Ġclock Style Ġ= ĠMutable LiveData < Clock Style >() ĊĊĠĠĠ Ġ/** Ġ è¤ĩ æķ° éĢļçŁ¥ ãģ® è¡¨ç¤º æĸ¹æ³ķ Ġ*/ ĊĠĠĠ Ġval Ġmultiple Notifications Solution Ġ= ĠMutable LiveData < Multiple Notifications Solution >() ĊĊĠĠĠ Ġ/** Ġ è¨Ńå®ļ çĻ»éĮ² ãģķãĤĮ ãģ¦ãģĦ ãģªãģĦ éĢļçŁ¥ ãģ® åĩ¦çĲĨ æĸ¹æ³ķ Ġ*/ ĊĠĠĠ Ġval Ġunknown Notification Solution Ġ= ĠMutable LiveData < Unknown Notification Solution >() ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãĤ¢ãĥĹãĥª è¨Ńå®ļ åĢ¤ ãģĻãģ¹ãģ¦ãģ® æĽ´æĸ° ãģĮ å®Į äºĨ ãģĹãģ¦ ãģĭãĤī ä¿ĿåŃĺ ãģĻãĤĭãģŁãĤģ ãģ® ãĥŃ ãĥĥãĤ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġprefs Mutex Ġ= ĠMutex () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĿ æľŁ åĢ¤ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpref Repo . preferences Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs Mutex . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Level On . value Ġ= Ġit . light Level On ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Level Off . value Ġ= Ġit . light Level Off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse System Light Level On . value Ġ= Ġit . use System Light Level On ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Off Interval . value Ġ= Ġit . light Off Interval Ġ/ Ġ 1 _ 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Timezone Start . value Ġ= Ġit . silent Timezone Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Timezone End . value Ġ= Ġit . silent Timezone End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Battery Level . value Ġ= Ġit . required Battery Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Notifications Solution . value Ġ= Ġit . multiple Notifications Solution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Notification Solution . value Ġ= Ġit . unknown Notification Solution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock Style . value Ġ= Ġit . clock Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . Main ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( viewModel Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç· ¨ éĽĨ ãģĹãģŁ ãĥĩãĥ¼ãĤ¿ ãĤĴ ä¿ĿåŃĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġsave Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs Mutex . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Repo . update Preferences Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Level Off Ġ= Ġlight Level Off . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Level On Ġ= Ġlight Level On . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse System Light Level On Ġ= Ġuse System Light Level On . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Off Interval Ġ= Ġlight Off Interval . value !! Ġ* Ġ 1 _ 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Timezone Start Ġ= Ġsilent Timezone Start . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Timezone End Ġ= Ġsilent Timezone End . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Battery Level Ġ= Ġrequired Battery Level . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Notifications Solution Ġ= Ġmultiple Notifications Solution . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Notification Solution Ġ= Ġunknown Notification Solution . value !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock Style Ġ= Ġclock Style . value !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¸¸ é § Ĳ ãĤ¿ ãĤ¹ãĤ¯ ãĤĴ åĨį èµ· åĭķ ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . start Periodic Work () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġprivate Ġvar Ġwindow Ġ: ĠWindow ? Ġ= Ġnull ĊĊĠĠĠ Ġsuspend Ġfun Ġon Attached To Window ( activity : ĠPreferences Activity ) Ġ= Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ Preferences ViewModel . window Ġ= Ġactivity . window ĊĠĠĠĠĠĠĠ Ġshow System UI ( activity ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ çĶ» éĿ¢ æĺİ åº¦ ãģ® ãĥĹ ãĥ¬ ãĥĵ ãĥ¥ ãĥ¼ ĊĠĠĠĠĠĠĠ Ġpreview Light Level . observe ( activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . attributes Ġ= Ġactivity . window . attributes . also Ġ{ Ġlp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . screen Brightness Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ · ãĤ¹ãĥĨãĥł è¨Ńå®ļ åĢ¤ (- 1 . 0 f ãĤĪ ãĤĬ ãĤĤ å°ı ãģķãģĦ åĢ¤ ãģ® ãģ¨ ãģį ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġnull Ġ|| Ġit Ġ< Ġ- 1 . 0 f Ġ-> Ġ- 1 . 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ĳ ãĥĥãĤ¯ ãĥ©ãĤ¤ ãĥĪ 0 + ãģķ ãĤī ãģ« æļ Ĺ ãģı ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ< Ġ. 0 f Ġ-> Ġ 0 . 0 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ĳ ãĥĥãĤ¯ ãĥ©ãĤ¤ ãĥĪ ä½¿çĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 . 0 1 f Ġ+ Ġ( 1 . 0 f Ġ- Ġ 0 . 0 1 f ) Ġ* Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġediting Light Level . observe ( activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEdit ing Light Level . NONE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve Screen Brightness ( activity , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEdit ing Light Level . ON Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve Screen Brightness ( activity , Ġlight Level On ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEdit ing Light Level . OFF Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve Screen Brightness ( activity , Ġlight Level Off ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġpreview Light Level Observer Ġ: ĠObserver < Float >? Ġ= Ġnull ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġprivate Ġfun Ġobserve Screen Brightness ( owner : ĠLifecycle Owner , Ġlive Data : ĠLive Data < Float > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpreview Light Level Observer ?. let Ġ{ Ġobserver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlight Level On . remove Observer ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlight Level Off . remove Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( live Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Light Level . value Ġ= Ġ- 1 0 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Light Level . value Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpreview Light Level Observer Ġ= Ġobserver ĊĊĠĠĠĠĠĠĠ Ġlive Data . observe ( owner , Ġobserver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãĥĲ ãĥ¼ ãģ¨ ãĥĬ ãĥĵ ãĤ ² ãĥ¼ãĤ·ãĥ§ãĥ³ ãĥĲ ãĥ¼ãĤĴ éļ ł ãģĹãģ¦ ãĥķ ãĥ« ãĤ¹ãĤ¯ãĥª ãĥ¼ãĥ³ ãģ« ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġhide System UI ( activity : ĠPreferences Activity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( activity . window , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Controller Compat ( activity . window , Ġactivity . binding . root ). let Ġ{ Ġcontroller Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . hide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Compat . Type . system Bars () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . system Bars Behavior Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Controller Compat . BE HAV IOR _ SHOW _ TRAN SI ENT _ BAR S _ BY _ SW I PE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . decor View . system Ui Visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãĥĲ ãĥ¼ ãģ¨ ãĥĬ ãĥĵ ãĤ ² ãĥ¼ãĤ·ãĥ§ãĥ³ ãĥĲ ãĥ¼ãĤĴ è¡¨ç¤º ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãĥĲ ãĥ¼ ãģ¯ èĥĮæĻ¯ ãĤĴ éĢı éģİ ãģĹ ãĥķ ãĥ« ãĤ¹ãĤ¯ãĥª ãĥ¼ãĥ³ ãģ§ è¡¨ç¤º ãģĹãģŁ ãĤ¢ãĤ¯ ãĥĨãĤ£ ãĥĵ ãĥĨãĤ£ ãģ« éĩį ãģ Ń ãģ¦ è¡¨ç¤º ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow System UI ( activity : ĠPreferences Activity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( activity . window , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Controller Compat ( activity . window , Ġactivity . binding . root ). show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Compat . Type . system Bars () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . decor View . system Ui Visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥĩ ãĥķãĤ© ãĥ« ãĥĪ éĢļçŁ¥ è¡¨ç¤º è¨Ńå®ļ ãģ§ ãĥĹ ãĥ¬ ãĥĵ ãĥ¥ ãĥ¼ãĤĴ è¡¨ç¤º ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Preview () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġsave Settings () ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġpref Repo . getDefault Notification Entity () ĊĠĠĠĠĠĠĠ ĠLock Screen Activity . start Preview ( application , Ġentity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ Ĩ ãĤ¹ãĥĪ çĶ¨ ãģ® ãĥĢ ãĥŁ ãĥ¼ éĢļçŁ¥ ãĤĴ çĻº çĶŁ ãģķ ãģĽ ãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnotify Dummy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠRandom . nextInt (). absolute Value ĊĠĠĠĠĠĠĠ Ġapplication . notify Dummy ( 5 , Ġid , Ġ" dummy -$ id ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ ãĤĴè¡Į ãĤı ãģªãģĦ æĻĤéĸĵ å¸ ¯ ãĤĴè¨Ńå®ļ ãģĻãĤĭ ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġopen Sil ent Timezone Picker Dialog ( ĊĠĠĠĠĠĠĠ Ġlive Data : ĠMutable LiveData < Local Time >, ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal Time Ġ= Ġlive Data . value !! ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠTime Picker Dialog Fragment . create Instance ( local Time . hour , Ġlocal Time . minute , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġdialog . setOn Time Set Listener Ġ{ Ġ_, Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdialog . show ( fragment Manager , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ ãĤĴè¡Į ãĤı ãģªãģĦ æĻĤéĸĵ å¸ ¯ ãĤĴè¨Ńå®ļ ãģĻãĤĭ ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Sil ent Timezone Start Picker Dialog ( fragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Sil ent Timezone Picker Dialog ( silent Timezone Start , Ġfragment Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ ãĤĴè¡Į ãĤı ãģªãģĦ æĻĤéĸĵ å¸ ¯ ãĤĴè¨Ńå®ļ ãģĻãĤĭ ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Sil ent Timezone End Picker Dialog ( fragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Sil ent Timezone Picker Dialog ( silent Timezone End , Ġfragment Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¤ĩ æķ° éĢļçŁ¥ åĪĩ æĽ¿ ãģĪ æĸ¹æ³ķ ãĤĴ éģ¸æĬŀ ãģĻãĤĭ ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Multiple Notifications Solution Selection Dialog ( fragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsolutions Ġ= ĠMultiple Notifications Solution . values () ĊĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= Ġsolutions . map Ġ{ Ġit . text Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial Selected Ġ= Ġsolutions . indexOf ( multiple Notifications Solution . value ) ĊĊĠĠĠĠĠĠĠ ĠAlertDialog Fragment . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . prefs _ multi _ notices _ solution _ selection _ desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Single Choice Items ( labels , Ġinitial Selected ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= Ġsolutions [ which ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multiple Notifications Solution . value Ġ!= Ġsolution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Notifications Solution . value Ġ= Ġsolution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dismiss OnClick Item ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . dialog _ cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( fragment Manager , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¨Ńå®ļ çĻ»éĮ² ãģķãĤĮ ãģ¦ãģĦ ãģªãģĦ éĢļçŁ¥ ãģ® åĩ¦çĲĨ æĸ¹æ³ķ ãĤĴ éģ¸æĬŀ ãģĻãĤĭ ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Unknown Notification Solution Selection Dialog ( fragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsolutions Ġ= ĠUnknown Notification Solution . values () ĊĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= Ġsolutions . map Ġ{ Ġit . text Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial Selected Ġ= Ġsolutions . indexOf ( unknown Notification Solution . value ) ĊĊĠĠĠĠĠĠĠ ĠAlertDialog Fragment . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . prefs _ unknown _ notice _ solution _ selection _ desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Single Choice Items ( labels , Ġinitial Selected ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= Ġsolutions [ which ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unknown Notification Solution . value Ġ!= Ġsolution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Notification Solution . value Ġ= Ġsolution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dismiss OnClick Item ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . dialog _ cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( fragment Manager , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ Ļ Ĥ åĪ» è¡¨ç¤º å½¢å¼ı ãĤĴ éģ¸æĬŀ ãģĻãĤĭ ãĥĢ ãĤ¤ ãĤ¢ ãĥŃãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Clock Style Selection Dialog ( fragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠClock Style . values () ĊĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= Ġitems . map Ġ{ Ġnow . format ( DateTime Formatter . of Pattern ( it . pattern )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial Selected Ġ= Ġitems . indexOf ( clock Style . value ) ĊĊĠĠĠĠĠĠĠĠ ĠAlertDialog Fragment . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . prefs _ clock _ style _ desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Single Choice Items ( labels , Ġinitial Selected ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock Style . value Ġ= Ġitems [ which ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dismiss OnClick Item ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . dialog _ cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( fragment Manager , Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ