From 666e1e3e699a1c16080e23b9cbfd252b63e61ac4 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Tue, 29 Jun 2021 12:04:32 +0900 Subject: [PATCH] song list for album view adjusted placeholder to only show when no cover art --- res/more_vertical.png | Bin 0 -> 3194 bytes res/record.png | Bin 0 -> 23871 bytes res/star-fill.png | Bin 0 -> 5780 bytes res/star.png | Bin 0 -> 9135 bytes src/components/common/AlbumCover.tsx | 65 +++++++ src/components/common/AlbumView.tsx | 172 ++++++++++++++++-- src/components/library/AlbumsTab.tsx | 38 +--- .../navigation/LibraryTopTabNavigator.tsx | 7 +- src/models/music.ts | 25 ++- src/state/music.ts | 46 +++-- src/styles/text.ts | 33 +++- 11 files changed, 305 insertions(+), 81 deletions(-) create mode 100644 res/more_vertical.png create mode 100644 res/record.png create mode 100644 res/star-fill.png create mode 100644 res/star.png create mode 100644 src/components/common/AlbumCover.tsx diff --git a/res/more_vertical.png b/res/more_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..96faff081353eb452cc97c951591c37ed5218893 GIT binary patch literal 3194 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 literal 0 HcmV?d00001 diff --git a/res/record.png b/res/record.png new file mode 100644 index 0000000000000000000000000000000000000000..5e85c1303c904cc35e7f075bec9d621f005cf923 GIT binary patch literal 23871 zcmeAS@N?(olHy`uVBq!ia0y~yU_JoC9Bd2>48N`k%w}Ly&Vi|3&quYdF0F9yw?7Z) zKOL}J>|MY*>${0_@BWgB6KT^aZBwTW8%u{FO_{&p&yL4TdPPxk;tHe(RUrkRI zm(4GplOG=J=Jq)>(E8>VgXUKDAidukc?|D#ZOqja=r=V}c)#Kd^Q9F6&8K*#tO#D} znf$$1%E`y(#sy>Z1CdtZj}P%4@wg;3D<^14cXQ-pL6-&3ti^8Co&I+H#KWD!(~J&E zS0DvG|odG_vT_CqBL=B-bXj(TfuEm~0!lDImlw)NQq=f08` z6Zx(GXt?KU%%3)E+nqI)+H1?+T`KhXa%XL|{$4&VX7!^U&hBz%HB$oBvvN=Q1gFn4 ztDP2^pCx`({}cO_7mJR~z7mygZko}2^DxWW$1dW=0*_r3^12zgW{GcpF-1tfs5?@p z$9G|mLg_}%xnhP2KFty8ci-5Z_$#)3!N2G`Kf<3Ja{3-Wf!pEx)Z6|mzV6yDn_3*b zyWpt_SDE~?_Ui}Yu1}BpyZ!I&3&`;QfeT0a+5dF%+A}CS&AsDyQc#qEfw3ji**U<| z*%_Ad85k<&)K0YZIP4&EG(LE%k}hAEK;emixjG)Ag;%sh7CNmEjVd+R`GtFyiHfFP zUsLwMgZ)QWHFs}b$G5IY;RoZRXU~?rP*VM;ueqh;>w_Kg@88+JyT|CX_l(KvY^Dn( zw|!I}C8_P!VvD=j?AXF^BqdFTKkvRVCkr@gz!*+`xbokupGG01(y z`{5mDwse2q#5cyzcqVe2W>U_f8t!81jW{CRsR&-e` z%CdUOE!iJ>E_%+^qN%3uPsU4}d8vImX1Qe(i`YgMP9>3$KqpDFMO$7iiSW2sx2L)O z##iqrK_^0)l#erMT~OFv_rdBc2-zbz)Z}=~{ z<5KiLFWDJCRrX%Hq~z}K->jhU?xiWV4~p0&s*F;C%T(=s73Z_xJO5(#rUM6bFKmDI z_1c}|FPSGSTQ|x4z(GZWumx|v^1XkT`~K~HJnwz@Wh3>Eakt zaqG?9*q+pvRq|i{&oSQEchI0(r$^>V#W%q+11Oa2`szGwoH=bCe96f>RwfCPi;P-FYD4 zrO(uy6zy+`J0ez}3;F)Vz4lFc?cV+Kx0pUIt||LocWqVd`+D2=?o14$U}T3tZIvr0 z!-JqS&wDlJ>do`xXK%@iKVLNE$q`jX21W@6J*kv*&u#NQzCZtKfBTycD;;Y7{kQx7 zzR8$@$$-Js18!P>j+4+M5IFe)Io+dEJ+M32@Gb5 z+9!82=_~Ub=}$Uk0`i)^LA}<8S(nbtm^;_^kAZJ_#ab1Rw$f_zlVx_c)#A&tYV`!{ zgZLO2B^qANULJXR_uYL9!uS_k^C&Pd8(2nr<~_N5cUGhN+_!qQ_Sg8BISw%NocpQw zKF0FFp=+5|hYuMvFz_5`*jugl<<Tz+`a1W$*2_d$~&)qWCYDw5}BeX?Dw>=D&My@l%F*$#>Zv?%vpJ z(!juDVDwpK`{j~q-(ohsS1P{YKbmLA@hUJd^W0g)yN`P*!@A6?Y!9aff!yX?q8@5so3~VpX-u!iM?u=(VQ_8nhZz%=Y?2!H}(`sLn{)KdbvK}Fj15JM1 z^V_`G_<+Eh<86@)Oa=`PxH%4i3~bU@-~fd#$G!#yP}pO_ z|K#0o_Zijv*(FvS?Nza#nPTnxoOwZ6yvHVwPqDcSc0oc3uSyykS4OMs6b_!t828NJ zD4el8W&TBFn7;ZNEQK#~UDdyy&zkGXzf2%SG zC-WK@sBXXX=FJ~jFUEr0`xBp3Uw$L<*It|5fOVMzbMS_a(tQl7k@7q~O_~=D%s6}5 zr@T(*50l8&t994!W$&+MbUP`Mk+3FD{bv8ma}2TU4^w9;PvM)wEFm4dpmAfQ3p-N+ zhfg<~+i{VM1f6qbV9h*-er8@Q>t=IvWS5X=miGL{vw?x_waQ7qNx#944>$I|92ud( zdO%~%q&q&F!nhJTa++9quD&%%|8;IEQ-aB}Osj*PzMC2tFEO&UrD^+KzrN9p;c?lF zWzsb(L=FVJU|@DGvOejr_S0=CgT&r^pHF+=?tjh3+`NF9ho^C!{(&toA)GJ1*ToZl zl{7axUSMSVwdgf>fco8p1?E-<9OO%C8DA}x=K12rF7e`$&AG3v4}w=)m`l94@O%ox zixX>A}?y=|vNtLBK5?-|OYknhX_1DfNF*|{A=^ejK^Pg~gF&<#8Rh;kFzRgi=L!s4y1Ix}{E~%BxXE{*1CaGB` z;c!k9YtE&zS!aD(;u+RuU;O8{v7Kdu;W7v2*+uFn<9sUF5{matc(VJ_8`Y1OPcg}TVS0Y zyhwPr3v+k^mq|h7W|QD~;$Dmn{b8BQT;^-ADljms=BQTQX-i;uaoclJ`K2}dY!#Z> z4UOGV%Oa~)|1cSdZ2ne$IY_gi`vN1I-lKU3Ss9qO&wsMah=IwVAQWWW+fO_PB-SLw z8YnO@hbQdSXGq?X=e(ix;DPiAW*(cbTwA$^9r>x`3^G4qt(_A5TN{_MI3kNiGAdAF&(vNAmLYm?*8uvwY2@-=it z$|pTr^Pt^}k;x!nda86?ALOvsnMu`fyd|eUJL1oFRd)ZOZYGQKHt`|S7m#Q zpGKa&uepRkLu2Pm)yfHJYZZI$UJQ2pUa-XRyQ`d9<@Kd)es$OKj`3YoU|^oiwZG3Y z=}cmIsos-yTEBM2s#l)XWjJc7#>tY9ptS9hPqkQ`WOuXKlXBW`=hTLCbC$eh`K`yqC?Qby@Rr}@HQTMZ z_hhS9t}K=5WpM(9@cFGCn;%a7a9UuFZ)RPFL#66!m3(bxj)Moj?p?)VV0qdkyKbTW z@#jqMwalh69!sB=_VeIb6L(ccCIf{(hr(s&aPP5FI}kGGub*g>BLiDYyw>*>ynFc< zpN^iCJi&p3&FqL&fPt(f_28>n*6#g__u#UOy#n8M^ zm`8X4GtVJ?j=hIVwsD@1(M$*^X-Yg&(vZ04oyyHXHnSI7WUsvC+}pfC`OhJRyWYiS z-`Tww8Sei5^!Lc=Z0Gf%vu?8R9KTfi@~P>M>5>r!PV>W=BvOBfhV5AQSmpcVKOaqG z3XM~i8O`s#H1$%nPi8-Fdh>|spqK*(8z?qjUi^FG!mG%0%cSPB z-dg^jQ-P(Kfrn#%Ps8Tw`CrOry*%~VWNwV2xIhylqXb*t#3vh#J}@1B-t^wHb^iY~ ztE56>Uze9*gffZHHN-SeIxBwp6Z z)nvc?v2U*b?%mw>!VLmE90wHsDE;s|y4#;MjzLjEpdoQlTJDdnZ4;xK-v5btakp$| zW2beF^M}r$1_qu(>pytQ9{gVOVD9cKV7&qJj~hOneC)2t>}cQA0+W6{{R5T!llLs= zQDAUh`);Y_`{}!6w|qZX<+QL|a zC%;MA^SUOVV=sgB=eSv=2OAi8CO=toze;w?!SbHx4(BG{@iHzxxR-l_`m^B>SWNgB5z`$y=iah83$=@}6#Y>t2TBO?`70Ix@5g z{tUP=W6Nc;AAEl^7E5RDx?DV+C!vJzwg68Ks9G|6H}8XWCVTDznW7(iC#JC-+V_Fm zAS!xeKL^JFgM!mHA~H_h^WR)owj%fvOFYA4t_Q3>jcsRddKrJ6`BL)N&V9?Qn0;V{>wTi-^81nS)12exg#d36o%zGc?T1#|B!A7Hg)m(a^I zKUuDMct!1mC)JbxTx0mBcRTmPU%u(A4cRk}|2$BTxXj`3QJq^G4q43I)>zEZ+*~

#@v|M5N~qXb&2&0L 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

    !S=e_jXGp~r> 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 kkA-{q1W5;`$Nw{WmdKI;Vst0GC9R5dZ)H literal 0 HcmV?d00001 diff --git a/res/star.png b/res/star.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d9c61283ba35914ccd5fc74ffd39840e4b4a67 GIT binary patch literal 9135 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 JS?83{1OSwQ{@VZm literal 0 HcmV?d00001 diff --git a/src/components/common/AlbumCover.tsx b/src/components/common/AlbumCover.tsx new file mode 100644 index 0000000..f5dfe5e --- /dev/null +++ b/src/components/common/AlbumCover.tsx @@ -0,0 +1,65 @@ +import React, { useState } from 'react'; +import { ActivityIndicator, View } from 'react-native'; +import FastImage from 'react-native-fast-image'; +import LinearGradient from 'react-native-linear-gradient'; +import colors from '../../styles/colors'; + +const AlbumCover: React.FC<{ + height: number, + width: number, + coverArtUri?: string +}> = ({ height, width, coverArtUri }) => { + const [placeholderVisible, setPlaceholderVisible] = useState(false); + const [loading, setLoading] = useState(true); + + const indicatorSize = height > 130 ? 'large' : 'small'; + const halfIndicatorHeight = indicatorSize === 'large' ? 18 : 10; + + const Placeholder: React.FC<{ visible: boolean }> = ({ visible }) => ( + + + + ); + + const CoverArt = () => ( + + + + setPlaceholderVisible(true)} + onLoadEnd={() => setLoading(false)} + /> + + ); + + return ( + + {!coverArtUri ? : } + + ); +} + +export default React.memo(AlbumCover); diff --git a/src/components/common/AlbumView.tsx b/src/components/common/AlbumView.tsx index 0f32c44..3191732 100644 --- a/src/components/common/AlbumView.tsx +++ b/src/components/common/AlbumView.tsx @@ -1,40 +1,172 @@ import { useNavigation } from '@react-navigation/native'; import { useAtomValue } from 'jotai/utils'; import React, { useEffect } from 'react'; -import { View, Text } from 'react-native'; +import { ScrollView, Text, useWindowDimensions, View, Image, Pressable, GestureResponderEvent } from 'react-native'; import { albumAtomFamily } from '../../state/music'; +import colors from '../../styles/colors'; +import text from '../../styles/text'; +import AlbumCover from './AlbumCover'; import TopTabContainer from './TopTabContainer'; +function secondsToTime(s: number): string { + const seconds = s % 60; + const minutes = Math.floor(s / 60) % 60; + const hours = Math.floor(s / 60 / 60); + + let time = `${minutes.toString().padStart(1, '0')}:${seconds.toString().padStart(2, '0')}`; + if (hours > 0) { + time = `${hours}:${time}`; + } + return time; +} + +const Button: React.FC<{ + title: string; + onPress: (event: GestureResponderEvent) => void; +}> = ({ title, onPress }) => { + return ( + + {title} + + ); +} + const AlbumDetails: React.FC<{ id: string, }> = ({ id }) => { - const navigation = useNavigation(); const album = useAtomValue(albumAtomFamily(id)); + const layout = useWindowDimensions(); - useEffect(() => { - if (!album) { - return; - } - navigation.setOptions({ title: album.name }); - }); + const coverSize = layout.width - layout.width / 2; return ( - <> - Name: {album?.name} - Artist: {album?.artist} - + + + + {album?.name} + + {album?.artist}{album?.year ? ` • ${album.year}` : ''} + + +