a9!9}e!UYgJAggfk&FJ|}E_vQ|6c{l~u(7(*?V*1ncLjVG(e=Y>LsZImR%usMe)
z4i?bOf#cxq4*gId)Elm*Wp3A_{Q2-!E^Y2t4iW6&fVl}IFpCxa-MBGCLs^Oy1ndy^
zo6+UP%BXw89#xA{hK=Q6N-2WIeJ+L|M+SO$IqANQNRm(jhL~uFmWDF4?w~BB72=C~
zIbo3ZB??Iu_qxwrdSm<9l&}f!;*ih&X-+&wMSmv4#@QA>h{Zn`T-7kpq)8LM{oS2XZqEmR=O>6~{$v5PSXoE>;`V&b~?-NP)M&?Vmgf*T-arn?gyve=6##2qki3mB-X%*<$X+6*zhLr
zno+)X9CX`ur@O~WHV?NvLbT#0pX1%{(5Ai%xTlmMBBwo$G-isc1_(Bufkobm)JvLr
zI4J?Alx{s9>~-9k)$3DmmS%c+$M5aEv_F=KRK#!Tpx21SuB5izw&jH6wO2gXuDTuo-K+)%=byJ{Ehs@~!E2x{X7SxEtjK7LHz`B!$DCK?ct4hTdwm+~
z*6=|Gvp67iOujBf){xii*vu^<=yYPDK%syElZ!}bD!trFAKW|}K+PS0dTy`aibLSb
zKu(}=Tj2vQ>dxKAcfDO^eU+DVo!w_7M4^pFuiD~=tRNRNUG+ihP{51H9JB2KEkB>kLk_ogWH0DnJHci3On+x~WV59RpPJF_OxMHU^X;|~JYM><
zpFx@b)c0!k$Jo)9omkxaAF=rNA@cIU_RbbRxQs}x^V8}d#lp<{d}42e2p!}xVVldp
zqRuL5#j{!r>+dc-pxRECPRZMUzPD1@7R^q;AER(JIGlXXK3y?oH5U?<_VJkhU`;J|
zx@+TZY#BRg86HO{20K|CNG;_sP^uOd7lp&&dmGJ!DSFU7Y40ofDb6@tI(TcY5bdF?
zA>u0)Sr&E=9>}UN++Brv)wUYu%Hg
zguja7Kcq1l9s$hZaJv)*In1nNT+<(ph)3GAeDxn(OLK`2xnv~xmfBV=x8p#_JFmN*#45G-R*5y&`1^qVB61?g)EX>fCqTEip
z6N`kLznU5I<1bFOM2bLUKCDGFgLVCDZzUO;c3|u=HG=$9N)N3P9|ts&U}|d$**wOJ
zt#S-87=>yCy^9V~xp&waCE^?XI{^wy_bp#56ipK1K_FW9_!j9~s6&ml(OxOAM;iDO
zfDV^(GNujsP!TjmUP{#@EbleyihW|K8$P|@P4z7}#
z18oORM?Z8nb?BWEy#N+um1OQONtUDBpLIw}QYZi=#t4ex>IcS4X3`v&P^|izk^sVB+>jqW?w$Jfz_FB@P
z#-wYU;e1`%FIE!^rTnyh4Zk>;?S#x@pkL9g+&9}8vV
zUmn*r(?CHN{JS3ha2VNz-*}+Zi7j>J!kc8L$VX?xd>P-Egn@=iV!QdsOyJHLG=!sQpHUu&fuICydiA_m`XUEuuG`?A1Lj_*VN98<
zC0}JaK-$$b5Rd8=&iiSi
zb>&Lys*fKpKl#VY9)B%B$p{eV=ucE7eR=NknyX?~qEF#$+C>;7+NH)>+Gi)>S`C78
zCyt!DYM#bVVsiRHb9{YpRMe^-Momj{Ghgn7rH=^}JuIf`{n6!9u_{HCZiE7y-QjKr
z)3u$T*%uo=qHVpI
zAVqI>NHU&HgmZ6DjnFWYI@`v*tsM}XY0-Am@Rxy_2Q8(mlCA-?+OuukSXucA6IypF
zq)FTD(swXD_~*F4dEXrwP8`Cr?df4L;mlv{kn^`6C}h7)nM7#y6*MZm0(H@vWANys
zJKPo6Zqh5b!&k_6^g*T0?mvaI&42~xM(X;{h>CMoBEVR<6h-gn_K(f-OR&x5pSS4$
z64*r?z{2yL48*TK0R3aZ;eHaxMAP2pNcy!}gT;MVA2OA61LdU&ar
zN#@uc5jR+H#hWKDzK=;Uhl$}G%njGs;*`e0cGkD*qoU)K(%5@Dej=NVzrGyCi;xyv
zXQ%#uwEi!qZOq()57y~^J>fp+4SuY>P+>(n)CFGgN=~%k19Hv_9W3s$=80-H6cK26
zS@$Aq4+vP8kgi6xXQ4!mjSFr&yi4`+(7m<4ALf;2He$YU7Sh!44*qDi0|H+eg@?_t
z+pza=L_|f^SZa~EE_Y&)$$mCod!IkIf=Ikeh|xwct@+(T5D@)64Zb|kdV!Qc(}=wg
zD2I+&^yGz#xgvgw;Rk71ilHRHN!Qi`E(-ytl%I_F?bz4PN-4AoaL8zbNZtlHS8-jS
zTr^aTE|1C2o_;DrsSgqoV7Tvto~cbfG;hx>;u6-fa2o%GfgH?zO|6mKBT$atXTpYr?@xC6-AAANb~i9^bM#R4muz7Q{5Ams
z6mB4-9-f#0w|tPMtK9_3Fr
z3-eBy{^REfv>3~;F(etQY^eTay2vj^366n-TJ)v0TqLq*zAKqNmsSLg_j)hKP)7ht
zaexv6IJOPmBg48>?>*mDxU~cUNM`q0{vhBJUySe+oF1f~(*r2p#&7N0oe;k8(ey?M
zj-3{E*O+s%b3q9sy%cUw6+yT`F+?R>Yf-FIQrzSw~8!?7ezs$yOZGS24o}nPKZ+^l&L52b|bzmpOF^ka6N9^)+lh4b!
zs4hzh!Q1c{XtHCir0hBG3>6F4sX3)QbRWg_x$+sIO?)Pv*x^3=JgS5700Nvk)a{w!
zCo8KUmcoUAWOO8+ti0V($}md9Wt2VA2aN50n%kjsQw{}8
ztRvSxCSgb}5nRy@V-a@Xwv#}q(Ix(wb#kbsa>LjzhQ0)JqD;kxEKg*OUR$fi_qO21
zN@NQybZE-^b@Z##;t=vkgdNd;@e+@H!K%B_iu(~wUTBb!
zjSd^qPfO=iIZTGcN0F&kHDJ$QC=M|ty_2qCXZMJ}Hh@8FyW0S?h@&OkSj9UYk(L>*
zW`uEA(J;MA4KJOlX@2M9vsr_qS#)CUR75M8q!yv1U+(%)K`KL0@LNrw6rQ%4+hy4J
zObo(E;v}zDxz8FmKRjQxo8x>I{o*``^B0t4TlDWBDfnmC=bp}2t8bcv%@LjVpUCYf
zxcxVe_InMK*1Wvh-uepm*6Ii)>px3}`ml;OWvy<|yX2?lO<@)M8_uuOb6nao39+W)
zA@N&te^I$GOCwyH6*my*8wYf=Cc<3b$?en!|6KyN;Q1Ji_&hvhD!nrFHkbK9!rHXQn?t**@Y^Nk^jWz=k7bYy?0(O
zZwc7Q3D0!32FIH%zH5l+`d|$$9NC_U-5=A`c|7S^5T;7wkm#oSB`fz3$0qecW=E`*
zd&T`SNI`1Q57#6MhsKqX!K3{*PW%Kg#OU#4mBr?}P)zS*e|C|^|LV*~OP
zIleZRYOu?jz})|<>iNg->PW0qYs~He;&eYcj9k#c_JMN_&O@n8WjOqd^iTkmJ8OO8
z)D?~J?lE}AwM5JS%7WVAdK3|xMQ4kTUw1M|zp5r@*@xXmmE)_j_p|Cx17`@<>|!i?
zT-pGf0weeO*UEwr$?S84$LM;7RxdfD|<^3l*
z<8aV!u4c4TP4t^MB4z$E;#M``!^y;+<|54)n7~*b6tVW4hrw3Te?eN$KeSVhJh9ec
zJIWrBavFDhQ$-IS5yo-}Fdj*gT|6$-D!1DnCw%xR=dc#c2ILh*Qs&jw^ydt2m+i8B
z9Cc{6n%1^`A(J0M5Z;21KgYuATirk~Xk8&2YHYV+ZpUG)RT{~6rhIK5`@%!Ip_z>;
zheb#bJ892&3^BtFT}|UFmEfp%47W<>6O6ayymuT}$AADz0vnxw
+
+
+
\ No newline at end of file
diff --git a/presentation-widget/src/main/res/layout/appwidget_coverscreen_loading.xml b/presentation-widget/src/main/res/layout/appwidget_coverscreen_loading.xml
new file mode 100644
index 000000000..016a1999e
--- /dev/null
+++ b/presentation-widget/src/main/res/layout/appwidget_coverscreen_loading.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation-widget/src/main/res/values/colors_appwidget.xml b/presentation-widget/src/main/res/values/colors_appwidget.xml
index 7d07ea1f8..a5526c94c 100644
--- a/presentation-widget/src/main/res/values/colors_appwidget.xml
+++ b/presentation-widget/src/main/res/values/colors_appwidget.xml
@@ -1,6 +1,7 @@
@color/tachiyomi_surface
+ #00000000
@color/tachiyomi_onSurface
@color/tachiyomi_surfaceVariant
@color/tachiyomi_onSurfaceVariant
diff --git a/app/src/main/res/xml/updates_grid_glance_widget_info.xml b/presentation-widget/src/main/res/xml/updates_grid_homescreen_widget_info.xml
similarity index 100%
rename from app/src/main/res/xml/updates_grid_glance_widget_info.xml
rename to presentation-widget/src/main/res/xml/updates_grid_homescreen_widget_info.xml
diff --git a/presentation-widget/src/main/res/xml/updates_grid_lockscreen_widget_info.xml b/presentation-widget/src/main/res/xml/updates_grid_lockscreen_widget_info.xml
new file mode 100644
index 000000000..64ec20b34
--- /dev/null
+++ b/presentation-widget/src/main/res/xml/updates_grid_lockscreen_widget_info.xml
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/presentation-widget/src/main/res/xml/updates_grid_samsung_cover_widget_info.xml b/presentation-widget/src/main/res/xml/updates_grid_samsung_cover_widget_info.xml
new file mode 100644
index 000000000..564b59845
--- /dev/null
+++ b/presentation-widget/src/main/res/xml/updates_grid_samsung_cover_widget_info.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt
index b882e4801..0534604dc 100644
--- a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt
+++ b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt
@@ -27,7 +27,9 @@ interface AnimeSource {
/**
* Get the updated details for a anime.
*
+ * @since extensions-lib 1.4
* @param anime the anime to update.
+ * @return the updated anime.
*/
@Suppress("DEPRECATION")
suspend fun getAnimeDetails(anime: SAnime): SAnime {
@@ -37,7 +39,9 @@ interface AnimeSource {
/**
* Get all the available episodes for a anime.
*
+ * @since extensions-lib 1.4
* @param anime the anime to update.
+ * @return the episodes for the anime.
*/
@Suppress("DEPRECATION")
suspend fun getEpisodeList(anime: SAnime): List {
@@ -48,7 +52,9 @@ interface AnimeSource {
* Get the list of videos a episode has. Pages should be returned
* in the expected order; the index is ignored.
*
+ * @since extensions-lib 1.4
* @param episode the episode.
+ * @return the videos for the episode.
*/
@Suppress("DEPRECATION")
suspend fun getVideoList(episode: SEpisode): List