From 0466cddf309db4e22cd6b0717fcd148325d3940c Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 28 May 2026 16:47:30 -0700 Subject: [PATCH 1/9] chore: updates Play Store images --- Images/feature_graphic_1780010384336.jpeg | Bin 0 -> 141909 bytes Images/latin-reader-3.jpeg | Bin 0 -> 10114 bytes Images/latin_reader_feature_1024x500.png | 296 ++++++++++++++++++++++ Images/launcher-3.jpeg | Bin 0 -> 40403 bytes 4 files changed, 296 insertions(+) create mode 100644 Images/feature_graphic_1780010384336.jpeg create mode 100644 Images/latin-reader-3.jpeg create mode 100644 Images/latin_reader_feature_1024x500.png create mode 100644 Images/launcher-3.jpeg diff --git a/Images/feature_graphic_1780010384336.jpeg b/Images/feature_graphic_1780010384336.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8dbd1200ee2da46cd6ddd1d54bc912ecac4bc36d GIT binary patch literal 141909 zcmeFYWmH?;_ca>4xEF`wR-m|Bad#qsE~QwIAVmrk4^kvWf?IJ)kp>S^+|wd~ zVuj1|m*0Co-SLk5`I$*h*4Sg8J=UBj=_7 z41n<%p*_9;XtV&V|B3+sQ#88QPL|I-H@06-`IKmFrf0hs^O|8dNJfcE^K!+*YU z(f|OQ#}>>NLPCP+X#X9fp<@7w|F>Q6#fxIJ|1)AS`u~oI2`I++-xv*5j{QG<9tZmu z|0?jW0{<%TuLA!n@UH^@D)6rY|0?jW0{<%TuLA!n@UH^@UkW@d1KtDB{tM`6k7YPI zIywd>#v?GXF#iD-Hr9Uu`+tD*UwHBlaQ}mUPJcWR^YM*~jfMT6_W$ePVfC@DS9s_H zkUl{}VFEDFSODmxXc(ku4})l>kJbU!e`ol=L>}{eObq7oMQQ zp5gyk37DiP#{FQ~n8%HN+7gsl5KmUNhpx}_0_px#D35lSL%nw=F zIk_M6O3TV26_r)hpBtN+VJ)p~?H&CCgG0k3qhsITGqZE^3yVvLjm@p?o!!0tgTvFa zbJWG=MAGV%LAYeAU1?VA z@RLtLNf;QQFRCsW^Y3PxNfnnBZ6qKgZc2)1QIZhk5DlsfgqAWQNpBb(lV>3~0qB2+ z2HB!m3)O#uH}i6@(oJ7si<+WMvhP4)z!OI#I-mfK>>HxM8vW?oM{kHFLu#1(_lNG3 zn_XZ7DP533o!8=qm@;&FiQ4S zq4yI(XL*Y~%w6WCnH~>>m+VH@WH>4?eJeWKV&EZ-o{%LXl65U<%lLsR1t|;0$3#VH zdQ;1NaFBIj3oL$%%g~_u!cFGJI0gVz_=`nP5Kti$qgPR|b;q4y25?Aiu8f&@223VZ z$J^o^=FO=dVZpw=s!G`N(l(A(^&xVl@C>t$VVQM>sa2zDa6jcI4sl&a*>HoCU;9yJ zzR__}COI6VPu9q4yq1%qQ=HDv=`I%N}W9FTggA7g?I{XSpj zBwLPuFzvb==kd}lg_McCBrRj(RDw6b=oDDVpKY7MGPyZuLQUqQo=kM6@=}!$(zCJC zBzk`OJc`N8@R@hC5WeL`gj=J2O0jrHtGy>VVIFb(mNJ70KONC&++taI9k1!;>Nb^9 zhMxJUSE(xlFyFmg-40B}=la2r3#T?%FYw`;mzN@po8K;Nor;M-qv0ZD7cJ zckz;^M!n}+fYQ!*+CW2Hm8lU8UXVz=gIx{jxw!v?=g`y9z!$@ATrwZfh%NR#N|az) zXnDHUPpp&GpKIf%6@`?arQ+%f@pe5;D|^dEY98{QCX#u36 zW$p;#tKo zmiuqQ%hiCX&&n!8x;?NHMXQxpei38x1q9@Y#~;_;9cAun{RD1);qTHYcO~;sHD>HH zlNXki-fWn+1i zdXmL|1g7&<#ZPb~-jC1-L!&df=vSd+z0s>H2QM}uzP}mj-J=-T-ST>~Jxqs1!V2vS zGs$L-?i={wFBiu*>Xb0gchrL_$9?L^&-Vt40L}Tkw>BAa6GD;1ZfBj{yhDs6IZlwb zZ=$@Zi3DxS1GA0x|JW}NJ!L1CINxOAbGXX<`s3#kY&eg#GYWdLo+g)-BklC}lTcNc-^J@)Qu<%B(pxACApiuBi#Ver5?c~pm?9{1%!RBH#@!T1}Hb@V;(bH~8<+a`j*!Hy%=1B4K;mml>^s|r-V(jJ1Gj>+!PuXc{BfKrd zm{sXT(+(d0fbkbD%Uj<3W6}|{5fOz4qE_j6?{b+IbYnVJaQG1{n=uq#x)4afcRYM~fU4h9JL&EL z6C?KY-}H@%uJ^Fb-&t>18-`1*>G3drUPNBh^PCU&aCN^Q07fk9*(sl<+Z7H2c30Gyj$no8pBJQ*NmSqxZ-xC&~@Bm}RMbD2KCz<%{J|j#T2r%qWg`8G4&u;~~5#Loga?I8y0e@EKhm z4_qh0q@T1Oz&R-Pg+L8MPS#CnD?f|Q4rX#!lM7Z{U{m}wM|H>Ak>BDNURG&?3JC9ssz*T`_WRTv3!`OoY1MF(%T%7G@_q87XjWi9gjr^Y=dt z`gp@|6ggA7l)tGhql4{?*-uRyn7=PfO;zv;+>&dl5bhDla%Y&k3ZCz7Raee= z{2&gGICtmj&hhf5qg46rlzaX>S&Cpcn+sL^Gw9T!LCd`rFNl)AMk$58B~ExneamV7 z&aEx2g@RLb`fq8!I2*SposJ!&^)rstz{N^@f5EWM{j*euQ z#q6gZrtewfOR97+>?DF{F{6?$H`ERQxCJZ{H`%=nWL=xyo6S4f@Is6yh9qZ;YCv&yCb2 z`pRV+6w9n}xn*zlxrQ*!xgd~YYIA}!U#Dw&o5t`fuo+?a zE>NuLX(~j#H4@QhLK>##iVUPraxYE_B4Wg((%Y=ymsQ&st`rHp43(+<a3zk7WDAAoM+Nm2@KVzT&#Jq4ZE*R_H%e!%BF`0M!vm}Kvn(xpmxBnHi5k(KFSBnLopHqnj^K2s`tC#0MdxZz3wr*4VHaU zuempX$WGm;z}lR0yO@v@j}03)>SX=3;OgP*Sd9o4`dmH2YcXP!T5GULYmyBPWcr;O zhXJviu4NH##F3sQ&Jl%fLa|p}JuZ=axZpO12CMsM|NIO!oC;q2vrge`wX&sGRhhr; z+BRXT=`AoSw5e)Z0SPg}X{ICrKX z0p8{3;7m@28m6I3@@2$Vws?+G3!24UQpZ<7a)(qkw?z@gt zSg4za&RS8qjOlmDi%GFQKXjL~fN*1cjGl@F@j%Y0AYvqoG09w>^-4iRnd?xOp}w0qrwhYF3$ z-qmZgAp9)VBcJ7Tw5-e%6xulo4a;-P`qI#%4=3%1y7e_RW?QD^RKBrJcP~-r^BZJVQR&I_dnIxUAwC22_ zje|d|l$y5#^En35jt=;v>o8F&tcrrv00 zXc=wFQuXJJkMAt+pT4;8dH|UCGo8c+YJY<6vr^>WWl-x~R;2CY1oe&{*j9VH&_1n- zQe#;s;(;v;i;O3XT zBUJK`@b=Bf82#1ZZwKXZV;AL2V{7JI8yX344G4RqoW-PfVtw`G}`>OJ5hZjOTsA8;^!)WNc6*0U$ zNym3k4(*etsbcUOy>XrZhDI#<`5$11neyrR!xPs+mIU)dS+H`*SufKa&kU@J4K`Pb z`+{En%53KT>1j@E1p7gZ-a^B!1L>%QqwE*A`m(Z#jce79o6&nqT7y)qtre~!ttyLm zMYDcL_l^6SOX)^!%nhan#*6)q@a>RA)nw#r-Xq&YCW7Y|?l_Hwq8XetYD|zY{Q9LM zCc=xK4L{LYaQ=85;<#<+0q5D)5W@Q&%wBb`JkGOj%z&a*M^uf=? zP7kbAi#8`r&vsM_FbRAtAri)3FPj(ts1{CJHZG?s9N1WvyL!|fP}Rl|GyxHHq7Q(C z42FXpPp=#r%FN0u_aOw$$66?>NxSq%js5VN3W9I$C2&_p(w;Wh-y;v;u-aLr+dX0S zG-rPMl&7G{FLIl>aR;|h4(j0_LzcHD$1S6xysfWsI3c#;_N;WQA1&WB#~e?q-OjIv zEGQDkd5SD6_soVAYRJ}@^-FOg*gZ70N6Vze11Nq|9Zpq84yI1@`gM(N6*GPawJ`|g zcMJ$S+Op5(#uzHJo9d`CYg)43G&0-N+j?X1;0*4d(-Tk@St6lG;RW z^2sAZo^?Kv*(X}KKyTk}&-wuo%juZnTY7^7n4PXGp;rZ(OQlR)7WvpuQv96(O%=WB zOjJBq$8LjYTG9>I8Z1LE{T%jU8xD*V1094483(j*F`{`ISDlo`zyhL^Xrqb;Pf^J06uU-M16e=$~Y3Pb$U&=2Qh2b0!?*EN|O=!ls3h`sJ;h z=xX*nV=?1w&M5xh@ zHCh9byQ73=_l049w_6ae3CV^Cg=O8jAjugxlwWbZj zxh4P{o1q31jI&$ONJXWPWKz|&MF@&wQ(B+7jltEM>ZCZCs5BKgAB}T;V9@D+C|b_b z4w;UtRco7#`crl3kP73XKF~=?1Sz!1axV@EXufRA9im3+9>8-T=wx|75KzXye9|lr z5Vglf>nTy4fU0USYUl_ggU}ZS6?1T-5`0)*Cr|+kZref z&kPWs;2-%NUeHk=9O$y9rxt!_zvJ4*Q?_y)=3(kSyR6LKV#!NZ6d9h2Yf&t=&lK6P zf=jvwQwHoRA)%9H$hUi+J= zMZuYxaG^vcGF_LAhH>urtv>*hjy$DqLd<04ibODWBrWDn zkh|m1rf#RDJf{zec>-(?07B#WV-^>(L%C9zXQ{h~in+iTJKvonl2(MFjWX+)qj~nc z=7X)kciHO8KVQ^hgiO3-G*js6;S!Z>(jNlvv&u_9?tb$WP-t)9A{uh_Lr+T5fYV>qvtO3O{HpfZ_pZgSt!o;C4+wHJ=ik!@|AEG*30N0=uW zBx|63MVcc_>MEM?!C8N$OpBKIQLmH_#kQ_ONnh2h!2c|wEb+NSpG>4IkfH5MLP<~m z42%~MtNX7$C;NCk0twB|5|J9zV#9eej_Agdl_MrONU2=oB14P$ZF$B`KSz365mU$h zYcUlK1=Vkwsc6em!0>_v_om3uRRwX{-kOvaHI1%>(xQk7-4@PyR2#^2eELtqY6pMO z>7-&B0EVSDzjWz60eZp2vFb0!Rp*>lg4PFGX+$AaVf?42C2WR}e$_G@PvK-UHI6tP zlnkd{0`_VXCSz`WL!DOuF5l*Ak=w;>WK2j>j3{!NF5Z*3Zl;GCVPV14x*|>T0!EC_ z;ru=9+AYVot>wk0=>~AVJEyM@qh)5peR=-x=}zLYY|Z=~6GS#ymLAEf^iIu9<$ll&|y4?!h>FIZ;c@hqIaz zbazxIZlN2E+mRKYS9X45Ru~jN98y>nmK$MmPr5RbZ#oTiDm!H;)2igf*V4wqC`D0M zXYWot(P|eei^2+K!!dg&P|Y-)-9`hiBqJ$D>4J7L zzkfuiUU)`+dfVVt@@;ND{!lrxg(}J~F)Y_H*f`RUJ|b)8;Ad-2)Vg=-8-3~5Ti0gW zBa6nL8aR%Lzm;0E+{rm4Y{9I6zU0xjDH~qPF&m~0EQr+=mTdV!g}+3+`$&NiCY-xa zJj(X>O_3zeNNp$Sr5IrnXwT?x7Mx363PoqkwIG_8$?|*ojgkDkr4nPZ^y(IGr}l*h zZE-BE8oZ7V4DTo6dG8cLX|J}1ZLxmK@SN#w^xHhYyF810#=A2W*W1iFQWOs#uK0~i z;}@#;_LhDFyfNG7jD7&P3&b*!mgxwLoJKmjDFYay0Ijp$?mTTlvlcG?15aDh&sbfG z7S9Ql2Kq*%BI{r>5xlm_VIo(tkgK?*F!@adwpLFXbDzowK%LFNDb+?m%4R6#LKr)n zmyD9POT#&FnAwoUpqZ4%c8;lFu7HQ$@AZRDhM}MfSKWeUSuVtaT%ZM`TA}A<5#GGu#;@lxlW1 z?YD||{5hr#4}kY&>IrqLCDOA5WH|cnJJ2VGZkZV3%xzzhpxs{H*@5iIkt%9 zu!!t--b#4XgIGpan=-9d8`-;F%J%XmgN{W^8b~N}cH9mP*#|oV9o;gh7ta7+tC}Zx zJWL+|$9A|N!E99Rs-b|KEh=E#n}XQlhO@uJq#|acA@p+;o#&pzh#O=zZN@8$Q3v|7 zHy-r>Xh08d4 z=Uidgn*hDaO;(8i0!_OEZpKs{;_iHc*EoWU>$60>4wWS27Qv(WnvWDQ&Z9bheVQ5<#=30yahnDFk=~KijDMfJj^YR_|qY& z{4}5rVT?ju@f`>ad7!feo(aCJP6qanE^{)U;14*-P%>uS4{tg|l6kkZt>lU3+geO#?M} z%n*ypR2}p7YeV2P99>FZ8e4FJW;6e1o!XBk#78%_r3rquYf4*ANqXZNBqHq<+5vbz zPcT)MTgw^3DH~p0uC?geSN81nv|`nwU%mPPjT@0r`~%mgU6F&Wt^+8(6qVQ)(~ zR);6^dN{h_w3_@T?d3AHN&H8j8YJ$a5!tq~WCLA*-F z32WND!hSbq0+GZYLz`rEc^8jOr5OYR3SX`pNwDKntnHpn8QLDtFSXW%V{KSY2n^kL zUHbn(KM1{DnDG5R#Zs;YHRN^bzdTaxO1+F83dXKMcLQXKIHf%}5Q?E5(x$800 zwD~@Veqt$llvmgbLwV%GYQL!+^-36OwtwQUtX!E{W@^l;E-{CNt$nINf%epLwAvZ< zC%S%0IkdQM+ah@Tw)BGTY%4~-opRt9JOJivPyOoK(-RLn7+bN{vg@nF(IugpFjyf; zt0BW_np6O^u!rR5;$fa~0Q~Q!APQR5%=dh$FMas7G4wpza^rYYd(%o?f)+jK+?b`p`mY>%-HJam7ne9i3RpnJ9> znG*EG!CDL(Q8P|Djd#Xp(;sfJzN#!{+5aMDVXd3kuuHtLJ{=8fW!Gq58qM^APmcYa z^b@KA-+ingeO=Gv01G`{u@@xLV9anibig0%y1EDJ!V~EyOq433%@-?bhztk z^8>5@K#OFQoH{bYTafpDI|@i6!^$O9CcO3*OXGQdot>pVc|XSfmi4Dnnu$zg+M$sb zHKTQ1I(17rjV1z2t40Ub5`}cU;tQf0Q3}FiwPo9m-vg*RhPu0J*47$_qkQwO-A8Ph zjvWHwVKM_UaXD2?ny2zfw$#ur>!2I4ByP|*7RA@V&gBCeyf4WFzSbZ1%e%L}4Q?*O zajLA{Z%oVlykPF}Z8>w`>md_H_7ens6;w`aJaw_`IK8ldD66#%cs`1X-jc;;j(r)4 zXMgouOX=*ZO;F3IG{Ia|t&QS)t9weBQ%mM^jlvY-K}+KezP9S#4Hqj;5=#JkEXaTURF zg_SkgXKmKYwn zK8@eF%rCKx>{o*nXKMFid`CzCP;TcBfLN)!9`aMR9{P^Rm0m&eRXx2ED2IV}7C3^B zPLAgX%iOVii^nFT$)u?XDk2v;_7fzBm(%wEAf=TUUbgJFmgvK2gCda5x~*_n0Q}tp zpyUu_Bd?MlM{DHb>>Sk<^-IKziC<_@YmxK#U_b=ozU4OXImK~Cf z8~@xKz^njkvW7c!63y*J zFo0|cu3lZd?yQK+kdsfClP7lz~MV5<&vkJ~_*%)8*(r?IM zkX2rxV zQ<84{n$k>4TJc61N$F?D9db2ZjMsImW-E_IFl|HQ<0HQ2&{i|pm*Z7J9hlDC;&1ec z@m*yxU_onRnU72W!+iYmgX!6cnJh1;-UC@}UBj47#dazBwv$OH2&&OL@88?xa=DCP zAIGE~@;%y+b^E50ak=t&n-K`_whD?yd6C)jryZ_^*#(B!w}HvrLvjn)hlY3;;ZEh`R~cl=%acY6N<(ipF;giQYJO8a$vD0p_ST#?O>#Ho zN?IobJ5?mIA?z}GnJM^leHFr8VcFw{;DN0(y;E0LcJC`72C9}cjaMAh)Mab@YA_&G zz>$aa%ak^Okc-d@KnCtzN-*Eu$9C^rD--a;%suOY;FM;drt9N8 zC||1o5#zBw)GhBv6?=2hed(4qms<6)BM+h3 ztXfGu%4Y}Z@RD`kWq2X6%04$a`(h@&LF-AG1f8q!Fqbd^y#qWg6b=vAjG~**LF9R( z-G7KG1Qh?^%^*?JOv!0S8g7$EYr3#&4)R3n(HrM`b6@SzRAAeDEN1(~&qdMMC{eM; zP{sB#xJo;&f>mzr>12e3+i)5zzS`kHcNmA_-3vj(aBec>v~xq%6P!A|cQ~+@W)xH; zzlS8yv~Ateh(mDQzJC2mv6gaWn9T~(E%;LDPCD%wG{H&)M5={I5xM8?Wd3=pMY4{f znEpAL74jOWiH*&p?N#zi9^d43V_w+b-Fqvu2FsPfAU+$)^)jE1*JnMybVB%`%eXrY z=B?G4g)QPAF{$3hl8VRPN&Ezjfl`A2_KC=PQ4A$9VUwA0er{} z+C<1wdP;ukxK&`vteYGax%kPf#w%(KCYfR$rAtZ?We1->m7g;`Vo;@AK8f_U!9507 zr&g;372qm)=bt#ZGE?NXTmxYZ+X0jp=WH(p+N~Y{1HTECAVIn_x)=nkM&SN#^5gn1 zu_lvJ8|KI?#e^CetUNDZK0WCW_qkTm(> zx$!}dW;GQit$waakwK*JB@Ao^D5V>xaaO(V|*Z=#eRgmyd%b#Zv zo2vNFkQdPDpEN-hlR8pNWCset;ylz_R~EfOGk$>pQrqGOKvQLM{xBn1`w4dG?QWFQ zi`5aYlh4UsWt@a2LyMP1c&logV4S}hR^b)Pl`Xufr=0QYr)KfL{HmwL9G*EZP&)K| zMF~7jvW#gK@oH2H$dY7@MHu;r_>=WQ;m0T z@~0^FqKH@|s_UqL=;BNq$-4eghI#7>_C!v-KJ+FXRiD4H_MwOQ%tO4O32W=39*^9+ zs7WaEFnn)=PwuC2uZJ$>DnX=wye{vzJNM0Cra@tK+*{e!Z#_s`mDQGXC8s>vqFM4lzW_{bHK9X8fqsd!{HFS%0>Ng73#!h-ko zKbL{7F*X_Y62hz_|AH%|)!uvp4*$M~g+_ueZa;!At&6@9ud%}0YQlwFOw3V3A-PtJ z1>a8_+VXqMizHRn1(-oo=`C5PpTy?stnE3OHdDdw6uu%}QFG_5iF_DGOdJyR@hTj_ zsWocu?!@mB2Qy5+>zrJ!#x#*5ZOjR2bxhiuapUNa39VK0-gG!Wo01$^Qh?k2H&HWSUH zd9sMYZ>9Sp%X1cFgQ^@gJII5X#AshMoz4Ls0ID-)XB1Ocwo+4fjZMmTz5QKqVjMSe zA3X4IZR`7rMBQs+{loDRO-`Wr@B@HSSFBb&=I+*1`zPg{^$P@ziq8XJ@l;u81`QNl zheAmRJD)+2Y#gVtF&?A2m@z z4X_qdPf(w`_xJhd`gQ)`hy@q9mk1mwdHsuF+*ThjvY5h`{|9 z=!C#h=4R|v|IefjC#V;z3f5o^=E`ZDgwgfs)dF&AWP)fYF6R_qO?tiCxOn~ zSig%uoY4}rXO+APH|PpHIg@>f%@|%qHga@!rnY7CYV)tqPut}{T9Q_Sjp&0;>bl6N zj^hZX1^zJcsxN0sVNvH&|%2o$d*|`v+7Av zidXY1W1d8D=#QE?8D@Wu?yBX3nm_t+Ud45K2=~=R3f8y+fKaj0DxNdHbLW5 zt34v2+PKaN>KEB4@-|MLc0jwRB#P(P@|INXb2HLFA ze#)B49@PCcd~B%3UjT{h)wk(Lpb?y$F*`AUBGB zWlH?SKbW?Xa3#WaZ=P>nwhX5=i;*GL+_~cp^g?3{Pyn zND?N9H*NR0l{MfDqac9#2x&8fcNUO=7#ZDiRne#jp^)OcYA|g1b;xQ(63@UJcdD9M zjcg=w=@1fesfXO} zc;;XXLboPuGfsj|FUp}1%BpsFM&ejpft>{*N-p)3ui%C5>Dz=T`Dm3e*P1H_!#RK6 z<)arp+J+9hTd4X!rt|)2*+&gUvrZ03om&aw9r$yTT}_FiAyr<_z6qc#;!E(mDbilGKsK6A0zvAe<{u(8 zXFF2ln*uNvC_lP;F+VGo!K;rGKcn`rdO1FAMpcXSBDS({__f>3udW`0CyA;z^dLGr zM1=Yj<4RJJBSu7Zh;v`FNN795{CWuAt^FR#Gb!%{)|1OC`2OWB?2T|HdVd;-pszhqdElNOKuTkdI2{SqCUOm^7~zKXLh%et`Tj*avCp&p)%NNt@m)- zu%cve&uwJeE2Yj%`BeFGaXFroDaHLT<8PB@s>z-wukF?a2yu0zAA`3t&rzs-^As*^ zmSZTj`1SIIhK9X=nm^^hs%u*IdGxTfSsA1a5w2d(vLCFx7o9gXMh|oSMEtIHGfHOe z()oDngey#Mj>&XR?S?=g)=^c zm8~8f@XJT|?#S&$rv&ft$oDnAzxj7Gkxn-%b&ZM=N;_@)KzOfEm&S(WZ!Gseatw2` zaW56_bD{g>gAs)6m}y08Dx=VeqGhIy?=_UYsUj#gaJHco-aJIqoi)`Ul<89~izQTG zt=nvaGnwrqelSH|KWdXRO@%|sE*0m<#)BhY9HHEeM%i8BYDPts<~q;n|NRV8&psr= zq<|qc!czFcd8CjrMtvT6r|0~~b5>mrhLXSGuPJuzVM(@Y!F1b|-vG?9U2#^}x^r1v z{xB9(CDw$W5Dw8<7S`Xj%?V9NA$~~#cN+he!ha5Xv;K7Xy0)2 z$SYczxF9;x@t#g!fRkvyQ(1gQAT(}kOxDJWbhEw(k?kFe1VW!0^`kyJVAQ5?@uaMEm zaNmy=qNn`O&8Ho+>{+1&oYQ7iVWy{V7dqy~SyRe$Ga0giHhaRHl=x4AQMHwFt}ed1 zVn4`a`mBC?UKkBpAbVmUvP-v%{lp=kjF94vizlUBfx~7G0EAST`QG;X2+F0nvI*9B zDx(bS`66FNSS8JyT~kSk`U*M#HkSu0v+7(`j!-J(-LqvtG#fd?>_n@DQsX}k?Pbn4 zJ6NV+&*(KKkl_AaYu$Lfd5{!4m7CEC{cbjnhHTk!w1h<+s&Aox@_H+_&G>=k*qM2j z2wR;Z7*P=U{H+4z+*ePg%)XLZMWbfFVp_?n-=g|rwJBFXgE7&&iH4Qa-_|lu%Z6q;Whz)tdXkEmN^VbS`Sto}#UvS{)14`o1mzf(m228`2P=L+=VmN978${-WQ1 z|MLJi>56nBZm@21&zEQ+U412SZ{LeYV7l!bxMTY{^5k*vJYD3FLG7JzdzgwZ(lsn*h23+)u3m$gYqMD!;l@H8BdrA__R~XhjI9ba z%@eQ02*z;oL5tz^)_d7XD$-kmy&JRHgmgD1T)R1kBe&DB^hMf}4LTdnxw7-+%ls4T ziM{^i14rq?1^&Y2;ObsyLJl3_^_|+YPZcKTdOLYHFZi;k{0+ydzcA^%jLk(`_?myK)+*6(yHRDTXLU&%HCXX`uC9yk7!e7boRs z&Ix~>VYyF7BLbD#zwo7%S;JBtzg~!<7T$|g=f8s2dd{MGk?Rhe)N7jVa*rsD_lT^$ zLJ%J>s^hvoeIW}3T~Qh3hb`-A-t=x>R^{B(-6c);V9R2KrBoA(h-a;Jo(OinJ#CUo z6nTeOW%t+#nfELMP$}9|vlQlK4Sjifh{n?N#=W&beGwWl|AR?nX(k-(k(wbgLvbYv3r-*^*NE+o7 z%V-iGZ)vZ?cg=BTaIc)-NjXjqa8WSXZHC@i6TOw8YLu<)dkNPgvKW#^*#IcvM~OnN z8GqwBF=|Y4259(GW8Kzl^ab>JtLH`WKeXofh)Frn+xJA0<$XR5=O-1g2UDD^eF_Y8 zX8-DMrP;UJD4HNQ4y04P?G0)lneX7kgIm9xG@|!{Rd~kZzmlrR$X?*8O$MZgZu>)D z&6>@gmJyBqsq@?s5E(L_x`C~e7JlLtUhhW6-|I&@j=xYJz`Sm8s0&HW4E7Kh@ZcAtv$mrLLmXpsei6DU{rNq8Eq7df znp#4q*82k7-*sz1%6_8;&L!=;0ih0_&R#)H^PG4S%sdh2_-zz!>Df-qxem$xq8CAt z8za+K&)wW=F67_9bQDI`!v)4@9snxIOy7Dqu4W{yiMEB1D_NI+|E6>m63=usdz8-0 z-T6U5_cAZZ6|?;$(WEb-IVE0iGvsX#zT>dbd~V_m8)+JHs6sja?JT3rJ0|~@*)R9U+rcZm>bihjcrkSnY3ux zF{SyQJpeSF2ZCASZ?(Va1`YG(<^NsD;2!wXz&hsvEpsBnqMULGBv-TZC8jgWI-U;4#6+zGaHzxqesFoKzq8St!yONiE`FZ4F?$JzrGDYzl!U^vwzE7ZQMjMhY zE^DRevX5Q?`^2c88f?J}UtsHCH@;JTT%HH$3r8y!z9V)chDbBSvfANLP?W2^Qzhge z-a(Z2;ZSr2@4mbKK^MSKU53_jV+_H5L8$iSPq9HbZV-jDP(^ z&%PlVdLxyplG`@OvcVn>D8Ec7g=>27C zV{8-bhISpyz@>n;*KO$3jY;n;QYkT_sEZJTx8iYIWw8joa0QHrR35xMpTJ7R)jj*V z?qA6Xt&;{2anneW9s_{7EI9>0?J-V7v~@IqHW0>10db)mPIL7Rp;aBBb46p==SR2@ zFMwWS8ja#mA84h|zhmsL8o_~oN|O{3=;q)eW7!WX=WC5o@7u%9>d6B0=g}CygAEe4 z7Gu|{@id;Blqp{2HIi^`HhHinFTzDS>+DY~mIzveQIx2kaUy%uBACtc;i{I5-A6+a z)WdHUuGs8&_vfMqV`RXZW8c5|%)CsNY6dNO>v&W&JX3KQBCDifw~C5eMsR3)YzXJOFv+^BOykzpI4UvZ zGqW_}EVYomGu7ue?w1~?UP=B)i!JT>$*WR>=B(lHnj<<6Qa1r6U3cEEg~UI)M4hQ; zHgWsL@mAxt+w!i)={ztO-bmwn5T&rv>?JSIY?^9?zeFn_SO|74nVkCQ$QEiQ3EgjS zGaJWfz3K8*{;BM%spA5k&_h_jpLA(a_D7Pibb()fvee|AVW|0K3x5397b;vyF~>BJ z#YK_1X@>Ipv|`EnRsHB20y#8^h)*o2k1m`B! zJ38#v*y2q2WoY;=RBqVv-T9r+Tl5YPdi_5%U1vO-@B7tiOU-KSmA14>jH*ot?H5H+ zGj>|ER_zspwA84TqNq{S-a+jZTT#^BE2vF^5=8ocelPxS^5(fed6Iix*SXF)_lw6@ zPl`1Oq>_V~)xqzFQ?61+OOd>b=FWD{Q#?2RTTri2eY@)+xRCkllH^MF%6qn3d@J%| zrld#hsE-r|#_95IiR2MW3@R;(dlj5nF5dj3xYqRBMH2h* zloO8@^M#aifjZL}f5RkwC6us)jgW#Lzc(u0aB=cg+x&Ki^OB@976-bXm=3n3Q1{m3 zu-ZuP{Ip?)7?mCc&wX)tD$`77KCw-fOq&GPq4!zr-)!XKEi1Ht>0~Bcd&#N_a3qw# zoqzC`*bY?46lY-heL3VSU#a7;&)dd0VK;Q%#GlVcbYKvO&=LuAHTk>OZ@hWd-zpHyR4 zYg(Uhu|saLc>Y-&8YGG!DvU$oM&z8Ck@Og=w3cTsmtA&JgAtlPv@*UGRsG;m^J}E< zV(iE@CZFD&WKIeP$9+kzV{P>A-c7%f9%O_Y8RS|2mGC^skJ0}`jB`=-%?dt>gbZ~0 z6`J=EFEU!r5fFL$WYY}N8;UNRZ_t@k;JcB+#Q+|y-c!@+GX55b zy*q#^w8qJ>&Rk(QE^>9YMbd4ym!-)5;9>g34WLf;0I^M5nExyMt~)$y%Kv4iR;m_~ zX;_o!i-X*dqxrCBF*ff}C%De4@N>2W>~oWiOV_b1?`gd->e8ry`O$+R+0xh`>v0PC zJ!-$>GO(<%SaQpQvewfx&kwUTt6|C%l!W}SuM>4NhK+y8MvnhIr)V46P8>CE>s@&U z*8EvETOI9U2KHl6Zu^5#wY}<^2o;*YV0ysq!%}kc_OO?uH_z-twmO$cv&{|hFc$j1 zJ-ODiW$zVBFd4&+u5QYt;{5Nfv>n-^UyIgnpdk*T53jrp%1FFs>;rK35ZYexrp$L& zGe=WJ-12gZ;-ARn+&-AQiEC}Xj6$kFgHiTnG#5VO4K|cML&|(-umQcUxR`#qVU`7= zm_?d0p*50R8ovFdk;$6OE!5~2|~_xh*f>{`ffkAwt>F;85g=oEFN!OW;e_KUN5oP z+ti&`_r~4ho-`g1SO{<*wuwCR#9dD;wYoL#<0k!?;uPaQ;d*^C#+gasMZlP%!qgC! z~)gF!!H$oFw$C4FtiVS-{=9@fN0`jnKT z_@$v{A+jE4*04zGu^9XI4cxNoyXa2JEGSTyFSWI}D`y!s+EUucssR#9nQZvW*DrK{ggLLs zB*G=`_2-5skAR~ZSJw<)+2S8r|7H?B)X5_rx&F6I`p*!7dicD1gMiUe{{bn?FY^i% z#A!J=d$r%Nxy}a)XW0Nw2FaWN+&3#d(QA*d>J}cCS$baRy{jE$>Wh9;Imf*8;h7Pf z#j$7T*4kWjIe5c@+kU8b`bf|?zf_+XmD7>xm0>bwfR#AuKhi=pv)F{a3K{_Ed;_mw(5#EPp`vTMR7aRvZw=9Pd{0KDMy3Ab zW96+=C!FgnujK!z2o5Yi72IQcT49VN+rYO%@P?r9u5)Bu{1{C@vL0Gxm)T{nPMCGZ=RHea`?1jvZMY@1E4e?@i|=b9&J0FVuMEC$Z!7HU^i(OfdCWYb z&-+!1Reh1!q&%c2Xdgv$g;bOlD&UCBu6(USrMRWz-u)Cam#6hvT)Tv$KFqHhOh-qf zSh$xO|NMlY!=;S-{8{|DxJq96CtBX%9Ava!++^wy7xUeUKy8qw#BAmmdfn)C-77sH zYV}dMYZLkUomYX+YUGPd6~;p5^z!RaS=`qr+V|sarowvHb%s}8Q2m*Uv}}uZSB;+T zMY=Wn8$dbr#k*x>cXWCx=TrvJX8xW;Lw>@RJ^-DbJ$?Qeq-ixj=Kour$6X`E#6cwb zIRCU;@vE4MHuo}3$BQ1TJ(~ek#S) ztN)hFXbbPs9kmA`iAss+Qlk65^t{O>DSB+WuWRkqg5s?C9yK|<<|Q#yaiR9x3CpY# z+)%7w`=&qJ^~ap`7@j7pg`4-@1>aEpZy|2r!SACe(-)zy#hrzpZqx+DBZctfq7~Px z<`2fH;TYcVJY*pLVC6>BYDJy&uX{D>6qWl|HdxMOoLrSM3p#Tv=OaFN9_Oj?yx^St z*-u`Wc=Iu0%JuA|z;wsz-bZAJ()=U?wrsl_P&f}FCZ29J6}ShT#~xkXm-bC zqhyX4)wR2Hm$F8i%juKYY}y|n!{iWySdB0WGTY78;2H@}uOBVB$l;QoJWh-iSam4~ zv{{kMZbd8E&z%wAH`{Z!%4&l4!3(Vr#0EV6T=Dj5nuo$^H*&NUTo(oxvabj%87ki& zaxmG~Zb{esdjH*;vHxawgvmIQiQcxj6*SG|CSQ%cXid{v^q!(zDfhc-xq^qo#zgZ~ z=YSPPv@pbdLvjXMw6w>=9@H&OB^kccpjm{8RDuB`|;b^Hv7LVNIktFb?H;%U%}Dt+fue|q>|mf?bCq1gc|d)^@h5zEL3K%1)-{&nc8O7l?-o z;rdr0CW#Qy`pg18GohGyub>Xr1ZCQ2rrE8GJCZBVeI%|HH?@SSq1uJ63 zX@P&WJ!x2&Y^6>9Z$jjac<9oP+4}931)2V#AlqSiVw~^oPFMS~BbZo$#T?4+>q7Ww z!@(zgM|9c4X?~%Qbh-~@mQO48VI?Kq*P`|OYn^^~!m3_AKXhlllMuJJc*mBljj8<~ z1vJs0#AG^HSn8QY8*OVWnzAhM05j(`GxANHa?7|hd!qD!YR>s*?^AhL$*yHBWJA(7 zxz^Lc-!^`0)P+u-lQ@h+Uir@U1m8Q_I-I6olc{O%v-{459rJ}OJd?fIp%Y`V&l!IL zVbqEjU#f9ZNqVKL*)!^FxZ%q(Yt{jxkvF`M{QSl1;h3gmif80}oaifXi8=C^d*>Zt>5m`Je0f>(LDksE2VB*K(&;|0FTo~<&aWyD8hdwFR@iqJ zC0<2S)j8r1ZUyy`uT5r2n3|vIC}2SSm3hQ7f>B~r+dB2e74&f_HCdMQY;?MhH`({T zx5DesXbkOW_`r0U#6Yw8#golho{~Z4(&+c;AV*@8=@>Gtp|lLYXxig+Y_3U+DnXiz zzpap7XSub%%FZ|2`iP*Ge8PCks%Le-fn`uXb$*sM2jXEV?eI4C8kg^5i*s8XRv9UF z!M#~`?wrx&?fLK@#X>)YK=Eg%RgT=q>6@_NW?(5PL+uV`g`iy2%~T~!u6{J35ht%_ zo9ADYfxP}cmi#VgW`8cwZT4Uin`J`u)k{nQL*8wS<+)3v7>7e$=k#h*Ek{W+2HW5f z?re-*Pan&!N6>9UeG*fgzRi~Aw92Q{w>eZ`jcVJD2GZ_m3X((qVr z02Q*tSi0tP_HKpl`B{ZTx3@eD5Hp0Q@$d!TuabVQC}Gi3o(Y;CcU95}Ppvwcm1?Z0 zOWy-5FOn-QGSoetfo+K9B4cQd!k;1WjO9WZ@k|#Ef}^a3vIUm~bXq4)UAqDu85xLA z|D4aR-j1uGa6t)?@PV2q`-E~SHc@!Iwzpo<1Ycio2b3P2F=NIN`Q&wSRRot306UG3 z-BWKzrdZJ5qZX7@o!(v9m#{3|DROG`8!JD#2JNDfN_51w=x?ghfEw22p&!}&Kl(E! z+Am9ZtxD~1er__E+Y8S=w{FIEB(srOs?8PHCr$tcb$Ph{RI_^Vdj35%@lckHRWbd7 zrpoPC_80OR5_dW>--$oBj;_{Hu%-DqwHGwzz223ln_5p*CsmL$z1=7;KexbQ3i1*E zJw9c2eX-zCTzQ(C-0_yVVMZUje&?w|OVCUVW~RLPH%`3bWJ`xAXIE^3z!=8f*AYo} zhX+k$%I_o_moQJ+(NJ*v8)?%lo_6})u`+>c-5GkkF~tKONEDR!upIV=X}Txd)Dp}1 z**FbjT&nKQgqh0Q(i{wCWKwmC$iLDCyRbquNjPV(v_ay3=rlV7&A!TdHt%x4J=|E9=%#N3?x>mq?F zmn;vgA8Xm|BIa#T7JGn)W zSk4|nbmZ9ePy!RNR#mqSXrV}b2b!&km(rO;X@k{+)YtIHAkO&$I%rkRW5d`kzjT|? zDv0(!iW}1;OMK7=Zyc75WQz}q%QNYD+tAWlIWAI`6^&w!2UK~CMdz@MFG#Nyzu}oq zW=u`#KZ>8TFS}GNM|{puDWvg29w9gICTcc(*$xmV*kyi-Bht2^ZX=}#I{n&8v}2_R zV-5aFjR$^AWhOs0j&hj7UXMAIA$K_%ZCZl91^0|~>Bl&lD^}MnztOBp_siCbrm=Ao zBp>%|O*VdDO0~P1%NMezm%bV+6!SSNcKnt^>WfoCM64vrfbDhM{6wMvY6x*E3tMv$p;Z_{e&p@voa{= zzC*wE;gGa{;P9)p8W~rPB8s-6((Fj5O=sJmraUk{i~u)mOjA>6UB{8;;Jay%&4=zs z2Ji{jwoIbT@bc6i$HiTw9C2WU@srt9I7AC~z~EpuvF0BWQ=XTfJ5{?QS=r4EebZ#f z(ZL8=jo#n%zyN<>3Lf)G+!=(M{2&SM7`6A$wMAzS-vy;$dSPg!Xz@_!3w7bFS%-o# zovyryb%U6PV{@)Y(4@e0K!5^aa08$Fq><@^FSBtgL63-T|0w490J$yakn8`Z$2l}X zrW;Pj7mX~-cXUME$JGWYxE24S_*#ECObSW3^^anGfCT+Te#>stBAJh1xl}eswF5t@ znq}VF2^HDOWxES|K4B6Rt7-wlJ7wqlc0x%6*5tFm~f&pDjLPzVG%6 z>fU^jL@qKd(D>R2Q3m+@GeTwteQcckQ9e)Xy>N4casDu0{s!HBNJ(cr(#vhb#z0N6 z-^Rb@*{Zz?W&Fc_?&m^NC%Imeu-QVBTpO*JyETKvJ|o``jqqaVt4K_b*;=JW8YGpTsjd{;iMd`jsqLwChPTj~-MAJgFQ|%hRlK z&!GbQ)SYDx>JFqEc0xl@+CC`!JKsGjA6j*SZpX#TH)$7Qh8^#pc=%FKfZns5sa(7X z>Vh(&Y|HLa{rLV$d0N}rA z^D}c+*K4#$OB>Dpi&y_F4Naj&wi`;bEnTHn^%U<=x5C5zhJ*dZcE9>lS;dm? z#6(~SstHRSVhjSG$il!Fz(S8_xcXx^jA9RG_)+`$hceurp+n%6$BR$gCd`UMh4npm zzhF*H_WgA3sTh6{M)$Y)YSdzzC{`nf6FLX@E6mM6VsQzv9W_!h50_pLGK#Vs8e8(4 zT=OjloOyE!DxI{tK1G(|@AO3~%RCH#>E=y8lZ<$K(Sg-2Fwzmq4dDInSY&Q`PW`^R z_+2_LmZ|Q7&B}5Mmthv!+W#n=&zfGoPaChBRnkk)P9L-Tv$UuFAd*-t`^qvKa(r&x z3c;HEX<%fKIDqR0je;C?Ba&~t?Z3sMikvAj?Um}-Q(#blrOEhldj`gaE7!Jx-!sTh zgx5v87`ICeZ~6Na|6r_o&bVsMnCE2vLx^n1ePGiXp+l0<+{W)zie zD#;Q3m?XZ6tX98#kH6XNs$t4qleUQnE5f0!&6{zo)IFeBTb@eW_L$Xv=X%@%9sEd_ zL>al}WxnUQ(Q!WRe23*jf5E_nI>l6tE?_p*3B9_GZEk*SseO~SX$q96jj%M?_-5`H zB!YA&#v}Cz!dn?Uu73sk4yP{Gmc=HqmQd@=88Kx5;uJwz65jHM8`oPCc$@AJsazJE z4tr1Rh`RYm{HUH}xqD)WkF{853 zBh8V9u619ZAa|sBxE`J@GIykULj(8j>vZg5=8Dy82S7Jx%ywUZnkoxZ4{-u@408^0 zEzVR@68kg2M^USL1>q1uoOei@e|RRx#fZ!N%gca3uov5Anv zvRmB?-acanX^sPifeX@%qFkh;Kh0cfzai$OisM}xyCx-<=bX*_6K|&7^FXJc%oS2W}BzFIb}W^$GGn+nS3t4qJRAr@d($GC{h`&h1(=G@RW2O%>JV=!5??MHPu1= zEHCA%9+P#Ku!sQ}63sd~aP;SD*~}*#-Tn;8jGxL}n17Z)Y+4n9Sk7`>3lW(eKZ^Sg zuJANjx72lHf=D(i-dZJJ99{wX(BWgu_W~*G;99>5!pR_-5!jNseOLWsZDwqK^-1~)2+;ulUtkgz;1)8`Zw7L>$TsOG1Y9H;xZStw{$#t$!-H>_O5SdrSRBq6et=>Wx%8KUQq z)xO%0g$Lw&Pc=Hqml~;Ed@f+$^pn9-t>HUj@0%e%Hl+`{ZwV2ijnE*X%OePjM-jU* zrBo3%4W10oweHG4(ucRagD&KFWhW>nfF z6ARv3Ug6r5&SC9hTo5a$!1xn7EAivo>ZgMBABhV5UUlTeQl}pRlteAUR4_z5CkTi{ znMlx;3){Nt+Q$2`ZEYMeo*(v|2s^lO=hv%yR_*G2f0&Lj3yho&+5ad`PKXKXjEOFd zKuT*|LmazMp1n-N^)%2i0i_SCjKtwj&ku5@&p>)r?7w1_rL;8ar@VOl>CHR#RoCoJ zU#n@HwC$MB9!qc|>#w#>UVczw+fouHFtiY8yDDy$L7+b#KTfAm6f5;nC@4V8~shrRkH)Io-IQ39IhH1K}rI53nOJI zd?@^3^e$2gs%)&Cd(xY87QVbh%(o{F&2TW2iqi zM>n$d4)k^_Co#D_<6ifiLnX)EuYbYOv4N^6nbrq*v$>kFl0<}O+sSI4rKY>K>N`Kg z$JGPwIXgg<-7*sJNKifQ26qGX`+nOT1>PhHzSc1{Dr_ACz|NJ zo>7QOMAX+^%<=8u-E`@FkoXLNhL6{-D02rHxqvvf_0S7(XU3w*D~g_G_jax6GtzOj zQh;QMm(wuNodvnn$o!}2ZK1$`w`W%YL>uG8r%t{zXmO<`R1S&4EbpcP#q_VKf$0@g zsytvP07+%=&SXCu%%%8GfC}PW?x*Ftg;P1`c#k3sM!SS(g9%QlM%#7Pz@)SaqpE|bSPG%Y^++T~X5zJp1r+Il$Q z29YtX0s1nLQj^O=6D>CqoPTU6Q|#z)+G_D?GF)e5)AnL4F(lihhr=g+HP0(PaRzj3 z*gZycnOAU+;1vbs-mDUleC1m5s~!n`!e>jGSO#;87264K>!zTQhf2-H?`C7jYHt#b zq~`nHg{;#+g}MUZN++_?AC9h!)p(C$SWo0iR`S>vH|{(;1r(-9U2M z0o@r`X%X$A7CHWD7}552u1|KyN`mS=M70n|JUi51-!7~E_4Fv(X0|RbCVbXdR-9cB z6T0;K@Ng)(Dotty5OH*IH`?>vP<}KZ=_@jGHNb@Dg4z;85yfp zqR!WDjG}?O9C#AVq{rd%e5*Sk=o8-DWKweAo4z^G+T3?0Se{_q%!O~#Y$0$r>eRXa z;dkQ*(vkNmF*z679DG9zn@obxA{VYdPEml3reZ!o=pCa8eB~p(gNw}yu;8A_4c4rW z$B>DYN_-LiyLHv}7o)ZR`7rZ~XDA8^GB_YG`3;wxtL}kCR4?@PkBgt&p)414keL0} zP4VDS_XCCWmsj0qqiF;slug`wRWz0&U;I`qtT55{5Db^?kcFukPWu zXfND{Cy%k>!+Fny5fNbA^DklIjbTsKi!qza<2gTdxg)M`Q8c@E$me zKsP)L`@^U-A4=bwZGngkFoHH_oI7Evp7DPgiN4i)zc+(z(E7$M(|HjPXkP&s!odin zk}I5vnEa1IXLJgeOyYSde&K?IDz)B#j~QfOhk+^YF-zN3s;Xr4MkvWLHga$noKDo_HI;`UZfdwQDM0u^sa#xFKbHAW50r1;@wuA z8u!$m%WXco;vun^P6e?}bYqmd|K&Y8fj9Bo8~8bamkEq}P8S|TgU-gThbVf4=|75< zhf|0%?TplZd`FPJguCCG8uO~hP4`nblz6R%LS8eUD4@CC_J^JN0?G3Ux!=sLjd8m1 z^dyOJDDv$eMHh1CiT0zJHH5GBZCdUm{_B~irzvNMI2CTXpl7ST?2w#$g_}TpQP98$ zD_Ft)9DJSV7?&eb7Zi2={4$<^?nK`tc@SM!LGPDX?j9Y(*|+MXWkxPL*Q~zB%uu%* z@EZLte{5*OLVk^^rs@#m3>wCALUi$3I3eKOM;)o(dXf>AP(U$B?9qGhB7<^E4n1h8MTGa6fdGV^PC+eMgZBrTJ8qAWgyN>f6c z%){sjEJ2*VKs^bT4W*elEZ@j4_m^E`1?cbDM0kO2LuUWHGoN>vHs9-svYVj88R*y2 z;1yk#n@2LP(TT77<9etu`{xzS7JA)QysOX2btoq+@e#TQI*lRUG`bK&%3Y>oY=0vS zR);CJU^1NZf?T?9^0y{^em9z>Pzvd~LpEFA_6Xi?T_`mQKZ^0Y@D7?!t=VnN|4vBm zjn`IS^MT)XbQjglR+Ybh$)bFMp(coRF-DN3M!hVldRp&}|BYf~Fr%dxnms>sig@Q7 z1fMtS<$Kc3_!HX{EriU8z3xfz${H)bBF5lm8pt6y7L}eSDC4|8M`8_+p}SV1Fg3#; zzZ?Jj+!E{TI;Syp8~KW`v5E_X|D%X6xo8FkfrHrD17$`nXTlkpjR<04bUhbUnHU`Ze|{C5e2G4?1x3{tlgPP&Ij_qIO7 z*Crva=UFOdM3pW%OzuIF>-ufQ%?3Hygx<5x#Zz3vixa6)&P#JJZqjSQAJne>#6OBN zAt0At-fS}<(EJ&>MCJ=qUTM)G59rqKknNDf`&zM zgHAqyz4!n!4X{?OQxU23gP&b*T7lN`mobTs6h_Cdj&9JXtfl#kq?c=VjfA(I}c^P)3 zQN4D{P5o}HxMf%q;SLTO2@%Og2y`m}11iGSsde8$K5${L>m=!>s7zU2bL@zDc-#Da zBPvS8>j4eP;q|6}5bp*UuXBvLn!BVrF2$ukHppF&htri66xg8S$2Dl%7+88Z0%XR$ zFuPG?`Yd7-?%+0(ff$E3Fs}Ej9=^7n#2NM_c0GPp(TXEz%=LB#-={zC2iMD)pYJMj zNRixvJ=0--(ZGg*t>q&g9OIYBA%Sq7C(K>K7W(MH~n@sC?HM7JJ*Bo3yXJ$2?$Cnc>n2hDH7>X2XEr# zO(5*A`3=F={V8HQZKf?plhQ}Q`;gbLl~QZ+8kX-90C6Uek5Llm)t3NXX$$%Ytv%=f zV}eoa%eLaInVJ)KjV`Pb{eIXt)QPm~E19miF7#)D>0Y6iT~BH+W0fSxUH>RJ#FXes zZ>yMwB3*>VvaZc+ORLuAP2|))l;~&#Ww2cWtU*fX`5mOqWw8Fsqba^3+*sROLSsw`9AU+G0qO3z=%IC*pM#cLDxuc zt4+MQ9t%`A*3mgj(XuI6w^aMAe@DJ5I>RN1WA94XljO#{0M5j(nl$10jDV?gwhz5} zT_Z96w{@PFnO7d_*Y*^|N|#lrY{B^*r87_wHq|yC6FVw))$_qSj9kIBj_Oi}OG&5| zp*kN~Ui&hqyzc|Xf(sHC0D>Fh2?@Yq0j4V3S{~URdPGAOI-yQDE5!y#SZ)%2>+66&IG%h4+pJ&iA(yhh5 zqpfkhGbbEEmqIooRQHG!Ki{!n;rt`J4KU;BNBWUV^E zy6k4y?;Nj*a1sn4E8eYunZ4k{NU z^Y3aD#a652gfQ&FjCAk>DstpS3cred1#!Ud_a6?hX%+}(Boa>B85x{{Sn**1-Pz9e z&UeB)E&OO*VMw0t7_-GirUBt|^a%y+rXpU{D)BR2A7B_NDbmK0x#NoMi0IwJ^%d^N z?Uv0!Mtx@AY85I5CB2sz%SkFuWzTGGh~7_sBLRPjW^lY^hH_doFDJC?bt99#ZE)r{ zDv~=2$Fyu!lI>(cp@Bv3qH|hVyX65eYX?Oy$w)Vf z;;f^&9u%|H$n%Ah4%YbJ55M1!1l-RoeAzKSb*Y^utvHC-*GhR8O##6+!k1C7-SW&p zG_ASm!mknsn*Bv8!=1i!W1^p?zXVMwi3{l1ID}|#JBY<*qT1F3TYdM)RQ;(NeUSZ@ z|H*eh?-M`g57#_XFUH6;Hwor1h~Wg6waxgmimlGwRUR4l-sS5^zARP0VmMEy13Lwy z=Gpw)gaq{$d{q!v+{TCHni!zh5A9a-KZDHw8|hFb$wEG;|t z+c9&W?FbkZV&;lMpy*J?9@noY>ZJF@r;~5UOlI6nM+M|it3;vNMst3*$?uq=qq;C* zs*{P_Cm2#4aPB>2IR_D@+GhLef0vV_+}@>k4%`Ei_(ofqe!matntU^S6(@E{2iu(L z)wVVtzJ>68TIUh@N&vi@1uIc4*GgyMD?@)hhRzD$mO6QK%r#t7H_exMF2(=yfOkPx zfUQa8*u2TBlCYRLK+#ki#`{g32umKuk9N0mZ~M+BmT#HqQ_AQ+0k^kGBeYb1|NX{E z&&reW?p5mu8fT%$Ic82{c;=b%U5&{BX`V%OrvB$)Vcx)T zi6amrPe75g{?A_L+&F7h`$zFx)$N>FuUAr*y%Td(x~5D2$aDP^c~2dA;|HWfMeIJ*Q~X=^xlhXMIZ??YKr3Za>kzv0d5IM4>Nl9G^e# z`dcFtC=|9|Z#Kw61axJH)QxMv;t`RdJhiBF*s&8q0yq4z)TO%nbKgbZV-7swKnMjNwcy^v- z+(|XoaHH`8N+0A1GJACdFs#nl+bmrY)f0145+NN_cK3#l$pnqUw2@?DA7HCT7O(^JR*6}sdD zmWuN>Cp0362eGt5bZ!i76AqCT&QlXVV}hqEJ)FD8&ntxPSo(B++K#zh5Cak8yP54= z{*AKW`(Cf(A%S_n)L*io?*ZR2({5UOW5|}-M?`?1Zht_C>8#~MSux|1F}I@(6t)nGKz62+m{E_E(44Fn7}BY1%cJXk<1_vUBb~(?9sVIZ zaB=S9l1#zl%vmo(QFH>C8>u(3@gqUm$g+@VfbMT%< zc~TZL0z{5mv;_!jOIpLIU+SJmkJds)u{_8(`8%KIYsQ(HC7!mAd_jMS{fdDBxf+IW zr~Ul-s5jR$kIklM(Ka78{b5Q}tjUet5qSee=Tro=aV60eKL(fw%3XWnsOP7rro%wd zhS|vJcIGfIDW^`z9BK_AVhCg1OYGt(T)?pCy!agTrh*qHrCHne^<^Btzvo#?N=cQ6 z$G3BCDNgsw^}|qyGR^2$1pVzK!GID;4;uwltG8h$yEo*$^EIkKcc}PIO(~`H8ai-a zbUpEA(DzX`DcB9G_%y!LzAVB9S7G_GwY?eaw^MO*WIF#rh6DZ zCb2+?O?-tTS_m??@~24TOSbIZuem8oo)WvR4A!Y;tpKM2Q?)^`ZKw?_h{x0f@)DH! zODS<_NrNF~l}B>+*Rr@!*9nI0PV{5W~{mHt;@rM z&In^QZi!`j2MuR|)V>yx_W(CJgB(k)ytHtL9wF5vPh}6XG95$mar3zW=ogbuyP!3% zd2XosOPwUG)5O*crtvi9(x?F@$0u$kt#9Mja21nLiZZ>tys2W0BFmp*H#@;LHE)TU z3L(oTOqq^1Ah2?zHo*+~F?;M?iUjjLH~C{sR?syfUq@=@?nVB#e?~@?u7sRuz$8oM zK69R6c|j0JG)6O0a_QMotwyxfgPQ41C6DDlO=zw~wPX&)hMlb@3^l@tPN#;|v2TjIlGg2GBf9QaeE6mMmOgYNv zj2ytrTV%4sFOwbqQT*r9nlVw9-wAnUT3KU5bCbLsD{mwgA|Ke&8}-)&15z@|VG)>m z*fQ(Q)}rSF0j^vc54~}o-r5AYe-#?xjk%MlKIuJ|0<9{Wb-y*h%yR{k)2!<1x;{Yj zBv93c1af_7>7eiZY`t)9p<&PRE5uHi8y7j~;XTZ$pA`PTJ4V8&RWRtDz~ z`<=*_;>zuLxYEJ*f0-HVvx6yjx;dCb;HsL!f!=ykD9Lkp>@>zrMH0 z6MaN+k`sBeUQbmf)A0(!PaX&KsceBKz{FW~&3h;)!gveI{@`Gfg1i6X|Z{i9lZ(v(o=95BdFDwpu7!+BoBRzNos+mwo0pg#ty#jJqipicavFJsc%M!CO3kM}5uwl>ZFbEe9YFIIhu1W4MLQfy@nzMe}eP^xv%ZTi}>LUw=p z-?1KU1wQp8Gu*sH8=Tl*HhBYgO}y>gZDl9sxBypc ziofU6I(Yo7q%DhAdS23(=Z5x(oFW@O(*d)ibQ{NMns2TSQrVKsBr(Rt@@_+_7VOE- z6t~<}xnUz*)SV&l&DX$DMxq2D-escQKZ@6=+y5xG{`|oXE4`pbOOZnX$icNoopi@{ zC01dZ%>R#KY;X`IehG%IeFN%9aK5uAhwJ185PskodKJ68iC@AKhUrF#f+19#=_>Dxb7Uc994%r?#fVZwG!d&nbzh7gCGr%@c>do% ziavo)XQ-{`r2-cVe8*a3hIIDJ2r@fRD~$Yqqy^5o24FD2S8jD?PNP@QmuSX+6!|=A z*pNs4vEcr5X;hzx`XoFJ0zeH1-Yu}TPx|+w0rL$yV0F}#-Urt7hiyu7uCo_vZ9fh^ zEZ+cn2#~<80Z(gzsG94_xF-->E7d{|eV=1~5CBNKM9ua@Sr+-14@UVU;2|6Gg+?z=1~1?t%| znJ1seyP$X8@!i@y?^+We@iYC`{7ifWRh^@{)7GR?&nRxG{u8JHNK%nGn^vBo&zWl& z$MiMHHlti~T$@tgcztV|YrT>Lt>4Cstlk@m`yHmHb|vmhm@!4sHA;9AzAk)P^!{?R zDBJBaQMiw#^}(gRd*fewo8qa?{k%Hw{LIPTbH$)}P{mXSBk|F2+m;e5Nf|oBdvCOE zev@;T>87YxNe}xGiwZW8gjiKNH%L>~3yZUE;&0DWC;9yI>jgggwbraw1B!YZO; zB=iy-1tM^vPx_TRMDw^EU&Os<-MW(Wn8P*(Y6f-2PDibPNX#qBh~#i90c>2uVj=%H!ec zO1%e{zq@FAr~M%^s!5|FJ3yl&fjNsII<`nigA;ijr_j>a{35es;u0I)W6)&~<0vBA zk~-VlJ5Y2P^}qR*@Cdl}j%^1pO;iGq{`^o(KZ+=LeGm`yL>AKT0=!F)LwG>ERgkcocjDC)04VK$i}MjJ5OW5QD~`|AHF zoaNmG1D`Scqi7Ku$2Y<2R2-Nr6l%OqJ{A4y98gIes6k1Ju~QgNg>N)A5NOR~`BblB z^G(|YO}T2HnLbZ>b;Wk|u>4e~b}C8S*H>s)2isrRet&N9%w(m$Y)>UWc7!jcHs>*O zdaQo}R1WL3X&c_f>U;Zhj|G7U`)Tm&e$8T~ORwYk(aAtU-_)+i^yM$$3V{B~o;TrZ z?QP{WTb|qofedtxKOYQ#F+{sejM+DK|8R7Wh$+r4HaC9;ITX8=Fk1V41oxD$M=;mD zf9{)e*=6FwXjuc5J0;7BZn$I$wrbgOn#-S)$U7;XyB()XwPbodD1xXq<1Hdh+v}X0 zwQO85zgkjs0U(vvK98+Ntz^dhN{@3#lY(o`v@i5}N-m7;l}tKftQbPje-qCMK(nu* zs1-}Z;v~SN>ixMvo)!su9yDX1`knk+{%wPoPhM>S-N$2g(;NOqQ?O6n6Pcp|VIs#{ zUV)E)rGG?UBm9PqaBB5A6{he(1y$e=kcxz`6dZ88*2&uj1$<2iedSMcx(Drf++Ofx z-n`l~arVlkPy;U3LE)VXB7YQgdv35`zIKf=Zh9)*oZOdrUCK1mVp0-e_a$WDQF(u7 z7woa$uUEo*m*A&kxa)+`Tn%TRcT}k^_Ma?87=KnSqpl+YPCgM>)80rL`y?e57C9=P zece}hf9`GpMN91{LIH;dQ)D$aoq*%v4!tK(0wFOs{)df;Uj#&D2}Bd&!YjSC2+Sxb z3QK>yGbsPZe((2d4R$@#F{>@FZ{Jc#WRj`4WAe2*tLNnf_rkBc|3(8hGa?dB5-zjK zNDw58D=ud8HKg>*<+6o;2zs=&k=VJiCqF(Qq{gc3v&s{SWGqJb>NZT+#(Qm4u&mmM zi>CcPeodP}@1C>cEAKVhSGb>|;c@8uuwI*T)ojy1-qGzWzDLu=Dx4bzU`!*|v7LK* zdwrj9#&^-m;1ybXo;HCDp^8fVf}#yvv8I$_=K@gJQFuuhpf*L;U)kCrvrHh2+cEz~ z(pASb`MzBg6(mJEr_zj&ZYClvpwc-Nkp_{@DF`SjNGLTaX(rM+dLkm-xzR{$#2B#6 z_xb+bfA?YIexAFo>s;qL$B(;JkLu5&v;(Nf=FRIxDz{S;`k*o*`&WB+pH5*WJj7ru z9c+@$WKsL7Rn6pJ;(3HLS{1P^fdL*F|*tz+WLlAsA)~mykeA82Q zKOr0gmW*5t{~?hMWHhOq5=vb>Jgl=h#r-^FQq}({!#2*wtav2<&Va*kx}4Bxw*^;P`4vryJ_tTK~J7mQo z+uId8Y-E@4Lj;Ak_ugYKKrwbV<8LiJ7v|r#Pd|=(z=r^$72q;7Zb8M(^uO{d;6#yR zSxNE){G7{v-8dI+!}lzX?1Wr-mr0hW$5DOQle2x1Dy1Rwd#S^Ud>>f=`Y^ZIJL4s{ z{M|ob*w1NHT ze*5DMWrBajrYYeYnflMnJGj$!%Jy-^JB8an$tM0)LcccggM{KzgVuz=ccRCnx#^YV z{`s_QOh&En66xk?{jK&lG}KyxHj?AW?j};J_KVd} zWdE#OhLh?W#Nq)#Ksceza@CO61g%rzv*xPuD0z@6tSH8A1;6^WFM=iU{uDQ)rvDeq zDFQeH33q&Zd@u;M7T!KO{t|Dog2N4&=v3Xma1`WCme{twdUWqz`|H<$`qvtw*Z#WP z*+$J%o!@T)xkzXNBK*p^Rg7ulU~=*=}SjX0@U+^`^z?<`r z@MV>YgC%S^FV?2K(v||>m87&dvt}#QI&-G}x^Gay^@3{y?*3xx@%|ya6akwBOdjU* zGp3O01%+(OsPU}hd2bqeUEQ{3(+^ce3s-~dxTZdF^9y($hR@BL@alV|3b@@LJZ;|* z6IIN=o33hIyTuDJVhXx8Z~pQ1k&GiwzWZ-J+_3dgTd*$N;6RSvSOUP@YM(|*+VXXN zvWscBVndIM_(tg+_B>aY`r5+`qNlBrRUV{M=x<#W(>xGj2UrJr9{Xs&b zk_gs^Z}m?OY&zuYE+iHnU#Dd8TD+=K=Sp&Rq<&sbvX~yh55NE9V1zcbo%$3pRP@wm ztRDH&Nb%8>KfTV}>=(^PR;62_jV+%071&(^>6%AOXO`L*(mT^jtW#24eOjC!FRQ}c z&UQ{bqsyrG!>`?x`s=qTkzCB&nQ9ODLYGO;W5X4gk83iQxBYS<=RXTrd%O&TfmsUXrN$-z_WVHeSi?azn zURUnGV}#L|pIX8t`{LMWd+dGuo?ZQst?I%?VaB2rR$mPwoH@R2edr>A51#?}Wcl!} zPr+Bx`g|2T*iuDs4YkEN-^_kgJH!s0SEu1#7c?Pu59Nax+rtH`U9{urp0~9e862L3 z`i|_go>*HvJK*0uqND$MEUR&Q-g68!7|C800_{P92uKrxmh0E;+Ot>Pwl0)kHBLU@ z6n;GzXAih*1`|WB*cyH&v+1g^UiwVZ4(HX^@mm~S8;OtB_LNhSB0MCTD<)KOg=W46 zoZnG4dl3RbtqvVie6IUWXUSu2fB5~W;&&6oI-WH_ivu7xy}WKuaM4EFcjC+ap008~ zK+O;NI%vZ#8?mB#7M~4zH@SBQgA^zb5`;iGJQ+Mu{D5KkrLx6p8R8*9TY$gwymH@C zX#KnD^!1gpub=uu5gV1;&6)_>^HTL8KzBd32GM-caU%B%NH9whm z8;gVOIO2r8&l3!x2@tHm_3&O9b`3U>w0!QHfs70T{_s=o2k26%J?xAXy-YCK;FFm@ zH=AX(Hx>&apT>!~$cQGQ+yV`@CEHjrf1$Ltgr&`gZAN$Y1M4GC_MC04g%fV#bYK6x z70d$mO5|zT^C+F0`7oK_8SrAAWB$v`25aLb+a*>kzI_$M;!0-178km4RhRi*O;0Qe zTJ-Vvz0>1OJwOqh+9DLx?>pBVa5V_UO8T#^(F*zDKivmkn*%+CI+CL;ogn8~XUDm4D)x3f&Mt_;H`T)(^2d z*bBjWEfZNnd%1?D-?y1m68IlY%3m*TX={PqFluqnj+Ge}1#YJPrTO5WBh@3j^)9 zsrsUmne?5@UE_<~5kY&>KHH zy$=-sYk0vVCk;kIYY$m^jQPpPdh(-D`M*l_U?Fs2-qgme)g1)$8yMF=3i$(qC~7y^ z_kty2u0x5y?&&q^63`g=k3#b`wdLpug>y}pz~(RRy@-a*WN7xes80eZ-6M*%sBEWQ z!F}x?h3xVlSDg$Y`DfVSqXu~FS{SRAbNyZBk+^W!i=0)Sh+TlJqy-`BKNyD_MPjZ3rqq}#8m6>(O&g|z#QIr4(5rmhFlele-nrwW3GmskD~_z^ z@Tdy1bR~$uf5xAe*(YVeDYu(2uA5)tyM#1UV6K8$L9p%zQn>XHkZ{j`zsP@Xc^Cqq zD$jt)(%%ro zz)juB)&RtoESbI*g!@jfMea@X{zqZx7e@|@JXEwiW(NY#g&W95a^XB5^%TI{Y5Wi1 z2_@^d0oy4Rn(}M3>abSNUJ5qn_rbzp#3qagKFfTb@qS+Qn@Xg8jJ z=g)C;4Ctm7jng92s}H69Z|a9y-qe=Lc3%@nf?&o6uSWUrg4?j(u~Pe1?kZP%@mz`T za0_$xb9y5Sw!^ekaV~-nOsT|+YlrOUv<))zTP5SH|| z^P^|gi7?v$$jAjA3v{;u%cM(}Oq)zY`0_~`7w|sS@T>bMYQw0+L`adp^w#jRSLP3} zFZ>vy1t0j3Ly&dw-7}mo{v~0wER2OPUDS|_p=W#gsn?iLq&pCYS+ct%U-wH`RMgYiP*L{f>FoKvA>NrV#KFoxX{N;F#^a9vG;T_CjCZyaA!XDOfl`mN` z3L`<)H|M7q@H#z=shHx2&fmiUx^l`skxswc-Rp+q42nAg@&AathNo#8<$JbjF0J>-*Wr4^T_Q<-%C_A_hB`SVXIT) zeEnOu?K)mby|uXQX^PX57rsr~zAKD#E5*YJVedT2R#bdBmP1)L)#AdIFdcAG`Em4k zn>p{V2QzSif%&A!4yWXDu{Mp}s zT6IeAr(s@PT$-oL$sgC6lWx(VbE{Tn37q$vaUJSU&_0nZwr$gLi)O{KJPQ|jW+CGfkcwu`?_aups0dIZNuZVu83 zZoXQM91BYFfe+$#&WF7B$wr8#2-fu9?g|kGgxH>j7DXb9_rnV=U$zv54ZcHE0${&$ z&}$zUkn6*@uucsq|MJ^LPeE1+oH`dqwvF3;r_2E){z4UFUPv2kh*bbgjP6^$d161@ zdyo`JHk#}|LH%}LX`QdjGz&s?fPq^xdCyxe)0IzARL!!pKvwXg7L?TimA9F}m*(j9 zzNZc1Hl=tq(s(F;hAXjc9C$kc%uaruVpDLNaM?Wb>2v;Ld8|%qc4TO2^>4PcRJBSo zsYd`nM;!Xu_PpKk!AMLq+K{CDI%v|L^l2O>uNcb_F^OCBi9SE79wz_Y1 z7I%T}TgpTaglRMV*1v7i$y@(t``m~$U-{^pbqme8_rq~^D8Vtn3-ki)Bcw}YXaZ5Y zW&~(}r5~)10t}8tpm~V3d9#h*FgySE*2u!v`AHgkMa&Uqm3#%f3!76#E#Ejc3e-;S zVh_CWd|v$fp)|_vEW1yknCRm&IDC+gBAr0X1(z?g9^W12Ik2EnP%wtS>8Ho((Q6&|M&)?gFx z(UFYa#IkPMJig?ZY8uH4`;2%=nD=-0EZBOQa1)5-G+8nDfh#H6O{?ON+y{+fV6D?o zv^r^%cqhxz*0B4l+H~NB=HHe^qS(ck+@6Tt1V*<3!kKrO zEkOn|VAW=;M*^4EgLO7uja-1q^u#GGcL#~kGKGzeTk8KP0w7}K+%Qi88IuxLe(wKj zH=lfM{H3borkyQn*ULNsQE_)nwaVH)86Qzu9b9j#2s|eMUO*Xp77yP-|3^mSGMYmLq&tqB2KGWEC-(bqj(=e7)CD;Fj91OZs!a547J?e zsf^qeb)Dk{Exv{MLm165J4*~C(_z0wRV*%WN?tLz zt6a77{AS{s6OU|r${4|-w+s84NtEyTqJqz^(d(=+IWk|{bD#HI?P8mHT)I6c-|Ii> zgXZR4dC#ZegsdTtHg5T!=mc?U1SR)l<;7r-dE~cA?qHBo5Y32wNCNZiaIkNGMup(0 zSgRSnw1d4>vY<7TW&vkd*I3j%un>_RbEmSS&YVjWT^U*u6;=V%-RWuJU!Gqei&gPK zQ{uvZTg^REI(8MX7<=aJ&I!_r z{nXA5(%PAvq?;~yvhPT>-BoSUt1u8+`QX>}&Gyjfjf@YB+2LwVNAHrvpE4|hlP8Yx z@JG>bDjqt^P4i7w)xu+g&%sL8*<>#4W>)#*V5L2%eh>tm(-Kt>96ancNbpA=)X5oG zj#%#K?w(-3(L3O8jQa7H9wUA!6~5P~qT=6`$tgDeiCbnNcXy~^r*}!{<+;n`t6Yj7 z4i4ll%;o}PYC++x9-rKI|55lZSavN*6GG;KU5b*q!&{ysJCI3`OCHWZ;NTLZ+68sy zJ`VExThFm>a}P)gx5l%`xcZ_Sk8}rq8mn+kf{Oq=u5@T+*A%>`p{0JG#{6hoM zH-6t8uS{=t79oBb$3j?%=IE~L-kHT=r&ZgfS(QAF8?1n)68&vQnWuh;l==%H^5i>) zyBMS;de_lQcyN>BMZq61rs_+)p=Qoo5GegckXj$8hapU1y2n1 zrDIHaka`h_8q<(IA#`|eRsKANFYsM*Y=!Y8d;SseH89xgiJ$IQ`lzhXEE5vLJtd9~ zq9;FeU9r&q{%qA&C`OZ$Ie~9-H0(*9Z^Zt1nMckI@NCSenl-6F>Kzv#Ku8G-4F0(1 zx56;P+D#C%s%mp8cB+{6*fxmxkUmaXbP_3AE!MbNmD{KU$KcX+ZW#OFoWvx9( zBEobcrO!1CG`Tv8Y`7JaP`#6@+z+l%9d%i^Fi-i<=rXpn_^+ng@z;>)3D78RK@&A- zsB2*2qbYfLbncBS{WS~Tw^{dK2BPn7$QrS7#Mx4A>tZ+3oG&NPXfe;TcwTX2@xx@o zi{&i3<~hC*+qXNPXY!U&eq?YBdF9$n@%W>N?059z*1R{Etlwsq^N?B-B6A^rkW?j? z4P_6zfo03D3ZApV8G zUd|(CdhpIzlg=+M;O0$OY}U^C-m{N_eWc?({{U>+BMXo`zL)w>-@sq!ZCIBjP?t{y zt}7N4CNo+?d`m-)kD(chPnJxUuisDf4d?lJ3UbkB`kHk);kuaC3%`Caad#z2Zt#0s zI8>q6BqKg;clUg+W(V_nXHcThK)S7P@LMk9(HYfuUNNY2sO5;DDe>QnCb_=+q?CBLq_vYU23;4?ih-?UgK8OfIiL9iViCH{pKRNrzfOc1R$h`Uk*I!<`hfTG zo%)8eK#p5xI%0~>tVH&RNdV~~0{6nz%cKr9dmJ;mFX8-8A&$8>MuO(ooQzNw#m&Ko zAJ~lGvNpE8oeB%iR2+yzwA79KzAqQO&sGPcyDJvAhZKwVW_9pNM=CdaE)*RW#;4G^80B_9ne_Ug$FSOMGE1J zTLd|Rs!up3=I1*AYDh9zFpfX+nt9SSJ$HEGPCKU9^vRo!vAmFzCo zWAG$HF;lNX+h$ocf*QbNfHt?yJx%`$NAjG5GU0${NHVtx(~H&5XUB+|9Wq_0(IL zyW_TlcUnrFZsiu0@i5#w6UvLFb3@;!Z2R`M-w*f1UDPnHsU}vR&4L^wba8I zw}5M)#!8A8Liz6C?(J7`cMoo)it5QQO1(;m;1VzD|H0U@!x^+wDMO9FgB&}%5iQX~EVJV0P(@!$1HqBL){2+|}@8R^PB3sC5<&Oltu@KbeLJZJRPm=G!iZtf)jE z5T=h}0VdN=SQh|JtYpDBkY1{Anurm2ZCPjDN z8{G@*JFYi=+OWK|Fx81SAPsE1bxTo<<$e>}cGWnw#RD{4r5zwV^Qng-!IH zj{nSt=;b3KRU8S@nJ3zbX@b$llsxwB7gaj37O8H#uRj~wF$nma!=9S7br@`_uYv?t4aqGlcL z+Ms6O1~uKV+DO55wK9d&nKK3-=p2f8lb?Kj564cveu4FM7$=MOv2=*za@Q1F5&~$& zv9n#CjGsJT3X61vRy$bRn?F)Lb8QlJBrYDOV#4S(_^L85wD+7|6i)l$kL3rqe+B&% zL3v(CK&p~t$qebwVb6zSZsBol@bhOAV1gF3Mb+|LAJ+8*=>&!oL{PigQeC-BfG>=i zdH&8__bj^UGC7N?K)NTkgWj^`3P1Nfzh&GOnmYU(JLiMKN?bf7cSGt=cZ1zM%OXbe zC@0#apM?fYDKs7h-<(~r6MyN*BRfBM2f06)6TY10M-_)7CoGt}4Q7!!eJobvy%?f? zP@v@NCX*juCKj)6GyH8z!|F`8(T((v0$2v#3&MLxW$Ak>;qCyKSrQ~6Wu%?@*!z-phMj7`p4J`8VH^Yad==PIqQFfq32_0<9Q1Rc z_AXs$xg5DH-JY!LAFU(t$SfGSyG!)?+M5JS_3N>29Nw}juoiGK7w^*-(U?a`3U;D{ zV9c>qk41k;h@4Do=cC@etH8K+r_O%65I|D)0Bl%0De&RROJWRCJ_lNQ)W7e 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�i8W1pf{Uu9>dA7CMC`l&YKSO(kwp0_Q# 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%0AvTgtYR@YMH&Uw%82ei*GfH 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

    D{VYuClo?hFX2`a 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 R`;GLcAGm(CF+jQ>|JkXE{YU@+ literal 0 HcmV?d00001 diff --git a/Images/latin-reader-3.jpeg b/Images/latin-reader-3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..12e6f57d08dac5cc4882c733f81871f445905e92 GIT binary patch literal 10114 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 sy}Wj}yqng)x+lrzWUd#mSycc=+ + + + + + + + + Cookie check + + + + + + +

    + + + diff --git a/Images/launcher-3.jpeg b/Images/launcher-3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a78e5ae89ada729341ec16e822e0747486279934 GIT binary patch literal 40403 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 Date: Thu, 28 May 2026 16:56:47 -0700 Subject: [PATCH 2/9] chore: moves app to flatter hierarchy --- LatinReader/.gitignore | 13 +- LatinReader/README.md | 65 -- LatinReader/build.gradle | 71 +- LatinReader/latinreader/.gitignore | 2 - LatinReader/latinreader/build.gradle | 47 -- .../{latinreader => }/release/output.json | 0 .../src/main/AndroidManifest.xml | 0 .../src/main/ic_launcher-web.png | Bin .../src/main/ic_launcher_2-playstore.png | Bin .../src/main/ic_launcher_3-playstore.png | Bin .../main/ic_launcher_foreground-playstore.png | Bin .../latin/LatinReaderApplication.kt | 0 .../latin/data/LatinReaderLibrary.kt | 0 .../data/LatinReaderLibraryDescriptions.kt | 0 .../com/ericmschmidt/latin/theme/Color.kt | 0 .../com/ericmschmidt/latin/theme/Theme.kt | 0 .../java/com/ericmschmidt/latin/theme/Type.kt | 0 .../src/main/res/drawable/ic_latinreader.xml | 0 .../res/drawable/ic_launcher_2_background.xml | 0 .../res/drawable/ic_launcher_3_background.xml | 0 .../ic_launcher_foreground_background.xml | 0 .../res/drawable/work_ab_urbe_condita.webp | Bin .../src/main/res/drawable/work_aeneid.jpg | Bin .../res/drawable/work_apocolocyntosis.webp | Bin .../src/main/res/drawable/work_carmina.webp | Bin .../res/drawable/work_de_bello_gallico.webp | Bin .../drawable/work_de_bellum_jugurthinum.webp | Bin .../res/drawable/work_de_rerum_natura.webp | Bin .../main/res/drawable/work_metamorphoses.webp | Bin .../src/main/res/drawable/work_satyricon.webp | Bin .../res/mipmap-anydpi-v26/ic_launcher_3.xml | 0 .../mipmap-anydpi-v26/ic_launcher_3_round.xml | 0 .../ic_launcher_foreground_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../main/res/mipmap-hdpi/ic_launcher_3.webp | Bin .../mipmap-hdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-hdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-hdpi/ic_launcher_fore.webp | Bin .../ic_launcher_foreground_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../main/res/mipmap-mdpi/ic_launcher_3.webp | Bin .../mipmap-mdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-mdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-mdpi/ic_launcher_fore.webp | Bin .../ic_launcher_foreground_round.webp | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../res/mipmap-xhdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-xhdpi/ic_launcher_fore.webp | Bin .../ic_launcher_foreground_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../mipmap-xxhdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_fore.webp | Bin .../ic_launcher_foreground_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../mipmap-xxxhdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_fore.webp | Bin .../ic_launcher_foreground_round.webp | Bin .../src/main/res/raw/allenandgreenough.xml | 0 .../src/main/res/raw/caes_bg_eng.xml | 0 .../src/main/res/raw/caes_bg_lat.xml | 0 .../src/main/res/raw/dictionary_entries.xml | 0 .../src/main/res/raw/hor_carm_eng.xml | 0 .../src/main/res/raw/hor_carm_lat.xml | 0 .../src/main/res/raw/lewis.xml | 0 .../src/main/res/raw/livy_01_02_eng.xml | 0 .../src/main/res/raw/livy_01_02_lat.xml | 0 .../src/main/res/raw/lucretius_eng.xml | 0 .../src/main/res/raw/lucretius_lat.xml | 0 .../src/main/res/raw/ovid_met_eng.xml | 0 .../src/main/res/raw/ovid_met_lat.xml | 0 .../src/main/res/raw/petr_eng.xml | 0 .../src/main/res/raw/petr_lat.xml | 0 .../src/main/res/raw/sallust_jugur_eng.xml | 0 .../src/main/res/raw/sallust_jugur_lat.xml | 0 .../src/main/res/raw/sen_apoc_eng.xml | 0 .../src/main/res/raw/sen_apoc_lat.xml | 0 .../src/main/res/raw/verg_a_eng.xml | 0 .../src/main/res/raw/verg_a_lat.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/config.xml | 0 .../src/main/res/values/font_certs.xml | 0 .../src/main/res/values/strings.xml | 0 README.md | 73 +- build.gradle | 44 ++ build/reports/problems/problems-report.html | 666 ++++++++++++++++++ {LatinReader/compose => compose}/.gitignore | 0 {LatinReader/compose => compose}/build.gradle | 0 .../compose => compose}/proguard-rules.pro | 0 .../compose/ExampleInstrumentedTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../com/telpirion/compose/MainActivity.kt | 0 .../telpirion/compose/ui/DevicePreviews.kt | 0 .../com/telpirion/compose/ui/ReaderApp.kt | 0 .../compose/ui/components/DetailsPane.kt | 0 .../compose/ui/components/ListDetailPane.kt | 0 .../compose/ui/components/PageControls.kt | 0 .../compose/ui/components/ReaderAppNavHost.kt | 0 .../compose/ui/components/ReaderTopAppBar.kt | 0 .../ui/components/ReadingSupportingPane.kt | 0 .../compose/ui/components/SupportingPane.kt | 0 .../compose/ui/screens/LibraryScreen.kt | 0 .../compose/ui/screens/MarkdownScreen.kt | 0 .../compose/ui/screens/ReadingScreen.kt | 0 .../compose/ui/screens/SettingsScreen.kt | 0 .../com/telpirion/compose/ui/theme/Color.kt | 0 .../com/telpirion/compose/ui/theme/Theme.kt | 0 .../com/telpirion/compose/ui/theme/Type.kt | 0 .../compose/viewmodels/DictionaryViewModel.kt | 0 .../compose/viewmodels/ReadingViewModel.kt | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../src/main/res/values/colors.xml | 0 .../src/main/res/values/config.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/themes.xml | 0 .../com/telpirion/compose/ExampleUnitTest.kt | 0 {LatinReader/core => core}/.gitignore | 0 {LatinReader/core => core}/build.gradle | 0 .../classicsreader/TestResources.kt | 0 .../classicsreader/data/WorkTest.kt | 0 .../utilities/ResourceHelpersTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../src/main/ic_launcher-web.png | Bin .../classicsreader/ApplicationLogging.kt | 0 .../classicsreader/MyApplication.kt | 0 .../ericmschmidt/classicsreader/data/Book.kt | 0 .../classicsreader/data/Dictionary.kt | 0 .../data/DictionaryRepository.kt | 0 .../classicsreader/data/Library.kt | 0 .../data/PreferencesDataStore.kt | 0 .../classicsreader/data/ReadingViewModel.kt | 0 .../classicsreader/data/SettingsFields.kt | 0 .../classicsreader/data/TOCEntry.kt | 0 .../ericmschmidt/classicsreader/data/Work.kt | 0 .../classicsreader/data/WorkInfo.kt | 0 .../data/placeholders/PseudoLibrary.kt | 0 .../data/placeholders/PseudoManifest.kt | 0 .../classicsreader/ui/components/Cards.kt | 0 .../ui/components/LazyCardGrid.kt | 0 .../ui/components/LazyCardList.kt | 0 .../ui/fragments/HelpFragment.kt | 0 .../ui/fragments/InfoFragment.kt | 0 .../utilities/ITextConverter.kt | 0 .../utilities/ResourceHelpers.kt | 0 .../main/res/drawable/ic_baseline_help_24.xml | 0 .../main/res/drawable/ic_baseline_info_24.xml | 0 .../main/res/drawable/ic_book_black_24dp.xml | 0 .../res/drawable/ic_bookmark_black_24dp.xml | 0 .../drawable/ic_description_black_24dp.xml | 0 .../drawable/ic_find_in_page_black_24dp.xml | 0 .../drawable/ic_find_in_page_white_24dp.xml | 0 .../res/drawable/ic_next_page_background.xml | 0 .../res/drawable/ic_next_page_foreground.xml | 0 .../res/drawable/ic_prev_page_background.xml | 0 .../res/drawable/ic_prev_page_foreground.xml | 0 .../res/drawable/ic_school_black_24dp.xml | 0 .../res/drawable/ic_settings_black_24dp.xml | 0 .../src/main/res/drawable/work_default_1.png | Bin .../src/main/res/drawable/work_default_2.png | Bin .../src/main/res/drawable/work_default_3.png | Bin .../src/main/res/layout/fragment_help.xml | 0 .../src/main/res/layout/fragment_info.xml | 0 .../res/mipmap-anydpi-v26/ic_next_page.xml | 0 .../mipmap-anydpi-v26/ic_next_page_round.xml | 0 .../res/mipmap-anydpi-v26/ic_prev_page.xml | 0 .../mipmap-anydpi-v26/ic_prev_page_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-hdpi/ic_next_page.png | Bin .../res/mipmap-hdpi/ic_next_page_round.png | Bin .../src/main/res/mipmap-hdpi/ic_prev_page.png | Bin .../res/mipmap-hdpi/ic_prev_page_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_next_page.png | Bin .../res/mipmap-mdpi/ic_next_page_round.png | Bin .../src/main/res/mipmap-mdpi/ic_prev_page.png | Bin .../res/mipmap-mdpi/ic_prev_page_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xhdpi/ic_next_page.png | Bin .../res/mipmap-xhdpi/ic_next_page_round.png | Bin .../main/res/mipmap-xhdpi/ic_prev_page.png | Bin .../res/mipmap-xhdpi/ic_prev_page_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_next_page.png | Bin .../res/mipmap-xxhdpi/ic_next_page_round.png | Bin .../main/res/mipmap-xxhdpi/ic_prev_page.png | Bin .../res/mipmap-xxhdpi/ic_prev_page_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_next_page.png | Bin .../res/mipmap-xxxhdpi/ic_next_page_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_prev_page.png | Bin .../res/mipmap-xxxhdpi/ic_prev_page_round.png | Bin .../core => core}/src/main/res/raw/help.md | 0 .../core => core}/src/main/res/raw/info.md | 0 .../src/main/res/raw/test_entries.xml | 0 .../src/main/res/raw/text_work.xml | 0 .../src/main/res/values/arrays.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/config.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/drawables.xml | 0 .../src/main/res/values/pref-array.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 0 .../src/main/res/xml/settings.xml | 0 .../classicsreader/TestResources.kt | 0 .../classicsreader/data/BookTest.kt | 0 .../classicsreader/data/DictionaryTest.kt | 0 .../utilities/ResourceHelpersTest.kt | 0 .../gradle.properties => gradle.properties | 0 .../gradle-daemon-jvm.properties | 0 .../gradle => gradle}/libs.versions.toml | 0 .../wrapper/gradle-wrapper.jar | Bin .../wrapper/gradle-wrapper.properties | 0 LatinReader/gradlew => gradlew | 0 LatinReader/gradlew.bat => gradlew.bat | 188 ++--- .../.gitignore | 0 .../build.gradle | 0 .../proguard-rules.pro | 0 .../greek/compose/ExampleInstrumentedTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../src/main/ic_launcher_3-playstore.png | Bin .../res/drawable/ic_launcher_3_background.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher_3.xml | 0 .../mipmap-anydpi-v26/ic_launcher_3_round.xml | 0 .../main/res/mipmap-hdpi/ic_launcher_3.webp | Bin .../mipmap-hdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-hdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-mdpi/ic_launcher_3.webp | Bin .../mipmap-mdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-mdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../res/mipmap-xhdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../mipmap-xxhdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../mipmap-xxxhdpi/ic_launcher_3_round.webp | Bin .../greek/compose/ExampleUnitTest.kt | 0 .../.gitignore | 0 .../build.gradle | 0 .../proguard-rules.pro | 0 .../adaptiveTest/adaptive_journey.journey.xml | 0 .../greek/ExampleInstrumentedTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../src/main/res/values-night/themes.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/themes.xml | 0 .../classicsreader/greek/ExampleUnitTest.kt | 0 .../greekreader => greekreader}/.gitignore | 0 .../greekreader => greekreader}/build.gradle | 0 .../src/main/AndroidManifest.xml | 0 .../src/main/ic_launcher-web.png | Bin .../src/main/ic_launcher_2-playstore.png | Bin .../greekreader/GreekReaderApplication.kt | 0 .../greekreader/data/GreekReaderLibrary.kt | 0 .../data/GreekReaderLibraryDescriptions.kt | 0 .../ericmschmidt/greekreader/theme/Color.kt | 0 .../ericmschmidt/greekreader/theme/Theme.kt | 0 .../ericmschmidt/greekreader/theme/Type.kt | 0 .../greekreader/utilities/TextConverter.kt | 0 .../src/main/res/drawable/ic_greekreader.xml | 0 .../res/drawable/ic_launcher_2_background.xml | 0 .../src/main/res/drawable/work_anabasis.webp | Bin .../src/main/res/drawable/work_iliad.webp | Bin .../src/main/res/drawable/work_odyssey.webp | Bin .../src/main/res/drawable/work_politics.webp | Bin .../src/main/res/drawable/work_speeches.webp | Bin .../res/mipmap-anydpi-v26/ic_launcher_2.xml | 0 .../mipmap-anydpi-v26/ic_launcher_2_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../main/res/mipmap-hdpi/ic_launcher_2.webp | Bin .../mipmap-hdpi/ic_launcher_2_foreground.webp | Bin .../res/mipmap-hdpi/ic_launcher_2_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../main/res/mipmap-mdpi/ic_launcher_2.webp | Bin .../mipmap-mdpi/ic_launcher_2_foreground.webp | Bin .../res/mipmap-mdpi/ic_launcher_2_round.webp | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xhdpi/ic_launcher_2.webp | Bin .../ic_launcher_2_foreground.webp | Bin .../res/mipmap-xhdpi/ic_launcher_2_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher_2.webp | Bin .../ic_launcher_2_foreground.webp | Bin .../mipmap-xxhdpi/ic_launcher_2_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_2.webp | Bin .../ic_launcher_2_foreground.webp | Bin .../mipmap-xxxhdpi/ic_launcher_2_round.webp | Bin .../src/main/res/raw/aristot_pol_eng.xml | 0 .../src/main/res/raw/aristot_pol_gk.xml | 0 .../src/main/res/raw/dictionary_entries.xml | 0 .../src/main/res/raw/gk_aristot_pol_gk.xml | 0 .../src/main/res/raw/gk_hdt_gk.xml | 0 .../src/main/res/raw/gk_hom_il_gk.xml | 0 .../src/main/res/raw/gk_hom_od_gk.xml | 0 .../src/main/res/raw/gk_lys_gk.xml | 0 .../src/main/res/raw/gk_plat_rep_gk.xml | 0 .../src/main/res/raw/gk_xen_anab_gk.xml | 0 .../src/main/res/raw/hdt_eng.xml | 0 .../src/main/res/raw/hdt_gk.xml | 0 .../src/main/res/raw/hom_il_eng.xml | 0 .../src/main/res/raw/hom_il_gk.xml | 0 .../src/main/res/raw/hom_od_eng.xml | 0 .../src/main/res/raw/hom_od_gk.xml | 0 .../res/raw/latin_greek_text_conversion.json | 0 .../src/main/res/raw/lys_eng.xml | 0 .../src/main/res/raw/lys_gk.xml | 0 .../src/main/res/raw/ml.xml | 0 .../src/main/res/raw/plat_rep_eng.xml | 0 .../src/main/res/raw/plat_rep_gk.xml | 0 .../src/main/res/raw/smyth.xml | 0 .../src/main/res/raw/xen_anab_eng.xml | 0 .../src/main/res/raw/xen_anab_gk.xml | 0 .../src/main/res/values-v21/styles.xml | 0 .../src/main/res/values-w820dp/dimens.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/config.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/font_certs.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 0 .../.gitignore | 0 .../build.gradle | 0 .../proguard-rules.pro | 0 .../src/androidTest/AndroidManifest.xml | 0 .../latin/compose/LatinReaderAppTest.kt | 0 .../latin/compose/ReadingScreenTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../.gitignore | 0 .../build.gradle | 0 .../proguard-rules.pro | 0 .../latin/views/ExampleInstrumentedTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../src/main/res/values-night/themes.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/themes.xml | 0 .../latin/views/ExampleUnitTest.kt | 0 local.properties | 8 + .../settings.gradle => settings.gradle | 0 {LatinReader/views => views}/.gitignore | 0 {LatinReader/views => views}/build.gradle | 0 .../views => views}/consumer-rules.pro | 0 .../views => views}/proguard-rules.pro | 0 .../views/ExampleInstrumentedTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../activities/ErrorActivity.kt | 0 .../classicsreader/activities/MainActivity.kt | 0 .../exceptions/ForceCloseHandler.kt | 0 .../ui/fragments/DictionaryFragment.kt | 0 .../ui/fragments/LibraryFragment.kt | 0 .../ui/fragments/ReadingFragment.kt | 0 .../ui/fragments/SettingsFragment.kt | 0 .../ui/fragments/TOCFragment.kt | 0 .../ui/fragments/VocabularyFragment.kt | 0 .../ui/interop/ComposeViewAdapter.kt | 0 .../ui/layouts/TOCListViewAdapter.kt | 0 .../src/main/res/anim/fragment_fade_enter.xml | 0 .../src/main/res/anim/fragment_fade_exit.xml | 0 .../src/main/res/layout/activity_error.xml | 0 .../src/main/res/layout/activity_main.xml | 0 .../cardviewitem_libraryrecyclerview.xml | 0 .../main/res/layout/fragment_dictionary.xml | 0 .../src/main/res/layout/fragment_help.xml | 0 .../src/main/res/layout/fragment_library.xml | 0 .../src/main/res/layout/fragment_reading.xml | 0 .../src/main/res/layout/fragment_toc.xml | 0 .../main/res/layout/fragment_vocabulary.xml | 0 .../src/main/res/layout/nav_header_main.xml | 0 .../src/main/res/layout/toc_listviewitem.xml | 0 .../src/main/res/menu/drawer.xml | 0 .../src/main/res/menu/main.xml | 0 .../src/main/res/navigation/nav_graph.xml | 0 .../classicsreader/views/ExampleUnitTest.kt | 0 424 files changed, 903 insertions(+), 274 deletions(-) delete mode 100644 LatinReader/README.md delete mode 100644 LatinReader/latinreader/.gitignore delete mode 100644 LatinReader/latinreader/build.gradle rename LatinReader/{latinreader => }/release/output.json (100%) rename LatinReader/{greekreader => }/src/main/AndroidManifest.xml (100%) rename LatinReader/{latinreader => }/src/main/ic_launcher-web.png (100%) rename LatinReader/{latinreader => }/src/main/ic_launcher_2-playstore.png (100%) rename LatinReader/{latinreader => }/src/main/ic_launcher_3-playstore.png (100%) rename LatinReader/{latinreader => }/src/main/ic_launcher_foreground-playstore.png (100%) rename LatinReader/{latinreader => }/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt (100%) rename LatinReader/{latinreader => }/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt (100%) rename LatinReader/{latinreader => }/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt (100%) rename LatinReader/{latinreader => }/src/main/java/com/ericmschmidt/latin/theme/Color.kt (100%) rename LatinReader/{latinreader => }/src/main/java/com/ericmschmidt/latin/theme/Theme.kt (100%) rename LatinReader/{latinreader => }/src/main/java/com/ericmschmidt/latin/theme/Type.kt (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/ic_latinreader.xml (100%) rename LatinReader/{greekreader => }/src/main/res/drawable/ic_launcher_2_background.xml (100%) rename LatinReader/{greekreader-compose => }/src/main/res/drawable/ic_launcher_3_background.xml (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/ic_launcher_foreground_background.xml (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_ab_urbe_condita.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_aeneid.jpg (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_apocolocyntosis.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_carmina.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_de_bello_gallico.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_de_bellum_jugurthinum.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_de_rerum_natura.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_metamorphoses.webp (100%) rename LatinReader/{latinreader => }/src/main/res/drawable/work_satyricon.webp (100%) rename LatinReader/{greekreader-compose => }/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml (100%) rename LatinReader/{greekreader-compose => }/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-hdpi/ic_launcher_3.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-hdpi/ic_launcher_fore.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-mdpi/ic_launcher_3.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-mdpi/ic_launcher_fore.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xhdpi/ic_launcher_3.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp (100%) rename LatinReader/{latinreader => }/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp (100%) rename LatinReader/{latinreader => }/src/main/res/raw/allenandgreenough.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/caes_bg_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/caes_bg_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/dictionary_entries.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/hor_carm_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/hor_carm_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/lewis.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/livy_01_02_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/livy_01_02_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/lucretius_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/lucretius_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/ovid_met_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/ovid_met_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/petr_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/petr_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/sallust_jugur_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/sallust_jugur_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/sen_apoc_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/sen_apoc_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/verg_a_eng.xml (100%) rename LatinReader/{latinreader => }/src/main/res/raw/verg_a_lat.xml (100%) rename LatinReader/{latinreader => }/src/main/res/values/colors.xml (100%) rename LatinReader/{latinreader => }/src/main/res/values/config.xml (100%) rename LatinReader/{greekreader => }/src/main/res/values/font_certs.xml (100%) rename LatinReader/{latinreader => }/src/main/res/values/strings.xml (100%) create mode 100644 build.gradle create mode 100644 build/reports/problems/problems-report.html rename {LatinReader/compose => compose}/.gitignore (100%) rename {LatinReader/compose => compose}/build.gradle (100%) rename {LatinReader/compose => compose}/proguard-rules.pro (100%) rename {LatinReader/compose => compose}/src/androidTest/java/com/telpirion/compose/ExampleInstrumentedTest.kt (100%) rename {LatinReader/compose => compose}/src/main/AndroidManifest.xml (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/MainActivity.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/DevicePreviews.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/ReaderApp.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/DetailsPane.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/ListDetailPane.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/PageControls.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/ReaderAppNavHost.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/ReadingSupportingPane.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/components/SupportingPane.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/screens/LibraryScreen.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/screens/MarkdownScreen.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/screens/ReadingScreen.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/screens/SettingsScreen.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/theme/Color.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/theme/Theme.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/ui/theme/Type.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/viewmodels/DictionaryViewModel.kt (100%) rename {LatinReader/compose => compose}/src/main/java/com/telpirion/compose/viewmodels/ReadingViewModel.kt (100%) rename {LatinReader/compose => compose}/src/main/res/drawable/ic_launcher_background.xml (100%) rename {LatinReader/compose => compose}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {LatinReader/compose => compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {LatinReader/compose => compose}/src/main/res/values/colors.xml (100%) rename {LatinReader/compose => compose}/src/main/res/values/config.xml (100%) rename {LatinReader/compose => compose}/src/main/res/values/strings.xml (100%) rename {LatinReader/compose => compose}/src/main/res/values/themes.xml (100%) rename {LatinReader/compose => compose}/src/test/java/com/telpirion/compose/ExampleUnitTest.kt (100%) rename {LatinReader/core => core}/.gitignore (100%) rename {LatinReader/core => core}/build.gradle (100%) rename {LatinReader/core => core}/src/androidTest/java/com/ericmschmidt/classicsreader/TestResources.kt (100%) rename {LatinReader/core => core}/src/androidTest/java/com/ericmschmidt/classicsreader/data/WorkTest.kt (100%) rename {LatinReader/core => core}/src/androidTest/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt (100%) rename {LatinReader/core => core}/src/main/AndroidManifest.xml (100%) rename {LatinReader/core => core}/src/main/ic_launcher-web.png (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/ApplicationLogging.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/MyApplication.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/Book.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/DictionaryRepository.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/Library.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/PreferencesDataStore.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/ReadingViewModel.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/SettingsFields.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/TOCEntry.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/Work.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/WorkInfo.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoLibrary.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoManifest.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/ui/components/Cards.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardGrid.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardList.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/HelpFragment.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/InfoFragment.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/utilities/ITextConverter.kt (100%) rename {LatinReader/core => core}/src/main/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpers.kt (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_baseline_help_24.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_baseline_info_24.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_book_black_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_bookmark_black_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_description_black_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_find_in_page_black_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_find_in_page_white_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_next_page_background.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_next_page_foreground.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_prev_page_background.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_prev_page_foreground.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_school_black_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/ic_settings_black_24dp.xml (100%) rename {LatinReader/core => core}/src/main/res/drawable/work_default_1.png (100%) rename {LatinReader/core => core}/src/main/res/drawable/work_default_2.png (100%) rename {LatinReader/core => core}/src/main/res/drawable/work_default_3.png (100%) rename {LatinReader/core => core}/src/main/res/layout/fragment_help.xml (100%) rename {LatinReader/core => core}/src/main/res/layout/fragment_info.xml (100%) rename {LatinReader/core => core}/src/main/res/mipmap-anydpi-v26/ic_next_page.xml (100%) rename {LatinReader/core => core}/src/main/res/mipmap-anydpi-v26/ic_next_page_round.xml (100%) rename {LatinReader/core => core}/src/main/res/mipmap-anydpi-v26/ic_prev_page.xml (100%) rename {LatinReader/core => core}/src/main/res/mipmap-anydpi-v26/ic_prev_page_round.xml (100%) rename {LatinReader/core => core}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-hdpi/ic_next_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-hdpi/ic_next_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-hdpi/ic_prev_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-hdpi/ic_prev_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-mdpi/ic_next_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-mdpi/ic_next_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-mdpi/ic_prev_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-mdpi/ic_prev_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xhdpi/ic_next_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xhdpi/ic_next_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xhdpi/ic_prev_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xhdpi/ic_prev_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxhdpi/ic_next_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxhdpi/ic_next_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxhdpi/ic_prev_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxhdpi/ic_prev_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxxhdpi/ic_next_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxxhdpi/ic_next_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxxhdpi/ic_prev_page.png (100%) rename {LatinReader/core => core}/src/main/res/mipmap-xxxhdpi/ic_prev_page_round.png (100%) rename {LatinReader/core => core}/src/main/res/raw/help.md (100%) rename {LatinReader/core => core}/src/main/res/raw/info.md (100%) rename {LatinReader/core => core}/src/main/res/raw/test_entries.xml (100%) rename {LatinReader/core => core}/src/main/res/raw/text_work.xml (100%) rename {LatinReader/core => core}/src/main/res/values/arrays.xml (100%) rename {LatinReader/core => core}/src/main/res/values/colors.xml (100%) rename {LatinReader/core => core}/src/main/res/values/config.xml (100%) rename {LatinReader/core => core}/src/main/res/values/dimens.xml (100%) rename {LatinReader/core => core}/src/main/res/values/drawables.xml (100%) rename {LatinReader/core => core}/src/main/res/values/pref-array.xml (100%) rename {LatinReader/core => core}/src/main/res/values/strings.xml (100%) rename {LatinReader/core => core}/src/main/res/values/styles.xml (100%) rename {LatinReader/core => core}/src/main/res/xml/settings.xml (100%) rename {LatinReader/core => core}/src/test/java/com/ericmschmidt/classicsreader/TestResources.kt (100%) rename {LatinReader/core => core}/src/test/java/com/ericmschmidt/classicsreader/data/BookTest.kt (100%) rename {LatinReader/core => core}/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt (100%) rename {LatinReader/core => core}/src/test/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt (100%) rename LatinReader/gradle.properties => gradle.properties (100%) rename {LatinReader/gradle => gradle}/gradle-daemon-jvm.properties (100%) rename {LatinReader/gradle => gradle}/libs.versions.toml (100%) rename {LatinReader/gradle => gradle}/wrapper/gradle-wrapper.jar (100%) rename {LatinReader/gradle => gradle}/wrapper/gradle-wrapper.properties (100%) rename LatinReader/gradlew => gradlew (100%) rename LatinReader/gradlew.bat => gradlew.bat (96%) rename {LatinReader/greekreader-compose => greekreader-compose}/.gitignore (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/build.gradle (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/proguard-rules.pro (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/AndroidManifest.xml (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/ic_launcher_3-playstore.png (100%) rename {LatinReader/latinreader => greekreader-compose}/src/main/res/drawable/ic_launcher_3_background.xml (100%) rename {LatinReader/latinreader => greekreader-compose}/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml (100%) rename {LatinReader/latinreader => greekreader-compose}/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-hdpi/ic_launcher_3.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-mdpi/ic_launcher_3.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xhdpi/ic_launcher_3.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp (100%) rename {LatinReader/greekreader-compose => greekreader-compose}/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt (100%) rename {LatinReader/greekreader-views => greekreader-views}/.gitignore (100%) rename {LatinReader/greekreader-views => greekreader-views}/build.gradle (100%) rename {LatinReader/greekreader-views => greekreader-views}/proguard-rules.pro (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/adaptiveTest/adaptive_journey.journey.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/AndroidManifest.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/drawable/ic_launcher_background.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/values-night/themes.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/values/colors.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/values/strings.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/main/res/values/themes.xml (100%) rename {LatinReader/greekreader-views => greekreader-views}/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt (100%) rename {LatinReader/greekreader => greekreader}/.gitignore (100%) rename {LatinReader/greekreader => greekreader}/build.gradle (100%) rename {LatinReader/latinreader => greekreader}/src/main/AndroidManifest.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/ic_launcher-web.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/ic_launcher_2-playstore.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/GreekReaderApplication.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibrary.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibraryDescriptions.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/theme/Color.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/theme/Theme.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/theme/Type.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/java/com/ericmschmidt/greekreader/utilities/TextConverter.kt (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/drawable/ic_greekreader.xml (100%) rename {LatinReader/latinreader => greekreader}/src/main/res/drawable/ic_launcher_2_background.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/drawable/work_anabasis.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/drawable/work_iliad.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/drawable/work_odyssey.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/drawable/work_politics.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/drawable/work_speeches.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-hdpi/ic_launcher_2.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-mdpi/ic_launcher_2.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xhdpi/ic_launcher_2.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/aristot_pol_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/aristot_pol_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/dictionary_entries.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_aristot_pol_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_hdt_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_hom_il_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_hom_od_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_lys_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_plat_rep_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/gk_xen_anab_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/hdt_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/hdt_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/hom_il_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/hom_il_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/hom_od_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/hom_od_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/latin_greek_text_conversion.json (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/lys_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/lys_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/ml.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/plat_rep_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/plat_rep_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/smyth.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/xen_anab_eng.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/raw/xen_anab_gk.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values-v21/styles.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values-w820dp/dimens.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values/colors.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values/config.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values/dimens.xml (100%) rename {LatinReader/latinreader => greekreader}/src/main/res/values/font_certs.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values/strings.xml (100%) rename {LatinReader/greekreader => greekreader}/src/main/res/values/styles.xml (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/.gitignore (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/build.gradle (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/proguard-rules.pro (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/src/androidTest/AndroidManifest.xml (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt (100%) rename {LatinReader/latinreader-compose => latinreader-compose}/src/main/AndroidManifest.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/.gitignore (100%) rename {LatinReader/latinreader-views => latinreader-views}/build.gradle (100%) rename {LatinReader/latinreader-views => latinreader-views}/proguard-rules.pro (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/AndroidManifest.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/drawable/ic_launcher_background.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/values-night/themes.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/values/colors.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/values/strings.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/main/res/values/themes.xml (100%) rename {LatinReader/latinreader-views => latinreader-views}/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt (100%) create mode 100644 local.properties rename LatinReader/settings.gradle => settings.gradle (100%) rename {LatinReader/views => views}/.gitignore (100%) rename {LatinReader/views => views}/build.gradle (100%) rename {LatinReader/views => views}/consumer-rules.pro (100%) rename {LatinReader/views => views}/proguard-rules.pro (100%) rename {LatinReader/views => views}/src/androidTest/java/com/ericmschmidt/classicsreader/views/ExampleInstrumentedTest.kt (100%) rename {LatinReader/views => views}/src/main/AndroidManifest.xml (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/activities/ErrorActivity.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/activities/MainActivity.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/exceptions/ForceCloseHandler.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/DictionaryFragment.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/LibraryFragment.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/ReadingFragment.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/SettingsFragment.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/TOCFragment.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/VocabularyFragment.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/interop/ComposeViewAdapter.kt (100%) rename {LatinReader/views => views}/src/main/java/com/ericmschmidt/classicsreader/ui/layouts/TOCListViewAdapter.kt (100%) rename {LatinReader/views => views}/src/main/res/anim/fragment_fade_enter.xml (100%) rename {LatinReader/views => views}/src/main/res/anim/fragment_fade_exit.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/activity_error.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/activity_main.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/cardviewitem_libraryrecyclerview.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/fragment_dictionary.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/fragment_help.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/fragment_library.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/fragment_reading.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/fragment_toc.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/fragment_vocabulary.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/nav_header_main.xml (100%) rename {LatinReader/views => views}/src/main/res/layout/toc_listviewitem.xml (100%) rename {LatinReader/views => views}/src/main/res/menu/drawer.xml (100%) rename {LatinReader/views => views}/src/main/res/menu/main.xml (100%) rename {LatinReader/views => views}/src/main/res/navigation/nav_graph.xml (100%) rename {LatinReader/views => views}/src/test/java/com/ericmschmidt/classicsreader/views/ExampleUnitTest.kt (100%) diff --git a/LatinReader/.gitignore b/LatinReader/.gitignore index e67d6d6..a774788 100644 --- a/LatinReader/.gitignore +++ b/LatinReader/.gitignore @@ -1,13 +1,2 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store /build -/captures -latinreader/release/ -/.idea -*.hprof -.kotlin -projectFilesBackup \ No newline at end of file + diff --git a/LatinReader/README.md b/LatinReader/README.md deleted file mode 100644 index 29e74ff..0000000 --- a/LatinReader/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Design - -The Classics Reader is an app designed for reading and translating ancient texts. It provides -translations of texts along side the source texts alongside a dictionary. - -## App Architecture - -This project contains three modules: - -+ The base app (the module named `app`) that provides the base functionality of the app. -+ A module for each flavor--a Latin and Ancient Greek flavor. Each flavor is built into a - separate app, along with the base app, into a separate APK. - -## The `app` module architecture - -The `app` module has six packages within it: - -* The `activities` package, which includes the `MainActivity` and `ErrorActivity` classes. - -* The `datamodel` package, which includes classes that contain the information about the texts - within the app. - -* The `exceptions` package, which includes a single class, `ForceCloseHandler`, which allows the - app to close gracefully from unhandled exceptions. - -* The `fragments` package, which includes all of the fragments or "pages" within the app. - -* The `layouts` package, which includes the specialized adapters used for recycler views and list - views used within the app. - -* The `utilities` package, which includes several helper classes used for opening and parsing the - XML resources used within the app. - -### Data model - -The `datamodel` package includes the following classes: - -* The [`WorkInfo`][workinfo] class is the foundational data structure for the app. It coordinates - the user experience of a work (current page, location, offset, translation name) with the text - itself. It also includes the resource ID for the work along with its URI. - -* The [`Work`][work] class acts as a controller between the data storage of the text - (XML file) and the app. - -* The [`TOCEntry`][tocentry] class contains information about a table of contents entry for a work. - It connects a "chapter" title with a location (int) with in the book. - -* The [`Book`][book] class contains information for accessing lines of text within a section, - chapter, or "book" within a larger work. - -* The [`Library`][library] class contains the list of `WorkInfo` objects contained in the app. - -* The [`Manifest`][manifest] class contains the concrete list of works, stored as XML or JSON, - within the app. It essentially acts as an interface for each APK or app bundle. - -* The [`ReadingViewModel`][readingviewmodel] class allows the app to manage the reading position - in the UI along with the source `Work` object. - -[work]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Work.java -[workinfo]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/WorkInfo.java -[tocentry]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/TOCEntry.java -[book]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Book.java -[library]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Library.java -[manifest]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Manifest.java -[readingviewmodel]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/ReadingViewModel.java \ No newline at end of file diff --git a/LatinReader/build.gradle b/LatinReader/build.gradle index de3a8f7..ea99b13 100644 --- a/LatinReader/build.gradle +++ b/LatinReader/build.gradle @@ -1,44 +1,47 @@ -buildscript { - repositories { - mavenCentral() - google() - gradlePluginPortal() - } -} - plugins { - alias(libs.plugins.android.application) apply false - alias(libs.plugins.android.library) apply false - alias(libs.plugins.compose.compiler) apply false - alias(libs.plugins.androidx.navigation.safeargs) apply false + alias(libs.plugins.android.library) + alias(libs.plugins.compose.compiler) } -ext { - kotlin_version = "2.1.21" - lifecycle_version = "2.10.0" - nav_version = "2.9.6" - compose_version = "1.12.1" -} - -allprojects { - repositories { - google() - maven { - url = "https://maven.google.com" +android { + namespace="com.ericmschmidt.latinreader" + compileSdkVersion(36) + defaultConfig { + minSdkVersion(24) + } + buildTypes { + release { + minifyEnabled false } - maven { - url = "https://jitpack.io" + } + lint { + abortOnError false + checkReleaseBuilds false + targetSdk 36 + } + kotlin { + jvmToolchain { + languageVersion = JavaLanguageVersion.of("24") } - mavenCentral() } } -configurations.configureEach { - resolutionStrategy { - force("org.jetbrains:annotations:13.0") - } +dependencies { + implementation(libs.androidx.compose.ui.text.google.fonts) + implementation(platform(libs.androidx.compose.bom)) + implementation project(":views") + implementation project(":core") + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.compose.foundation) + implementation(libs.androidx.compose.material3.material3) + implementation(libs.ui) + implementation(libs.ui.graphics) + implementation(libs.ui.tooling.preview) + implementation(libs.androidx.compose.ui.text.google.fonts) } - -tasks.register("clean", Delete) { - delete rootProject.layout.buildDirectory +java { + toolchain { + languageVersion = JavaLanguageVersion.of(24) + } } diff --git a/LatinReader/latinreader/.gitignore b/LatinReader/latinreader/.gitignore deleted file mode 100644 index a774788..0000000 --- a/LatinReader/latinreader/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build - diff --git a/LatinReader/latinreader/build.gradle b/LatinReader/latinreader/build.gradle deleted file mode 100644 index ea99b13..0000000 --- a/LatinReader/latinreader/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.compose.compiler) -} - -android { - namespace="com.ericmschmidt.latinreader" - compileSdkVersion(36) - defaultConfig { - minSdkVersion(24) - } - buildTypes { - release { - minifyEnabled false - } - } - lint { - abortOnError false - checkReleaseBuilds false - targetSdk 36 - } - kotlin { - jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") - } - } -} - -dependencies { - implementation(libs.androidx.compose.ui.text.google.fonts) - implementation(platform(libs.androidx.compose.bom)) - implementation project(":views") - implementation project(":core") - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.compose.foundation) - implementation(libs.androidx.compose.material3.material3) - implementation(libs.ui) - implementation(libs.ui.graphics) - implementation(libs.ui.tooling.preview) - implementation(libs.androidx.compose.ui.text.google.fonts) -} -java { - toolchain { - languageVersion = JavaLanguageVersion.of(24) - } -} diff --git a/LatinReader/latinreader/release/output.json b/LatinReader/release/output.json similarity index 100% rename from LatinReader/latinreader/release/output.json rename to LatinReader/release/output.json diff --git a/LatinReader/greekreader/src/main/AndroidManifest.xml b/LatinReader/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/greekreader/src/main/AndroidManifest.xml rename to LatinReader/src/main/AndroidManifest.xml diff --git a/LatinReader/latinreader/src/main/ic_launcher-web.png b/LatinReader/src/main/ic_launcher-web.png similarity index 100% rename from LatinReader/latinreader/src/main/ic_launcher-web.png rename to LatinReader/src/main/ic_launcher-web.png diff --git a/LatinReader/latinreader/src/main/ic_launcher_2-playstore.png b/LatinReader/src/main/ic_launcher_2-playstore.png similarity index 100% rename from LatinReader/latinreader/src/main/ic_launcher_2-playstore.png rename to LatinReader/src/main/ic_launcher_2-playstore.png diff --git a/LatinReader/latinreader/src/main/ic_launcher_3-playstore.png b/LatinReader/src/main/ic_launcher_3-playstore.png similarity index 100% rename from LatinReader/latinreader/src/main/ic_launcher_3-playstore.png rename to LatinReader/src/main/ic_launcher_3-playstore.png diff --git a/LatinReader/latinreader/src/main/ic_launcher_foreground-playstore.png b/LatinReader/src/main/ic_launcher_foreground-playstore.png similarity index 100% rename from LatinReader/latinreader/src/main/ic_launcher_foreground-playstore.png rename to LatinReader/src/main/ic_launcher_foreground-playstore.png diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt b/LatinReader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt similarity index 100% rename from LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt rename to LatinReader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt b/LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt similarity index 100% rename from LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt rename to LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt b/LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt similarity index 100% rename from LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt rename to LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt b/LatinReader/src/main/java/com/ericmschmidt/latin/theme/Color.kt similarity index 100% rename from LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt rename to LatinReader/src/main/java/com/ericmschmidt/latin/theme/Color.kt diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt b/LatinReader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt similarity index 100% rename from LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt rename to LatinReader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Type.kt b/LatinReader/src/main/java/com/ericmschmidt/latin/theme/Type.kt similarity index 100% rename from LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Type.kt rename to LatinReader/src/main/java/com/ericmschmidt/latin/theme/Type.kt diff --git a/LatinReader/latinreader/src/main/res/drawable/ic_latinreader.xml b/LatinReader/src/main/res/drawable/ic_latinreader.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/ic_latinreader.xml rename to LatinReader/src/main/res/drawable/ic_latinreader.xml diff --git a/LatinReader/greekreader/src/main/res/drawable/ic_launcher_2_background.xml b/LatinReader/src/main/res/drawable/ic_launcher_2_background.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/ic_launcher_2_background.xml rename to LatinReader/src/main/res/drawable/ic_launcher_2_background.xml diff --git a/LatinReader/greekreader-compose/src/main/res/drawable/ic_launcher_3_background.xml b/LatinReader/src/main/res/drawable/ic_launcher_3_background.xml similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/drawable/ic_launcher_3_background.xml rename to LatinReader/src/main/res/drawable/ic_launcher_3_background.xml diff --git a/LatinReader/latinreader/src/main/res/drawable/ic_launcher_foreground_background.xml b/LatinReader/src/main/res/drawable/ic_launcher_foreground_background.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/ic_launcher_foreground_background.xml rename to LatinReader/src/main/res/drawable/ic_launcher_foreground_background.xml diff --git a/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.webp b/LatinReader/src/main/res/drawable/work_ab_urbe_condita.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.webp rename to LatinReader/src/main/res/drawable/work_ab_urbe_condita.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_aeneid.jpg b/LatinReader/src/main/res/drawable/work_aeneid.jpg similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_aeneid.jpg rename to LatinReader/src/main/res/drawable/work_aeneid.jpg diff --git a/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.webp b/LatinReader/src/main/res/drawable/work_apocolocyntosis.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.webp rename to LatinReader/src/main/res/drawable/work_apocolocyntosis.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_carmina.webp b/LatinReader/src/main/res/drawable/work_carmina.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_carmina.webp rename to LatinReader/src/main/res/drawable/work_carmina.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.webp b/LatinReader/src/main/res/drawable/work_de_bello_gallico.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.webp rename to LatinReader/src/main/res/drawable/work_de_bello_gallico.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp b/LatinReader/src/main/res/drawable/work_de_bellum_jugurthinum.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp rename to LatinReader/src/main/res/drawable/work_de_bellum_jugurthinum.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.webp b/LatinReader/src/main/res/drawable/work_de_rerum_natura.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.webp rename to LatinReader/src/main/res/drawable/work_de_rerum_natura.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.webp b/LatinReader/src/main/res/drawable/work_metamorphoses.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.webp rename to LatinReader/src/main/res/drawable/work_metamorphoses.webp diff --git a/LatinReader/latinreader/src/main/res/drawable/work_satyricon.webp b/LatinReader/src/main/res/drawable/work_satyricon.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/work_satyricon.webp rename to LatinReader/src/main/res/drawable/work_satyricon.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml b/LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml rename to LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml b/LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml rename to LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml diff --git a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml b/LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml rename to LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher.png b/LatinReader/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher.png rename to LatinReader/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3.webp b/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3.webp rename to LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp b/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp rename to LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp b/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp rename to LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp b/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp rename to LatinReader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp b/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp rename to LatinReader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher.png b/LatinReader/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher.png rename to LatinReader/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3.webp b/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3.webp rename to LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp b/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp rename to LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp b/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp rename to LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp b/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp rename to LatinReader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp b/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp rename to LatinReader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher.png b/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher.png rename to LatinReader/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp b/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp rename to LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp b/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp rename to LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp b/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp rename to LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp b/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp rename to LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp b/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp rename to LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher.png b/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp b/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp rename to LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp b/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp rename to LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp b/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp rename to LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp b/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp rename to LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp b/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp rename to LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp b/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp rename to LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp b/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp rename to LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp b/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp rename to LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp b/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp rename to LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp b/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp rename to LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/latinreader/src/main/res/raw/allenandgreenough.xml b/LatinReader/src/main/res/raw/allenandgreenough.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/allenandgreenough.xml rename to LatinReader/src/main/res/raw/allenandgreenough.xml diff --git a/LatinReader/latinreader/src/main/res/raw/caes_bg_eng.xml b/LatinReader/src/main/res/raw/caes_bg_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/caes_bg_eng.xml rename to LatinReader/src/main/res/raw/caes_bg_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/caes_bg_lat.xml b/LatinReader/src/main/res/raw/caes_bg_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/caes_bg_lat.xml rename to LatinReader/src/main/res/raw/caes_bg_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/dictionary_entries.xml b/LatinReader/src/main/res/raw/dictionary_entries.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/dictionary_entries.xml rename to LatinReader/src/main/res/raw/dictionary_entries.xml diff --git a/LatinReader/latinreader/src/main/res/raw/hor_carm_eng.xml b/LatinReader/src/main/res/raw/hor_carm_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/hor_carm_eng.xml rename to LatinReader/src/main/res/raw/hor_carm_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/hor_carm_lat.xml b/LatinReader/src/main/res/raw/hor_carm_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/hor_carm_lat.xml rename to LatinReader/src/main/res/raw/hor_carm_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/lewis.xml b/LatinReader/src/main/res/raw/lewis.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/lewis.xml rename to LatinReader/src/main/res/raw/lewis.xml diff --git a/LatinReader/latinreader/src/main/res/raw/livy_01_02_eng.xml b/LatinReader/src/main/res/raw/livy_01_02_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/livy_01_02_eng.xml rename to LatinReader/src/main/res/raw/livy_01_02_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/livy_01_02_lat.xml b/LatinReader/src/main/res/raw/livy_01_02_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/livy_01_02_lat.xml rename to LatinReader/src/main/res/raw/livy_01_02_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/lucretius_eng.xml b/LatinReader/src/main/res/raw/lucretius_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/lucretius_eng.xml rename to LatinReader/src/main/res/raw/lucretius_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/lucretius_lat.xml b/LatinReader/src/main/res/raw/lucretius_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/lucretius_lat.xml rename to LatinReader/src/main/res/raw/lucretius_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/ovid_met_eng.xml b/LatinReader/src/main/res/raw/ovid_met_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/ovid_met_eng.xml rename to LatinReader/src/main/res/raw/ovid_met_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/ovid_met_lat.xml b/LatinReader/src/main/res/raw/ovid_met_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/ovid_met_lat.xml rename to LatinReader/src/main/res/raw/ovid_met_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/petr_eng.xml b/LatinReader/src/main/res/raw/petr_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/petr_eng.xml rename to LatinReader/src/main/res/raw/petr_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/petr_lat.xml b/LatinReader/src/main/res/raw/petr_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/petr_lat.xml rename to LatinReader/src/main/res/raw/petr_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/sallust_jugur_eng.xml b/LatinReader/src/main/res/raw/sallust_jugur_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/sallust_jugur_eng.xml rename to LatinReader/src/main/res/raw/sallust_jugur_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/sallust_jugur_lat.xml b/LatinReader/src/main/res/raw/sallust_jugur_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/sallust_jugur_lat.xml rename to LatinReader/src/main/res/raw/sallust_jugur_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/sen_apoc_eng.xml b/LatinReader/src/main/res/raw/sen_apoc_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/sen_apoc_eng.xml rename to LatinReader/src/main/res/raw/sen_apoc_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/sen_apoc_lat.xml b/LatinReader/src/main/res/raw/sen_apoc_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/sen_apoc_lat.xml rename to LatinReader/src/main/res/raw/sen_apoc_lat.xml diff --git a/LatinReader/latinreader/src/main/res/raw/verg_a_eng.xml b/LatinReader/src/main/res/raw/verg_a_eng.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/verg_a_eng.xml rename to LatinReader/src/main/res/raw/verg_a_eng.xml diff --git a/LatinReader/latinreader/src/main/res/raw/verg_a_lat.xml b/LatinReader/src/main/res/raw/verg_a_lat.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/raw/verg_a_lat.xml rename to LatinReader/src/main/res/raw/verg_a_lat.xml diff --git a/LatinReader/latinreader/src/main/res/values/colors.xml b/LatinReader/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/values/colors.xml rename to LatinReader/src/main/res/values/colors.xml diff --git a/LatinReader/latinreader/src/main/res/values/config.xml b/LatinReader/src/main/res/values/config.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/values/config.xml rename to LatinReader/src/main/res/values/config.xml diff --git a/LatinReader/greekreader/src/main/res/values/font_certs.xml b/LatinReader/src/main/res/values/font_certs.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values/font_certs.xml rename to LatinReader/src/main/res/values/font_certs.xml diff --git a/LatinReader/latinreader/src/main/res/values/strings.xml b/LatinReader/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/values/strings.xml rename to LatinReader/src/main/res/values/strings.xml diff --git a/README.md b/README.md index f95ecea..29e74ff 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,65 @@ -# Classics Reader for Android app +# Design -[![Android build](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android.yml/badge.svg)](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android.yml) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +The Classics Reader is an app designed for reading and translating ancient texts. It provides +translations of texts along side the source texts alongside a dictionary. -This open source code for two Android apps is available for anyone to clone, rebuild, copy, or alter for educational purposes. These apps allow users to read Ancient Greek and Latin texts, to read English translations of Ancient Greek and Latin texts, and lookup Ancient Greek and Latin words in an integrated dictionary. +## App Architecture -The Latin Reader app can be downloaded from the [Google Play Store](https://play.google.com/store/apps/details?id=com.ericmschmidt.latinreader). +This project contains three modules: -You can see a complete list of the releases for this app -[here](https://github.com/telpirion/ClassicsReaderAndroid/releases). ++ The base app (the module named `app`) that provides the base functionality of the app. ++ A module for each flavor--a Latin and Ancient Greek flavor. Each flavor is built into a + separate app, along with the base app, into a separate APK. -## Report bugs! +## The `app` module architecture -The Ancient Greek and Latin Reader apps are for Classicists by a Classicist. I not only build the app, but I use it myself to keep my Latin and Greek reading skills up to par. If you encounter a problem in the app, please file an issue here on the GitHub project home page. +The `app` module has six packages within it: -To log an issue, do the following: +* The `activities` package, which includes the `MainActivity` and `ErrorActivity` classes. - 1. Go to the [issues page](https://github.com/telpirion/ClassicsReader/issues). - 1. Click the **New Issue** button. - 1. Enter a title for your issue. Please indicate which app you are logging a bug for. - 1. Describe your issue in the **Write** tab. - 1. When you finish writing, click **Submit new issue**. +* The `datamodel` package, which includes classes that contain the information about the texts + within the app. -## Use of licensed material +* The `exceptions` package, which includes a single class, `ForceCloseHandler`, which allows the + app to close gracefully from unhandled exceptions. -Texts in these apps are available under the the Creative Commons ShareAlike 3.0 license. +* The `fragments` package, which includes all of the fragments or "pages" within the app. -+ http://www.perseus.tufts.edu/hopper/opensource/download -+ http://creativecommons.org/licenses/by-sa/3.0/us/ +* The `layouts` package, which includes the specialized adapters used for recycler views and list + views used within the app. + +* The `utilities` package, which includes several helper classes used for opening and parsing the + XML resources used within the app. -Images in these apps are available under the Creative Commons ShareAlike 3.0 license or are new creations from AI. +### Data model + +The `datamodel` package includes the following classes: + +* The [`WorkInfo`][workinfo] class is the foundational data structure for the app. It coordinates + the user experience of a work (current page, location, offset, translation name) with the text + itself. It also includes the resource ID for the work along with its URI. + +* The [`Work`][work] class acts as a controller between the data storage of the text + (XML file) and the app. + +* The [`TOCEntry`][tocentry] class contains information about a table of contents entry for a work. + It connects a "chapter" title with a location (int) with in the book. + +* The [`Book`][book] class contains information for accessing lines of text within a section, + chapter, or "book" within a larger work. + +* The [`Library`][library] class contains the list of `WorkInfo` objects contained in the app. + +* The [`Manifest`][manifest] class contains the concrete list of works, stored as XML or JSON, + within the app. It essentially acts as an interface for each APK or app bundle. + +* The [`ReadingViewModel`][readingviewmodel] class allows the app to manage the reading position + in the UI along with the source `Work` object. + +[work]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Work.java +[workinfo]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/WorkInfo.java +[tocentry]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/TOCEntry.java +[book]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Book.java +[library]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Library.java +[manifest]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Manifest.java +[readingviewmodel]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/ReadingViewModel.java \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..de3a8f7 --- /dev/null +++ b/build.gradle @@ -0,0 +1,44 @@ +buildscript { + repositories { + mavenCentral() + google() + gradlePluginPortal() + } +} + +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.androidx.navigation.safeargs) apply false +} + +ext { + kotlin_version = "2.1.21" + lifecycle_version = "2.10.0" + nav_version = "2.9.6" + compose_version = "1.12.1" +} + +allprojects { + repositories { + google() + maven { + url = "https://maven.google.com" + } + maven { + url = "https://jitpack.io" + } + mavenCentral() + } +} + +configurations.configureEach { + resolutionStrategy { + force("org.jetbrains:annotations:13.0") + } +} + +tasks.register("clean", Delete) { + delete rootProject.layout.buildDirectory +} diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html new file mode 100644 index 0000000..6964565 --- /dev/null +++ b/build/reports/problems/problems-report.html @@ -0,0 +1,666 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
    + +
    + Loading... +
    + + + + + + diff --git a/LatinReader/compose/.gitignore b/compose/.gitignore similarity index 100% rename from LatinReader/compose/.gitignore rename to compose/.gitignore diff --git a/LatinReader/compose/build.gradle b/compose/build.gradle similarity index 100% rename from LatinReader/compose/build.gradle rename to compose/build.gradle diff --git a/LatinReader/compose/proguard-rules.pro b/compose/proguard-rules.pro similarity index 100% rename from LatinReader/compose/proguard-rules.pro rename to compose/proguard-rules.pro diff --git a/LatinReader/compose/src/androidTest/java/com/telpirion/compose/ExampleInstrumentedTest.kt b/compose/src/androidTest/java/com/telpirion/compose/ExampleInstrumentedTest.kt similarity index 100% rename from LatinReader/compose/src/androidTest/java/com/telpirion/compose/ExampleInstrumentedTest.kt rename to compose/src/androidTest/java/com/telpirion/compose/ExampleInstrumentedTest.kt diff --git a/LatinReader/compose/src/main/AndroidManifest.xml b/compose/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/compose/src/main/AndroidManifest.xml rename to compose/src/main/AndroidManifest.xml diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/MainActivity.kt b/compose/src/main/java/com/telpirion/compose/MainActivity.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/MainActivity.kt rename to compose/src/main/java/com/telpirion/compose/MainActivity.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/DevicePreviews.kt b/compose/src/main/java/com/telpirion/compose/ui/DevicePreviews.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/DevicePreviews.kt rename to compose/src/main/java/com/telpirion/compose/ui/DevicePreviews.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/ReaderApp.kt b/compose/src/main/java/com/telpirion/compose/ui/ReaderApp.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/ReaderApp.kt rename to compose/src/main/java/com/telpirion/compose/ui/ReaderApp.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/DetailsPane.kt b/compose/src/main/java/com/telpirion/compose/ui/components/DetailsPane.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/DetailsPane.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/DetailsPane.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ListDetailPane.kt b/compose/src/main/java/com/telpirion/compose/ui/components/ListDetailPane.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ListDetailPane.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/ListDetailPane.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/PageControls.kt b/compose/src/main/java/com/telpirion/compose/ui/components/PageControls.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/PageControls.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/PageControls.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderAppNavHost.kt b/compose/src/main/java/com/telpirion/compose/ui/components/ReaderAppNavHost.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderAppNavHost.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/ReaderAppNavHost.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt b/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReadingSupportingPane.kt b/compose/src/main/java/com/telpirion/compose/ui/components/ReadingSupportingPane.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReadingSupportingPane.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/ReadingSupportingPane.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/SupportingPane.kt b/compose/src/main/java/com/telpirion/compose/ui/components/SupportingPane.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/SupportingPane.kt rename to compose/src/main/java/com/telpirion/compose/ui/components/SupportingPane.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/LibraryScreen.kt b/compose/src/main/java/com/telpirion/compose/ui/screens/LibraryScreen.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/LibraryScreen.kt rename to compose/src/main/java/com/telpirion/compose/ui/screens/LibraryScreen.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/MarkdownScreen.kt b/compose/src/main/java/com/telpirion/compose/ui/screens/MarkdownScreen.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/MarkdownScreen.kt rename to compose/src/main/java/com/telpirion/compose/ui/screens/MarkdownScreen.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/ReadingScreen.kt b/compose/src/main/java/com/telpirion/compose/ui/screens/ReadingScreen.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/ReadingScreen.kt rename to compose/src/main/java/com/telpirion/compose/ui/screens/ReadingScreen.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/SettingsScreen.kt b/compose/src/main/java/com/telpirion/compose/ui/screens/SettingsScreen.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/screens/SettingsScreen.kt rename to compose/src/main/java/com/telpirion/compose/ui/screens/SettingsScreen.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/theme/Color.kt b/compose/src/main/java/com/telpirion/compose/ui/theme/Color.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/theme/Color.kt rename to compose/src/main/java/com/telpirion/compose/ui/theme/Color.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/theme/Theme.kt b/compose/src/main/java/com/telpirion/compose/ui/theme/Theme.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/theme/Theme.kt rename to compose/src/main/java/com/telpirion/compose/ui/theme/Theme.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/theme/Type.kt b/compose/src/main/java/com/telpirion/compose/ui/theme/Type.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/ui/theme/Type.kt rename to compose/src/main/java/com/telpirion/compose/ui/theme/Type.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/viewmodels/DictionaryViewModel.kt b/compose/src/main/java/com/telpirion/compose/viewmodels/DictionaryViewModel.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/viewmodels/DictionaryViewModel.kt rename to compose/src/main/java/com/telpirion/compose/viewmodels/DictionaryViewModel.kt diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/viewmodels/ReadingViewModel.kt b/compose/src/main/java/com/telpirion/compose/viewmodels/ReadingViewModel.kt similarity index 100% rename from LatinReader/compose/src/main/java/com/telpirion/compose/viewmodels/ReadingViewModel.kt rename to compose/src/main/java/com/telpirion/compose/viewmodels/ReadingViewModel.kt diff --git a/LatinReader/compose/src/main/res/drawable/ic_launcher_background.xml b/compose/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from LatinReader/compose/src/main/res/drawable/ic_launcher_background.xml rename to compose/src/main/res/drawable/ic_launcher_background.xml diff --git a/LatinReader/compose/src/main/res/drawable/ic_launcher_foreground.xml b/compose/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from LatinReader/compose/src/main/res/drawable/ic_launcher_foreground.xml rename to compose/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/LatinReader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/compose/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to compose/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/LatinReader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to compose/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/LatinReader/compose/src/main/res/mipmap-hdpi/ic_launcher.webp b/compose/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-hdpi/ic_launcher.webp rename to compose/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/LatinReader/compose/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/compose/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to compose/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/LatinReader/compose/src/main/res/mipmap-mdpi/ic_launcher.webp b/compose/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-mdpi/ic_launcher.webp rename to compose/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/LatinReader/compose/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/compose/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to compose/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/LatinReader/compose/src/main/res/mipmap-xhdpi/ic_launcher.webp b/compose/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to compose/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/LatinReader/compose/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/compose/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to compose/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/LatinReader/compose/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/compose/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to compose/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/LatinReader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/compose/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to compose/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/LatinReader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/compose/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to compose/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/LatinReader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to compose/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/LatinReader/compose/src/main/res/values/colors.xml b/compose/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/compose/src/main/res/values/colors.xml rename to compose/src/main/res/values/colors.xml diff --git a/LatinReader/compose/src/main/res/values/config.xml b/compose/src/main/res/values/config.xml similarity index 100% rename from LatinReader/compose/src/main/res/values/config.xml rename to compose/src/main/res/values/config.xml diff --git a/LatinReader/compose/src/main/res/values/strings.xml b/compose/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/compose/src/main/res/values/strings.xml rename to compose/src/main/res/values/strings.xml diff --git a/LatinReader/compose/src/main/res/values/themes.xml b/compose/src/main/res/values/themes.xml similarity index 100% rename from LatinReader/compose/src/main/res/values/themes.xml rename to compose/src/main/res/values/themes.xml diff --git a/LatinReader/compose/src/test/java/com/telpirion/compose/ExampleUnitTest.kt b/compose/src/test/java/com/telpirion/compose/ExampleUnitTest.kt similarity index 100% rename from LatinReader/compose/src/test/java/com/telpirion/compose/ExampleUnitTest.kt rename to compose/src/test/java/com/telpirion/compose/ExampleUnitTest.kt diff --git a/LatinReader/core/.gitignore b/core/.gitignore similarity index 100% rename from LatinReader/core/.gitignore rename to core/.gitignore diff --git a/LatinReader/core/build.gradle b/core/build.gradle similarity index 100% rename from LatinReader/core/build.gradle rename to core/build.gradle diff --git a/LatinReader/core/src/androidTest/java/com/ericmschmidt/classicsreader/TestResources.kt b/core/src/androidTest/java/com/ericmschmidt/classicsreader/TestResources.kt similarity index 100% rename from LatinReader/core/src/androidTest/java/com/ericmschmidt/classicsreader/TestResources.kt rename to core/src/androidTest/java/com/ericmschmidt/classicsreader/TestResources.kt diff --git a/LatinReader/core/src/androidTest/java/com/ericmschmidt/classicsreader/data/WorkTest.kt b/core/src/androidTest/java/com/ericmschmidt/classicsreader/data/WorkTest.kt similarity index 100% rename from LatinReader/core/src/androidTest/java/com/ericmschmidt/classicsreader/data/WorkTest.kt rename to core/src/androidTest/java/com/ericmschmidt/classicsreader/data/WorkTest.kt diff --git a/LatinReader/core/src/androidTest/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt b/core/src/androidTest/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt similarity index 100% rename from LatinReader/core/src/androidTest/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt rename to core/src/androidTest/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt diff --git a/LatinReader/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/core/src/main/AndroidManifest.xml rename to core/src/main/AndroidManifest.xml diff --git a/LatinReader/core/src/main/ic_launcher-web.png b/core/src/main/ic_launcher-web.png similarity index 100% rename from LatinReader/core/src/main/ic_launcher-web.png rename to core/src/main/ic_launcher-web.png diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ApplicationLogging.kt b/core/src/main/java/com/ericmschmidt/classicsreader/ApplicationLogging.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ApplicationLogging.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/ApplicationLogging.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/MyApplication.kt b/core/src/main/java/com/ericmschmidt/classicsreader/MyApplication.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/MyApplication.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/MyApplication.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Book.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/Book.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Book.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/Book.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/DictionaryRepository.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/DictionaryRepository.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/DictionaryRepository.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/DictionaryRepository.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Library.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/Library.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Library.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/Library.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/PreferencesDataStore.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/PreferencesDataStore.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/PreferencesDataStore.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/PreferencesDataStore.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/ReadingViewModel.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/ReadingViewModel.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/ReadingViewModel.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/ReadingViewModel.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/SettingsFields.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/SettingsFields.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/SettingsFields.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/SettingsFields.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/TOCEntry.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/TOCEntry.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/TOCEntry.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/TOCEntry.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Work.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/Work.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/Work.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/Work.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/WorkInfo.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/WorkInfo.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/WorkInfo.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/WorkInfo.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoLibrary.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoLibrary.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoLibrary.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoLibrary.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoManifest.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoManifest.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoManifest.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/data/placeholders/PseudoManifest.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/Cards.kt b/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/Cards.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/Cards.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/ui/components/Cards.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardGrid.kt b/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardGrid.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardGrid.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardGrid.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardList.kt b/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardList.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardList.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/ui/components/LazyCardList.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/HelpFragment.kt b/core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/HelpFragment.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/HelpFragment.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/HelpFragment.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/InfoFragment.kt b/core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/InfoFragment.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/InfoFragment.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/InfoFragment.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/utilities/ITextConverter.kt b/core/src/main/java/com/ericmschmidt/classicsreader/utilities/ITextConverter.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/utilities/ITextConverter.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/utilities/ITextConverter.kt diff --git a/LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpers.kt b/core/src/main/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpers.kt similarity index 100% rename from LatinReader/core/src/main/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpers.kt rename to core/src/main/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpers.kt diff --git a/LatinReader/core/src/main/res/drawable/ic_baseline_help_24.xml b/core/src/main/res/drawable/ic_baseline_help_24.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_baseline_help_24.xml rename to core/src/main/res/drawable/ic_baseline_help_24.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_baseline_info_24.xml b/core/src/main/res/drawable/ic_baseline_info_24.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_baseline_info_24.xml rename to core/src/main/res/drawable/ic_baseline_info_24.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_book_black_24dp.xml b/core/src/main/res/drawable/ic_book_black_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_book_black_24dp.xml rename to core/src/main/res/drawable/ic_book_black_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_bookmark_black_24dp.xml b/core/src/main/res/drawable/ic_bookmark_black_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_bookmark_black_24dp.xml rename to core/src/main/res/drawable/ic_bookmark_black_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_description_black_24dp.xml b/core/src/main/res/drawable/ic_description_black_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_description_black_24dp.xml rename to core/src/main/res/drawable/ic_description_black_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_find_in_page_black_24dp.xml b/core/src/main/res/drawable/ic_find_in_page_black_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_find_in_page_black_24dp.xml rename to core/src/main/res/drawable/ic_find_in_page_black_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_find_in_page_white_24dp.xml b/core/src/main/res/drawable/ic_find_in_page_white_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_find_in_page_white_24dp.xml rename to core/src/main/res/drawable/ic_find_in_page_white_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_next_page_background.xml b/core/src/main/res/drawable/ic_next_page_background.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_next_page_background.xml rename to core/src/main/res/drawable/ic_next_page_background.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_next_page_foreground.xml b/core/src/main/res/drawable/ic_next_page_foreground.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_next_page_foreground.xml rename to core/src/main/res/drawable/ic_next_page_foreground.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_prev_page_background.xml b/core/src/main/res/drawable/ic_prev_page_background.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_prev_page_background.xml rename to core/src/main/res/drawable/ic_prev_page_background.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_prev_page_foreground.xml b/core/src/main/res/drawable/ic_prev_page_foreground.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_prev_page_foreground.xml rename to core/src/main/res/drawable/ic_prev_page_foreground.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_school_black_24dp.xml b/core/src/main/res/drawable/ic_school_black_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_school_black_24dp.xml rename to core/src/main/res/drawable/ic_school_black_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/ic_settings_black_24dp.xml b/core/src/main/res/drawable/ic_settings_black_24dp.xml similarity index 100% rename from LatinReader/core/src/main/res/drawable/ic_settings_black_24dp.xml rename to core/src/main/res/drawable/ic_settings_black_24dp.xml diff --git a/LatinReader/core/src/main/res/drawable/work_default_1.png b/core/src/main/res/drawable/work_default_1.png similarity index 100% rename from LatinReader/core/src/main/res/drawable/work_default_1.png rename to core/src/main/res/drawable/work_default_1.png diff --git a/LatinReader/core/src/main/res/drawable/work_default_2.png b/core/src/main/res/drawable/work_default_2.png similarity index 100% rename from LatinReader/core/src/main/res/drawable/work_default_2.png rename to core/src/main/res/drawable/work_default_2.png diff --git a/LatinReader/core/src/main/res/drawable/work_default_3.png b/core/src/main/res/drawable/work_default_3.png similarity index 100% rename from LatinReader/core/src/main/res/drawable/work_default_3.png rename to core/src/main/res/drawable/work_default_3.png diff --git a/LatinReader/core/src/main/res/layout/fragment_help.xml b/core/src/main/res/layout/fragment_help.xml similarity index 100% rename from LatinReader/core/src/main/res/layout/fragment_help.xml rename to core/src/main/res/layout/fragment_help.xml diff --git a/LatinReader/core/src/main/res/layout/fragment_info.xml b/core/src/main/res/layout/fragment_info.xml similarity index 100% rename from LatinReader/core/src/main/res/layout/fragment_info.xml rename to core/src/main/res/layout/fragment_info.xml diff --git a/LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_next_page.xml b/core/src/main/res/mipmap-anydpi-v26/ic_next_page.xml similarity index 100% rename from LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_next_page.xml rename to core/src/main/res/mipmap-anydpi-v26/ic_next_page.xml diff --git a/LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_next_page_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_next_page_round.xml similarity index 100% rename from LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_next_page_round.xml rename to core/src/main/res/mipmap-anydpi-v26/ic_next_page_round.xml diff --git a/LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_prev_page.xml b/core/src/main/res/mipmap-anydpi-v26/ic_prev_page.xml similarity index 100% rename from LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_prev_page.xml rename to core/src/main/res/mipmap-anydpi-v26/ic_prev_page.xml diff --git a/LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_prev_page_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_prev_page_round.xml similarity index 100% rename from LatinReader/core/src/main/res/mipmap-anydpi-v26/ic_prev_page_round.xml rename to core/src/main/res/mipmap-anydpi-v26/ic_prev_page_round.xml diff --git a/LatinReader/core/src/main/res/mipmap-hdpi/ic_launcher.png b/core/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-hdpi/ic_launcher.png rename to core/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/LatinReader/core/src/main/res/mipmap-hdpi/ic_next_page.png b/core/src/main/res/mipmap-hdpi/ic_next_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-hdpi/ic_next_page.png rename to core/src/main/res/mipmap-hdpi/ic_next_page.png diff --git a/LatinReader/core/src/main/res/mipmap-hdpi/ic_next_page_round.png b/core/src/main/res/mipmap-hdpi/ic_next_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-hdpi/ic_next_page_round.png rename to core/src/main/res/mipmap-hdpi/ic_next_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-hdpi/ic_prev_page.png b/core/src/main/res/mipmap-hdpi/ic_prev_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-hdpi/ic_prev_page.png rename to core/src/main/res/mipmap-hdpi/ic_prev_page.png diff --git a/LatinReader/core/src/main/res/mipmap-hdpi/ic_prev_page_round.png b/core/src/main/res/mipmap-hdpi/ic_prev_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-hdpi/ic_prev_page_round.png rename to core/src/main/res/mipmap-hdpi/ic_prev_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-mdpi/ic_launcher.png b/core/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-mdpi/ic_launcher.png rename to core/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/LatinReader/core/src/main/res/mipmap-mdpi/ic_next_page.png b/core/src/main/res/mipmap-mdpi/ic_next_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-mdpi/ic_next_page.png rename to core/src/main/res/mipmap-mdpi/ic_next_page.png diff --git a/LatinReader/core/src/main/res/mipmap-mdpi/ic_next_page_round.png b/core/src/main/res/mipmap-mdpi/ic_next_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-mdpi/ic_next_page_round.png rename to core/src/main/res/mipmap-mdpi/ic_next_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-mdpi/ic_prev_page.png b/core/src/main/res/mipmap-mdpi/ic_prev_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-mdpi/ic_prev_page.png rename to core/src/main/res/mipmap-mdpi/ic_prev_page.png diff --git a/LatinReader/core/src/main/res/mipmap-mdpi/ic_prev_page_round.png b/core/src/main/res/mipmap-mdpi/ic_prev_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-mdpi/ic_prev_page_round.png rename to core/src/main/res/mipmap-mdpi/ic_prev_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-xhdpi/ic_launcher.png b/core/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xhdpi/ic_launcher.png rename to core/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/LatinReader/core/src/main/res/mipmap-xhdpi/ic_next_page.png b/core/src/main/res/mipmap-xhdpi/ic_next_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xhdpi/ic_next_page.png rename to core/src/main/res/mipmap-xhdpi/ic_next_page.png diff --git a/LatinReader/core/src/main/res/mipmap-xhdpi/ic_next_page_round.png b/core/src/main/res/mipmap-xhdpi/ic_next_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xhdpi/ic_next_page_round.png rename to core/src/main/res/mipmap-xhdpi/ic_next_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-xhdpi/ic_prev_page.png b/core/src/main/res/mipmap-xhdpi/ic_prev_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xhdpi/ic_prev_page.png rename to core/src/main/res/mipmap-xhdpi/ic_prev_page.png diff --git a/LatinReader/core/src/main/res/mipmap-xhdpi/ic_prev_page_round.png b/core/src/main/res/mipmap-xhdpi/ic_prev_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xhdpi/ic_prev_page_round.png rename to core/src/main/res/mipmap-xhdpi/ic_prev_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-xxhdpi/ic_launcher.png b/core/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to core/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/LatinReader/core/src/main/res/mipmap-xxhdpi/ic_next_page.png b/core/src/main/res/mipmap-xxhdpi/ic_next_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxhdpi/ic_next_page.png rename to core/src/main/res/mipmap-xxhdpi/ic_next_page.png diff --git a/LatinReader/core/src/main/res/mipmap-xxhdpi/ic_next_page_round.png b/core/src/main/res/mipmap-xxhdpi/ic_next_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxhdpi/ic_next_page_round.png rename to core/src/main/res/mipmap-xxhdpi/ic_next_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-xxhdpi/ic_prev_page.png b/core/src/main/res/mipmap-xxhdpi/ic_prev_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxhdpi/ic_prev_page.png rename to core/src/main/res/mipmap-xxhdpi/ic_prev_page.png diff --git a/LatinReader/core/src/main/res/mipmap-xxhdpi/ic_prev_page_round.png b/core/src/main/res/mipmap-xxhdpi/ic_prev_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxhdpi/ic_prev_page_round.png rename to core/src/main/res/mipmap-xxhdpi/ic_prev_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/core/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to core/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_next_page.png b/core/src/main/res/mipmap-xxxhdpi/ic_next_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_next_page.png rename to core/src/main/res/mipmap-xxxhdpi/ic_next_page.png diff --git a/LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_next_page_round.png b/core/src/main/res/mipmap-xxxhdpi/ic_next_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_next_page_round.png rename to core/src/main/res/mipmap-xxxhdpi/ic_next_page_round.png diff --git a/LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_prev_page.png b/core/src/main/res/mipmap-xxxhdpi/ic_prev_page.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_prev_page.png rename to core/src/main/res/mipmap-xxxhdpi/ic_prev_page.png diff --git a/LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_prev_page_round.png b/core/src/main/res/mipmap-xxxhdpi/ic_prev_page_round.png similarity index 100% rename from LatinReader/core/src/main/res/mipmap-xxxhdpi/ic_prev_page_round.png rename to core/src/main/res/mipmap-xxxhdpi/ic_prev_page_round.png diff --git a/LatinReader/core/src/main/res/raw/help.md b/core/src/main/res/raw/help.md similarity index 100% rename from LatinReader/core/src/main/res/raw/help.md rename to core/src/main/res/raw/help.md diff --git a/LatinReader/core/src/main/res/raw/info.md b/core/src/main/res/raw/info.md similarity index 100% rename from LatinReader/core/src/main/res/raw/info.md rename to core/src/main/res/raw/info.md diff --git a/LatinReader/core/src/main/res/raw/test_entries.xml b/core/src/main/res/raw/test_entries.xml similarity index 100% rename from LatinReader/core/src/main/res/raw/test_entries.xml rename to core/src/main/res/raw/test_entries.xml diff --git a/LatinReader/core/src/main/res/raw/text_work.xml b/core/src/main/res/raw/text_work.xml similarity index 100% rename from LatinReader/core/src/main/res/raw/text_work.xml rename to core/src/main/res/raw/text_work.xml diff --git a/LatinReader/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml similarity index 100% rename from LatinReader/core/src/main/res/values/arrays.xml rename to core/src/main/res/values/arrays.xml diff --git a/LatinReader/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/core/src/main/res/values/colors.xml rename to core/src/main/res/values/colors.xml diff --git a/LatinReader/core/src/main/res/values/config.xml b/core/src/main/res/values/config.xml similarity index 100% rename from LatinReader/core/src/main/res/values/config.xml rename to core/src/main/res/values/config.xml diff --git a/LatinReader/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml similarity index 100% rename from LatinReader/core/src/main/res/values/dimens.xml rename to core/src/main/res/values/dimens.xml diff --git a/LatinReader/core/src/main/res/values/drawables.xml b/core/src/main/res/values/drawables.xml similarity index 100% rename from LatinReader/core/src/main/res/values/drawables.xml rename to core/src/main/res/values/drawables.xml diff --git a/LatinReader/core/src/main/res/values/pref-array.xml b/core/src/main/res/values/pref-array.xml similarity index 100% rename from LatinReader/core/src/main/res/values/pref-array.xml rename to core/src/main/res/values/pref-array.xml diff --git a/LatinReader/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/core/src/main/res/values/strings.xml rename to core/src/main/res/values/strings.xml diff --git a/LatinReader/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml similarity index 100% rename from LatinReader/core/src/main/res/values/styles.xml rename to core/src/main/res/values/styles.xml diff --git a/LatinReader/core/src/main/res/xml/settings.xml b/core/src/main/res/xml/settings.xml similarity index 100% rename from LatinReader/core/src/main/res/xml/settings.xml rename to core/src/main/res/xml/settings.xml diff --git a/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/TestResources.kt b/core/src/test/java/com/ericmschmidt/classicsreader/TestResources.kt similarity index 100% rename from LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/TestResources.kt rename to core/src/test/java/com/ericmschmidt/classicsreader/TestResources.kt diff --git a/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/BookTest.kt b/core/src/test/java/com/ericmschmidt/classicsreader/data/BookTest.kt similarity index 100% rename from LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/BookTest.kt rename to core/src/test/java/com/ericmschmidt/classicsreader/data/BookTest.kt diff --git a/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt b/core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt similarity index 100% rename from LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt rename to core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt diff --git a/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt b/core/src/test/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt similarity index 100% rename from LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt rename to core/src/test/java/com/ericmschmidt/classicsreader/utilities/ResourceHelpersTest.kt diff --git a/LatinReader/gradle.properties b/gradle.properties similarity index 100% rename from LatinReader/gradle.properties rename to gradle.properties diff --git a/LatinReader/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties similarity index 100% rename from LatinReader/gradle/gradle-daemon-jvm.properties rename to gradle/gradle-daemon-jvm.properties diff --git a/LatinReader/gradle/libs.versions.toml b/gradle/libs.versions.toml similarity index 100% rename from LatinReader/gradle/libs.versions.toml rename to gradle/libs.versions.toml diff --git a/LatinReader/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from LatinReader/gradle/wrapper/gradle-wrapper.jar rename to gradle/wrapper/gradle-wrapper.jar diff --git a/LatinReader/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from LatinReader/gradle/wrapper/gradle-wrapper.properties rename to gradle/wrapper/gradle-wrapper.properties diff --git a/LatinReader/gradlew b/gradlew similarity index 100% rename from LatinReader/gradlew rename to gradlew diff --git a/LatinReader/gradlew.bat b/gradlew.bat similarity index 96% rename from LatinReader/gradlew.bat rename to gradlew.bat index 9b42019..9d21a21 100644 --- a/LatinReader/gradlew.bat +++ b/gradlew.bat @@ -1,94 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/LatinReader/greekreader-compose/.gitignore b/greekreader-compose/.gitignore similarity index 100% rename from LatinReader/greekreader-compose/.gitignore rename to greekreader-compose/.gitignore diff --git a/LatinReader/greekreader-compose/build.gradle b/greekreader-compose/build.gradle similarity index 100% rename from LatinReader/greekreader-compose/build.gradle rename to greekreader-compose/build.gradle diff --git a/LatinReader/greekreader-compose/proguard-rules.pro b/greekreader-compose/proguard-rules.pro similarity index 100% rename from LatinReader/greekreader-compose/proguard-rules.pro rename to greekreader-compose/proguard-rules.pro diff --git a/LatinReader/greekreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt b/greekreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt similarity index 100% rename from LatinReader/greekreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt rename to greekreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt diff --git a/LatinReader/greekreader-compose/src/main/AndroidManifest.xml b/greekreader-compose/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/greekreader-compose/src/main/AndroidManifest.xml rename to greekreader-compose/src/main/AndroidManifest.xml diff --git a/LatinReader/greekreader-compose/src/main/ic_launcher_3-playstore.png b/greekreader-compose/src/main/ic_launcher_3-playstore.png similarity index 100% rename from LatinReader/greekreader-compose/src/main/ic_launcher_3-playstore.png rename to greekreader-compose/src/main/ic_launcher_3-playstore.png diff --git a/LatinReader/latinreader/src/main/res/drawable/ic_launcher_3_background.xml b/greekreader-compose/src/main/res/drawable/ic_launcher_3_background.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/ic_launcher_3_background.xml rename to greekreader-compose/src/main/res/drawable/ic_launcher_3_background.xml diff --git a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml b/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml rename to greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml diff --git a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml b/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml rename to greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp b/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp rename to greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp b/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp rename to greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp b/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp rename to greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp b/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp rename to greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp b/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp rename to greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp b/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp rename to greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp b/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp rename to greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp b/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp rename to greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp b/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp rename to greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp b/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp rename to greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp b/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp rename to greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp b/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp rename to greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp b/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp rename to greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp b/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp rename to greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp b/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp rename to greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/greekreader-compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt b/greekreader-compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt similarity index 100% rename from LatinReader/greekreader-compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt rename to greekreader-compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt diff --git a/LatinReader/greekreader-views/.gitignore b/greekreader-views/.gitignore similarity index 100% rename from LatinReader/greekreader-views/.gitignore rename to greekreader-views/.gitignore diff --git a/LatinReader/greekreader-views/build.gradle b/greekreader-views/build.gradle similarity index 100% rename from LatinReader/greekreader-views/build.gradle rename to greekreader-views/build.gradle diff --git a/LatinReader/greekreader-views/proguard-rules.pro b/greekreader-views/proguard-rules.pro similarity index 100% rename from LatinReader/greekreader-views/proguard-rules.pro rename to greekreader-views/proguard-rules.pro diff --git a/LatinReader/greekreader-views/src/adaptiveTest/adaptive_journey.journey.xml b/greekreader-views/src/adaptiveTest/adaptive_journey.journey.xml similarity index 100% rename from LatinReader/greekreader-views/src/adaptiveTest/adaptive_journey.journey.xml rename to greekreader-views/src/adaptiveTest/adaptive_journey.journey.xml diff --git a/LatinReader/greekreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt b/greekreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt similarity index 100% rename from LatinReader/greekreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt rename to greekreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt diff --git a/LatinReader/greekreader-views/src/main/AndroidManifest.xml b/greekreader-views/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/AndroidManifest.xml rename to greekreader-views/src/main/AndroidManifest.xml diff --git a/LatinReader/greekreader-views/src/main/res/drawable/ic_launcher_background.xml b/greekreader-views/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/drawable/ic_launcher_background.xml rename to greekreader-views/src/main/res/drawable/ic_launcher_background.xml diff --git a/LatinReader/greekreader-views/src/main/res/drawable/ic_launcher_foreground.xml b/greekreader-views/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/drawable/ic_launcher_foreground.xml rename to greekreader-views/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp b/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp rename to greekreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to greekreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp b/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp rename to greekreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to greekreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp b/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/LatinReader/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/LatinReader/greekreader-views/src/main/res/values-night/themes.xml b/greekreader-views/src/main/res/values-night/themes.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/values-night/themes.xml rename to greekreader-views/src/main/res/values-night/themes.xml diff --git a/LatinReader/greekreader-views/src/main/res/values/colors.xml b/greekreader-views/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/values/colors.xml rename to greekreader-views/src/main/res/values/colors.xml diff --git a/LatinReader/greekreader-views/src/main/res/values/strings.xml b/greekreader-views/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/values/strings.xml rename to greekreader-views/src/main/res/values/strings.xml diff --git a/LatinReader/greekreader-views/src/main/res/values/themes.xml b/greekreader-views/src/main/res/values/themes.xml similarity index 100% rename from LatinReader/greekreader-views/src/main/res/values/themes.xml rename to greekreader-views/src/main/res/values/themes.xml diff --git a/LatinReader/greekreader-views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt b/greekreader-views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt similarity index 100% rename from LatinReader/greekreader-views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt rename to greekreader-views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt diff --git a/LatinReader/greekreader/.gitignore b/greekreader/.gitignore similarity index 100% rename from LatinReader/greekreader/.gitignore rename to greekreader/.gitignore diff --git a/LatinReader/greekreader/build.gradle b/greekreader/build.gradle similarity index 100% rename from LatinReader/greekreader/build.gradle rename to greekreader/build.gradle diff --git a/LatinReader/latinreader/src/main/AndroidManifest.xml b/greekreader/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/latinreader/src/main/AndroidManifest.xml rename to greekreader/src/main/AndroidManifest.xml diff --git a/LatinReader/greekreader/src/main/ic_launcher-web.png b/greekreader/src/main/ic_launcher-web.png similarity index 100% rename from LatinReader/greekreader/src/main/ic_launcher-web.png rename to greekreader/src/main/ic_launcher-web.png diff --git a/LatinReader/greekreader/src/main/ic_launcher_2-playstore.png b/greekreader/src/main/ic_launcher_2-playstore.png similarity index 100% rename from LatinReader/greekreader/src/main/ic_launcher_2-playstore.png rename to greekreader/src/main/ic_launcher_2-playstore.png diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/GreekReaderApplication.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/GreekReaderApplication.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/GreekReaderApplication.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/GreekReaderApplication.kt diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibrary.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibrary.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibrary.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibrary.kt diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibraryDescriptions.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibraryDescriptions.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibraryDescriptions.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/data/GreekReaderLibraryDescriptions.kt diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Color.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Color.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Color.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Color.kt diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Theme.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Theme.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Theme.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Theme.kt diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Type.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Type.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Type.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/theme/Type.kt diff --git a/LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/utilities/TextConverter.kt b/greekreader/src/main/java/com/ericmschmidt/greekreader/utilities/TextConverter.kt similarity index 100% rename from LatinReader/greekreader/src/main/java/com/ericmschmidt/greekreader/utilities/TextConverter.kt rename to greekreader/src/main/java/com/ericmschmidt/greekreader/utilities/TextConverter.kt diff --git a/LatinReader/greekreader/src/main/res/drawable/ic_greekreader.xml b/greekreader/src/main/res/drawable/ic_greekreader.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/ic_greekreader.xml rename to greekreader/src/main/res/drawable/ic_greekreader.xml diff --git a/LatinReader/latinreader/src/main/res/drawable/ic_launcher_2_background.xml b/greekreader/src/main/res/drawable/ic_launcher_2_background.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/drawable/ic_launcher_2_background.xml rename to greekreader/src/main/res/drawable/ic_launcher_2_background.xml diff --git a/LatinReader/greekreader/src/main/res/drawable/work_anabasis.webp b/greekreader/src/main/res/drawable/work_anabasis.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/work_anabasis.webp rename to greekreader/src/main/res/drawable/work_anabasis.webp diff --git a/LatinReader/greekreader/src/main/res/drawable/work_iliad.webp b/greekreader/src/main/res/drawable/work_iliad.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/work_iliad.webp rename to greekreader/src/main/res/drawable/work_iliad.webp diff --git a/LatinReader/greekreader/src/main/res/drawable/work_odyssey.webp b/greekreader/src/main/res/drawable/work_odyssey.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/work_odyssey.webp rename to greekreader/src/main/res/drawable/work_odyssey.webp diff --git a/LatinReader/greekreader/src/main/res/drawable/work_politics.webp b/greekreader/src/main/res/drawable/work_politics.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/work_politics.webp rename to greekreader/src/main/res/drawable/work_politics.webp diff --git a/LatinReader/greekreader/src/main/res/drawable/work_speeches.webp b/greekreader/src/main/res/drawable/work_speeches.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/drawable/work_speeches.webp rename to greekreader/src/main/res/drawable/work_speeches.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml b/greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml rename to greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml diff --git a/LatinReader/greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml b/greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml rename to greekreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml diff --git a/LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher.png b/greekreader/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher.png rename to greekreader/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp b/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp rename to greekreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp b/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp rename to greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp b/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp rename to greekreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher.png b/greekreader/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher.png rename to greekreader/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp b/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp rename to greekreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp b/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp rename to greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp b/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp rename to greekreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher.png b/greekreader/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher.png rename to greekreader/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp b/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp rename to greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp b/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp rename to greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp b/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp rename to greekreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher.png b/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to greekreader/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp b/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp rename to greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp b/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp rename to greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp b/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp rename to greekreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp b/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp rename to greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp b/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp rename to greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp diff --git a/LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp b/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp similarity index 100% rename from LatinReader/greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp rename to greekreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp diff --git a/LatinReader/greekreader/src/main/res/raw/aristot_pol_eng.xml b/greekreader/src/main/res/raw/aristot_pol_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/aristot_pol_eng.xml rename to greekreader/src/main/res/raw/aristot_pol_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/aristot_pol_gk.xml b/greekreader/src/main/res/raw/aristot_pol_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/aristot_pol_gk.xml rename to greekreader/src/main/res/raw/aristot_pol_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/dictionary_entries.xml b/greekreader/src/main/res/raw/dictionary_entries.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/dictionary_entries.xml rename to greekreader/src/main/res/raw/dictionary_entries.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_aristot_pol_gk.xml b/greekreader/src/main/res/raw/gk_aristot_pol_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_aristot_pol_gk.xml rename to greekreader/src/main/res/raw/gk_aristot_pol_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_hdt_gk.xml b/greekreader/src/main/res/raw/gk_hdt_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_hdt_gk.xml rename to greekreader/src/main/res/raw/gk_hdt_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_hom_il_gk.xml b/greekreader/src/main/res/raw/gk_hom_il_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_hom_il_gk.xml rename to greekreader/src/main/res/raw/gk_hom_il_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_hom_od_gk.xml b/greekreader/src/main/res/raw/gk_hom_od_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_hom_od_gk.xml rename to greekreader/src/main/res/raw/gk_hom_od_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_lys_gk.xml b/greekreader/src/main/res/raw/gk_lys_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_lys_gk.xml rename to greekreader/src/main/res/raw/gk_lys_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_plat_rep_gk.xml b/greekreader/src/main/res/raw/gk_plat_rep_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_plat_rep_gk.xml rename to greekreader/src/main/res/raw/gk_plat_rep_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/gk_xen_anab_gk.xml b/greekreader/src/main/res/raw/gk_xen_anab_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/gk_xen_anab_gk.xml rename to greekreader/src/main/res/raw/gk_xen_anab_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/hdt_eng.xml b/greekreader/src/main/res/raw/hdt_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/hdt_eng.xml rename to greekreader/src/main/res/raw/hdt_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/hdt_gk.xml b/greekreader/src/main/res/raw/hdt_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/hdt_gk.xml rename to greekreader/src/main/res/raw/hdt_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/hom_il_eng.xml b/greekreader/src/main/res/raw/hom_il_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/hom_il_eng.xml rename to greekreader/src/main/res/raw/hom_il_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/hom_il_gk.xml b/greekreader/src/main/res/raw/hom_il_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/hom_il_gk.xml rename to greekreader/src/main/res/raw/hom_il_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/hom_od_eng.xml b/greekreader/src/main/res/raw/hom_od_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/hom_od_eng.xml rename to greekreader/src/main/res/raw/hom_od_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/hom_od_gk.xml b/greekreader/src/main/res/raw/hom_od_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/hom_od_gk.xml rename to greekreader/src/main/res/raw/hom_od_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/latin_greek_text_conversion.json b/greekreader/src/main/res/raw/latin_greek_text_conversion.json similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/latin_greek_text_conversion.json rename to greekreader/src/main/res/raw/latin_greek_text_conversion.json diff --git a/LatinReader/greekreader/src/main/res/raw/lys_eng.xml b/greekreader/src/main/res/raw/lys_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/lys_eng.xml rename to greekreader/src/main/res/raw/lys_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/lys_gk.xml b/greekreader/src/main/res/raw/lys_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/lys_gk.xml rename to greekreader/src/main/res/raw/lys_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/ml.xml b/greekreader/src/main/res/raw/ml.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/ml.xml rename to greekreader/src/main/res/raw/ml.xml diff --git a/LatinReader/greekreader/src/main/res/raw/plat_rep_eng.xml b/greekreader/src/main/res/raw/plat_rep_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/plat_rep_eng.xml rename to greekreader/src/main/res/raw/plat_rep_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/plat_rep_gk.xml b/greekreader/src/main/res/raw/plat_rep_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/plat_rep_gk.xml rename to greekreader/src/main/res/raw/plat_rep_gk.xml diff --git a/LatinReader/greekreader/src/main/res/raw/smyth.xml b/greekreader/src/main/res/raw/smyth.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/smyth.xml rename to greekreader/src/main/res/raw/smyth.xml diff --git a/LatinReader/greekreader/src/main/res/raw/xen_anab_eng.xml b/greekreader/src/main/res/raw/xen_anab_eng.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/xen_anab_eng.xml rename to greekreader/src/main/res/raw/xen_anab_eng.xml diff --git a/LatinReader/greekreader/src/main/res/raw/xen_anab_gk.xml b/greekreader/src/main/res/raw/xen_anab_gk.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/raw/xen_anab_gk.xml rename to greekreader/src/main/res/raw/xen_anab_gk.xml diff --git a/LatinReader/greekreader/src/main/res/values-v21/styles.xml b/greekreader/src/main/res/values-v21/styles.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values-v21/styles.xml rename to greekreader/src/main/res/values-v21/styles.xml diff --git a/LatinReader/greekreader/src/main/res/values-w820dp/dimens.xml b/greekreader/src/main/res/values-w820dp/dimens.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values-w820dp/dimens.xml rename to greekreader/src/main/res/values-w820dp/dimens.xml diff --git a/LatinReader/greekreader/src/main/res/values/colors.xml b/greekreader/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values/colors.xml rename to greekreader/src/main/res/values/colors.xml diff --git a/LatinReader/greekreader/src/main/res/values/config.xml b/greekreader/src/main/res/values/config.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values/config.xml rename to greekreader/src/main/res/values/config.xml diff --git a/LatinReader/greekreader/src/main/res/values/dimens.xml b/greekreader/src/main/res/values/dimens.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values/dimens.xml rename to greekreader/src/main/res/values/dimens.xml diff --git a/LatinReader/latinreader/src/main/res/values/font_certs.xml b/greekreader/src/main/res/values/font_certs.xml similarity index 100% rename from LatinReader/latinreader/src/main/res/values/font_certs.xml rename to greekreader/src/main/res/values/font_certs.xml diff --git a/LatinReader/greekreader/src/main/res/values/strings.xml b/greekreader/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values/strings.xml rename to greekreader/src/main/res/values/strings.xml diff --git a/LatinReader/greekreader/src/main/res/values/styles.xml b/greekreader/src/main/res/values/styles.xml similarity index 100% rename from LatinReader/greekreader/src/main/res/values/styles.xml rename to greekreader/src/main/res/values/styles.xml diff --git a/LatinReader/latinreader-compose/.gitignore b/latinreader-compose/.gitignore similarity index 100% rename from LatinReader/latinreader-compose/.gitignore rename to latinreader-compose/.gitignore diff --git a/LatinReader/latinreader-compose/build.gradle b/latinreader-compose/build.gradle similarity index 100% rename from LatinReader/latinreader-compose/build.gradle rename to latinreader-compose/build.gradle diff --git a/LatinReader/latinreader-compose/proguard-rules.pro b/latinreader-compose/proguard-rules.pro similarity index 100% rename from LatinReader/latinreader-compose/proguard-rules.pro rename to latinreader-compose/proguard-rules.pro diff --git a/LatinReader/latinreader-compose/src/androidTest/AndroidManifest.xml b/latinreader-compose/src/androidTest/AndroidManifest.xml similarity index 100% rename from LatinReader/latinreader-compose/src/androidTest/AndroidManifest.xml rename to latinreader-compose/src/androidTest/AndroidManifest.xml diff --git a/LatinReader/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt b/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt similarity index 100% rename from LatinReader/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt rename to latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt diff --git a/LatinReader/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt b/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt similarity index 100% rename from LatinReader/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt rename to latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt diff --git a/LatinReader/latinreader-compose/src/main/AndroidManifest.xml b/latinreader-compose/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/latinreader-compose/src/main/AndroidManifest.xml rename to latinreader-compose/src/main/AndroidManifest.xml diff --git a/LatinReader/latinreader-views/.gitignore b/latinreader-views/.gitignore similarity index 100% rename from LatinReader/latinreader-views/.gitignore rename to latinreader-views/.gitignore diff --git a/LatinReader/latinreader-views/build.gradle b/latinreader-views/build.gradle similarity index 100% rename from LatinReader/latinreader-views/build.gradle rename to latinreader-views/build.gradle diff --git a/LatinReader/latinreader-views/proguard-rules.pro b/latinreader-views/proguard-rules.pro similarity index 100% rename from LatinReader/latinreader-views/proguard-rules.pro rename to latinreader-views/proguard-rules.pro diff --git a/LatinReader/latinreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt b/latinreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt similarity index 100% rename from LatinReader/latinreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt rename to latinreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt diff --git a/LatinReader/latinreader-views/src/main/AndroidManifest.xml b/latinreader-views/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/AndroidManifest.xml rename to latinreader-views/src/main/AndroidManifest.xml diff --git a/LatinReader/latinreader-views/src/main/res/drawable/ic_launcher_background.xml b/latinreader-views/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/drawable/ic_launcher_background.xml rename to latinreader-views/src/main/res/drawable/ic_launcher_background.xml diff --git a/LatinReader/latinreader-views/src/main/res/drawable/ic_launcher_foreground.xml b/latinreader-views/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/drawable/ic_launcher_foreground.xml rename to latinreader-views/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp b/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp rename to latinreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to latinreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp b/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp rename to latinreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to latinreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp b/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/LatinReader/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/LatinReader/latinreader-views/src/main/res/values-night/themes.xml b/latinreader-views/src/main/res/values-night/themes.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/values-night/themes.xml rename to latinreader-views/src/main/res/values-night/themes.xml diff --git a/LatinReader/latinreader-views/src/main/res/values/colors.xml b/latinreader-views/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/values/colors.xml rename to latinreader-views/src/main/res/values/colors.xml diff --git a/LatinReader/latinreader-views/src/main/res/values/strings.xml b/latinreader-views/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/values/strings.xml rename to latinreader-views/src/main/res/values/strings.xml diff --git a/LatinReader/latinreader-views/src/main/res/values/themes.xml b/latinreader-views/src/main/res/values/themes.xml similarity index 100% rename from LatinReader/latinreader-views/src/main/res/values/themes.xml rename to latinreader-views/src/main/res/values/themes.xml diff --git a/LatinReader/latinreader-views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt b/latinreader-views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt similarity index 100% rename from LatinReader/latinreader-views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt rename to latinreader-views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt diff --git a/local.properties b/local.properties new file mode 100644 index 0000000..16bfe9d --- /dev/null +++ b/local.properties @@ -0,0 +1,8 @@ +## This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Wed Dec 17 12:51:17 PST 2025 +sdk.dir=/Users/erschmid/Library/Android/sdk diff --git a/LatinReader/settings.gradle b/settings.gradle similarity index 100% rename from LatinReader/settings.gradle rename to settings.gradle diff --git a/LatinReader/views/.gitignore b/views/.gitignore similarity index 100% rename from LatinReader/views/.gitignore rename to views/.gitignore diff --git a/LatinReader/views/build.gradle b/views/build.gradle similarity index 100% rename from LatinReader/views/build.gradle rename to views/build.gradle diff --git a/LatinReader/views/consumer-rules.pro b/views/consumer-rules.pro similarity index 100% rename from LatinReader/views/consumer-rules.pro rename to views/consumer-rules.pro diff --git a/LatinReader/views/proguard-rules.pro b/views/proguard-rules.pro similarity index 100% rename from LatinReader/views/proguard-rules.pro rename to views/proguard-rules.pro diff --git a/LatinReader/views/src/androidTest/java/com/ericmschmidt/classicsreader/views/ExampleInstrumentedTest.kt b/views/src/androidTest/java/com/ericmschmidt/classicsreader/views/ExampleInstrumentedTest.kt similarity index 100% rename from LatinReader/views/src/androidTest/java/com/ericmschmidt/classicsreader/views/ExampleInstrumentedTest.kt rename to views/src/androidTest/java/com/ericmschmidt/classicsreader/views/ExampleInstrumentedTest.kt diff --git a/LatinReader/views/src/main/AndroidManifest.xml b/views/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/views/src/main/AndroidManifest.xml rename to views/src/main/AndroidManifest.xml diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/activities/ErrorActivity.kt b/views/src/main/java/com/ericmschmidt/classicsreader/activities/ErrorActivity.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/activities/ErrorActivity.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/activities/ErrorActivity.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/activities/MainActivity.kt b/views/src/main/java/com/ericmschmidt/classicsreader/activities/MainActivity.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/activities/MainActivity.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/activities/MainActivity.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/exceptions/ForceCloseHandler.kt b/views/src/main/java/com/ericmschmidt/classicsreader/exceptions/ForceCloseHandler.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/exceptions/ForceCloseHandler.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/exceptions/ForceCloseHandler.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/DictionaryFragment.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/DictionaryFragment.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/DictionaryFragment.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/DictionaryFragment.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/LibraryFragment.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/LibraryFragment.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/LibraryFragment.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/LibraryFragment.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/ReadingFragment.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/ReadingFragment.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/ReadingFragment.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/ReadingFragment.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/SettingsFragment.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/SettingsFragment.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/SettingsFragment.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/SettingsFragment.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/TOCFragment.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/TOCFragment.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/TOCFragment.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/TOCFragment.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/VocabularyFragment.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/VocabularyFragment.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/VocabularyFragment.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/fragments/VocabularyFragment.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/interop/ComposeViewAdapter.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/interop/ComposeViewAdapter.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/interop/ComposeViewAdapter.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/interop/ComposeViewAdapter.kt diff --git a/LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/layouts/TOCListViewAdapter.kt b/views/src/main/java/com/ericmschmidt/classicsreader/ui/layouts/TOCListViewAdapter.kt similarity index 100% rename from LatinReader/views/src/main/java/com/ericmschmidt/classicsreader/ui/layouts/TOCListViewAdapter.kt rename to views/src/main/java/com/ericmschmidt/classicsreader/ui/layouts/TOCListViewAdapter.kt diff --git a/LatinReader/views/src/main/res/anim/fragment_fade_enter.xml b/views/src/main/res/anim/fragment_fade_enter.xml similarity index 100% rename from LatinReader/views/src/main/res/anim/fragment_fade_enter.xml rename to views/src/main/res/anim/fragment_fade_enter.xml diff --git a/LatinReader/views/src/main/res/anim/fragment_fade_exit.xml b/views/src/main/res/anim/fragment_fade_exit.xml similarity index 100% rename from LatinReader/views/src/main/res/anim/fragment_fade_exit.xml rename to views/src/main/res/anim/fragment_fade_exit.xml diff --git a/LatinReader/views/src/main/res/layout/activity_error.xml b/views/src/main/res/layout/activity_error.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/activity_error.xml rename to views/src/main/res/layout/activity_error.xml diff --git a/LatinReader/views/src/main/res/layout/activity_main.xml b/views/src/main/res/layout/activity_main.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/activity_main.xml rename to views/src/main/res/layout/activity_main.xml diff --git a/LatinReader/views/src/main/res/layout/cardviewitem_libraryrecyclerview.xml b/views/src/main/res/layout/cardviewitem_libraryrecyclerview.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/cardviewitem_libraryrecyclerview.xml rename to views/src/main/res/layout/cardviewitem_libraryrecyclerview.xml diff --git a/LatinReader/views/src/main/res/layout/fragment_dictionary.xml b/views/src/main/res/layout/fragment_dictionary.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/fragment_dictionary.xml rename to views/src/main/res/layout/fragment_dictionary.xml diff --git a/LatinReader/views/src/main/res/layout/fragment_help.xml b/views/src/main/res/layout/fragment_help.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/fragment_help.xml rename to views/src/main/res/layout/fragment_help.xml diff --git a/LatinReader/views/src/main/res/layout/fragment_library.xml b/views/src/main/res/layout/fragment_library.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/fragment_library.xml rename to views/src/main/res/layout/fragment_library.xml diff --git a/LatinReader/views/src/main/res/layout/fragment_reading.xml b/views/src/main/res/layout/fragment_reading.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/fragment_reading.xml rename to views/src/main/res/layout/fragment_reading.xml diff --git a/LatinReader/views/src/main/res/layout/fragment_toc.xml b/views/src/main/res/layout/fragment_toc.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/fragment_toc.xml rename to views/src/main/res/layout/fragment_toc.xml diff --git a/LatinReader/views/src/main/res/layout/fragment_vocabulary.xml b/views/src/main/res/layout/fragment_vocabulary.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/fragment_vocabulary.xml rename to views/src/main/res/layout/fragment_vocabulary.xml diff --git a/LatinReader/views/src/main/res/layout/nav_header_main.xml b/views/src/main/res/layout/nav_header_main.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/nav_header_main.xml rename to views/src/main/res/layout/nav_header_main.xml diff --git a/LatinReader/views/src/main/res/layout/toc_listviewitem.xml b/views/src/main/res/layout/toc_listviewitem.xml similarity index 100% rename from LatinReader/views/src/main/res/layout/toc_listviewitem.xml rename to views/src/main/res/layout/toc_listviewitem.xml diff --git a/LatinReader/views/src/main/res/menu/drawer.xml b/views/src/main/res/menu/drawer.xml similarity index 100% rename from LatinReader/views/src/main/res/menu/drawer.xml rename to views/src/main/res/menu/drawer.xml diff --git a/LatinReader/views/src/main/res/menu/main.xml b/views/src/main/res/menu/main.xml similarity index 100% rename from LatinReader/views/src/main/res/menu/main.xml rename to views/src/main/res/menu/main.xml diff --git a/LatinReader/views/src/main/res/navigation/nav_graph.xml b/views/src/main/res/navigation/nav_graph.xml similarity index 100% rename from LatinReader/views/src/main/res/navigation/nav_graph.xml rename to views/src/main/res/navigation/nav_graph.xml diff --git a/LatinReader/views/src/test/java/com/ericmschmidt/classicsreader/views/ExampleUnitTest.kt b/views/src/test/java/com/ericmschmidt/classicsreader/views/ExampleUnitTest.kt similarity index 100% rename from LatinReader/views/src/test/java/com/ericmschmidt/classicsreader/views/ExampleUnitTest.kt rename to views/src/test/java/com/ericmschmidt/classicsreader/views/ExampleUnitTest.kt From 86e9c8e64a32d0c637b695c97a17bc71f026e3bc Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 28 May 2026 17:01:52 -0700 Subject: [PATCH 3/9] chore: dedupes README files --- README.md | 73 +++++++++++++++---------------------------------------- design.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 53 deletions(-) create mode 100644 design.md diff --git a/README.md b/README.md index 29e74ff..99d2b9c 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,32 @@ -# Design +# Classics Reader for Android app -The Classics Reader is an app designed for reading and translating ancient texts. It provides -translations of texts along side the source texts alongside a dictionary. +[![Android build](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android.yml/badge.svg)](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -## App Architecture +This open source code for two Android apps is available for anyone to clone, rebuild, copy, or alter for educational purposes. These apps allow users to read Ancient Greek and Latin texts, to read English translations of Ancient Greek and Latin texts, and lookup Ancient Greek and Latin words in an integrated dictionary. -This project contains three modules: +The Latin Reader app can be downloaded from the [Google Play Store](https://play.google.com/store/apps/details?id=com.ericmschmidt.latinreader). -+ The base app (the module named `app`) that provides the base functionality of the app. -+ A module for each flavor--a Latin and Ancient Greek flavor. Each flavor is built into a - separate app, along with the base app, into a separate APK. +You can see a complete list of the releases for this app +[here](https://github.com/telpirion/ClassicsReaderAndroid/releases). -## The `app` module architecture +## Report bugs! -The `app` module has six packages within it: +The Ancient Greek and Latin Reader apps are for Classicists by a Classicist. I not only build the app, but I use it myself to keep my Latin and Greek reading skills up to par. If you encounter a problem in the app, please file an issue here on the GitHub project home page. -* The `activities` package, which includes the `MainActivity` and `ErrorActivity` classes. +To log an issue, do the following: -* The `datamodel` package, which includes classes that contain the information about the texts - within the app. +1. Go to the [issues page](https://github.com/telpirion/ClassicsReader/issues). +1. Click the **New Issue** button. +1. Enter a title for your issue. Please indicate which app you are logging a bug for. +1. Describe your issue in the **Write** tab. +1. When you finish writing, click **Submit new issue**. -* The `exceptions` package, which includes a single class, `ForceCloseHandler`, which allows the - app to close gracefully from unhandled exceptions. +## Use of licensed material -* The `fragments` package, which includes all of the fragments or "pages" within the app. +Texts in these apps are available under the the Creative Commons ShareAlike 3.0 license. -* The `layouts` package, which includes the specialized adapters used for recycler views and list - views used within the app. - -* The `utilities` package, which includes several helper classes used for opening and parsing the - XML resources used within the app. ++ http://www.perseus.tufts.edu/hopper/opensource/download ++ http://creativecommons.org/licenses/by-sa/3.0/us/ -### Data model - -The `datamodel` package includes the following classes: - -* The [`WorkInfo`][workinfo] class is the foundational data structure for the app. It coordinates - the user experience of a work (current page, location, offset, translation name) with the text - itself. It also includes the resource ID for the work along with its URI. - -* The [`Work`][work] class acts as a controller between the data storage of the text - (XML file) and the app. - -* The [`TOCEntry`][tocentry] class contains information about a table of contents entry for a work. - It connects a "chapter" title with a location (int) with in the book. - -* The [`Book`][book] class contains information for accessing lines of text within a section, - chapter, or "book" within a larger work. - -* The [`Library`][library] class contains the list of `WorkInfo` objects contained in the app. - -* The [`Manifest`][manifest] class contains the concrete list of works, stored as XML or JSON, - within the app. It essentially acts as an interface for each APK or app bundle. - -* The [`ReadingViewModel`][readingviewmodel] class allows the app to manage the reading position - in the UI along with the source `Work` object. - -[work]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Work.java -[workinfo]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/WorkInfo.java -[tocentry]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/TOCEntry.java -[book]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Book.java -[library]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Library.java -[manifest]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Manifest.java -[readingviewmodel]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/ReadingViewModel.java \ No newline at end of file +Images in these apps are available under the Creative Commons ShareAlike 3.0 license or are new creations from AI. \ No newline at end of file diff --git a/design.md b/design.md new file mode 100644 index 0000000..29e74ff --- /dev/null +++ b/design.md @@ -0,0 +1,65 @@ +# Design + +The Classics Reader is an app designed for reading and translating ancient texts. It provides +translations of texts along side the source texts alongside a dictionary. + +## App Architecture + +This project contains three modules: + ++ The base app (the module named `app`) that provides the base functionality of the app. ++ A module for each flavor--a Latin and Ancient Greek flavor. Each flavor is built into a + separate app, along with the base app, into a separate APK. + +## The `app` module architecture + +The `app` module has six packages within it: + +* The `activities` package, which includes the `MainActivity` and `ErrorActivity` classes. + +* The `datamodel` package, which includes classes that contain the information about the texts + within the app. + +* The `exceptions` package, which includes a single class, `ForceCloseHandler`, which allows the + app to close gracefully from unhandled exceptions. + +* The `fragments` package, which includes all of the fragments or "pages" within the app. + +* The `layouts` package, which includes the specialized adapters used for recycler views and list + views used within the app. + +* The `utilities` package, which includes several helper classes used for opening and parsing the + XML resources used within the app. + +### Data model + +The `datamodel` package includes the following classes: + +* The [`WorkInfo`][workinfo] class is the foundational data structure for the app. It coordinates + the user experience of a work (current page, location, offset, translation name) with the text + itself. It also includes the resource ID for the work along with its URI. + +* The [`Work`][work] class acts as a controller between the data storage of the text + (XML file) and the app. + +* The [`TOCEntry`][tocentry] class contains information about a table of contents entry for a work. + It connects a "chapter" title with a location (int) with in the book. + +* The [`Book`][book] class contains information for accessing lines of text within a section, + chapter, or "book" within a larger work. + +* The [`Library`][library] class contains the list of `WorkInfo` objects contained in the app. + +* The [`Manifest`][manifest] class contains the concrete list of works, stored as XML or JSON, + within the app. It essentially acts as an interface for each APK or app bundle. + +* The [`ReadingViewModel`][readingviewmodel] class allows the app to manage the reading position + in the UI along with the source `Work` object. + +[work]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Work.java +[workinfo]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/WorkInfo.java +[tocentry]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/TOCEntry.java +[book]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Book.java +[library]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Library.java +[manifest]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Manifest.java +[readingviewmodel]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/ReadingViewModel.java \ No newline at end of file From 92aeea677e35c7ae1f63767a4443d7481236b770 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 28 May 2026 17:09:51 -0700 Subject: [PATCH 4/9] chore: removes extraneous files --- .gitignore | 19 +- build/reports/problems/problems-report.html | 666 -------------------- local.properties | 8 - 3 files changed, 17 insertions(+), 676 deletions(-) delete mode 100644 build/reports/problems/problems-report.html delete mode 100644 local.properties diff --git a/.gitignore b/.gitignore index 00741cb..a96fac3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,17 @@ -.DS_Store -.idea/ \ No newline at end of file +# Gradle +.gradle/ +/build/ + +# Local configuration +local.properties + +# IntelliJ/Android Studio +*.iml +.idea/ +/captures/ +.externalNativeBuild/ +.cxx/ +*.hprof + +# macOS +.DS_Store \ No newline at end of file diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html deleted file mode 100644 index 6964565..0000000 --- a/build/reports/problems/problems-report.html +++ /dev/null @@ -1,666 +0,0 @@ - - - - - - - - - - - - - Gradle Configuration Cache - - - -
    - -
    - Loading... -
    - - - - - - diff --git a/local.properties b/local.properties deleted file mode 100644 index 16bfe9d..0000000 --- a/local.properties +++ /dev/null @@ -1,8 +0,0 @@ -## This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# Location of the SDK. This is only used by Gradle. -# For customization when using a Version Control System, please read the -# header note. -#Wed Dec 17 12:51:17 PST 2025 -sdk.dir=/Users/erschmid/Library/Android/sdk From 5e4c5eb7b4090318495a8b113e9fcfb113ff6ea4 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 29 May 2026 10:37:25 -0700 Subject: [PATCH 5/9] docs: adds documentation for the project --- .github/workflows/android.yml | 8 +- .../compose}/.gitignore | 0 .../compose}/build.gradle | 0 .../compose}/proguard-rules.pro | 0 .../src/androidTest/AndroidManifest.xml | 0 .../latin/compose/LatinReaderAppTest.kt | 0 .../latin/compose/ReadingScreenTest.kt | 0 .../compose}/src/main/AndroidManifest.xml | 0 .../views}/.gitignore | 0 .../views}/build.gradle | 0 .../views}/proguard-rules.pro | 0 .../latin/views/ExampleInstrumentedTest.kt | 0 .../views}/src/main/AndroidManifest.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../src/main/res/values-night/themes.xml | 0 .../views}/src/main/res/values/colors.xml | 0 .../views}/src/main/res/values/strings.xml | 0 .../views}/src/main/res/values/themes.xml | 0 .../latin/views/ExampleUnitTest.kt | 0 design.md | 65 ----- docs/README.md | 37 +++ docs/architecture.md | 125 ++++++++++ docs/data_model.md | 233 ++++++++++++++++++ docs/flavor_comparison.md | 73 ++++++ docs/ui_presentation.md | 56 +++++ .../compose}/.gitignore | 0 .../compose}/build.gradle | 0 .../compose}/proguard-rules.pro | 0 .../greek/compose/ExampleInstrumentedTest.kt | 0 .../compose}/src/main/AndroidManifest.xml | 0 .../src/main/ic_launcher_3-playstore.png | Bin .../res/drawable/ic_launcher_3_background.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher_3.xml | 0 .../mipmap-anydpi-v26/ic_launcher_3_round.xml | 0 .../main/res/mipmap-hdpi/ic_launcher_3.webp | Bin .../mipmap-hdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-hdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-mdpi/ic_launcher_3.webp | Bin .../mipmap-mdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-mdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../res/mipmap-xhdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../mipmap-xxhdpi/ic_launcher_3_round.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_3.webp | Bin .../ic_launcher_3_foreground.webp | Bin .../mipmap-xxxhdpi/ic_launcher_3_round.webp | Bin .../greek/compose/ExampleUnitTest.kt | 0 .../views}/.gitignore | 0 .../views}/build.gradle | 0 .../views}/proguard-rules.pro | 0 .../adaptiveTest/adaptive_journey.journey.xml | 0 .../greek/ExampleInstrumentedTest.kt | 0 .../views}/src/main/AndroidManifest.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../src/main/res/values-night/themes.xml | 0 .../views}/src/main/res/values/colors.xml | 0 .../views}/src/main/res/values/strings.xml | 0 .../views}/src/main/res/values/themes.xml | 0 .../classicsreader/greek/ExampleUnitTest.kt | 0 settings.gradle | 8 +- 89 files changed, 530 insertions(+), 75 deletions(-) rename {greekreader-compose => LatinReader/compose}/.gitignore (100%) rename {latinreader-compose => LatinReader/compose}/build.gradle (100%) rename {greekreader-compose => LatinReader/compose}/proguard-rules.pro (100%) rename {latinreader-compose => LatinReader/compose}/src/androidTest/AndroidManifest.xml (100%) rename {latinreader-compose => LatinReader/compose}/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt (100%) rename {latinreader-compose => LatinReader/compose}/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt (100%) rename {latinreader-compose => LatinReader/compose}/src/main/AndroidManifest.xml (100%) rename {greekreader-views => LatinReader/views}/.gitignore (100%) rename {latinreader-views => LatinReader/views}/build.gradle (100%) rename {greekreader-views => LatinReader/views}/proguard-rules.pro (100%) rename {latinreader-views => LatinReader/views}/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt (100%) rename {latinreader-views => LatinReader/views}/src/main/AndroidManifest.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/drawable/ic_launcher_background.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {greekreader-views => LatinReader/views}/src/main/res/values-night/themes.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/values/colors.xml (100%) rename {latinreader-views => LatinReader/views}/src/main/res/values/strings.xml (100%) rename {greekreader-views => LatinReader/views}/src/main/res/values/themes.xml (100%) rename {latinreader-views => LatinReader/views}/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt (100%) delete mode 100644 design.md create mode 100644 docs/README.md create mode 100644 docs/architecture.md create mode 100644 docs/data_model.md create mode 100644 docs/flavor_comparison.md create mode 100644 docs/ui_presentation.md rename {latinreader-compose => greekreader/compose}/.gitignore (100%) rename {greekreader-compose => greekreader/compose}/build.gradle (100%) rename {latinreader-compose => greekreader/compose}/proguard-rules.pro (100%) rename {greekreader-compose => greekreader/compose}/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt (100%) rename {greekreader-compose => greekreader/compose}/src/main/AndroidManifest.xml (100%) rename {greekreader-compose => greekreader/compose}/src/main/ic_launcher_3-playstore.png (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/drawable/ic_launcher_3_background.xml (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-hdpi/ic_launcher_3.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-mdpi/ic_launcher_3.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xhdpi/ic_launcher_3.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp (100%) rename {greekreader-compose => greekreader/compose}/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp (100%) rename {greekreader-compose => greekreader/compose}/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt (100%) rename {latinreader-views => greekreader/views}/.gitignore (100%) rename {greekreader-views => greekreader/views}/build.gradle (100%) rename {latinreader-views => greekreader/views}/proguard-rules.pro (100%) rename {greekreader-views => greekreader/views}/src/adaptiveTest/adaptive_journey.journey.xml (100%) rename {greekreader-views => greekreader/views}/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt (100%) rename {greekreader-views => greekreader/views}/src/main/AndroidManifest.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/drawable/ic_launcher_background.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {latinreader-views => greekreader/views}/src/main/res/values-night/themes.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/values/colors.xml (100%) rename {greekreader-views => greekreader/views}/src/main/res/values/strings.xml (100%) rename {latinreader-views => greekreader/views}/src/main/res/values/themes.xml (100%) rename {greekreader-views => greekreader/views}/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt (100%) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 69881cb..42abbe3 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -2,13 +2,9 @@ name: Android CI on: push: - branches: [ "main" ] + branches: [ main ] pull_request: - branches: [ "main" ] - -defaults: - run: - working-directory: ./LatinReader + branches: [ main ] jobs: build: diff --git a/greekreader-compose/.gitignore b/LatinReader/compose/.gitignore similarity index 100% rename from greekreader-compose/.gitignore rename to LatinReader/compose/.gitignore diff --git a/latinreader-compose/build.gradle b/LatinReader/compose/build.gradle similarity index 100% rename from latinreader-compose/build.gradle rename to LatinReader/compose/build.gradle diff --git a/greekreader-compose/proguard-rules.pro b/LatinReader/compose/proguard-rules.pro similarity index 100% rename from greekreader-compose/proguard-rules.pro rename to LatinReader/compose/proguard-rules.pro diff --git a/latinreader-compose/src/androidTest/AndroidManifest.xml b/LatinReader/compose/src/androidTest/AndroidManifest.xml similarity index 100% rename from latinreader-compose/src/androidTest/AndroidManifest.xml rename to LatinReader/compose/src/androidTest/AndroidManifest.xml diff --git a/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt b/LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt similarity index 100% rename from latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt rename to LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt diff --git a/latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt b/LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt similarity index 100% rename from latinreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt rename to LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt diff --git a/latinreader-compose/src/main/AndroidManifest.xml b/LatinReader/compose/src/main/AndroidManifest.xml similarity index 100% rename from latinreader-compose/src/main/AndroidManifest.xml rename to LatinReader/compose/src/main/AndroidManifest.xml diff --git a/greekreader-views/.gitignore b/LatinReader/views/.gitignore similarity index 100% rename from greekreader-views/.gitignore rename to LatinReader/views/.gitignore diff --git a/latinreader-views/build.gradle b/LatinReader/views/build.gradle similarity index 100% rename from latinreader-views/build.gradle rename to LatinReader/views/build.gradle diff --git a/greekreader-views/proguard-rules.pro b/LatinReader/views/proguard-rules.pro similarity index 100% rename from greekreader-views/proguard-rules.pro rename to LatinReader/views/proguard-rules.pro diff --git a/latinreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt b/LatinReader/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt similarity index 100% rename from latinreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt rename to LatinReader/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt diff --git a/latinreader-views/src/main/AndroidManifest.xml b/LatinReader/views/src/main/AndroidManifest.xml similarity index 100% rename from latinreader-views/src/main/AndroidManifest.xml rename to LatinReader/views/src/main/AndroidManifest.xml diff --git a/greekreader-views/src/main/res/drawable/ic_launcher_background.xml b/LatinReader/views/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from greekreader-views/src/main/res/drawable/ic_launcher_background.xml rename to LatinReader/views/src/main/res/drawable/ic_launcher_background.xml diff --git a/greekreader-views/src/main/res/drawable/ic_launcher_foreground.xml b/LatinReader/views/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from greekreader-views/src/main/res/drawable/ic_launcher_foreground.xml rename to LatinReader/views/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from greekreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp b/LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp rename to LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/greekreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp b/LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp rename to LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/greekreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp b/LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from greekreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/greekreader-views/src/main/res/values-night/themes.xml b/LatinReader/views/src/main/res/values-night/themes.xml similarity index 100% rename from greekreader-views/src/main/res/values-night/themes.xml rename to LatinReader/views/src/main/res/values-night/themes.xml diff --git a/greekreader-views/src/main/res/values/colors.xml b/LatinReader/views/src/main/res/values/colors.xml similarity index 100% rename from greekreader-views/src/main/res/values/colors.xml rename to LatinReader/views/src/main/res/values/colors.xml diff --git a/latinreader-views/src/main/res/values/strings.xml b/LatinReader/views/src/main/res/values/strings.xml similarity index 100% rename from latinreader-views/src/main/res/values/strings.xml rename to LatinReader/views/src/main/res/values/strings.xml diff --git a/greekreader-views/src/main/res/values/themes.xml b/LatinReader/views/src/main/res/values/themes.xml similarity index 100% rename from greekreader-views/src/main/res/values/themes.xml rename to LatinReader/views/src/main/res/values/themes.xml diff --git a/latinreader-views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt b/LatinReader/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt similarity index 100% rename from latinreader-views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt rename to LatinReader/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt diff --git a/design.md b/design.md deleted file mode 100644 index 29e74ff..0000000 --- a/design.md +++ /dev/null @@ -1,65 +0,0 @@ -# Design - -The Classics Reader is an app designed for reading and translating ancient texts. It provides -translations of texts along side the source texts alongside a dictionary. - -## App Architecture - -This project contains three modules: - -+ The base app (the module named `app`) that provides the base functionality of the app. -+ A module for each flavor--a Latin and Ancient Greek flavor. Each flavor is built into a - separate app, along with the base app, into a separate APK. - -## The `app` module architecture - -The `app` module has six packages within it: - -* The `activities` package, which includes the `MainActivity` and `ErrorActivity` classes. - -* The `datamodel` package, which includes classes that contain the information about the texts - within the app. - -* The `exceptions` package, which includes a single class, `ForceCloseHandler`, which allows the - app to close gracefully from unhandled exceptions. - -* The `fragments` package, which includes all of the fragments or "pages" within the app. - -* The `layouts` package, which includes the specialized adapters used for recycler views and list - views used within the app. - -* The `utilities` package, which includes several helper classes used for opening and parsing the - XML resources used within the app. - -### Data model - -The `datamodel` package includes the following classes: - -* The [`WorkInfo`][workinfo] class is the foundational data structure for the app. It coordinates - the user experience of a work (current page, location, offset, translation name) with the text - itself. It also includes the resource ID for the work along with its URI. - -* The [`Work`][work] class acts as a controller between the data storage of the text - (XML file) and the app. - -* The [`TOCEntry`][tocentry] class contains information about a table of contents entry for a work. - It connects a "chapter" title with a location (int) with in the book. - -* The [`Book`][book] class contains information for accessing lines of text within a section, - chapter, or "book" within a larger work. - -* The [`Library`][library] class contains the list of `WorkInfo` objects contained in the app. - -* The [`Manifest`][manifest] class contains the concrete list of works, stored as XML or JSON, - within the app. It essentially acts as an interface for each APK or app bundle. - -* The [`ReadingViewModel`][readingviewmodel] class allows the app to manage the reading position - in the UI along with the source `Work` object. - -[work]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Work.java -[workinfo]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/WorkInfo.java -[tocentry]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/TOCEntry.java -[book]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Book.java -[library]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Library.java -[manifest]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/Manifest.java -[readingviewmodel]: https://github.com/telpirion/ClassicsReaderAndroid/blob/main/LatinReader/app/src/main/java/com/ericmschmidt/latinreader/datamodel/ReadingViewModel.java \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..6a13104 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,37 @@ +# Classics Reader Android App Documentation + +Welcome to the technical documentation for the **Classics Reader** Android project. This repository contains the source code for building the Latin Reader and Greek Reader apps, available in both traditional XML-View and modern Jetpack Compose architectures. + +## Project Overview + +Classics Reader is a specialized e-reading application designed for Classicists, students, and educators. The app enables users to read ancient Greek and Latin texts in their original languages side-by-side with English translations, perform inline or manual dictionary lookups using integrated dictionaries, navigate via structural Tables of Contents, and study grammar rules. + +## Documentation Structure + +This documentation is divided into the following sections: + +1. **[System Architecture](architecture.md)** + * Outlines the multi-module build system structure. + * Details the dependency relationships between library modules and application modules. + * Compares the View-based and Jetpack Compose-based compiler workflows. + +2. **[Data Model & Processing Strategy](data_model.md)** + * Documents the core domain model (`Work`, `Book`, `WorkInfo`, `Library`, `TOCEntry`, `Dictionary`). + * Explains XML parsing using the `ResourceHelpers` utility. + * Illustrates the UML Class Relationships diagram. + * Reviews settings state management (SharedPreferences vs Jetpack DataStore). + +3. **[UI & Presentation Layer](ui_presentation.md)** + * Discusses layout implementation inside the `:views` module (Fragments, Data Binding, Activity routing). + * Discusses screen composition inside the `:compose` module (ViewModels, screen responsiveness, supporting panes). + * Outlines the adaptive layouts utilizing `WindowSizeClass`. + +4. **[Language Customization & Injection](flavor_comparison.md)** + * Deep-dives into the customization layers of `:latinreader` and `:greekreader`. + * Explains how `MyApplication` uses Java reflection to inject specific library catalogs and text converter converters dynamically. + * Details the Greek polytonic transliteration system (`TextConverter`). + +*** + +*Documentation Version: 3.0.0* +*Last updated: May 2026* diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..3df6da2 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,125 @@ +# System Architecture + +The Classics Reader Android project is designed around a decoupled, multi-module architecture. It splits business logic, view presentation, Jetpack Compose presentation, language metadata, and final application shells into separate Gradle modules. This setup enables high code reuse and allows compilation of multiple distinct apps (Latin Reader and Greek Reader) in two different UI architectures (legacy XML Views and modern Compose). + +## Modularization Overview + +The project is structured into nine modules, declared in `settings.gradle`: + +```gradle +include ':core' +include ':compose' +include ':views' +include ':latinreader' +include ':greekreader' +include ':greekreader:compose' +include ':greekreader:views' +include ':latinreader:views' +include ':latinreader:compose' +``` + +### 1. Core Module (`:core`) +* **Type**: Android Library +* **Purpose**: Houses the domain data model, database repositories, settings preference management, XML helper utilities, and abstract interfaces. +* **Key Components**: + * `MyApplication`: The root application class implementing reflection-based dependency injection. + * `Book`, `Work`, `WorkInfo`, `Library`, `TOCEntry`: Core domain data structures. + * `Dictionary`, `DictionaryRepository`: Dictionary abstraction layers. + * `ResourceHelpers`: Stream reader and XML parser using `XmlPullParser`. + * `ITextConverter`: Interface for handling character translations (e.g., Greek transliteration). + * `PreferencesDataStore`: State flow mapping configuration settings. + +### 2. Views Presentation Module (`:views`) +* **Type**: Android Library +* **Purpose**: Implementation of the user interface using traditional XML layouts, View Binding/Data Binding, Fragments, and Navigation component graphs. +* **Key Components**: + * `MainActivity` & `ErrorActivity`: Basic activity containers. + * Fragments: `ReadingFragment`, `LibraryFragment`, `TOCFragment`, `DictionaryFragment`, `SettingsFragment`, `VocabularyFragment`. + +### 3. Compose Presentation Module (`:compose`) +* **Type**: Jetpack Compose Library +* **Purpose**: Declarative UI implementation using Jetpack Compose, Material 3, and state ViewModels. +* **Key Components**: + * `MainActivity`: The single-activity entry point. + * `ReaderApp`: Orchestrates navigation and scaffolding. + * Screens: `ReadingScreen`, `LibraryScreen`, `SettingsScreen`, `MarkdownScreen`. + * ViewModels: `ReadingViewModel`, `DictionaryViewModel`. + * Adaptives: `ListDetailPane`, `ReadingSupportingPane`, `DetailsPane` which handle multi-column layouts on larger screens. + +### 4. Language Flavor Modules (`:latinreader` and `:greekreader`) +* **Type**: Android Library +* **Purpose**: Contain language-specific application configurations, XML resources (books, lexicon, grammar texts), theme definitions, and custom logic. +* **Key Components**: + * Application definitions (`LatinReaderApplication`, `GreekReaderApplication`). + * Libraries (`LatinReaderLibrary`, `GreekReaderLibrary`). + * `:greekreader` additionally contains `TextConverter` (implements `ITextConverter` for Greek polytonic encoding). + +### 5. Application Modules (The Shells) +These are application-level modules (`com.android.application`) that act as lightweight wrappers. They define package names, versioning, application IDs, and bundle dependencies to compile the target APK: +* **`:latinreader:views`**: Renders the Latin Reader app using XML Views. +* **`:latinreader:compose`**: Renders the Latin Reader app using Jetpack Compose. +* **`:greekreader:views`**: Renders the Greek Reader app using XML Views. +* **`:greekreader:compose`**: Renders the Greek Reader app using Jetpack Compose. + +## Module Relationship Diagram + +The following Mermaid diagram maps the compile-time dependencies between all the modules: + +```mermaid +graph TD + %% Core Module + core[":core (Shared Domain & Utilities)"] + + %% UI Presentation Libraries + views[":views (Traditional XML-View UI)"] + compose[":compose (Jetpack Compose UI)"] + + %% Language Implementation Modules + latinreader[":latinreader (Latin Data & Themes)"] + greekreader[":greekreader (Greek Data & Themes)"] + + %% View-based App Shells + latin_views[":latinreader:views (Latin View app bundle)"] + greek_views[":greekreader:views (Greek View app bundle)"] + + %% Compose-based App Shells + latin_compose[":latinreader:compose (Latin Compose app bundle)"] + greek_compose[":greekreader:compose (Greek Compose app bundle)"] + + %% Dependency Relationships + views --> core + compose --> core + + latinreader --> core + greekreader --> core + + latin_views --> core + latin_views --> views + latin_views --> latinreader + + greek_views --> core + greek_views --> views + greek_views --> greekreader + + latin_compose --> core + latin_compose --> compose + latin_compose --> latinreader + + greek_compose --> core + greek_compose --> compose + greek_compose --> greekreader +``` + +## Compilation and Dependency Flow + +1. **Gradle Build Configuration**: Application modules declare dependency on specific libraries. For example, in `:latinreader-compose/build.gradle`: + ```gradle + dependencies { + implementation project(":core") + implementation project(":compose") + implementation project(":latinreader") + // Third-party deps: Jetpack Compose BOM, Material3, DataStore + } + ``` +2. **Resource Merging**: At compile time, Android Gradle Plugin (AGP) merges the resource folders (`res/raw`, `res/drawable`, `res/values`) from the specific language flavor (e.g., `:greekreader`) and UI modules (e.g., `:compose` or `:views`) into the final APK package. This is why language raw files like `greek_hom_il_gk.xml` or drawables are resolved correctly within shared view graphs. +3. **Application Manifest**: Each application wrapper defines its own `AndroidManifest.xml`, declaring the target Application class (e.g., `com.ericmschmidt.greekreader.GreekReaderApplication` or `com.ericmschmidt.latin.LatinReaderApplication`), enabling Android to spin up the correct configuration on boot. diff --git a/docs/data_model.md b/docs/data_model.md new file mode 100644 index 0000000..0cbed74 --- /dev/null +++ b/docs/data_model.md @@ -0,0 +1,233 @@ +# Data Model & Processing Strategy + +The `:core` module defines the domain models and data processing logic for Classics Reader. Since text databases (like full epics or lexicons) are quite large, the core module implements a lazy-loading strategy to prevent high memory utilization on startup. + +## Domain Models + +The following classes represent the core entities: + +### `Library` +An abstract catalog coordinator. Each flavor subclasses `Library` (e.g., `LatinReaderLibrary` and `GreekReaderLibrary`) to define the exact collection of texts (`WorkInfo` array), grammar reference material, and dictionary resources. It provides helper methods to find a work by its ID. + +### `WorkInfo` +A data-holding container containing metadata for a text. It stores bibliographical records (author, title, editor, translator, offset parameters) and raw resource IDs (`location` and `englishLocation` pointing to raw XML resources). It also stores an list of `TOCEntry` markers. + +### `TOCEntry` +Represents a Table of Contents index coordinate, mapping a localized text name (e.g., "Book 1" or "COMMENTARIUS SECUNDUS") to a specific book number (0-indexed) and line offset (0-indexed). + +### `Work` +An active text coordinator class. Initiated with a resource location ID, it parses the resource to identify the total book count, keeping an array of `Book` references. Books are lazily instantiated and parsed only when requested by the user. + +### `Book` +Represents a major section inside a work (e.g., a "Book" or "Chapter"). It holds the text line-by-line as a list of strings, providing helper methods to retrieve single lines or a contiguous sequence of lines based on requested offsets. + +### `Dictionary` & `DictionaryRepository` +Manage lexicon entries: +* `Dictionary` parses entry key headers from resource files and searches the raw XML stream for matching keys to extract definitions. +* `DictionaryRepository` exposes this database via suspending functions (offloading heavy file I/O to `Dispatchers.IO` threads) and wraps search history logging via Jetpack DataStore preferences. + +### `ReadingViewModel` (Core Class) +A presentation-agnostic coordinator that manages active reader state. It calculates reading offsets, handles page-forward/backward increments, navigates via Table of Contents, and saves the user's progress to SharedPreferences. + +--- + +## UML Class Relationships Diagram + +The relationships and interactions of these classes are mapped below: + +```mermaid +classDiagram + class MyApplication { + +String libraryName + +ColorScheme themeColors + +Library library + +Boolean isNonRomanChar + +ITextConverter converter + +populateFields() + +applicationInstance() ApplicationInstance + } + + class Library { + +getGrammar() WorkInfo + +getCollection() List~WorkInfo~ + +getDictionaryInfo() WorkInfo + +getDictionaryEntryResource() Int + +getWorkInfoByID(id: String) WorkInfo + +getWorks() Array~WorkInfo~ + +GetHeaderIcon() + +getLibrary(className: String)$ Library + } + + class LatinReaderLibrary { + +getCollection() List~WorkInfo~ + +getDictionaryInfo() WorkInfo + +getGrammar() WorkInfo + } + + class GreekReaderLibrary { + +getCollection() List~WorkInfo~ + +getDictionaryInfo() WorkInfo + +getGrammar() WorkInfo + } + + class WorkInfo { + +String id + +String author + +String title + +String englishTitle + +String englishAuthor + +Int location + +Int englishLocation + +Int workType + +List~TOCEntry~ tocEntries + +Int image + +String description + +String editor + +String translator + +Int offset + +Int englishOffset + } + + class TOCEntry { + +String title + +Int book + +Int line + } + + class Work { + +Int location + -List~Book~ _books + -Int _bookCount + +getBook(id: Int) Book + +getBookCount() Int + -initBooks() + } + + class Book { + +Int id + -List~String~ _lines + +addLines(line: String) + +getLine(position: Int) String + +getLines(position: Int, offset: Int) String + +getLineCount() Int + } + + class Dictionary { + +ITextConverter converter + +Library library + +WorkInfo dictionaryInfo + +List~String~ entryHeaders + +entryCount() Int + +isInDictionary(searchEntry: String) Boolean + +getEntry(searchEntry: String) String + +getRandomEntry() String + -initEntries() + } + + class DictionaryRepository { + -Dictionary dictionary + -DataStore dataStore + +searchHistoryFlow: Flow~List~String~~ + +addSearchTerm(term: String) + +getDefinition(entry: String) String + +getDictionaryInfo() String + +getRandom() String + } + + class ReadingViewModel { + -WorkInfo workInfo + -Boolean isTranslation + -Int pageOffset + +String author + +String title + +Array~TOCEntry~ toc + +Int currentLineIndex + +Int currentBookIndex + +getCurrentPage() String + +goToPage(numberOfPages: Int) + +goToPage(isForward: Boolean) + +getReadingInfo() String + +getReadingPositionString() String + +setCurrentBook(currentBook: Int) + +setCurrentLine(currentLine: Int) + -advancePages(offset: Int) + -decreasePages(offset: Int) + -updatePage() + -loadLastReadingPosition() Boolean + } + + class ITextConverter { + <> + +convertSourceToTargetCharacters(source: String) String + +convertTargetToSourceCharacters(target: String) String + +getLang() String + +getTextWatcher(editText: EditText) TextWatcher + } + + class TextConverter { + +String _lang + -HashMap characterHash + -HashMap reverseCharacterHash + +convertSourceToTargetCharacters(source: String) String + +convertTargetToSourceCharacters(target: String) String + } + + MyApplication --> Library : loads via reflection + MyApplication --> ITextConverter : loads via reflection + Library --> WorkInfo : contains list of + WorkInfo --> TOCEntry : contains list of + Work --> Book : contains list of + Dictionary --> Library : references + Dictionary --> WorkInfo : references + Dictionary --> ITextConverter : uses for Greek translit + DictionaryRepository --> Dictionary : wraps + ReadingViewModel --> WorkInfo : holds + ReadingViewModel --> Work : loads source or translation + ReadingViewModel --> Book : delegates text retrieval + ReadingViewModel --> ITextConverter : uses for Greek text conversions + TextConverter ..|> ITextConverter : implements + LatinReaderLibrary --|> Library : extends + GreekReaderLibrary --|> Library : extends +``` + +--- + +## Text Storage and Parsing Strategy + +Ancient texts are stored as custom XML documents within raw resource files (e.g. `res/raw/caes_bg_lat.xml`). + +### XML Schema Layout +```xml + +
    + De Bello Gallico + C. Julius Caesar +
    + + + +

    + + Gallia est omnis divisa in partes tres... +

    +
    + +
    +
    +``` + +### Parser Workflow (`ResourceHelpers.kt`) +1. **Count Books**: On first initialization, `Work` calls `getBookCount(stream)`. `ResourceHelpers` initializes a custom `XmlPullParser` via `initParser` (which disables namespace processing and document type declarations to maximize performance). It loops through the document and increments a counter for every tag matching ``. +2. **Lazy Book Extraction**: When the user requests a specific book (e.g. Book index 2), `Work` calls `getBook(2, stream)`. The parser skips prior `` nodes until it hits the target index, parses child `

    ` tags via `parseLines`, strips out milestone markup elements, and returns a fully populated `Book` object containing the raw text strings. +3. **Regex Cleanup**: Whitespace normalizations and extraneous character cleanups are applied to character lists inside `removeExtraneousCharacters` using regex match patterns. + +--- + +## State & Persistent Settings Management + +Classics Reader uses a hybrid approach to save settings and session states: + +1. **Legacy SharedPreferences**: Used for storing reading progress coordinates. The `ReadingViewModel` saves a string format `currentBookIndex,currentLineIndex` under the key of the work ID (e.g., `"CaesarBG"` -> `"0,125"`) inside standard SharedPreferences. This is fast and synchronized synchronously during page-turning events. +2. **Jetpack DataStore (Preferences)**: Used in Compose and search modules. The search history logs and general user settings (text size, maximum poem lines displayed, show page controls flag, display type/mode) are saved using Jetpack DataStore. + * DataStore offers a non-blocking API utilizing Kotlin Coroutines and Flows (`preferencesFlow()`), reducing the risk of UI-thread jank when reading preferences. + * `SharedPreferencesMigration` is implemented in Compose's `MainActivity` to migrate settings seamlessly from the old storage model. diff --git a/docs/flavor_comparison.md b/docs/flavor_comparison.md new file mode 100644 index 0000000..3251d0a --- /dev/null +++ b/docs/flavor_comparison.md @@ -0,0 +1,73 @@ +# Language Customization & Flavor Comparison + +The Classics Reader architecture separates the common application structures from the target language configurations. This allows the codebase to compile two distinct applications—**Latin Reader** and **Greek Reader**—using a shared base structure. + +--- + +## Technical Comparison Matrix + +| Feature / Config | Latin Reader (`:latinreader`) | Greek Reader (`:greekreader`) | +| :--- | :--- | :--- | +| **Application ID** | `com.ericmschmidt.latinreader` | `com.ericmschmidt.greekreader` | +| **Non-Roman Script Support**| No (Uses standard Latin alphabet) | Yes (Uses Polytonic Greek alphabet) | +| **Orthography Translation** | None required | `TextConverter` (Latin-to-Greek transliteration) | +| **Integrated Dictionary** | An Elementary Latin Dictionary (Lewis) | An Intermediate Greek-English Lexicon (Liddell & Scott) | +| **Integrated Grammar** | Allen & Greenough's New Latin Grammar | Smyth's Greek Grammar for Colleges | +| **UI Theme Colors** | Warm Crimson / Rust palette | Deep Olive / Mediterranean Blue palette | + +--- + +## Dynamic Dependency Injection via Reflection + +To keep the `:core` and presentation modules (`:views`, `:compose`) completely decoupled from language-specific configurations, the base application class uses Java reflection. + +```mermaid +sequenceDiagram + participant OS as Android System + participant App as Greek/Latin Application Class + participant Base as MyApplication (Core) + participant Res as XML Resource Files + + OS->>App: onCreate() / init + App->>Base: super(libraryName, themeColors) + Note over Base: Init Lazy Fields + Base->>Res: Read R.bool.non_roman_char + Base->>Res: Read R.string.text_converter (Fully-Qualified Class Name) + Note over Base: Class.forName(className).newInstance() + Base->>Base: Inject Class instance as converter (ITextConverter) +``` + +### Reflection Implementation inside `MyApplication.kt` +* **Injecting the Catalog**: `MyApplication` takes a string name representing the library class (e.g., `"com.ericmschmidt.latin.data.LatinReaderLibrary"`). When the library is accessed, it loads the class using `Class.forName(libraryName)` and instantiates it dynamically: + ```kotlin + fun getLibrary(className: String): Library? { + val libraryClass = Class.forName(className) + val constructors = libraryClass.constructors + return constructors[0]!!.newInstance() as Library + } + ``` +* **Injecting the Transliteration Engine**: If `R.bool.non_roman_char` is configured as true in the XML resource file, the application queries `R.string.text_converter` to load the text converter class (e.g., `"com.ericmschmidt.greekreader.utilities.TextConverter"`). This allows the base core module to support polytonic conversions on demand without holding hardcoded references to the Greek converter module. + +--- + +## Greek Polytonic Transliteration Engine (`TextConverter`) + +Polytonic Ancient Greek includes many diacritical combinations (breathing marks, accents, iota subscripts) that are difficult to type using a standard mobile keyboard. `:greekreader` implements a custom `TextConverter` (implementing `ITextConverter`) to solve this. + +### 1. Key features of the Transliteration Engine +* **Latin Keyboard Mapping**: Maps standard Latin keystrokes to Greek polytonic characters. Users can type in Roman characters, and the app translates the text in real time. +* **JSON Mapping Database**: Loads character conversion pairings from raw JSON resource file `R.raw.latin_greek_text_conversion`. +* **Automatic Final Sigma Selection**: Standard lowercase sigma (`σ`) is used within words, but if a word ends in sigma, the engine automatically replaces it with the terminal final sigma (`ς`). It also checks if the character is followed by punctuation marks (`:`, `;`, `'`, `.`, `\n`) to apply final sigmas correctly. + +### 2. Diacritical Resolution Logic +Keystroke combinations are resolved chronologically to build complex Greek characters: +* An asterisk (`*`) indicates a capital letter. +* Character codes representing accents or breathing marks are combined with preceding vowels: + * `)` represents a smooth breathing mark. + * `(` represents a rough breathing mark. + * `/` represents an acute accent. + * `\` represents a grave accent. + * `=` represents a circumflex. + * `+` represents a dieresis. + * `|` represents an iota subscript. +* For example, typing `*a)` transforms into capital Alpha with smooth breathing (`Ἀ`), and typing `a)/` transforms into lowercase alpha with smooth breathing and acute accent (`ἄ`). diff --git a/docs/ui_presentation.md b/docs/ui_presentation.md new file mode 100644 index 0000000..96e3e1c --- /dev/null +++ b/docs/ui_presentation.md @@ -0,0 +1,56 @@ +# UI & Presentation Layer + +Classics Reader implements two distinct user interface architectures. This separation allows comparative development and showcases Android layout systems: the traditional XML-View and fragment paradigm, and the modern declarative Jetpack Compose layout system. + +--- + +## Traditional View Architecture (`:views`) + +The view presentation layer depends on standard Android UI widgets, XML files, and jetpack libraries. + +### 1. Activity and Fragment Structure +* **`MainActivity`**: The single core activity container that implements a `DrawerLayout` for side navigation and a `Toolbar` to host global search. +* **Navigation Component**: Defines a nav graph that routes users between fragments using generated `SafeArgs` direction builders (e.g. `ReadingFragmentDirections` and `LibraryFragmentDirections`). +* **`ErrorActivity`**: Configured on boot via `ForceCloseHandler` to catch uncaught runtime exceptions and show a friendly crash screen instead of crashing silently. + +### 2. Layouts and Data Binding +* **Data Binding**: XML layouts (like `fragment_reading.xml` or `fragment_library.xml`) wrap target variables directly. For example, `fragment_toc.xml` binds a local fragment reference to update ListViews automatically. +* **List Adapters**: Custom adapters like `TOCListViewAdapter` translate Table of Contents lists into rows, mapping section titles to text locations. + +### 3. Interoperability Adapter (`ComposeViewAdapter`) +To reuse Compose components in the View module, `ComposeViewAdapter` provides a bridge. It hosts Compose components inside a traditional layout view, permitting modern features to run in the legacy module. + +--- + +## Jetpack Compose Architecture (`:compose`) + +The Compose module replaces XML files, Fragments, and Drawer layouts with a fully declarative, state-driven rendering engine. + +### 1. Navigation & Scaffolding +* **`MainActivity`**: Extends `ComponentActivity` and calls `setContent` to bind `ReaderApp` with custom themed colors schemes. +* **`ReaderAppNavHost`**: Declares routes using a sealed class structure `Screen` (defining route configurations like `/library`, `/reading/{workId}?isTranslation={isTranslation}`, `/dictionary?query={query}`). +* **`NavigationSuiteScaffold`**: Material 3 component that automatically adjusts its navigation container based on screen size (e.g., showing a bottom navigation bar on compact phones, and a side navigation rail on wide tablets). + +### 2. Composable Screen Composition +* **`ReadingScreen`**: Integrates `ReadingSupportingPane` to handle scrolling content. +* **`LibraryScreen`**: Renders dynamic grid items (`LazyCardGrid`) displaying available classics, their author profiles, and covers. +* **ViewModels**: + * `ReadingViewModel`: Manages scroll indexes and text offsets for reading. + * `DictionaryViewModel`: Holds dictionary query state, search history lists, and matching lexicon definitions as Flow states. + +--- + +## Responsive & Adaptive Layout Design + +To ensure optimal layout formatting across a variety of form factors (phones, foldables, tablets, and chromebooks), Classics Reader implements dynamic UI layout schemes. + +### 1. `WindowSizeClass` Integration +Compose reads the window dimensions using `calculateWindowSizeClass(this)` inside `MainActivity` and forwards it to `ReaderApp`. The widths are mapped as: +* **Compact / Medium Width**: Displays `NavigationSuiteType.WideNavigationRailCollapsed` (a bottom bar or narrow rail). +* **Expanded Width**: Displays `NavigationSuiteType.WideNavigationRailExpanded` (a full navigation panel). + +### 2. Multi-Pane Scaffolding +The `:compose` module utilizes advanced Material 3 adaptive scaffolds to show content: + +* **`ListDetailPane`**: Used on library screens. On standard phones, tapping a book takes the user to a full details screen. On wide screens (Expanded width), the library catalog is shown on the left list panel, and the selected book's info page is displayed side-by-side on the right details panel. +* **`ReadingSupportingPane`**: Used on the reading screen. If a user performs a dictionary lookup on a word, standard phones show a popup or navigate to a lookup tab. Wide screens split the UI into a main column (displaying the text of the epic) and a supporting right-hand column (displaying the dictionary definition or grammar references) for an uninterrupted reading flow. diff --git a/latinreader-compose/.gitignore b/greekreader/compose/.gitignore similarity index 100% rename from latinreader-compose/.gitignore rename to greekreader/compose/.gitignore diff --git a/greekreader-compose/build.gradle b/greekreader/compose/build.gradle similarity index 100% rename from greekreader-compose/build.gradle rename to greekreader/compose/build.gradle diff --git a/latinreader-compose/proguard-rules.pro b/greekreader/compose/proguard-rules.pro similarity index 100% rename from latinreader-compose/proguard-rules.pro rename to greekreader/compose/proguard-rules.pro diff --git a/greekreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt b/greekreader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt similarity index 100% rename from greekreader-compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt rename to greekreader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/greek/compose/ExampleInstrumentedTest.kt diff --git a/greekreader-compose/src/main/AndroidManifest.xml b/greekreader/compose/src/main/AndroidManifest.xml similarity index 100% rename from greekreader-compose/src/main/AndroidManifest.xml rename to greekreader/compose/src/main/AndroidManifest.xml diff --git a/greekreader-compose/src/main/ic_launcher_3-playstore.png b/greekreader/compose/src/main/ic_launcher_3-playstore.png similarity index 100% rename from greekreader-compose/src/main/ic_launcher_3-playstore.png rename to greekreader/compose/src/main/ic_launcher_3-playstore.png diff --git a/greekreader-compose/src/main/res/drawable/ic_launcher_3_background.xml b/greekreader/compose/src/main/res/drawable/ic_launcher_3_background.xml similarity index 100% rename from greekreader-compose/src/main/res/drawable/ic_launcher_3_background.xml rename to greekreader/compose/src/main/res/drawable/ic_launcher_3_background.xml diff --git a/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml b/greekreader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml similarity index 100% rename from greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml rename to greekreader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml diff --git a/greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml b/greekreader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml similarity index 100% rename from greekreader-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml rename to greekreader/compose/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml diff --git a/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp b/greekreader/compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp rename to greekreader/compose/src/main/res/mipmap-hdpi/ic_launcher_3.webp diff --git a/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp b/greekreader/compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp rename to greekreader/compose/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp diff --git a/greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp b/greekreader/compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp rename to greekreader/compose/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp diff --git a/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp b/greekreader/compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp rename to greekreader/compose/src/main/res/mipmap-mdpi/ic_launcher_3.webp diff --git a/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp b/greekreader/compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp rename to greekreader/compose/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp diff --git a/greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp b/greekreader/compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp rename to greekreader/compose/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp diff --git a/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp b/greekreader/compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp rename to greekreader/compose/src/main/res/mipmap-xhdpi/ic_launcher_3.webp diff --git a/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp b/greekreader/compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp rename to greekreader/compose/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp diff --git a/greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp b/greekreader/compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp rename to greekreader/compose/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp diff --git a/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp b/greekreader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp rename to greekreader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp diff --git a/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp b/greekreader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp rename to greekreader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp diff --git a/greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp b/greekreader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp rename to greekreader/compose/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp diff --git a/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp b/greekreader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp rename to greekreader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp diff --git a/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp b/greekreader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp rename to greekreader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp diff --git a/greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp b/greekreader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp similarity index 100% rename from greekreader-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp rename to greekreader/compose/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp diff --git a/greekreader-compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt b/greekreader/compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt similarity index 100% rename from greekreader-compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt rename to greekreader/compose/src/test/java/com/ericmschmidt/classicsreader/greek/compose/ExampleUnitTest.kt diff --git a/latinreader-views/.gitignore b/greekreader/views/.gitignore similarity index 100% rename from latinreader-views/.gitignore rename to greekreader/views/.gitignore diff --git a/greekreader-views/build.gradle b/greekreader/views/build.gradle similarity index 100% rename from greekreader-views/build.gradle rename to greekreader/views/build.gradle diff --git a/latinreader-views/proguard-rules.pro b/greekreader/views/proguard-rules.pro similarity index 100% rename from latinreader-views/proguard-rules.pro rename to greekreader/views/proguard-rules.pro diff --git a/greekreader-views/src/adaptiveTest/adaptive_journey.journey.xml b/greekreader/views/src/adaptiveTest/adaptive_journey.journey.xml similarity index 100% rename from greekreader-views/src/adaptiveTest/adaptive_journey.journey.xml rename to greekreader/views/src/adaptiveTest/adaptive_journey.journey.xml diff --git a/greekreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt b/greekreader/views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt similarity index 100% rename from greekreader-views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt rename to greekreader/views/src/androidTest/java/com/ericmschmidt/classicsreader/greek/ExampleInstrumentedTest.kt diff --git a/greekreader-views/src/main/AndroidManifest.xml b/greekreader/views/src/main/AndroidManifest.xml similarity index 100% rename from greekreader-views/src/main/AndroidManifest.xml rename to greekreader/views/src/main/AndroidManifest.xml diff --git a/latinreader-views/src/main/res/drawable/ic_launcher_background.xml b/greekreader/views/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from latinreader-views/src/main/res/drawable/ic_launcher_background.xml rename to greekreader/views/src/main/res/drawable/ic_launcher_background.xml diff --git a/latinreader-views/src/main/res/drawable/ic_launcher_foreground.xml b/greekreader/views/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from latinreader-views/src/main/res/drawable/ic_launcher_foreground.xml rename to greekreader/views/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/greekreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to greekreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/greekreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from latinreader-views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to greekreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp b/greekreader/views/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-hdpi/ic_launcher.webp rename to greekreader/views/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/latinreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/greekreader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to greekreader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp b/greekreader/views/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-mdpi/ic_launcher.webp rename to greekreader/views/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/latinreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/greekreader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to greekreader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp b/greekreader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to greekreader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/greekreader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to greekreader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/greekreader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to greekreader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/greekreader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to greekreader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/greekreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to greekreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/greekreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from latinreader-views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to greekreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/latinreader-views/src/main/res/values-night/themes.xml b/greekreader/views/src/main/res/values-night/themes.xml similarity index 100% rename from latinreader-views/src/main/res/values-night/themes.xml rename to greekreader/views/src/main/res/values-night/themes.xml diff --git a/latinreader-views/src/main/res/values/colors.xml b/greekreader/views/src/main/res/values/colors.xml similarity index 100% rename from latinreader-views/src/main/res/values/colors.xml rename to greekreader/views/src/main/res/values/colors.xml diff --git a/greekreader-views/src/main/res/values/strings.xml b/greekreader/views/src/main/res/values/strings.xml similarity index 100% rename from greekreader-views/src/main/res/values/strings.xml rename to greekreader/views/src/main/res/values/strings.xml diff --git a/latinreader-views/src/main/res/values/themes.xml b/greekreader/views/src/main/res/values/themes.xml similarity index 100% rename from latinreader-views/src/main/res/values/themes.xml rename to greekreader/views/src/main/res/values/themes.xml diff --git a/greekreader-views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt b/greekreader/views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt similarity index 100% rename from greekreader-views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt rename to greekreader/views/src/test/java/com/ericmschmidt/classicsreader/greek/ExampleUnitTest.kt diff --git a/settings.gradle b/settings.gradle index 549e762..badf39a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,8 +11,8 @@ plugins { rootProject.name = "ClassicsReaderAndroid" include ':core', ':latinreader', ':greekreader' include ':views' -include ':latinreader-views' -include ':greekreader-views' +include ':latinreader:views' +include ':greekreader:views' include ':compose' -include ':latinreader-compose' -include ':greekreader-compose' +include ':latinreader:compose' +include ':greekreader:compose' From 87c78d29888aa1fa5d768274dc76e7987ddcfc32 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 29 May 2026 11:21:36 -0700 Subject: [PATCH 6/9] attempts to fix GitHub workflows --- .github/workflows/android-tests.yml | 4 +- .../{build.gradle => build.gradle.kts} | 25 +++---- LatinReader/compose/build.gradle | 67 ----------------- LatinReader/compose/build.gradle.kts | 67 +++++++++++++++++ LatinReader/views/build.gradle | 47 ------------ LatinReader/views/build.gradle.kts | 44 ++++++++++++ build.gradle => build.gradle.kts | 18 +++-- compose/{build.gradle => build.gradle.kts} | 22 +++--- core/{build.gradle => build.gradle.kts} | 23 +++--- .../classicsreader/data/Dictionary.kt | 2 +- .../{build.gradle => build.gradle.kts} | 18 ++--- greekreader/compose/build.gradle | 45 ------------ greekreader/compose/build.gradle.kts | 52 ++++++++++++++ greekreader/views/build.gradle | 71 ------------------- greekreader/views/build.gradle.kts | 66 +++++++++++++++++ views/{build.gradle => build.gradle.kts} | 28 ++++---- 16 files changed, 297 insertions(+), 302 deletions(-) rename LatinReader/{build.gradle => build.gradle.kts} (60%) delete mode 100644 LatinReader/compose/build.gradle create mode 100644 LatinReader/compose/build.gradle.kts delete mode 100644 LatinReader/views/build.gradle create mode 100644 LatinReader/views/build.gradle.kts rename build.gradle => build.gradle.kts (65%) rename compose/{build.gradle => build.gradle.kts} (79%) rename core/{build.gradle => build.gradle.kts} (87%) rename greekreader/{build.gradle => build.gradle.kts} (65%) delete mode 100644 greekreader/compose/build.gradle create mode 100644 greekreader/compose/build.gradle.kts delete mode 100644 greekreader/views/build.gradle create mode 100644 greekreader/views/build.gradle.kts rename views/{build.gradle => build.gradle.kts} (67%) diff --git a/.github/workflows/android-tests.yml b/.github/workflows/android-tests.yml index 2879b0e..4a175c9 100644 --- a/.github/workflows/android-tests.yml +++ b/.github/workflows/android-tests.yml @@ -14,11 +14,11 @@ jobs: - name: Checkout Code uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 24 uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: '17' + java-version: '24' # Cache Gradle dependencies to speed up subsequent builds - name: Setup Gradle diff --git a/LatinReader/build.gradle b/LatinReader/build.gradle.kts similarity index 60% rename from LatinReader/build.gradle rename to LatinReader/build.gradle.kts index ea99b13..714048f 100644 --- a/LatinReader/build.gradle +++ b/LatinReader/build.gradle.kts @@ -4,24 +4,24 @@ plugins { } android { - namespace="com.ericmschmidt.latinreader" - compileSdkVersion(36) + namespace = "com.ericmschmidt.latinreader" + compileSdk = 36 defaultConfig { - minSdkVersion(24) + minSdk = 24 } buildTypes { release { - minifyEnabled false + isMinifyEnabled = false } } lint { - abortOnError false - checkReleaseBuilds false - targetSdk 36 + abortOnError = false + checkReleaseBuilds = false + targetSdk = 36 } kotlin { jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") + languageVersion.set(JavaLanguageVersion.of("24")) } } } @@ -29,9 +29,9 @@ android { dependencies { implementation(libs.androidx.compose.ui.text.google.fonts) implementation(platform(libs.androidx.compose.bom)) - implementation project(":views") - implementation project(":core") - implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation(project(":views")) + implementation(project(":core")) + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(libs.androidx.core.ktx) implementation(libs.androidx.compose.foundation) implementation(libs.androidx.compose.material3.material3) @@ -40,8 +40,9 @@ dependencies { implementation(libs.ui.tooling.preview) implementation(libs.androidx.compose.ui.text.google.fonts) } + java { toolchain { - languageVersion = JavaLanguageVersion.of(24) + languageVersion.set(JavaLanguageVersion.of(24)) } } diff --git a/LatinReader/compose/build.gradle b/LatinReader/compose/build.gradle deleted file mode 100644 index 694943f..0000000 --- a/LatinReader/compose/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -plugins { - alias(libs.plugins.compose.compiler) - alias libs.plugins.android.application -} - -android { - namespace="com.ericmschmidt.classicsreader.latin.compose" - compileSdk { - version = release(37) - } - - defaultConfig { - applicationId "com.ericmschmidt.latinreader" - minSdk 24 - targetSdk 37 - versionCode(22) - versionName("3.0.0") - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - kotlin { - jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") - } - } - testOptions { - emulatorControl { - enable = true - } - } - packaging { - resources.excludes.add("META-INF/LICENSE.md") - resources.excludes.add("META-INF/LICENSE-notice.md") - } -} - -dependencies { - implementation project(":core") - implementation project(":compose") - implementation project(":latinreader") - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.material - implementation platform(libs.androidx.compose.bom) - implementation libs.androidx.compose.ui - implementation libs.androidx.compose.ui.graphics - implementation libs.androidx.compose.ui.tooling.preview - implementation libs.androidx.material3 - implementation libs.androidx.activity.compose - implementation libs.material3.window.size.class1 - androidTestImplementation libs.ui.test.junit4 - androidTestImplementation libs.junit.jupiter - debugImplementation libs.ui.tooling - debugImplementation libs.androidx.compose.ui.test.manifest - - testImplementation libs.junit - androidTestImplementation libs.androidx.junit - androidTestImplementation libs.androidx.espresso.core - androidTestImplementation libs.androidx.espresso.device -} \ No newline at end of file diff --git a/LatinReader/compose/build.gradle.kts b/LatinReader/compose/build.gradle.kts new file mode 100644 index 0000000..ff16b38 --- /dev/null +++ b/LatinReader/compose/build.gradle.kts @@ -0,0 +1,67 @@ +plugins { + alias(libs.plugins.compose.compiler) + alias(libs.plugins.android.application) +} + +android { + namespace = "com.ericmschmidt.classicsreader.latin.compose" + compileSdk = 37 + + defaultConfig { + applicationId = "com.ericmschmidt.latinreader" + minSdk = 24 + targetSdk = 37 + versionCode = 22 + versionName = "3.0.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of("24")) + } + } + testOptions { + emulatorControl { + enable = true + } + } + packaging { + resources { + excludes.add("META-INF/LICENSE.md") + excludes.add("META-INF/LICENSE-notice.md") + } + } +} + +dependencies { + implementation(project(":core")) + implementation(project(":compose")) + implementation(project(":latinreader")) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.material3) + implementation(libs.androidx.activity.compose) + implementation(libs.material3.window.size.class1) + androidTestImplementation(libs.ui.test.junit4) + androidTestImplementation(libs.junit.jupiter) + debugImplementation(libs.ui.tooling) + debugImplementation(libs.androidx.compose.ui.test.manifest) + + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(libs.androidx.espresso.device) +} diff --git a/LatinReader/views/build.gradle b/LatinReader/views/build.gradle deleted file mode 100644 index 7940056..0000000 --- a/LatinReader/views/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -plugins { - alias(libs.plugins.compose.compiler) - alias libs.plugins.android.application -} - -android { - namespace="com.ericmschmidt.classicsreader.latin.views" - compileSdk { - version = release(36) - } - dataBinding { - enabled = true - } - defaultConfig { - applicationId "com.ericmschmidt.classicsreader.latin.views" - minSdk 24 - targetSdk 36 - versionCode(21) - versionName("2.1.0") - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - kotlin { - jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") - } - } -} - -dependencies { - implementation project(":core") - implementation project(":views") - implementation project(":latinreader") - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.material - testImplementation libs.junit - androidTestImplementation libs.androidx.junit - androidTestImplementation libs.androidx.espresso.core -} \ No newline at end of file diff --git a/LatinReader/views/build.gradle.kts b/LatinReader/views/build.gradle.kts new file mode 100644 index 0000000..8a9e417 --- /dev/null +++ b/LatinReader/views/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace = "com.ericmschmidt.classicsreader.latin.views" + compileSdk = 36 + buildFeatures { + dataBinding = true + } + defaultConfig { + applicationId = "com.ericmschmidt.classicsreader.latin.views" + minSdk = 24 + targetSdk = 36 + versionCode = 21 + versionName = "2.1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of("24")) + } + } +} + +dependencies { + implementation(project(":core")) + implementation(project(":views")) + implementation(project(":latinreader")) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) +} diff --git a/build.gradle b/build.gradle.kts similarity index 65% rename from build.gradle rename to build.gradle.kts index de3a8f7..f84f837 100644 --- a/build.gradle +++ b/build.gradle.kts @@ -13,21 +13,19 @@ plugins { alias(libs.plugins.androidx.navigation.safeargs) apply false } -ext { - kotlin_version = "2.1.21" - lifecycle_version = "2.10.0" - nav_version = "2.9.6" - compose_version = "1.12.1" -} +extra["kotlin_version"] = "2.1.21" +extra["lifecycle_version"] = "2.10.0" +extra["nav_version"] = "2.9.6" +extra["compose_version"] = "1.12.1" allprojects { repositories { google() maven { - url = "https://maven.google.com" + url = uri("https://maven.google.com") } maven { - url = "https://jitpack.io" + url = uri("https://jitpack.io") } mavenCentral() } @@ -39,6 +37,6 @@ configurations.configureEach { } } -tasks.register("clean", Delete) { - delete rootProject.layout.buildDirectory +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) } diff --git a/compose/build.gradle b/compose/build.gradle.kts similarity index 79% rename from compose/build.gradle rename to compose/build.gradle.kts index ca967e2..10ff4dc 100644 --- a/compose/build.gradle +++ b/compose/build.gradle.kts @@ -5,33 +5,33 @@ plugins { } android { - namespace="com.telpirion.compose" - compileSdkVersion(36) + namespace = "com.telpirion.compose" + compileSdk = 36 defaultConfig { - minSdk 24 + minSdk = 24 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { - minifyEnabled false - proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } kotlin { jvmToolchain { - languageVersion = JavaLanguageVersion.of("17") + languageVersion.set(JavaLanguageVersion.of("17")) } } lint { - targetSdk 36 + targetSdk = 36 } } dependencies { - implementation project(":core") + implementation(project(":core")) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.activity.compose) @@ -56,7 +56,7 @@ dependencies { implementation(libs.androidx.navigation.compose) implementation(libs.markdownview.android) - implementation libs.material3.window.size.class1 + implementation(libs.material3.window.size.class1) testImplementation(libs.junit) androidTestImplementation(platform(libs.androidx.compose.bom)) @@ -65,4 +65,4 @@ dependencies { androidTestImplementation(libs.androidx.compose.ui.test.junit4) debugImplementation(libs.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) -} \ No newline at end of file +} diff --git a/core/build.gradle b/core/build.gradle.kts similarity index 87% rename from core/build.gradle rename to core/build.gradle.kts index 8476bc2..719a41d 100644 --- a/core/build.gradle +++ b/core/build.gradle.kts @@ -5,28 +5,28 @@ plugins { } android { - namespace="com.ericmschmidt.classicsreader" - compileSdkVersion(36) + namespace = "com.ericmschmidt.classicsreader" + compileSdk = 36 defaultConfig { - minSdkVersion(24) + minSdk = 24 testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true + unitTests.isIncludeAndroidResources = true + unitTests.isReturnDefaultValues = true } buildFeatures { viewBinding = true } kotlin { jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") + languageVersion.set(JavaLanguageVersion.of("24")) } } - packagingOptions { + packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" merges += "META-INF/LICENSE.md" @@ -34,13 +34,13 @@ android { } } lint { - targetSdk 36 + targetSdk = 36 } } dependencies { implementation(libs.ui.tooling) - implementation(fileTree(dir: "libs", include: ["*.jar"])) + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.appcompat) @@ -89,13 +89,14 @@ dependencies { testImplementation(libs.mockito.kotlin) testImplementation(libs.mockk) testImplementation(libs.kxml2) - } + java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion.set(JavaLanguageVersion.of(17)) } } + repositories { mavenCentral() } diff --git a/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt b/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt index 15132b8..3906d3a 100644 --- a/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt +++ b/core/src/main/java/com/ericmschmidt/classicsreader/data/Dictionary.kt @@ -66,7 +66,7 @@ class Dictionary(val converter: ITextConverter? = null) { val random = Random() val numberOfEntries: Int = entryCount() - val randomNumber = random.nextInt(numberOfEntries + 1) + val randomNumber = random.nextInt(numberOfEntries) val randomEntryKey: String = this.entryHeaders[randomNumber] return getEntry(randomEntryKey) } diff --git a/greekreader/build.gradle b/greekreader/build.gradle.kts similarity index 65% rename from greekreader/build.gradle rename to greekreader/build.gradle.kts index b8be674..22bd037 100644 --- a/greekreader/build.gradle +++ b/greekreader/build.gradle.kts @@ -4,31 +4,31 @@ plugins { } android { - namespace="com.ericmschmidt.greekreader" - compileSdkVersion(36) + namespace = "com.ericmschmidt.greekreader" + compileSdk = 36 defaultConfig { - minSdkVersion(24) + minSdk = 24 } buildTypes { release { - minifyEnabled false + isMinifyEnabled = false } } kotlin { jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") + languageVersion.set(JavaLanguageVersion.of("24")) } } lint { - targetSdk 36 + targetSdk = 36 } } dependencies { implementation(platform(libs.androidx.compose.bom)) - implementation project(":views") - implementation project(":core") - implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation(project(":views")) + implementation(project(":core")) + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(libs.androidx.core.ktx) implementation(libs.androidx.compose.foundation) implementation(libs.androidx.compose.material3.material3) diff --git a/greekreader/compose/build.gradle b/greekreader/compose/build.gradle deleted file mode 100644 index 633cb6d..0000000 --- a/greekreader/compose/build.gradle +++ /dev/null @@ -1,45 +0,0 @@ -plugins { - alias(libs.plugins.compose.compiler) - alias(libs.plugins.android.application) -} - -android { - namespace="com.ericmschmidt.classicsreader.greek.compose" - compileSdk { - version = release(36) - } - - defaultConfig { - applicationId "com.ericmschmidt.classicsreader.greek.compose" - minSdk 24 - targetSdk 36 - versionCode(3) - versionName("2.1.0") - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - kotlin { - jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") - } - } -} - -dependencies { - implementation project(":core") - implementation project(":compose") - implementation project(":greekreader") - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.material - testImplementation libs.junit - androidTestImplementation libs.androidx.junit - androidTestImplementation libs.androidx.espresso.core -} \ No newline at end of file diff --git a/greekreader/compose/build.gradle.kts b/greekreader/compose/build.gradle.kts new file mode 100644 index 0000000..6aa95f9 --- /dev/null +++ b/greekreader/compose/build.gradle.kts @@ -0,0 +1,52 @@ +plugins { + alias(libs.plugins.compose.compiler) + alias(libs.plugins.android.application) +} + +android { + namespace = "com.ericmschmidt.classicsreader.greek.compose" + compileSdk = 36 + + defaultConfig { + applicationId = "com.ericmschmidt.classicsreader.greek.compose" + minSdk = 24 + targetSdk = 36 + versionCode = 3 + versionName = "2.1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of("24")) + } + } +} + +dependencies { + implementation(project(":core")) + implementation(project(":compose")) + implementation(project(":greekreader")) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + + // Compose Runtime and UI + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.material3) + implementation(libs.androidx.activity.compose) + + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) +} diff --git a/greekreader/views/build.gradle b/greekreader/views/build.gradle deleted file mode 100644 index 9b3557c..0000000 --- a/greekreader/views/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -import com.android.build.api.dsl.AgpTestSuiteInputParameters - -plugins { - alias(libs.plugins.compose.compiler) - alias(libs.plugins.android.application) -} - -android { - namespace="com.ericmschmidt.classicsreader.greek.views" - compileSdk { - version = release(36) - } - - dataBinding { - enabled = true - } - - defaultConfig { - applicationId "com.ericmschmidt.classicsreader.greek.views" - minSdk 24 - targetSdk 36 - versionCode(3) - versionName("2.1.0") - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - kotlin { - jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") - } - } - testOptions { - suites { - adaptiveTest { - assets { - } - targets { - 'default' { - } - } - useJunitEngine { - inputs AgpTestSuiteInputParameters.TESTED_APKS - includeEngines 'journeys-test-engine' - enginesDependencies('org.junit.platform:junit-platform-launcher:1.13.4') - enginesDependencies('org.junit.platform:junit-platform-engine:1.13.4') - enginesDependencies('com.android.tools.journeys:journeys-junit-engine:0.2.1') - } - targetVariants 'debug' - } - } - } -} - -dependencies { - implementation project(":core") - implementation project(":views") - implementation project(":greekreader") - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.material - testImplementation libs.junit - androidTestImplementation libs.androidx.junit - androidTestImplementation libs.androidx.espresso.core -} \ No newline at end of file diff --git a/greekreader/views/build.gradle.kts b/greekreader/views/build.gradle.kts new file mode 100644 index 0000000..d82a6e7 --- /dev/null +++ b/greekreader/views/build.gradle.kts @@ -0,0 +1,66 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace = "com.ericmschmidt.classicsreader.greek.views" + compileSdk = 36 + + buildFeatures { + dataBinding = true + } + + defaultConfig { + applicationId = "com.ericmschmidt.classicsreader.greek.views" + minSdk = 24 + targetSdk = 36 + versionCode = 3 + versionName = "2.1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of("24")) + } + } + testOptions { + suites { + register("adaptiveTest") { + assets { + } + targets { + register("default") { + } + } + useJunitEngine { + inputs.add(com.android.build.api.dsl.AgpTestSuiteInputParameters.TESTED_APKS) + includeEngines.add("journeys-test-engine") + enginesDependencies.add("org.junit.platform:junit-platform-launcher:1.13.4") + enginesDependencies.add("org.junit.platform:junit-platform-engine:1.13.4") + enginesDependencies.add("com.android.tools.journeys:journeys-junit-engine:0.2.1") + } + targetVariants.add("debug") + } + } + } +} + +dependencies { + implementation(project(":core")) + implementation(project(":views")) + implementation(project(":greekreader")) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) +} diff --git a/views/build.gradle b/views/build.gradle.kts similarity index 67% rename from views/build.gradle rename to views/build.gradle.kts index 4668f4a..34d32fd 100644 --- a/views/build.gradle +++ b/views/build.gradle.kts @@ -5,38 +5,34 @@ plugins { } android { - namespace="com.ericmschmidt.classicsreader.views" - compileSdkVersion 36 - - dataBinding { - enabled = true - } + namespace = "com.ericmschmidt.classicsreader.views" + compileSdk = 36 defaultConfig { - minSdk 24 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" + minSdk = 24 + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") } buildTypes { release { - minifyEnabled false - proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } kotlin { jvmToolchain { - languageVersion = JavaLanguageVersion.of("24") + languageVersion.set(JavaLanguageVersion.of("24")) } } buildFeatures { - viewBinding true - dataBinding true + viewBinding = true + dataBinding = true } } dependencies { - implementation project(":core") + implementation(project(":core")) implementation(libs.androidx.appcompat) implementation(libs.androidx.activity.compose) @@ -57,4 +53,4 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) -} \ No newline at end of file +} From af2d3e856146c25190ddd79bc1160d049ad31d7a Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 29 May 2026 11:38:43 -0700 Subject: [PATCH 7/9] attempts to fix GitHub workflows --- .github/workflows/android-tests.yml | 8 +++++--- .github/workflows/android.yml | 10 ++++++---- settings.gradle | 10 ++++++---- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.github/workflows/android-tests.yml b/.github/workflows/android-tests.yml index 4a175c9..12f2609 100644 --- a/.github/workflows/android-tests.yml +++ b/.github/workflows/android-tests.yml @@ -12,17 +12,19 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v6 + with: + submodules: 'recursive' # Or 'true' for top-level only - name: Set up JDK 24 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '24' # Cache Gradle dependencies to speed up subsequent builds - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v6 - name: Make Gradlew Executable run: chmod +x ./gradlew diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 42abbe3..8aa97cc 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -8,13 +8,15 @@ on: jobs: build: - runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: set up JDK 23 - uses: actions/setup-java@v4 + - name: Checkout Code + uses: actions/checkout@v6 + with: + submodules: 'recursive' # Or 'true' for top-level only + - name: Set up JDK 24 + uses: actions/setup-java@v5 with: java-version: '24' distribution: 'temurin' diff --git a/settings.gradle b/settings.gradle index badf39a..cbd9fcb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,10 +9,12 @@ plugins { id "org.gradle.toolchains.foojay-resolver-convention" version "1.0.0" } rootProject.name = "ClassicsReaderAndroid" -include ':core', ':latinreader', ':greekreader' +include ':core' include ':views' -include ':latinreader:views' -include ':greekreader:views' include ':compose' +include ':latinreader' +include ':greekreader' +include ':latinreader:views' include ':latinreader:compose' -include ':greekreader:compose' +include ':greekreader:views' +include 'greekreader:compose' From 0fbdd98bdab66719a836208eb77f83fddc5ed262 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 29 May 2026 11:42:19 -0700 Subject: [PATCH 8/9] Fix case-sensitivity of latinreader folder for GitHub actions runner --- {LatinReader => latinreader}/.gitignore | 0 {LatinReader => latinreader}/build.gradle.kts | 0 {LatinReader => latinreader}/compose/.gitignore | 0 .../compose/build.gradle.kts | 0 .../compose/proguard-rules.pro | 0 .../compose/src/androidTest/AndroidManifest.xml | 0 .../latin/compose/LatinReaderAppTest.kt | 0 .../latin/compose/ReadingScreenTest.kt | 0 .../compose/src/main/AndroidManifest.xml | 0 {LatinReader => latinreader}/release/output.json | 0 .../src/main/AndroidManifest.xml | 0 .../src/main/ic_launcher-web.png | Bin .../src/main/ic_launcher_2-playstore.png | Bin .../src/main/ic_launcher_3-playstore.png | Bin .../src/main/ic_launcher_foreground-playstore.png | Bin .../ericmschmidt/latin/LatinReaderApplication.kt | 0 .../ericmschmidt/latin/data/LatinReaderLibrary.kt | 0 .../latin/data/LatinReaderLibraryDescriptions.kt | 0 .../main/java/com/ericmschmidt/latin/theme/Color.kt | 0 .../main/java/com/ericmschmidt/latin/theme/Theme.kt | 0 .../main/java/com/ericmschmidt/latin/theme/Type.kt | 0 .../src/main/res/drawable/ic_latinreader.xml | 0 .../main/res/drawable/ic_launcher_2_background.xml | 0 .../main/res/drawable/ic_launcher_3_background.xml | 0 .../drawable/ic_launcher_foreground_background.xml | 0 .../src/main/res/drawable/work_ab_urbe_condita.webp | Bin .../src/main/res/drawable/work_aeneid.jpg | Bin .../src/main/res/drawable/work_apocolocyntosis.webp | Bin .../src/main/res/drawable/work_carmina.webp | Bin .../main/res/drawable/work_de_bello_gallico.webp | Bin .../res/drawable/work_de_bellum_jugurthinum.webp | Bin .../src/main/res/drawable/work_de_rerum_natura.webp | Bin .../src/main/res/drawable/work_metamorphoses.webp | Bin .../src/main/res/drawable/work_satyricon.webp | Bin .../main/res/mipmap-anydpi-v26/ic_launcher_3.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher_3_round.xml | 0 .../ic_launcher_foreground_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-hdpi/ic_launcher_3.webp | Bin .../res/mipmap-hdpi/ic_launcher_3_foreground.webp | Bin .../main/res/mipmap-hdpi/ic_launcher_3_round.webp | Bin .../src/main/res/mipmap-hdpi/ic_launcher_fore.webp | Bin .../mipmap-hdpi/ic_launcher_foreground_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher_3.webp | Bin .../res/mipmap-mdpi/ic_launcher_3_foreground.webp | Bin .../main/res/mipmap-mdpi/ic_launcher_3_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher_fore.webp | Bin .../mipmap-mdpi/ic_launcher_foreground_round.webp | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher_3.webp | Bin .../res/mipmap-xhdpi/ic_launcher_3_foreground.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher_3_round.webp | Bin .../src/main/res/mipmap-xhdpi/ic_launcher_fore.webp | Bin .../mipmap-xhdpi/ic_launcher_foreground_round.webp | Bin .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xxhdpi/ic_launcher_3.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_3_foreground.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher_fore.webp | Bin .../mipmap-xxhdpi/ic_launcher_foreground_round.webp | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp | Bin .../mipmap-xxxhdpi/ic_launcher_3_foreground.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_3_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher_fore.webp | Bin .../ic_launcher_foreground_round.webp | Bin .../src/main/res/raw/allenandgreenough.xml | 0 .../src/main/res/raw/caes_bg_eng.xml | 0 .../src/main/res/raw/caes_bg_lat.xml | 0 .../src/main/res/raw/dictionary_entries.xml | 0 .../src/main/res/raw/hor_carm_eng.xml | 0 .../src/main/res/raw/hor_carm_lat.xml | 0 .../src/main/res/raw/lewis.xml | 0 .../src/main/res/raw/livy_01_02_eng.xml | 0 .../src/main/res/raw/livy_01_02_lat.xml | 0 .../src/main/res/raw/lucretius_eng.xml | 0 .../src/main/res/raw/lucretius_lat.xml | 0 .../src/main/res/raw/ovid_met_eng.xml | 0 .../src/main/res/raw/ovid_met_lat.xml | 0 .../src/main/res/raw/petr_eng.xml | 0 .../src/main/res/raw/petr_lat.xml | 0 .../src/main/res/raw/sallust_jugur_eng.xml | 0 .../src/main/res/raw/sallust_jugur_lat.xml | 0 .../src/main/res/raw/sen_apoc_eng.xml | 0 .../src/main/res/raw/sen_apoc_lat.xml | 0 .../src/main/res/raw/verg_a_eng.xml | 0 .../src/main/res/raw/verg_a_lat.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/config.xml | 0 .../src/main/res/values/font_certs.xml | 0 .../src/main/res/values/strings.xml | 0 {LatinReader => latinreader}/views/.gitignore | 0 {LatinReader => latinreader}/views/build.gradle.kts | 0 .../views/proguard-rules.pro | 0 .../latin/views/ExampleInstrumentedTest.kt | 0 .../views/src/main/AndroidManifest.xml | 0 .../main/res/drawable/ic_launcher_background.xml | 0 .../main/res/drawable/ic_launcher_foreground.xml | 0 .../src/main/res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../views/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../src/main/res/mipmap-hdpi/ic_launcher_round.webp | Bin .../views/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../views/src/main/res/values-night/themes.xml | 0 .../views/src/main/res/values/colors.xml | 0 .../views/src/main/res/values/strings.xml | 0 .../views/src/main/res/values/themes.xml | 0 .../classicsreader/latin/views/ExampleUnitTest.kt | 0 settings.gradle | 2 +- 117 files changed, 1 insertion(+), 1 deletion(-) rename {LatinReader => latinreader}/.gitignore (100%) rename {LatinReader => latinreader}/build.gradle.kts (100%) rename {LatinReader => latinreader}/compose/.gitignore (100%) rename {LatinReader => latinreader}/compose/build.gradle.kts (100%) rename {LatinReader => latinreader}/compose/proguard-rules.pro (100%) rename {LatinReader => latinreader}/compose/src/androidTest/AndroidManifest.xml (100%) rename {LatinReader => latinreader}/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt (100%) rename {LatinReader => latinreader}/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt (100%) rename {LatinReader => latinreader}/compose/src/main/AndroidManifest.xml (100%) rename {LatinReader => latinreader}/release/output.json (100%) rename {LatinReader => latinreader}/src/main/AndroidManifest.xml (100%) rename {LatinReader => latinreader}/src/main/ic_launcher-web.png (100%) rename {LatinReader => latinreader}/src/main/ic_launcher_2-playstore.png (100%) rename {LatinReader => latinreader}/src/main/ic_launcher_3-playstore.png (100%) rename {LatinReader => latinreader}/src/main/ic_launcher_foreground-playstore.png (100%) rename {LatinReader => latinreader}/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt (100%) rename {LatinReader => latinreader}/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt (100%) rename {LatinReader => latinreader}/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt (100%) rename {LatinReader => latinreader}/src/main/java/com/ericmschmidt/latin/theme/Color.kt (100%) rename {LatinReader => latinreader}/src/main/java/com/ericmschmidt/latin/theme/Theme.kt (100%) rename {LatinReader => latinreader}/src/main/java/com/ericmschmidt/latin/theme/Type.kt (100%) rename {LatinReader => latinreader}/src/main/res/drawable/ic_latinreader.xml (100%) rename {LatinReader => latinreader}/src/main/res/drawable/ic_launcher_2_background.xml (100%) rename {LatinReader => latinreader}/src/main/res/drawable/ic_launcher_3_background.xml (100%) rename {LatinReader => latinreader}/src/main/res/drawable/ic_launcher_foreground_background.xml (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_ab_urbe_condita.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_aeneid.jpg (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_apocolocyntosis.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_carmina.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_de_bello_gallico.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_de_bellum_jugurthinum.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_de_rerum_natura.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_metamorphoses.webp (100%) rename {LatinReader => latinreader}/src/main/res/drawable/work_satyricon.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-hdpi/ic_launcher_3.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-hdpi/ic_launcher_fore.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-mdpi/ic_launcher_3.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-mdpi/ic_launcher_fore.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xhdpi/ic_launcher_3.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp (100%) rename {LatinReader => latinreader}/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp (100%) rename {LatinReader => latinreader}/src/main/res/raw/allenandgreenough.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/caes_bg_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/caes_bg_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/dictionary_entries.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/hor_carm_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/hor_carm_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/lewis.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/livy_01_02_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/livy_01_02_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/lucretius_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/lucretius_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/ovid_met_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/ovid_met_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/petr_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/petr_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/sallust_jugur_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/sallust_jugur_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/sen_apoc_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/sen_apoc_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/verg_a_eng.xml (100%) rename {LatinReader => latinreader}/src/main/res/raw/verg_a_lat.xml (100%) rename {LatinReader => latinreader}/src/main/res/values/colors.xml (100%) rename {LatinReader => latinreader}/src/main/res/values/config.xml (100%) rename {LatinReader => latinreader}/src/main/res/values/font_certs.xml (100%) rename {LatinReader => latinreader}/src/main/res/values/strings.xml (100%) rename {LatinReader => latinreader}/views/.gitignore (100%) rename {LatinReader => latinreader}/views/build.gradle.kts (100%) rename {LatinReader => latinreader}/views/proguard-rules.pro (100%) rename {LatinReader => latinreader}/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt (100%) rename {LatinReader => latinreader}/views/src/main/AndroidManifest.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/drawable/ic_launcher_background.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {LatinReader => latinreader}/views/src/main/res/values-night/themes.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/values/colors.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/values/strings.xml (100%) rename {LatinReader => latinreader}/views/src/main/res/values/themes.xml (100%) rename {LatinReader => latinreader}/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt (100%) diff --git a/LatinReader/.gitignore b/latinreader/.gitignore similarity index 100% rename from LatinReader/.gitignore rename to latinreader/.gitignore diff --git a/LatinReader/build.gradle.kts b/latinreader/build.gradle.kts similarity index 100% rename from LatinReader/build.gradle.kts rename to latinreader/build.gradle.kts diff --git a/LatinReader/compose/.gitignore b/latinreader/compose/.gitignore similarity index 100% rename from LatinReader/compose/.gitignore rename to latinreader/compose/.gitignore diff --git a/LatinReader/compose/build.gradle.kts b/latinreader/compose/build.gradle.kts similarity index 100% rename from LatinReader/compose/build.gradle.kts rename to latinreader/compose/build.gradle.kts diff --git a/LatinReader/compose/proguard-rules.pro b/latinreader/compose/proguard-rules.pro similarity index 100% rename from LatinReader/compose/proguard-rules.pro rename to latinreader/compose/proguard-rules.pro diff --git a/LatinReader/compose/src/androidTest/AndroidManifest.xml b/latinreader/compose/src/androidTest/AndroidManifest.xml similarity index 100% rename from LatinReader/compose/src/androidTest/AndroidManifest.xml rename to latinreader/compose/src/androidTest/AndroidManifest.xml diff --git a/LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt b/latinreader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt similarity index 100% rename from LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt rename to latinreader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/LatinReaderAppTest.kt diff --git a/LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt b/latinreader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt similarity index 100% rename from LatinReader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt rename to latinreader/compose/src/androidTest/java/com/ericmschmidt/classicsreader/latin/compose/ReadingScreenTest.kt diff --git a/LatinReader/compose/src/main/AndroidManifest.xml b/latinreader/compose/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/compose/src/main/AndroidManifest.xml rename to latinreader/compose/src/main/AndroidManifest.xml diff --git a/LatinReader/release/output.json b/latinreader/release/output.json similarity index 100% rename from LatinReader/release/output.json rename to latinreader/release/output.json diff --git a/LatinReader/src/main/AndroidManifest.xml b/latinreader/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/src/main/AndroidManifest.xml rename to latinreader/src/main/AndroidManifest.xml diff --git a/LatinReader/src/main/ic_launcher-web.png b/latinreader/src/main/ic_launcher-web.png similarity index 100% rename from LatinReader/src/main/ic_launcher-web.png rename to latinreader/src/main/ic_launcher-web.png diff --git a/LatinReader/src/main/ic_launcher_2-playstore.png b/latinreader/src/main/ic_launcher_2-playstore.png similarity index 100% rename from LatinReader/src/main/ic_launcher_2-playstore.png rename to latinreader/src/main/ic_launcher_2-playstore.png diff --git a/LatinReader/src/main/ic_launcher_3-playstore.png b/latinreader/src/main/ic_launcher_3-playstore.png similarity index 100% rename from LatinReader/src/main/ic_launcher_3-playstore.png rename to latinreader/src/main/ic_launcher_3-playstore.png diff --git a/LatinReader/src/main/ic_launcher_foreground-playstore.png b/latinreader/src/main/ic_launcher_foreground-playstore.png similarity index 100% rename from LatinReader/src/main/ic_launcher_foreground-playstore.png rename to latinreader/src/main/ic_launcher_foreground-playstore.png diff --git a/LatinReader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt b/latinreader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt similarity index 100% rename from LatinReader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt rename to latinreader/src/main/java/com/ericmschmidt/latin/LatinReaderApplication.kt diff --git a/LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt b/latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt similarity index 100% rename from LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt rename to latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibrary.kt diff --git a/LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt b/latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt similarity index 100% rename from LatinReader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt rename to latinreader/src/main/java/com/ericmschmidt/latin/data/LatinReaderLibraryDescriptions.kt diff --git a/LatinReader/src/main/java/com/ericmschmidt/latin/theme/Color.kt b/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt similarity index 100% rename from LatinReader/src/main/java/com/ericmschmidt/latin/theme/Color.kt rename to latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt diff --git a/LatinReader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt b/latinreader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt similarity index 100% rename from LatinReader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt rename to latinreader/src/main/java/com/ericmschmidt/latin/theme/Theme.kt diff --git a/LatinReader/src/main/java/com/ericmschmidt/latin/theme/Type.kt b/latinreader/src/main/java/com/ericmschmidt/latin/theme/Type.kt similarity index 100% rename from LatinReader/src/main/java/com/ericmschmidt/latin/theme/Type.kt rename to latinreader/src/main/java/com/ericmschmidt/latin/theme/Type.kt diff --git a/LatinReader/src/main/res/drawable/ic_latinreader.xml b/latinreader/src/main/res/drawable/ic_latinreader.xml similarity index 100% rename from LatinReader/src/main/res/drawable/ic_latinreader.xml rename to latinreader/src/main/res/drawable/ic_latinreader.xml diff --git a/LatinReader/src/main/res/drawable/ic_launcher_2_background.xml b/latinreader/src/main/res/drawable/ic_launcher_2_background.xml similarity index 100% rename from LatinReader/src/main/res/drawable/ic_launcher_2_background.xml rename to latinreader/src/main/res/drawable/ic_launcher_2_background.xml diff --git a/LatinReader/src/main/res/drawable/ic_launcher_3_background.xml b/latinreader/src/main/res/drawable/ic_launcher_3_background.xml similarity index 100% rename from LatinReader/src/main/res/drawable/ic_launcher_3_background.xml rename to latinreader/src/main/res/drawable/ic_launcher_3_background.xml diff --git a/LatinReader/src/main/res/drawable/ic_launcher_foreground_background.xml b/latinreader/src/main/res/drawable/ic_launcher_foreground_background.xml similarity index 100% rename from LatinReader/src/main/res/drawable/ic_launcher_foreground_background.xml rename to latinreader/src/main/res/drawable/ic_launcher_foreground_background.xml diff --git a/LatinReader/src/main/res/drawable/work_ab_urbe_condita.webp b/latinreader/src/main/res/drawable/work_ab_urbe_condita.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_ab_urbe_condita.webp rename to latinreader/src/main/res/drawable/work_ab_urbe_condita.webp diff --git a/LatinReader/src/main/res/drawable/work_aeneid.jpg b/latinreader/src/main/res/drawable/work_aeneid.jpg similarity index 100% rename from LatinReader/src/main/res/drawable/work_aeneid.jpg rename to latinreader/src/main/res/drawable/work_aeneid.jpg diff --git a/LatinReader/src/main/res/drawable/work_apocolocyntosis.webp b/latinreader/src/main/res/drawable/work_apocolocyntosis.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_apocolocyntosis.webp rename to latinreader/src/main/res/drawable/work_apocolocyntosis.webp diff --git a/LatinReader/src/main/res/drawable/work_carmina.webp b/latinreader/src/main/res/drawable/work_carmina.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_carmina.webp rename to latinreader/src/main/res/drawable/work_carmina.webp diff --git a/LatinReader/src/main/res/drawable/work_de_bello_gallico.webp b/latinreader/src/main/res/drawable/work_de_bello_gallico.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_de_bello_gallico.webp rename to latinreader/src/main/res/drawable/work_de_bello_gallico.webp diff --git a/LatinReader/src/main/res/drawable/work_de_bellum_jugurthinum.webp b/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_de_bellum_jugurthinum.webp rename to latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp diff --git a/LatinReader/src/main/res/drawable/work_de_rerum_natura.webp b/latinreader/src/main/res/drawable/work_de_rerum_natura.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_de_rerum_natura.webp rename to latinreader/src/main/res/drawable/work_de_rerum_natura.webp diff --git a/LatinReader/src/main/res/drawable/work_metamorphoses.webp b/latinreader/src/main/res/drawable/work_metamorphoses.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_metamorphoses.webp rename to latinreader/src/main/res/drawable/work_metamorphoses.webp diff --git a/LatinReader/src/main/res/drawable/work_satyricon.webp b/latinreader/src/main/res/drawable/work_satyricon.webp similarity index 100% rename from LatinReader/src/main/res/drawable/work_satyricon.webp rename to latinreader/src/main/res/drawable/work_satyricon.webp diff --git a/LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml b/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml similarity index 100% rename from LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml rename to latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml diff --git a/LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml b/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml similarity index 100% rename from LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml rename to latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml diff --git a/LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml b/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml similarity index 100% rename from LatinReader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml rename to latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_foreground_round.xml diff --git a/LatinReader/src/main/res/mipmap-hdpi/ic_launcher.png b/latinreader/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from LatinReader/src/main/res/mipmap-hdpi/ic_launcher.png rename to latinreader/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3.webp b/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3.webp rename to latinreader/src/main/res/mipmap-hdpi/ic_launcher_3.webp diff --git a/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp b/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp rename to latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp b/latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp rename to latinreader/src/main/res/mipmap-hdpi/ic_launcher_3_round.webp diff --git a/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp b/latinreader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp rename to latinreader/src/main/res/mipmap-hdpi/ic_launcher_fore.webp diff --git a/LatinReader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp b/latinreader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp rename to latinreader/src/main/res/mipmap-hdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/src/main/res/mipmap-mdpi/ic_launcher.png b/latinreader/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from LatinReader/src/main/res/mipmap-mdpi/ic_launcher.png rename to latinreader/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3.webp b/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3.webp rename to latinreader/src/main/res/mipmap-mdpi/ic_launcher_3.webp diff --git a/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp b/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp rename to latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp b/latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp rename to latinreader/src/main/res/mipmap-mdpi/ic_launcher_3_round.webp diff --git a/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp b/latinreader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp rename to latinreader/src/main/res/mipmap-mdpi/ic_launcher_fore.webp diff --git a/LatinReader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp b/latinreader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp rename to latinreader/src/main/res/mipmap-mdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher.png b/latinreader/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from LatinReader/src/main/res/mipmap-xhdpi/ic_launcher.png rename to latinreader/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp b/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp rename to latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3.webp diff --git a/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp b/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp rename to latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp b/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp rename to latinreader/src/main/res/mipmap-xhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp b/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp rename to latinreader/src/main/res/mipmap-xhdpi/ic_launcher_fore.webp diff --git a/LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp b/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp rename to latinreader/src/main/res/mipmap-xhdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher.png b/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to latinreader/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp b/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp rename to latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3.webp diff --git a/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp b/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp rename to latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp b/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp rename to latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp b/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp rename to latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_fore.webp diff --git a/LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp b/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp rename to latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp b/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp rename to latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3.webp diff --git a/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp b/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp rename to latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.webp diff --git a/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp b/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp rename to latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.webp diff --git a/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp b/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp rename to latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_fore.webp diff --git a/LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp b/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp similarity index 100% rename from LatinReader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp rename to latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_round.webp diff --git a/LatinReader/src/main/res/raw/allenandgreenough.xml b/latinreader/src/main/res/raw/allenandgreenough.xml similarity index 100% rename from LatinReader/src/main/res/raw/allenandgreenough.xml rename to latinreader/src/main/res/raw/allenandgreenough.xml diff --git a/LatinReader/src/main/res/raw/caes_bg_eng.xml b/latinreader/src/main/res/raw/caes_bg_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/caes_bg_eng.xml rename to latinreader/src/main/res/raw/caes_bg_eng.xml diff --git a/LatinReader/src/main/res/raw/caes_bg_lat.xml b/latinreader/src/main/res/raw/caes_bg_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/caes_bg_lat.xml rename to latinreader/src/main/res/raw/caes_bg_lat.xml diff --git a/LatinReader/src/main/res/raw/dictionary_entries.xml b/latinreader/src/main/res/raw/dictionary_entries.xml similarity index 100% rename from LatinReader/src/main/res/raw/dictionary_entries.xml rename to latinreader/src/main/res/raw/dictionary_entries.xml diff --git a/LatinReader/src/main/res/raw/hor_carm_eng.xml b/latinreader/src/main/res/raw/hor_carm_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/hor_carm_eng.xml rename to latinreader/src/main/res/raw/hor_carm_eng.xml diff --git a/LatinReader/src/main/res/raw/hor_carm_lat.xml b/latinreader/src/main/res/raw/hor_carm_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/hor_carm_lat.xml rename to latinreader/src/main/res/raw/hor_carm_lat.xml diff --git a/LatinReader/src/main/res/raw/lewis.xml b/latinreader/src/main/res/raw/lewis.xml similarity index 100% rename from LatinReader/src/main/res/raw/lewis.xml rename to latinreader/src/main/res/raw/lewis.xml diff --git a/LatinReader/src/main/res/raw/livy_01_02_eng.xml b/latinreader/src/main/res/raw/livy_01_02_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/livy_01_02_eng.xml rename to latinreader/src/main/res/raw/livy_01_02_eng.xml diff --git a/LatinReader/src/main/res/raw/livy_01_02_lat.xml b/latinreader/src/main/res/raw/livy_01_02_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/livy_01_02_lat.xml rename to latinreader/src/main/res/raw/livy_01_02_lat.xml diff --git a/LatinReader/src/main/res/raw/lucretius_eng.xml b/latinreader/src/main/res/raw/lucretius_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/lucretius_eng.xml rename to latinreader/src/main/res/raw/lucretius_eng.xml diff --git a/LatinReader/src/main/res/raw/lucretius_lat.xml b/latinreader/src/main/res/raw/lucretius_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/lucretius_lat.xml rename to latinreader/src/main/res/raw/lucretius_lat.xml diff --git a/LatinReader/src/main/res/raw/ovid_met_eng.xml b/latinreader/src/main/res/raw/ovid_met_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/ovid_met_eng.xml rename to latinreader/src/main/res/raw/ovid_met_eng.xml diff --git a/LatinReader/src/main/res/raw/ovid_met_lat.xml b/latinreader/src/main/res/raw/ovid_met_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/ovid_met_lat.xml rename to latinreader/src/main/res/raw/ovid_met_lat.xml diff --git a/LatinReader/src/main/res/raw/petr_eng.xml b/latinreader/src/main/res/raw/petr_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/petr_eng.xml rename to latinreader/src/main/res/raw/petr_eng.xml diff --git a/LatinReader/src/main/res/raw/petr_lat.xml b/latinreader/src/main/res/raw/petr_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/petr_lat.xml rename to latinreader/src/main/res/raw/petr_lat.xml diff --git a/LatinReader/src/main/res/raw/sallust_jugur_eng.xml b/latinreader/src/main/res/raw/sallust_jugur_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/sallust_jugur_eng.xml rename to latinreader/src/main/res/raw/sallust_jugur_eng.xml diff --git a/LatinReader/src/main/res/raw/sallust_jugur_lat.xml b/latinreader/src/main/res/raw/sallust_jugur_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/sallust_jugur_lat.xml rename to latinreader/src/main/res/raw/sallust_jugur_lat.xml diff --git a/LatinReader/src/main/res/raw/sen_apoc_eng.xml b/latinreader/src/main/res/raw/sen_apoc_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/sen_apoc_eng.xml rename to latinreader/src/main/res/raw/sen_apoc_eng.xml diff --git a/LatinReader/src/main/res/raw/sen_apoc_lat.xml b/latinreader/src/main/res/raw/sen_apoc_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/sen_apoc_lat.xml rename to latinreader/src/main/res/raw/sen_apoc_lat.xml diff --git a/LatinReader/src/main/res/raw/verg_a_eng.xml b/latinreader/src/main/res/raw/verg_a_eng.xml similarity index 100% rename from LatinReader/src/main/res/raw/verg_a_eng.xml rename to latinreader/src/main/res/raw/verg_a_eng.xml diff --git a/LatinReader/src/main/res/raw/verg_a_lat.xml b/latinreader/src/main/res/raw/verg_a_lat.xml similarity index 100% rename from LatinReader/src/main/res/raw/verg_a_lat.xml rename to latinreader/src/main/res/raw/verg_a_lat.xml diff --git a/LatinReader/src/main/res/values/colors.xml b/latinreader/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/src/main/res/values/colors.xml rename to latinreader/src/main/res/values/colors.xml diff --git a/LatinReader/src/main/res/values/config.xml b/latinreader/src/main/res/values/config.xml similarity index 100% rename from LatinReader/src/main/res/values/config.xml rename to latinreader/src/main/res/values/config.xml diff --git a/LatinReader/src/main/res/values/font_certs.xml b/latinreader/src/main/res/values/font_certs.xml similarity index 100% rename from LatinReader/src/main/res/values/font_certs.xml rename to latinreader/src/main/res/values/font_certs.xml diff --git a/LatinReader/src/main/res/values/strings.xml b/latinreader/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/src/main/res/values/strings.xml rename to latinreader/src/main/res/values/strings.xml diff --git a/LatinReader/views/.gitignore b/latinreader/views/.gitignore similarity index 100% rename from LatinReader/views/.gitignore rename to latinreader/views/.gitignore diff --git a/LatinReader/views/build.gradle.kts b/latinreader/views/build.gradle.kts similarity index 100% rename from LatinReader/views/build.gradle.kts rename to latinreader/views/build.gradle.kts diff --git a/LatinReader/views/proguard-rules.pro b/latinreader/views/proguard-rules.pro similarity index 100% rename from LatinReader/views/proguard-rules.pro rename to latinreader/views/proguard-rules.pro diff --git a/LatinReader/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt b/latinreader/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt similarity index 100% rename from LatinReader/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt rename to latinreader/views/src/androidTest/java/com/ericmschmidt/classicsreader/latin/views/ExampleInstrumentedTest.kt diff --git a/LatinReader/views/src/main/AndroidManifest.xml b/latinreader/views/src/main/AndroidManifest.xml similarity index 100% rename from LatinReader/views/src/main/AndroidManifest.xml rename to latinreader/views/src/main/AndroidManifest.xml diff --git a/LatinReader/views/src/main/res/drawable/ic_launcher_background.xml b/latinreader/views/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from LatinReader/views/src/main/res/drawable/ic_launcher_background.xml rename to latinreader/views/src/main/res/drawable/ic_launcher_background.xml diff --git a/LatinReader/views/src/main/res/drawable/ic_launcher_foreground.xml b/latinreader/views/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from LatinReader/views/src/main/res/drawable/ic_launcher_foreground.xml rename to latinreader/views/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/latinreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to latinreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/latinreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from LatinReader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to latinreader/views/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher.webp b/latinreader/views/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher.webp rename to latinreader/views/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/latinreader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to latinreader/views/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher.webp b/latinreader/views/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher.webp rename to latinreader/views/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/latinreader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to latinreader/views/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp b/latinreader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to latinreader/views/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/latinreader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to latinreader/views/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/latinreader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to latinreader/views/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/latinreader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to latinreader/views/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/latinreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to latinreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/latinreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from LatinReader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to latinreader/views/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/LatinReader/views/src/main/res/values-night/themes.xml b/latinreader/views/src/main/res/values-night/themes.xml similarity index 100% rename from LatinReader/views/src/main/res/values-night/themes.xml rename to latinreader/views/src/main/res/values-night/themes.xml diff --git a/LatinReader/views/src/main/res/values/colors.xml b/latinreader/views/src/main/res/values/colors.xml similarity index 100% rename from LatinReader/views/src/main/res/values/colors.xml rename to latinreader/views/src/main/res/values/colors.xml diff --git a/LatinReader/views/src/main/res/values/strings.xml b/latinreader/views/src/main/res/values/strings.xml similarity index 100% rename from LatinReader/views/src/main/res/values/strings.xml rename to latinreader/views/src/main/res/values/strings.xml diff --git a/LatinReader/views/src/main/res/values/themes.xml b/latinreader/views/src/main/res/values/themes.xml similarity index 100% rename from LatinReader/views/src/main/res/values/themes.xml rename to latinreader/views/src/main/res/values/themes.xml diff --git a/LatinReader/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt b/latinreader/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt similarity index 100% rename from LatinReader/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt rename to latinreader/views/src/test/java/com/ericmschmidt/classicsreader/latin/views/ExampleUnitTest.kt diff --git a/settings.gradle b/settings.gradle index cbd9fcb..e3ec925 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,4 +17,4 @@ include ':greekreader' include ':latinreader:views' include ':latinreader:compose' include ':greekreader:views' -include 'greekreader:compose' +include ':greekreader:compose' From 8809014bba8c5950e5da514dbc216d5184f5ffe6 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 29 May 2026 11:52:40 -0700 Subject: [PATCH 9/9] Updates README badges --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 99d2b9c..c1c0912 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # Classics Reader for Android app [![Android build](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android.yml/badge.svg)](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android.yml) +[![Unit tests](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android-tests.yml/badge.svg)](https://github.com/telpirion/ClassicsReaderAndroid/actions/workflows/android-tests.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -This open source code for two Android apps is available for anyone to clone, rebuild, copy, or alter for educational purposes. These apps allow users to read Ancient Greek and Latin texts, to read English translations of Ancient Greek and Latin texts, and lookup Ancient Greek and Latin words in an integrated dictionary. +This open source code for two Android apps is available for anyone to clone, rebuild, copy, or alter for educational purposes. These apps allow users to read text in Ancient Greek and Latin, to read English translations of Ancient Greek and Latin texts, and lookup Ancient Greek and Latin words in an integrated dictionary. The Latin Reader app can be downloaded from the [Google Play Store](https://play.google.com/store/apps/details?id=com.ericmschmidt.latinreader). @@ -12,7 +13,7 @@ You can see a complete list of the releases for this app ## Report bugs! -The Ancient Greek and Latin Reader apps are for Classicists by a Classicist. I not only build the app, but I use it myself to keep my Latin and Greek reading skills up to par. If you encounter a problem in the app, please file an issue here on the GitHub project home page. +The Ancient Greek Reader and Latin Reader apps are for Classicists by a Classicist. I not only build the app, but I use it myself to keep my Latin and Greek reading skills up to par. If you encounter a problem in the app, please file an issue here on the GitHub project home page. To log an issue, do the following: @@ -24,7 +25,7 @@ To log an issue, do the following: ## Use of licensed material -Texts in these apps are available under the the Creative Commons ShareAlike 3.0 license. +Texts in these apps are available under the Creative Commons ShareAlike 3.0 license. + http://www.perseus.tufts.edu/hopper/opensource/download + http://creativecommons.org/licenses/by-sa/3.0/us/