From d8a40fe21953f0821a76339d7854da0918d8a2cb Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sat, 21 Nov 2020 16:43:32 -0700 Subject: [PATCH] Cleanup code Cleanup a bunch of redundant, unused, and bad code. --- app/src/main/AndroidManifest.xml | 5 ++- app/src/main/ic_launcher-playstore.png | Bin 9909 -> 0 bytes .../java/org/oxycblt/auxio/MainFragment.kt | 6 ++-- .../auxio/detail/AlbumDetailFragment.kt | 2 +- .../auxio/detail/ArtistDetailFragment.kt | 2 +- .../auxio/detail/GenreDetailFragment.kt | 2 +- .../oxycblt/auxio/library/LibraryViewModel.kt | 2 +- .../java/org/oxycblt/auxio/music/Models.kt | 30 ++++-------------- .../org/oxycblt/auxio/music/MusicUtils.kt | 12 +++---- .../org/oxycblt/auxio/music/coil/CoilUtils.kt | 9 ++---- .../auxio/music/processing/MusicLoader.kt | 4 +-- .../auxio/playback/NotificationUtils.kt | 4 +-- .../auxio/playback/PlaybackFragment.kt | 2 +- .../auxio/playback/queue/QueueAdapter.kt | 11 ++++--- .../auxio/playback/queue/QueueFragment.kt | 2 +- .../playback/state/PlaybackStateManager.kt | 12 +++---- .../oxycblt/auxio/recycler/DiffCallback.kt | 2 +- .../org/oxycblt/auxio/ui/InterfaceUtils.kt | 2 +- app/src/main/res/drawable/ui_indicator.xml | 14 -------- app/src/main/res/layout/activity_main.xml | 3 +- .../main/res/layout/fragment_album_detail.xml | 2 +- .../res/layout/fragment_artist_detail.xml | 2 +- .../main/res/layout/fragment_genre_detail.xml | 4 +-- app/src/main/res/layout/fragment_library.xml | 2 +- app/src/main/res/layout/fragment_playback.xml | 2 +- app/src/main/res/layout/fragment_songs.xml | 2 +- app/src/main/res/menu/menu_nav.xml | 2 +- app/src/main/res/navigation/nav_explore.xml | 1 - app/src/main/res/navigation/nav_main.xml | 1 - app/src/main/res/values/dimens.xml | 7 ---- app/src/main/res/values/strings.xml | 19 +++++------ app/src/main/res/values/styles.xml | 5 +-- 32 files changed, 66 insertions(+), 109 deletions(-) delete mode 100644 app/src/main/ic_launcher-playstore.png delete mode 100644 app/src/main/res/drawable/ui_indicator.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 464f5dfbc..555b5640f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,17 +1,20 @@ + + android:theme="@style/Theme.Base" + tools:ignore="AllowBackup"> -4vEno(pA64VfZqj_4vuw*LXUcE2$3ces-1it-Y`F3$B*bWoq}2nVB6@b7@jr zG}Bt#81!@4BBlzA4lZVFR%V7!F1^3@4+<)|Q?(F{IKu`(MBoc81c`wkC(l@A?Ema1I3)&c>HW75vy%K)mg*0u_FHpG*>!PCXhb^f z)ATg@f*Y{P45Nig%6dlly{SwDk=K~01yW0pLZo@^y5mLGmvQzP!7?}0sHb2t1|q-r zS*5x+WSz+1YY{j$fL#_ErNH4W2C%Ef{X-0?qK*mAbk9V-eC{XIVT%apqpUuK$)K~3 z58;zxq|Mo(PRDll)h-ZU_Ww4XsGg)UmWw#<>Sx>s^ zMf-r|-Z$mSkA2=}dB|eq*f3MtskGHWuwQ6=9whyEaA=@eMJ*+;8K;&a4WoSndaK1h zT`QxCopF72n`9e9N}~lN<}-(E_F*#$orG-g%VNicLJPfzbO9%b!l{LV2_N#4nvm@MQvFfyb*s&b27+rZGR}kAL>JvMb2; z$D~!U9&WGPBQM0$pokFE$4H#L9QL_b;`u2dP5TC1V1f5g)_r@X*|n+NP@g0)A_m=p zPGmAudV7^p_BPby%W+@=S|?O_N-@>!uxe&rXgQYHZK!)(0-x|VaV)%;=7h}J=$|`Q z{AsJdHqQ0+ZgAD z_C4{m(_Q!&m(4D=$(Q-xV!f@HiN3H6+G;ig zy)OnaISIt$0BaZqkc=1RQ5*iMxi%hRHoLKv4r91Ai{Z+bun)S8kn|ouzE&KzErz6p z)`Qvdux~fyu{PS~Zp@FqjlFg!k>uhQFoXZ~1m;+W7G!!6#C2F`8W9#o&D}U(?HOR8 zR;Opsf9tKU*lC0TR-p1({1~oX&CDEA=N-Q8(4h}bRwB~LM11j=*^8$(f0ku zV9(U9jj&<`TKmv8sB%&01vkdvlsN4C3iMW+f2ln+7V@@gkGr`yXa=EQIvW3(t#sy` zxiDH!$VMA`M+#Mhyr_ZR?&n`?XW>WLKjXyozi<*N>3B!#W!=LFig3;r3Jv>QQ2FwS z&+x#8WE|-=XfXxsJ2n2I4}>P8!MwL9c<$>)hQM$Ug`;F)D5SM&o3a020>8Xxr7MjUI~E{<(0 zu@Yhc-Y7hS_?n&par?P`8#UaF$r9l30BcF6mPiLIJ8Kp zxu0^L>s{kNC9nnDn5RR3q`l0Q)}mj9N-xKfTm+P{lYVnWJ(;eR)5AImB$$)Z+>pdm z6QLKbb+>`Q)a`ofojM2HSLg3DcqbVdby6+QN9e`nSGczbKa$Y+-9uT5&B7^+SC8o2 zp{?%R>4ZZ|ZzpB#SG<<}%{efir?@a*{iPB2Zvm?Pl%dfRYMr$j+5=d>8%`4*I(?6M zq1WNIzSdBd2%y-(Ne9dxG(uW%!c=Q$;69If%G+155r2zu=(GKbLYs7+q1biOWJ688 zC^tw*mLZh#-OSsn&^_`Oi@@KUd``};ES9zAz$64odxt<@G(sYqwb9Tiht=v5Ep%4O zg*Z}F=c%<*PC}-qS6T?LB78SvwKIY2oF?z-8+6Y)Qje)#PsCIACuZHgDv2~kl!AH^E1Sw>v-z)ede`vhl935S%dQWrz#~Nippq)Gd%umAxVpV z3CQ%_3v7f{qB4d%hE#aqjL^RAkCsja$lz0e_8*Q~@=whb!wL}G94DfaA>3ykke$mY zX0x~>l_k!BAhajFR5PL1lP_^w_swh7A7XF3NcrXD+bS)0qD(vYi^F(vB1F8yN{sn2 zJaqn>XF%hLRz)nfY;JTsT}eYdcvH~AWzW)a6BEn*U0oVsJL9??Os@wDhXfgF>8c}+ z6dZ|iuhB68UFRLDXdi!9x5Me&Bi6L~YK~%XOT9=l5NGed{5ad;bet}qGpG?D`AHe# z4V(Y^&^e^zdl8@xkmF_~T7OC)#XaW&*`S4PDnWN7X~HI?cV&I|zA4Fug)5Gjf|`p| z4KS?sdM1Ezej&1>3knS3fJk?+PfWdUURZ|lhW2uS-Qm<9ThLoCE|kKk0^sAcJZx%$ zCMzYluI4*C4c>3Q%Yn+Q2SLXfiN^5&b~JQ|AL7+aXI>vX;JTxL4p5hc8xynL%me#i zgYu$CqqCBR27beiTHOQnP6vSA{0E5)T1!*yUs&p}Ie@KH2>ugF(-C^Amw*ZuEL>1l zEK1>)4~@9{U-ts-mCB=kfHQe@1vSC6pWsu~u60Mt_8HgbXi=@GO zD?JMEzrgr9cE?9fh~_X9y7Dy}=#TxNx91JdC?Z(~;UxH1H0(76xNneN7VLx{39{!i zjQ5TlMpA7}Up>+It*?{c`PAv!pF8>lA;R`(fwo4uam>yGe(1>_0|NPniFG7S+QrSW z6p3&@m<+1erab+>nK+TcJp0>1_E^3hk|{BFD0DR8{2J@8uU&O|{LlXq)508$CmR`D ztj2X5f!X#<2x8$wg~%cFh^4DObV(RfOLrBv@rapt?3Q@=C%#=->_dpZfSM9dUHKk? zO#~(zClop1z3`-8THQGyGbqRLPf+6>U^P?QV*${V=&N65hB{eVdib7Z{25Q;KMb9xgUSCMG-;Y0*8nz7x3aZU zoIcN=-_YeVXE5W102?Q1b!8fInXi@n^#?yF)z>kaOjge|dwm^2EzbrpE*po-)$eBf z1I`T#`YkJ-8@9qj_>GCf&=SI*dW0%j*7i()rA+CUXKq+HI?PtlBp?e;*u__`rBGgmN+kgS=kI}@^^*R* z4U$ZLNHoOBPEU7QUD8*Ya3{NEPAl@6>XoUpT??S+mn4?d13U2>O0(#Y7k z8ydaCNMs)x$WpJbsXK;<0p2PVT0|hj<2W;s#)JWM@SUO(ghWHbEJcGq_ng8YWoV-V zVfps{+wmA_tG%#h?3kZDr}&T-I7z2#G(14M9k-)^AKD}gEW2yJeR99PhR+V%VzbPV zxxxnaJq0W_PgjTw;fez^oyxp6c;M213P8ZyDkh)q4;?loNx{;akBbPm?f&wuoVuJH zHn1F(@E=RNYr~~C@4)nM7enIRY4Cp&Rgs*nl@j*J#zQE658DPDdS0qosYKU?q|s&x zO^$EX@WYUrcP-?(@8cSj$#D%wqY;ZU!tai?8_txxPSP13{g@f#HqzY1_HLwb)8d_W zaAK8YaAM`|V628t*;ppO1Lgr&`lgVua50bJX6ttHpr)K;iSu(I=tmR_G1#y=k7gj{ zILyUXd`G}oa`pq}jcv>Lnc5~<>}(JJR1Wp3x#Ik%#JZ8GDz0OmA>z6H+wzLr6hb0D zD@F5y=2E}nV$#|AFJGyG#eK`s9aCC_*out6{IzyvQOfZzZ>c)xHXL+fE(%ij=N1qS z=Jw3}yj#BEdG7myWqqBjHW$qiQJE-%S;bV7)ta~*rK1>4smL-mYv9 zSf;c*9b?p^oQFZ*EBAxP{hdsU_TtTP_3@?g!}MM=FA@~JIx$Y)H7Yrdc@h+JJvR#P zuFs@8wS}A&eO>WsKEp0HTfuMJSMg%K%fq6jmXGP-$Cmb&U$*D^qPFW5=a^ycbNTiD zbQuXKxBkKT@mY^q>q%~m2Aw{I%N`Iqi=&JDFl?h|+%)P^^FN;@0%m#@y_TiUEyy)D zl$cY6mHW0$znE24%uXx|UvOXTdnstowIy@m@`jNa`S+&c#b0CR@DrmSrH+2{U8Af2 zO)^^@#|#hfR9k^P0jw!a5qLU)eoEDg{1(avPWF+MXN z;bPdJ&6KnG(K)GVF6nLwg{=77LB3(hF^b}^|-}!fU*Cl@Rp#Dw?3x(1~9+a4mRuEBHyKC zv>T7bv|H2ZR}A4tNBcjd`1QwbsRbCdZz<=5c^wz)et869=4LMrXd`;>ge$To+}k+N zuT#eJfOGvwKkqS-wIH)2^cz;WPmV_8_>PHb&R;Sk4Cv%|HFDP5VT+STx$F$+`_X(; zHFcff!zpX;n;JpRC4Nj`D=UgKJFgxR*S|*QDVN(Q+zK@7ThdYVyIZ3p@Rc2tb3%*n zbYsU-obmgRfern*hnR)=W1@H z-QAdJHw|fadpd+al|FJl8%CR$e|IEM?pf@x*xM z6>I%Sbhz-bTZ5J4r%pe?MSt`j>Evxj($Tt_0lBy)&}XWB2__3a%FiP zq)rP)Cg^l2u9@V>3=L>4YXyAUXU`NSmG8p<+IGJ3R`)}9eBpS-c&}p7gq@-ye;YZ? zM$-G+X<3XdAi_8OS0SRD?^K%W>Ke|(#LNb}2PRh8X5#YjVvp2r;$G7st5DV+?53aL zn2cKvwJG(S82?=DJ)A&3AI2}-N!(nFnHL>4gMv`iYi+i7xhw2K_c5|k)cF?*?=Ta= z0u%UaIO~i(Q$8D}0=B4dBX!GVzx4ifUXk@Go7%HNt*Y2(FJFHP8T$0`%9xgv7{nJ) zOUQKE6);@fI7c=3Nl$n^j6WAwS5u;1r#E{zoCU-+Y|&7zyz31Gb2M-%(NCE2ba=qQ z?~I!3O@o-9*GYZJm%*hOAId_N*dMzUMTn31DzCaUS2#LZ^9WoyPk8Vx?MB^X2PpE1 zmRXc(Z+KG2&aYK{U#hKQAI59$%(D2j!Kw@0ZsCdB7kgL<-Z!)%}D!viVav!OpP6 zxSq0E{=R$>Ok$!ILXZ1CYi~^aSJ;#6H{JVzE-PE1E8XC}t;-p{m>F)hl)rJcMi%=C zxgiiGyB9^vyQ^kn6JOUo4zsKL34||*b>zGxP{Q%%q#~F)>ETl)J_wlnT!Hf*<&u*_^^H zUHz!B2L8i<(q#(Ul>ZW&u_&VS04@^O$H`Pu;r1`jkQOiGyt4&m)%?bc@678}_->^u zJ8`#a_kt>+AHVaua$AbZF>}Tz(UXdJ(E5f-YF_Hofn(42pSNruVu2YKg)I7Vin$Nalj)Ja^B*mKjFYGu6lK|s0An1oT53n#M@3Lje-$Du5+<9W1U`fYjy?TFbt=3O zzDhw}>Z|*<_|`}$;@3qHEbJ*~*Gu%S!5$uwql&)VxA2BivGcd=g!bZ!wC3Cq61-y) zZIdP@68nzyiPEHO_yM_%LbZPq`3UZN7_qsFUdd863i zsN{;N{hhoOsi9)@2dgeKh{GA%+m$;#yG=k&n{QI2jAx=e`E?OMdQjE&;jR!OW?BXc zVmn|f4z=TH1U_~;xxnC$?q-JDuSL=)fFR;dyZxA=v7VW<@6I-b+-SYBkrQ@@Op z+hmD|YFo%GUGUvh<+(M4yr!>;u?ao*U6@4?KPEY{DtOCik)YeibaRhB_OHDdBq0#d zRfA?wH4_rWibUkcGABNUM7(o!FNCd2s1uXS5KGSRM`y+Cif-@> z@+%frLtMlIN8&%-J9ts$_Mt1Yy`Wiq+2!aHmB(AZd() z7J7Yi*&aGz3SHhXFA?>61wT^xhj=pD$m44}i`ZlVwJ+0TGh8ZgzaC`81WMCrrmT=p zw^aw4*}7OV>-*x*f%h-Q?bl0ChP}T$*B#Hhh)%qt1@2$DVlsQ&@ z#{M5_G7hsrt;UkUeUt)e%`FXs>t&NCS1Mi8N)laQf4)})8Z7m1D#OpUr_z%eEf>u| zud}5muu0EiBJx&eA)z;#O1(kNyBVNM{`}v>#|$Z>vx54q%}#~Jn>8-=*DjM`O)6w2 zd{ax3{bIbh;r1C+=s;@HGNTwcv%Pl!mxgb|7&|y{`*(cC8y%5I z6H2qfL+wK7%)Fu}oEwociweb!*$vg&>l@{$B3Fm=8=hESBdaz*$!mF`gWpl@vL zXjaPpkio%zL2H}i&3iOdWx6J>w|EOO<_czU@a&8t*iZDO*- zn^CtYZf-!&Ums^G6eLSthqQq{;Hs2f(NYoU#C5Rhoa@nfGF7>EJ42ZbIxxMry2mJq zJZK-q!+ks5x5SeQTH5$=V#fPYJG7`T-%ZA_&9mEY_ES(O-QmxM4SJw0&XA*cxm&bX zuk=$ua9q!!u;iT0Y4Qv7%~Kw~17cl{XxafKx9rf}tlAoIwO&s$1)YmW$1+0}nEbp~ zH@vH~80url`eIM@QPm#n1{u6>VSlh|RimZ?N?Glr8dN2&gjvoBML=0HcBnF+mY|*m zY0WiRgM^k4PkY6S!_3#Bv5Po<*TB-C)F4TlijIOokvE z6rV~H(Rni3xIea8(1)44)KA#dF#-KE=nPnU3T#p8Avwc0eGw)Ihrlhk#cya5w2h^5 zB82ZT(w(gv*9=N{gYIzer?$5gPgf*Oq>ZSdfYoww1x|NP7nA15G^c7hJ+9Sls=QA- zLGG0@Z=g1;+__tV-0qlUzwKPxTuB)5+>9Q_Eo}|S=47w}zgF{!H!{ZW5-dhMsWIXm zpEfB0)Q~H3r+7Kl%d~g_?DrVPXA%pJwHXg)_X|Yjzn!HH6h0gqS~an!GB?wJA^%&m zdVrOFd0)uc`AIv2myuD_+N!w9+h?y&_c3W16*mAEDSnGHmHG-oiW%iVf3C20X~SKABHs@O(M^qH1H|! z+A1>bkbPJRPtQdgV&_I@7FPEKkRl+-=(lwodN1N)-dRq zxFxJ3gJr4p)numH?(*DY1^4UKbN_V^#v>gIHLqt&5= zq(<}QPI?psKBOL6R6AV+XrXvV4Ln6HiM$>u{Z=Zg zF^c-Rdu7Y=v_tt^qYFQH-8nE@JJzNx2-+9E=wSWx@W#2S-}U3C1B1-Q$LINhfnT3z z`~pYXG&v)q37*vl*Fq@kX;q@a(P!8=U!`l4#UQbY8bO*(TkVS9Z)nOTJ8r6O{b~=_ z=o(8Oyd}y8S)IJsQ!?(b(kI=sdiD(GWxhfly9>ec)D!1jgimcHU^0&bnRSMb{)X-U zJl{pwOf=G!C?6(J2_|Dt-I8%>LyKTcUGmzG?;i%0K2_iTm3eq$ynimSC4BB4JjURz z-Rh;1MKE4Ey>^02WbJXpX(zDAYj))d;Tu73X*I}Qd)7JdHG(voF8DDS;rKVma@m8h8pO&y zi~o3KWvva&cY)Kn`GJ@)Fc}SJ>u2NMlS=76Y{-U(wTJC_)tGrU*VB5w`NtR|Ep*^# zC$aSXm+`w*j{=XH4@OWGdraPbQVr-$g@<>`L2rwNvGze_S~PTj)jVRTw7PnF{BA(- z(wQYgcna2rk3FVD6L`ZuQ`Oa3$qHa4;=R|Toe9dE!p3LPr4c9oEqvhNxHdKWWB>Y( zHjypXEu~=jZLcdrJ|6Quh93%7QE1|Pg~~T}_sEJ^9hIJ-N%NL~-#_GhEwYLx-hl3z z))Kao-s1i3UdzFts@?Hrp^{+ph!f_SPUq^p7j4+ERUBuaxO$_|WUxgizW8%UIPbf( zv)94)8`A{tHPh1)5aCE6tDh{5J$hG5w`X)|D2$Gd zKRkC4rut3#7n+TlgVG*OUAx_)Jsa?Dq*+T&J+b_4V53#D zk)7JxKDeSO0fJo{)&7bUpiBv^vs0Is`{=j`W2rn z(4nj@-kS+6G4IpqT2(6z^v_z%JCZXs5@5J`iyX(xy6muNGvXPnz3_&L+n5cN*_fp? zBkhw~Egu&>$C$XK4VKrf)FT0BeHAPr_NqK%^^^c z8ZKSdT%l8D;Xrop5cTo!KB=SO?r}btQ88O?Dw9PF%36`7BUKqGyj)Xv*c?#1I?^53 zFnA=+TLD+3kyxRwo_LnsL8`#?+~CHL*zB2-{a~uvZ246baN3!)&$oMQZr*tJYAtgL zH}r65kMVE7|IV7nTRmJP5jF@cH2?jpPef=A1NL|bT%7*L_y5Z)aP get() = mShowMode private val mSortMode = MutableLiveData(SortMode.ALPHA_DOWN) diff --git a/app/src/main/java/org/oxycblt/auxio/music/Models.kt b/app/src/main/java/org/oxycblt/auxio/music/Models.kt index d0f63c3a3..c3292bf6c 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Models.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Models.kt @@ -45,7 +45,6 @@ data class Song( * @property year The year this album was released. 0 if there is none in the metadata. * @property artist The Album's parent [Artist]. use this instead of [artistId] * @property songs The Album's child [Song]s. - * @property numSongs The amount of songs in an Album. * @property totalDuration The combined duration of all of the album's child songs, formatted. * @author OxygenCobalt */ @@ -59,7 +58,6 @@ data class Album( lateinit var artist: Artist val songs = mutableListOf() - val numSongs: Int get() = songs.size val totalDuration: String by lazy { var seconds: Long = 0 songs.forEach { @@ -80,15 +78,7 @@ data class Artist( val albums = mutableListOf() val genres = mutableListOf() - val numAlbums: Int get() = albums.size - val numSongs: Int by lazy { - var num = 0 - albums.forEach { - num += it.numSongs - } - num - } - val songs: MutableList by lazy { + val songs: List by lazy { val songs = mutableListOf() albums.forEach { songs.addAll(it.songs) @@ -109,22 +99,14 @@ data class Genre( ) : BaseModel() { val artists = mutableListOf() - val numArtists: Int get() = artists.size - val numAlbums: Int by lazy { - var num = 0 + val albums: List by lazy { + val albums = mutableListOf() artists.forEach { - num += it.numAlbums + albums.addAll(it.albums) } - num + albums } - val numSongs: Int by lazy { - var num = 0 - artists.forEach { - num += it.numSongs - } - num - } - val songs: MutableList by lazy { + val songs: List by lazy { val songs = mutableListOf() artists.forEach { songs.addAll(it.songs) diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt index 0a3fcde34..cf79eaeab 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt @@ -92,10 +92,10 @@ fun Int.toYear(context: Context): String { @BindingAdapter("genreCounts") fun TextView.bindGenreCounts(genre: Genre) { val artists = context.resources.getQuantityString( - R.plurals.format_artist_count, genre.numArtists, genre.numArtists + R.plurals.format_artist_count, genre.artists.size, genre.artists.size ) val albums = context.resources.getQuantityString( - R.plurals.format_album_count, genre.numAlbums, genre.numAlbums + R.plurals.format_album_count, genre.albums.size, genre.albums.size ) text = context.getString(R.string.format_double_counts, artists, albums) @@ -116,10 +116,10 @@ fun TextView.bindArtistGenre(artist: Artist) { @BindingAdapter("artistCounts") fun TextView.bindArtistCounts(artist: Artist) { val albums = context.resources.getQuantityString( - R.plurals.format_album_count, artist.numAlbums, artist.numAlbums + R.plurals.format_album_count, artist.albums.size, artist.albums.size ) val songs = context.resources.getQuantityString( - R.plurals.format_song_count, artist.numSongs, artist.numSongs + R.plurals.format_song_count, artist.songs.size, artist.songs.size ) text = context.getString(R.string.format_double_counts, albums, songs) @@ -133,7 +133,7 @@ fun TextView.bindAllAlbumDetails(album: Album) { album.year.toYear(context), context.resources.getQuantityString( R.plurals.format_song_count, - album.numSongs, album.numSongs + album.songs.size, album.songs.size ), album.totalDuration ) @@ -147,7 +147,7 @@ fun TextView.bindAlbumInfo(album: Album) { album.artist.name, context.resources.getQuantityString( R.plurals.format_song_count, - album.numSongs, album.numSongs + album.songs.size, album.songs.size ) ) } diff --git a/app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt b/app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt index dcf31470b..2e5f847c3 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt @@ -3,7 +3,6 @@ package org.oxycblt.auxio.music.coil import android.content.Context import android.graphics.Bitmap import android.net.Uri -import android.util.Log import android.widget.ImageView import androidx.core.graphics.drawable.toBitmap import androidx.databinding.BindingAdapter @@ -16,7 +15,7 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Song // Get a bitmap for a song, onDone will be called when the bitmap is loaded. -// Don't use this on UI elements, thats what the BindingAdapters are for. +// Don't use this on UI elements, that's what the BindingAdapters are for. fun getBitmap(song: Song, context: Context, onDone: (Bitmap) -> Unit) { Coil.enqueue( ImageRequest.Builder(context) @@ -57,7 +56,7 @@ fun ImageView.bindArtistImage(artist: Artist) { val request: ImageRequest // If there is more than one album, then create a mosaic of them. - if (artist.numAlbums >= 4) { + if (artist.albums.size >= 4) { val uris = mutableListOf() for (i in 0..3) { @@ -93,11 +92,9 @@ fun ImageView.bindArtistImage(artist: Artist) { fun ImageView.bindGenreImage(genre: Genre) { val request: ImageRequest - if (genre.numArtists >= 4) { + if (genre.artists.size >= 4) { val uris = mutableListOf() - Log.d(this::class.simpleName, genre.numAlbums.toString()) - // Get the Nth cover from each artist, if possible. for (i in 0..3) { val artist = genre.artists[i] diff --git a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt index d8b28f001..f5c59d255 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt @@ -21,7 +21,7 @@ enum class MusicLoaderResponse { // Class that loads music from the FileSystem. // TODO: Add custom artist images from the filesystem -// TODO: Move genre loading of songs [Loads would take longer though] +// TODO: Move genre loading to songs [Loads would take longer though] class MusicLoader( private val resolver: ContentResolver, @@ -219,7 +219,7 @@ class MusicLoader( } albums = albums.distinctBy { - it.name to it.artistId to it.year to it.numSongs + it.name to it.artistId to it.year }.toMutableList() Log.d( diff --git a/app/src/main/java/org/oxycblt/auxio/playback/NotificationUtils.kt b/app/src/main/java/org/oxycblt/auxio/playback/NotificationUtils.kt index 925b65b80..499ec4461 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/NotificationUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/NotificationUtils.kt @@ -57,8 +57,6 @@ fun NotificationManager.createMediaNotification( PendingIntent.FLAG_UPDATE_CURRENT ) - // TODO: Things that probably aren't possible but would be nice - // - Playing intent takes you to PlaybackFragment instead of MainFragment return NotificationCompat.Builder(context, NotificationUtils.CHANNEL_ID) .setSmallIcon(R.drawable.ic_song) .setStyle( @@ -124,7 +122,7 @@ fun NotificationCompat.Builder.updateMode(context: Context) { // If playing from all songs, set the subtext as that, otherwise the currently played parent. if (playbackManager.mode == PlaybackMode.ALL_SONGS) { - setSubText(context.getString(R.string.title_all_songs)) + setSubText(context.getString(R.string.label_all_songs)) } else { setSubText(playbackManager.parent!!.name) } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt index f58b04155..fb0237fcf 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt @@ -158,7 +158,7 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener { } } - // Updates for the current duration TextView/Seekbar + // Updates for the current duration TextView/SeekBar playbackModel.formattedPosition.observe(viewLifecycleOwner) { binding.playbackDurationCurrent.text = it } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt index b2f921636..707ffca6f 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt @@ -80,20 +80,21 @@ class QueueAdapter( fun removeItem(adapterIndex: Int) { data.removeAt(adapterIndex) - notifyItemRemoved(adapterIndex) - // Check for two things: // If the data from the next queue is now entirely empty [Signified by a header at the end] // Or if the data from the last queue is now entirely empty [Signified by there being 2 headers with no items in between] if (data[data.lastIndex] is Header) { val lastIndex = data.lastIndex - // TODO: Do notifyItemRangeRemoved instead of notifyItemRemoved data.removeAt(lastIndex) - notifyItemRemoved(lastIndex) + + notifyItemRangeRemoved(lastIndex, 2) } else if (data.lastIndex >= 1 && data[0] is Header && data[1] is Header) { data.removeAt(0) - notifyItemRemoved(0) + + notifyItemRangeRemoved(0, 2) + } else { + notifyItemRemoved(adapterIndex) } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt index 6f902641d..631d805ad 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt @@ -85,7 +85,7 @@ class QueueFragment : Fragment() { name = getString( R.string.format_next_from, if (playbackModel.mode.value == PlaybackMode.ALL_SONGS) - getString(R.string.title_all_songs) + getString(R.string.label_all_songs) else playbackModel.parent.value!!.name ) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 2dbc18f41..0f9d33e14 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -133,7 +133,7 @@ class PlaybackStateManager private constructor() { PlaybackMode.IN_ARTIST -> { mParent = song.album.artist - mQueue = song.album.artist.songs + mQueue = song.album.artist.songs.toMutableList() } PlaybackMode.IN_ALBUM -> { @@ -425,7 +425,7 @@ class PlaybackStateManager private constructor() { } // --- PERSISTENCE FUNCTIONS --- - // TODO: Implement a fast queue save function that can be enabled in settings + // TODO: Implement a fast queue save function suspend fun saveStateToDatabase(context: Context) { Log.d(this::class.simpleName, "Saving state to DB.") @@ -557,15 +557,15 @@ class PlaybackStateManager private constructor() { // Traverse albums and then album songs instead of just the songs, as its faster. musicStore.albums.find { it.id == item.albumId } ?.songs?.find { it.id == item.songId }?.let { - mQueue.add(it) - } + mQueue.add(it) + } } userQueueItems.forEach { item -> musicStore.albums.find { it.id == item.albumId } ?.songs?.find { it.id == item.songId }?.let { - mUserQueue.add(it) - } + mUserQueue.add(it) + } } forceQueueUpdate() diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/DiffCallback.kt b/app/src/main/java/org/oxycblt/auxio/recycler/DiffCallback.kt index f04767d61..fc321b0b0 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/DiffCallback.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/DiffCallback.kt @@ -6,7 +6,7 @@ import org.oxycblt.auxio.music.BaseModel // Base Diff callback class DiffCallback : DiffUtil.ItemCallback() { override fun areContentsTheSame(oldItem: T, newItem: T): Boolean { - return oldItem == newItem + return oldItem.hashCode() == newItem.hashCode() } override fun areItemsTheSame(oldItem: T, newItem: T): Boolean { diff --git a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt index 4b069676b..1dff0c81b 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt @@ -43,7 +43,7 @@ fun ImageButton.disable(context: Context) { } fun String.createToast(context: Context) { - Toast.makeText(context, this, Toast.LENGTH_SHORT).show() + Toast.makeText(context.applicationContext, this, Toast.LENGTH_SHORT).show() } // Apply a custom vertical divider diff --git a/app/src/main/res/drawable/ui_indicator.xml b/app/src/main/res/drawable/ui_indicator.xml deleted file mode 100644 index 3bc8a98d0..000000000 --- a/app/src/main/res/drawable/ui_indicator.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c02052b06..804ab6710 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,6 @@ - + app:title="@string/label_library" /> + app:title="@string/label_library" /> + app:title="@string/label_library" /> diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index cf12da316..7f6fb174b 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -20,7 +20,7 @@ app:popupTheme="@style/AppThemeOverlay.Popup" app:menu="@menu/menu_library" app:titleTextAppearance="@style/TextAppearance.Toolbar.Header" - app:title="@string/title_library_fragment" /> + app:title="@string/label_library" /> diff --git a/app/src/main/res/layout/fragment_songs.xml b/app/src/main/res/layout/fragment_songs.xml index c50fb623d..4d42dedca 100644 --- a/app/src/main/res/layout/fragment_songs.xml +++ b/app/src/main/res/layout/fragment_songs.xml @@ -18,7 +18,7 @@ android:elevation="@dimen/elevation_normal" app:menu="@menu/menu_songs" app:titleTextAppearance="@style/TextAppearance.Toolbar.Header" - app:title="@string/title_all_songs" /> + app:title="@string/label_all_songs" /> 4dp 8dp 16dp - 24dp - 32dp - 64dp - 4dp 8dp 10dp 16dp 24dp - 32dp - 64dp - 40dp 2dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9b09a1edc..9dcc6550c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,18 +2,11 @@ Auxio - - Library - All Songs - Now Playing - - - No music found. - Music loading failed. - Permissions to read storage are needed. - Retry + Library + All Songs + Now Playing Grant Genres Artists @@ -28,7 +21,6 @@ Play from artist Play from album Go to artist - Go to album Queue Add to queue Added to queue @@ -36,6 +28,11 @@ Music Playback The music playback service for Auxio. + + No music found. + Music loading failed. + Permissions to read storage are needed. + Search Library… diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 73600e581..c80002eae 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -48,12 +48,13 @@ + + --> \ No newline at end of file