mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-17 08:35:37 -04:00
Fix[ui]: disable the progressbar and stop loading at the end of the list
Also: move all array copies away from the UI thread
This commit is contained in:
parent
d8b1fbf968
commit
a276813230
@ -54,6 +54,7 @@ public class ModItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
private Future<?> mTaskInProgress;
|
private Future<?> mTaskInProgress;
|
||||||
private SearchFilters mSearchFilters;
|
private SearchFilters mSearchFilters;
|
||||||
private SearchResult mCurrentResult;
|
private SearchResult mCurrentResult;
|
||||||
|
private boolean mLastPage;
|
||||||
|
|
||||||
|
|
||||||
public ModItemAdapter(Resources resources, ModpackApi api, SearchResultCallback callback) {
|
public ModItemAdapter(Resources resources, ModpackApi api, SearchResultCallback callback) {
|
||||||
@ -69,6 +70,7 @@ public class ModItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
mTaskInProgress = null;
|
mTaskInProgress = null;
|
||||||
}
|
}
|
||||||
this.mSearchFilters = searchFilters;
|
this.mSearchFilters = searchFilters;
|
||||||
|
this.mLastPage = false;
|
||||||
mTaskInProgress = new SelfReferencingFuture(new SearchApiTask(mSearchFilters, null))
|
mTaskInProgress = new SelfReferencingFuture(new SearchApiTask(mSearchFilters, null))
|
||||||
.startOnExecutor(PojavApplication.sExecutorService);
|
.startOnExecutor(PojavApplication.sExecutorService);
|
||||||
}
|
}
|
||||||
@ -108,7 +110,7 @@ public class ModItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
if(mModItems.length == 0) return 0;
|
if(mLastPage || mModItems.length == 0) return mModItems.length;
|
||||||
return mModItems.length+1;
|
return mModItems.length+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,36 +333,44 @@ public class ModItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
public void run(Future<?> myFuture) {
|
public void run(Future<?> myFuture) {
|
||||||
SearchResult result = mModpackApi.searchMod(mSearchFilters, mPreviousResult);
|
SearchResult result = mModpackApi.searchMod(mSearchFilters, mPreviousResult);
|
||||||
ModItem[] resultModItems = result != null ? result.results : null;
|
ModItem[] resultModItems = result != null ? result.results : null;
|
||||||
|
if(resultModItems != null && resultModItems.length != 0 && mPreviousResult != null) {
|
||||||
|
ModItem[] newModItems = new ModItem[resultModItems.length + mModItems.length];
|
||||||
|
System.arraycopy(mModItems, 0, newModItems, 0, mModItems.length);
|
||||||
|
System.arraycopy(resultModItems, 0, newModItems, mModItems.length, resultModItems.length);
|
||||||
|
resultModItems = newModItems;
|
||||||
|
}
|
||||||
|
ModItem[] finalModItems = resultModItems;
|
||||||
Tools.runOnUiThread(() -> {
|
Tools.runOnUiThread(() -> {
|
||||||
if(myFuture.isCancelled()) return;
|
if(myFuture.isCancelled()) return;
|
||||||
|
mTaskInProgress = null;
|
||||||
if(resultModItems == null) {
|
if(finalModItems == null) {
|
||||||
mSearchResultCallback.onSearchError(SearchResultCallback.ERROR_INTERNAL);
|
mSearchResultCallback.onSearchError(SearchResultCallback.ERROR_INTERNAL);
|
||||||
}else if(resultModItems.length == 0) {
|
}else if(finalModItems.length == 0) {
|
||||||
|
if(mPreviousResult != null) {
|
||||||
|
mLastPage = true;
|
||||||
|
notifyItemChanged(mModItems.length);
|
||||||
|
mSearchResultCallback.onSearchFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
mSearchResultCallback.onSearchError(SearchResultCallback.ERROR_NO_RESULTS);
|
mSearchResultCallback.onSearchError(SearchResultCallback.ERROR_NO_RESULTS);
|
||||||
}else{
|
}else{
|
||||||
mSearchResultCallback.onSearchFinished();
|
mSearchResultCallback.onSearchFinished();
|
||||||
}
|
}
|
||||||
mCurrentResult = result;
|
mCurrentResult = result;
|
||||||
if(resultModItems == null) {
|
if(finalModItems == null) {
|
||||||
mModItems = MOD_ITEMS_EMPTY;
|
mModItems = MOD_ITEMS_EMPTY;
|
||||||
mTaskInProgress = null;
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(mPreviousResult != null) {
|
if(mPreviousResult != null) {
|
||||||
ModItem[] newModItems = new ModItem[resultModItems.length + mModItems.length];
|
int prevLength = mModItems.length;
|
||||||
System.arraycopy(mModItems, 0, newModItems, 0, mModItems.length);
|
mModItems = finalModItems;
|
||||||
System.arraycopy(resultModItems, 0, newModItems, mModItems.length, resultModItems.length);
|
notifyItemChanged(prevLength);
|
||||||
mModItems = newModItems;
|
notifyItemRangeInserted(prevLength+1, mModItems.length);
|
||||||
mTaskInProgress = null;
|
}else {
|
||||||
notifyItemChanged(mModItems.length);
|
mModItems = finalModItems;
|
||||||
notifyItemRangeInserted(mModItems.length+1, newModItems.length);
|
notifyDataSetChanged();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
mModItems = resultModItems;
|
|
||||||
mTaskInProgress = null;
|
|
||||||
notifyDataSetChanged();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user