package Ġio . github . tak us an 2 3 . cho cod roid . ui . screen . bottom sheet Ċ Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . material . Divider Ċ import Ġandroidx . compose . material . Snackbar Host State Ċ import Ġandroidx . compose . material 3 . Experimental Material 3 Api Ċ import Ġandroidx . compose . material 3 . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . remember Coroutine Scope Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . lifecycle . view model . compose . viewModel Ċ import Ġio . github . tak us an 2 3 . cho cod roid . R Ċ import Ġio . github . tak us an 2 3 . cho cod roid . data . Download Request Data Ċ import Ġio . github . tak us an 2 3 . cho cod roid . service . Content Download Service Ċ import Ġio . github . tak us an 2 3 . cho cod roid . service . Download Content Background Player Service Ċ import Ġio . github . tak us an 2 3 . cho cod roid . ui . component .* Ċ import Ġio . github . tak us an 2 3 . cho cod roid . view model . Video List Menu Screen ViewModel Ċ import Ġio . github . tak us an 2 3 . internet . data . Common Video Data Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ åĭķ çĶ» ä¸Ģ è¦§ ãģĭãĤī éĸĭ ãģı ãĥ¡ ãĥĭ ãĥ¥ ãĥ¼ ãĢĤ ãģĦ ãĤ į ãģĦ ãĤ į ãĥľ ãĤ¿ ãĥ³ ãģĮãģĤãĤĭ Ver Ċ Ġ* Ċ Ġ* Ġ@ param ĠviewModel ĠCompose ãģ« ãĥĩãĥ¼ãĤ¿ ãĥĻãĥ¼ãĤ¹ åĩ¦çĲĨ ãģ¨ ãģĭ æĽ¸ ãģĦ ãģ¦ãģĦ ãģĦ ãģ® ï¼Ł ãĤĪ ãģı ãĤı ãģĭãĤī ãĤĵ ãģĭãĤī ViewModel ãģ« æĽ¸ ãģĦãģ¦ ãĤĭ Ċ Ġ* Ġ@ param Ġinit Data Ġãĥ¡ ãĥĭ ãĥ¥ ãĥ¼ ãģ« æ¸ ¡ ãģĻ ãĥĩãĥ¼ãĤ¿ ãĤ¯ãĥ©ãĤ¹ Ċ Ġ* Ġ@ param Ġsn ackbar Host State ĠSn ackbar ãģł ãģĻ ãĤĦ ãģ¤ Ċ Ġ* Ġ@ param ĠonClose Ġ éĸ ī ãģĺ ãģ¦ ãģ » ãģĹãģĦ ãģ¨ ãģį ãģ« åĳ¼ ãģ° ãĤĮãĤĭ Ċ Ġ* Ġ@ param Ġon Bottom Sheet Navigate Ġãĥ ľ ãĥĪ ãĥł ãĤ· ãĥ¼ãĥĪ ãĤĴ åĩº ãģĹãģ¦ ãģ » ãģĹãģĦ ãģ¨ ãģį ãģ« åĳ¼ ãģ° ãĤĮãĤĭ Ċ Ġ* Ġ*/ Ċ @ Opt In ( Experimental Material 3 Api :: class ) Ċ @ Composable Ċ fun ĠVideo List Menu Screen ( ĊĠĠĠ ĠviewModel : ĠVideo List Menu Screen ViewModel Ġ= ĠviewModel (), ĊĠĠĠ Ġinit Data : ĠVideo List Menu Screen Init Data , ĊĠĠĠ Ġsn ackbar Host State : ĠSn ackbar Host State Ġ= Ġremember Ġ{ ĠSn ackbar Host State () Ġ}, ĊĠĠĠ Ġon Bottom Sheet Navigate : Ġ( Bottom Sheet Init Data ) Ġ-> ĠUnit , ĊĠĠĠ ĠonClose : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġscope Ġ= Ġremember Coroutine Scope () ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġpadding Modifier Ġ= ĠModifier . padding ( start Ġ= Ġ 5 . dp , Ġtop Ġ= Ġ 5 . dp , Ġend Ġ= Ġ 5 . dp ) ĊĊĠĠĠ ĠVideo List Menu Screen ( ĊĠĠĠĠĠĠĠ Ġvideo Title Ġ= Ġinit Data . common Video Data . video Title , ĊĠĠĠĠĠĠĠ Ġsn ackbar Host State Ġ= Ġsn ackbar Host State , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģĬ æ° Ĺ ãģ« åħ¥ ãĤĬ ãĥķãĤ© ãĥ« ãĥĢ è¿½åĬł ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF avorite Item Add Button ( padding Modifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Bottom Sheet Navigate ( Add Video To Favorite Folder Screen Init Data ( init Data . common Video Data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģĬ æ° Ĺ ãģ« åħ¥ ãĤĬ åīĬéĻ¤ ãĥľ ãĤ¿ ãĥ³ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data . folder Id ?. let Ġ{ Ġfolder Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF avorite Video Delete Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġpadding Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Host State Ġ= Ġsn ackbar Host State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Id Ġ= Ġinit Data . common Video Data . video Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Id Ġ= Ġfolder Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Click Ġ= Ġ{ Ġvideo Id , Ġfolder Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Favorite Video Item ( video Id , Ġfolder Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( init Data . is Download Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ģ ãĤ¦ ãĥ³ ãĥŃ ãĥ¼ãĥī ãģ® ãģ¨ ãģį ãģ® ãģ¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExport Device Media Folder Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġpadding Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . copy File To Video Or Music Folder ( init Data . common Video Data . video Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġcontext . getString ( R . string . copy _ successful ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Background Player Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġpadding Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Content Background Player Service . start Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Video Id Ġ= Ġinit Data . common Video Data . video Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Content Delete Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġpadding Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Host State Ġ= Ġsn ackbar Host State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Download Content ( init Data . common Video Data . video Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ģ ãĤ¦ ãĥ³ ãĥŃ ãĥ¼ãĥī ãĤµãĥ¼ãĥĵãĤ¹ èµ· åĭķ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġpadding Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Download Service . start Download Service ( context , ĠDownload Request Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Id Ġ= Ġinit Data . common Video Data . video Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Audio Only Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquality Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å± ¥ æŃ ´ ä¸Ģ è¦§ ãģ® ãģ¨ ãģį ãģ® ãģ¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( init Data . is History ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Delete Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġpadding Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Host State Ġ= Ġsn ackbar Host State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete History From Video Id ( init Data . common Video Data . video Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĭķ çĶ» ä¸Ģ è¦§ ãģĭãĤī éĸĭ ãģı ãĥ¡ ãĥĭ ãĥ¥ ãĥ¼ãģ® åħ± éĢļ éĥ¨åĪĨ ãĢĤ åĭķ çĶ» ãĤ¿ ãĤ¤ãĥĪ ãĥ« ãģ¨ ãģĭ Ċ Ġ* Ċ Ġ* Ġ@ param Ġvideo Title Ġ åĭķ çĶ» ãĤ¿ ãĤ¤ãĥĪ ãĥ« Ċ Ġ* Ġ@ param Ġsn ackbar Host State ĠSn ackBar ãĤĴ è¡¨ç¤º ãģĻãĤĭãģ¨ ãģį ãģ« åħ¥ ãĤĮ ãģ¦ Ċ Ġ* Ġ@ param Ġcontent Ġãĥ ľ ãĥĪ ãĥł ãĤ· ãĥ¼ãĥĪ ãģ® ãĥ¬ ãĤ¤ ãĤ¢ ãĤ¦ ãĥĪ Ċ Ġ* Ġ*/ Ċ @ Opt In ( Experimental Material 3 Api :: class ) Ċ @ Composable Ċ private Ġfun ĠVideo List Menu Screen ( ĊĠĠĠ Ġvideo Title : ĠString , ĊĠĠĠ Ġsn ackbar Host State : ĠSn ackbar Host State Ġ= Ġremember Ġ{ ĠSn ackbar Host State () Ġ}, ĊĠĠĠ Ġcontent : Ġ@ Composable ĠColumn Scope . () Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠM 3 Sca ffold ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Height ( 0 . 5 f ), ĊĠĠĠĠĠĠĠ Ġsn ackbar Host State Ġ= Ġsn ackbar Host State , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( remember Scroll State ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġvideo Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 2 5 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( content Ġ= Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Video List Menu Screen ] ãĤĴ è¡¨ç¤º ãģĻãĤĭ éļ Ľ ãģ« æ¸ ¡ ãģĻ ãĥĩãĥ¼ãĤ¿ Ċ Ġ* Ċ Ġ* Ġ@ param Ġcommon Video Data Ġ åĭķ çĶ» æĥħåł± ãĥĩãĥ¼ãĤ¿ ãĤ¯ãĥ©ãĤ¹ Ċ Ġ* Ġ@ param Ġfolder Id Ġ ãģĬ æ° Ĺ ãģ« åħ¥ ãĤĬ ãĥķãĤ© ãĥ« ãĥĢ åĨħ ãģ® åĭķ çĶ» ãģ® åł´åĲĪãģ¯ ãĥķãĤ© ãĥ« ãĥĢ ID ãĤĴ åħ¥ ãĤĮãĤĭ Ċ Ġ* Ġ@ param Ġis Download Content Ġãĥ Ģ ãĤ¦ ãĥ³ ãĥŃ ãĥ¼ãĥī æ¸ Ī ãģ¿ ãĤ³ãĥ³ ãĥĨ ãĥ³ ãĥĦ ãģ® åł´åĲĪãģ¯ true Ċ Ġ* Ġ@ param Ġis History Ġ å± ¥ æŃ ´ ä¸Ģ è¦§ ãģĭãĤī è¡¨ç¤º ãģ® åł´åĲĪãģ¯ true ãĢĤ å± ¥ æŃ ´ åīĬéĻ¤ ãĥľ ãĤ¿ ãĥ³ ãĤĴ è¡¨ç¤º ãģĹãģ¾ãģĻ Ċ Ġ*/ Ċ data Ġclass ĠVideo List Menu Screen Init Data ( ĊĠĠĠ Ġval Ġcommon Video Data : ĠCommon Video Data , ĊĠĠĠ Ġval Ġfolder Id : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġis Download Content : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġis History : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ: ĠBottom Sheet Init Data ( Bottom Sheet Screen List . Video List Menu )