11package github .daneren2005 .dsub .fragments ;
22
33import android .annotation .TargetApi ;
4+ import android .support .annotation .NonNull ;
45import android .support .v7 .app .AlertDialog ;
56import android .content .DialogInterface ;
67import android .content .Intent ;
@@ -139,7 +140,7 @@ public void onSaveInstanceState(Bundle outState) {
139140 }
140141
141142 @ Override
142- public View onCreateView (LayoutInflater inflater , ViewGroup container , Bundle bundle ) {
143+ public View onCreateView (@ NonNull LayoutInflater inflater , ViewGroup container , Bundle bundle ) {
143144 Bundle args = getArguments ();
144145 if (args != null ) {
145146 id = args .getString (Constants .INTENT_EXTRA_NAME_ID );
@@ -172,35 +173,87 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bu
172173 albums = (List <Entry >) args .getSerializable (Constants .FRAGMENT_LIST2 );
173174
174175 if (albums == null ) {
175- albums = new ArrayList <Entry >();
176+ albums = new ArrayList <>();
176177 }
177178 }
178179 }
179180
180181 rootView = inflater .inflate (R .layout .abstract_recycler_fragment , container , false );
181182
182- refreshLayout = ( SwipeRefreshLayout ) rootView .findViewById (R .id .refresh_layout );
183+ refreshLayout = rootView .findViewById (R .id .refresh_layout );
183184 refreshLayout .setOnRefreshListener (this );
184185
185186 if (Util .getPreferences (context ).getBoolean (Constants .PREFERENCES_KEY_LARGE_ALBUM_ART , true )) {
186187 largeAlbums = true ;
187188 }
188189
189- recyclerView = ( RecyclerView ) rootView .findViewById (R .id .fragment_recycler );
190+ recyclerView = rootView .findViewById (R .id .fragment_recycler );
190191 recyclerView .setHasFixedSize (true );
191- fastScroller = ( FastScroller ) rootView .findViewById (R .id .fragment_fast_scroller );
192+ fastScroller = rootView .findViewById (R .id .fragment_fast_scroller );
192193 setupScrollList (recyclerView );
193194 setupLayoutManager (recyclerView , largeAlbums );
194195
195196 if (entries == null ) {
197+ entries = new ArrayList <>();
198+ }
199+
200+ if (albumListType == null || "starred" .equals (albumListType )) {
201+ entryGridAdapter = new EntryGridAdapter (context , entries , getImageLoader (), largeAlbums );
202+ recyclerView .setAdapter (entryGridAdapter );
203+ entryGridAdapter .setRemoveFromPlaylist (playlistId != null );
204+ } else {
205+ setupAlbumGridAdapter ();
206+ recyclerView .setAdapter (entryGridAdapter );
207+
208+ // Setup infinite loading based on scrolling
209+ final EntryInfiniteGridAdapter infiniteGridAdapter = (EntryInfiniteGridAdapter ) entryGridAdapter ;
210+ infiniteGridAdapter .setData (albumListType , albumListExtra , albumListSize );
211+
212+ recyclerView .addOnScrollListener (new RecyclerView .OnScrollListener () {
213+ @ Override
214+ public void onScrollStateChanged (RecyclerView recyclerView , int newState ) {
215+ super .onScrollStateChanged (recyclerView , newState );
216+ }
217+
218+ @ Override
219+ public void onScrolled (RecyclerView recyclerView , int dx , int dy ) {
220+ super .onScrolled (recyclerView , dx , dy );
221+
222+ RecyclerView .LayoutManager layoutManager = recyclerView .getLayoutManager ();
223+ int totalItemCount = layoutManager .getItemCount ();
224+ int lastVisibleItem ;
225+ if (layoutManager instanceof GridLayoutManager ) {
226+ lastVisibleItem = ((GridLayoutManager ) layoutManager ).findLastVisibleItemPosition ();
227+ } else if (layoutManager instanceof LinearLayoutManager ) {
228+ lastVisibleItem = ((LinearLayoutManager ) layoutManager ).findLastVisibleItemPosition ();
229+ } else {
230+ return ;
231+ }
232+
233+ if (totalItemCount > 0 && lastVisibleItem >= totalItemCount - 2 ) {
234+ infiniteGridAdapter .loadMore ();
235+ }
236+ }
237+ });
238+ }
239+
240+ boolean addedHeader = setupEntryGridAdapter ();
241+
242+ fastScroller .attachRecyclerView (recyclerView );
243+ context .supportInvalidateOptionsMenu ();
244+
245+ scrollToPosition (addedHeader );
246+ playAll (args );
247+
248+ if (entries .size () == 0 ) {
196249 if (primaryFragment || secondaryFragment ) {
197250 load (false );
198251 } else {
199252 invalidated = true ;
200253 }
201254 } else {
202- licenseValid = true ;
203- finishLoading ();
255+ licenseValid = true ;
256+ finishLoading ();
204257 }
205258
206259 if (name != null ) {
@@ -693,13 +746,7 @@ private void finishLoading() {
693746 entryGridAdapter = new EntryGridAdapter (context , entries , getImageLoader (), largeAlbums );
694747 entryGridAdapter .setRemoveFromPlaylist (playlistId != null );
695748 } else {
696- if ("alphabeticalByName" .equals (albumListType )) {
697- entryGridAdapter = new AlphabeticalAlbumAdapter (context , entries , getImageLoader (), largeAlbums );
698- } else if ("highest" .equals (albumListType )) {
699- entryGridAdapter = new TopRatedAlbumAdapter (context , entries , getImageLoader (), largeAlbums );
700- } else {
701- entryGridAdapter = new EntryInfiniteGridAdapter (context , entries , getImageLoader (), largeAlbums );
702- }
749+ setupAlbumGridAdapter ();
703750
704751 // Setup infinite loading based on scrolling
705752 final EntryInfiniteGridAdapter infiniteGridAdapter = (EntryInfiniteGridAdapter ) entryGridAdapter ;
@@ -732,6 +779,31 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
732779 }
733780 });
734781 }
782+
783+ boolean addedHeader = setupEntryGridAdapter ();
784+
785+ recyclerView .setAdapter (entryGridAdapter );
786+ fastScroller .attachRecyclerView (recyclerView );
787+ context .supportInvalidateOptionsMenu ();
788+
789+ scrollToPosition (addedHeader );
790+ playAll (getArguments ());
791+ }
792+
793+ private void setupAlbumGridAdapter (){
794+ switch (albumListType ){
795+ case "alphabeticalByName" :
796+ entryGridAdapter = new AlphabeticalAlbumAdapter (context , entries , getImageLoader (), largeAlbums );
797+ break ;
798+ case "highest" :
799+ entryGridAdapter = new TopRatedAlbumAdapter (context , entries , getImageLoader (), largeAlbums );
800+ break ;
801+ default :
802+ entryGridAdapter = new EntryInfiniteGridAdapter (context , entries , getImageLoader (), largeAlbums );
803+ }
804+ }
805+
806+ private boolean setupEntryGridAdapter (){
735807 entryGridAdapter .setOnItemClickedListener (this );
736808 // Always show artist if this is not a artist we are viewing
737809 if (!artist ) {
@@ -747,7 +819,7 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
747819 if (albumListType == null && (!artist || artistInfo != null || artistInfoDelayed != null ) && (share == null || entries .size () != albums .size ())) {
748820 View header = createHeader ();
749821
750- if (header != null ) {
822+ if (header != null ) {
751823 if (artistInfoDelayed != null ) {
752824 final View finalHeader = header .findViewById (R .id .select_album_header );
753825 final View headerProgress = header .findViewById (R .id .header_progress );
@@ -780,31 +852,24 @@ protected void done(Void result) {
780852 addedHeader = true ;
781853 }
782854 }
855+ return addedHeader ;
856+ }
783857
784- int scrollToPosition = -1 ;
858+ private void scrollToPosition (boolean addedHeader ){
859+ int scrollPosition = -1 ;
785860 if (lookupEntry != null ) {
786861 for (int i = 0 ; i < entries .size (); i ++) {
787862 if (lookupEntry .equals (entries .get (i ).getTitle ())) {
788- scrollToPosition = i ;
863+ scrollPosition = i ;
789864 entryGridAdapter .addSelected (entries .get (i ));
790865 lookupEntry = null ;
791866 break ;
792867 }
793868 }
794869 }
795870
796- recyclerView .setAdapter (entryGridAdapter );
797- fastScroller .attachRecyclerView (recyclerView );
798- context .supportInvalidateOptionsMenu ();
799-
800- if (scrollToPosition != -1 ) {
801- recyclerView .scrollToPosition (scrollToPosition + (addedHeader ? 1 : 0 ));
802- }
803-
804- Bundle args = getArguments ();
805- boolean playAll = args .getBoolean (Constants .INTENT_EXTRA_NAME_AUTOPLAY , false );
806- if (playAll && !restoredInstance ) {
807- playAll (args .getBoolean (Constants .INTENT_EXTRA_NAME_SHUFFLE , false ), false , false );
871+ if (scrollPosition != -1 ) {
872+ recyclerView .scrollToPosition (scrollPosition + (addedHeader ? 1 : 0 ));
808873 }
809874 }
810875
@@ -830,6 +895,16 @@ private void playAll(final boolean shuffle, final boolean append, final boolean
830895 }
831896 }
832897
898+ private void playAll (Bundle args ){
899+ boolean playAll = false ;
900+ if (args != null ) {
901+ playAll = args .getBoolean (Constants .INTENT_EXTRA_NAME_AUTOPLAY , false );
902+ }
903+ if (playAll && !restoredInstance ) {
904+ playAll (args .getBoolean (Constants .INTENT_EXTRA_NAME_SHUFFLE , false ), false , false );
905+ }
906+ }
907+
833908 private List <Integer > getSelectedIndexes () {
834909 List <Entry > selected = entryGridAdapter .getSelected ();
835910 List <Integer > indexes = new ArrayList <Integer >();
0 commit comments