mirror of
https://github.com/whyorean/AuroraStore.git
synced 2026-06-19 13:08:59 -04:00
Fix the iterator behaviour for extreme filters
This commit is contained in:
@@ -9,6 +9,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import com.dragons.aurora.AppListIterator;
|
||||
import com.dragons.aurora.PlayStoreApiAuthenticator;
|
||||
@@ -27,6 +28,7 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class SearchAppsFragment extends SearchTask {
|
||||
@@ -35,24 +37,25 @@ public class SearchAppsFragment extends SearchTask {
|
||||
RecyclerView recyclerView;
|
||||
@BindView(R.id.adaptive_toolbar)
|
||||
AdaptiveToolbar adaptiveToolbar;
|
||||
@BindView(R.id.progress)
|
||||
ProgressBar progressBar;
|
||||
|
||||
private String title;
|
||||
|
||||
private boolean setLooper = true;
|
||||
private boolean loading = true;
|
||||
private int oldItems, visibleItems, totalItems;
|
||||
|
||||
private View view;
|
||||
private AppListIterator iterator;
|
||||
private EndlessAppsAdapter endlessAppsAdapter;
|
||||
private Disposable disposable;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_search_list, container, false);
|
||||
|
||||
view = inflater.inflate(R.layout.fragment_search_list, container, false);
|
||||
ButterKnife.bind(this, view);
|
||||
|
||||
adaptiveToolbar.getAction_icon().setOnClickListener((v -> this.getActivity().onBackPressed()));
|
||||
adaptiveToolbar.getTitle0().setText(title);
|
||||
adaptiveToolbar.getTitle1().setVisibility(View.GONE);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -83,18 +86,21 @@ public class SearchAppsFragment extends SearchTask {
|
||||
|
||||
protected void setupListView(List<App> appsToAdd) {
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this.getActivity());
|
||||
endlessAppsAdapter = new EndlessAppsAdapter(getActivity(), appsToAdd);
|
||||
recyclerView.setLayoutManager(mLayoutManager);
|
||||
recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(this.getActivity(), R.anim.layout_anim));
|
||||
recyclerView.setAdapter(new EndlessAppsAdapter(getActivity(), appsToAdd));
|
||||
recyclerView.setAdapter(endlessAppsAdapter);
|
||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
if ((visibleItems + oldItems) >= totalItems + 2)
|
||||
setLooper = false;
|
||||
if (dy > 0) {
|
||||
visibleItems = mLayoutManager.getChildCount();
|
||||
totalItems = mLayoutManager.getItemCount();
|
||||
oldItems = mLayoutManager.findFirstVisibleItemPosition();
|
||||
|
||||
if (loading) {
|
||||
if (loading && !setLooper) {
|
||||
if ((visibleItems + oldItems) >= totalItems - 2) {
|
||||
loading = false;
|
||||
fetchSearchAppsList(true);
|
||||
@@ -103,26 +109,35 @@ public class SearchAppsFragment extends SearchTask {
|
||||
}
|
||||
}
|
||||
});
|
||||
getLooper();
|
||||
}
|
||||
|
||||
public void fetchSearchAppsList(boolean loadMore) {
|
||||
Observable.fromCallable(() -> getResult(iterator))
|
||||
disposable = Observable.fromCallable(() -> getResult(iterator))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(appList -> {
|
||||
if (loadMore) {
|
||||
loading = true;
|
||||
addApps(appList);
|
||||
} else
|
||||
setupListView(appList);
|
||||
if (view != null) {
|
||||
if (loadMore) {
|
||||
loading = true;
|
||||
addApps(appList);
|
||||
} else
|
||||
setupListView(appList);
|
||||
}
|
||||
}, this::processException);
|
||||
}
|
||||
|
||||
public void addApps(List<App> appsToAdd) {
|
||||
EndlessAppsAdapter adapter = (EndlessAppsAdapter) recyclerView.getAdapter();
|
||||
for (App app : appsToAdd) {
|
||||
adapter.add(app);
|
||||
if (!appsToAdd.isEmpty()) {
|
||||
for (App app : appsToAdd)
|
||||
endlessAppsAdapter.add(app);
|
||||
endlessAppsAdapter.notifyItemInserted(endlessAppsAdapter.getItemCount() - 1);
|
||||
}
|
||||
adapter.notifyItemInserted(appsToAdd.size());
|
||||
getLooper();
|
||||
}
|
||||
|
||||
public void getLooper() {
|
||||
if (iterator.hasNext() && setLooper)
|
||||
fetchSearchAppsList(true);
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import android.view.animation.AnimationUtils;
|
||||
import com.dragons.aurora.AppListIterator;
|
||||
import com.dragons.aurora.PlayStoreApiAuthenticator;
|
||||
import com.dragons.aurora.R;
|
||||
import com.dragons.aurora.activities.AuroraActivity;
|
||||
import com.dragons.aurora.adapters.EndlessAppsAdapter;
|
||||
import com.dragons.aurora.model.App;
|
||||
import com.dragons.aurora.playstoreapiv2.CategoryAppsIterator;
|
||||
@@ -24,15 +23,19 @@ import java.util.List;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class TopFreeApps extends CategoryAppsTask {
|
||||
|
||||
private boolean setLooper = true;
|
||||
private boolean loading = true;
|
||||
private int oldItems, visibleItems, totalItems;
|
||||
|
||||
private View view;
|
||||
private AppListIterator iterator;
|
||||
private RecyclerView recyclerView;
|
||||
private EndlessAppsAdapter endlessAppsAdapter;
|
||||
private Disposable disposable;
|
||||
|
||||
public AppListIterator getIterator() {
|
||||
return iterator;
|
||||
@@ -52,7 +55,7 @@ public class TopFreeApps extends CategoryAppsTask {
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.app_endless_inc, container, false);
|
||||
view = inflater.inflate(R.layout.app_endless_inc, container, false);
|
||||
setRecyclerView(view.findViewById(R.id.endless_apps_list));
|
||||
setIterator(setupIterator(CategoryAppsFragment.categoryId, GooglePlayAPI.SUBCATEGORY.TOP_FREE));
|
||||
fetchCategoryApps(false);
|
||||
@@ -62,10 +65,11 @@ public class TopFreeApps extends CategoryAppsTask {
|
||||
protected AppListIterator setupIterator(String categoryId, GooglePlayAPI.SUBCATEGORY subcategory) {
|
||||
AppListIterator iterator;
|
||||
try {
|
||||
iterator = new AppListIterator(new CategoryAppsIterator(new PlayStoreApiAuthenticator(getContext()).getApi(),
|
||||
iterator = new AppListIterator(new CategoryAppsIterator(
|
||||
new PlayStoreApiAuthenticator(getContext()).getApi(),
|
||||
categoryId,
|
||||
subcategory));
|
||||
iterator.setFilter(new FilterMenu((AuroraActivity) getContext()).getFilterPreferences());
|
||||
iterator.setFilter(new FilterMenu(getContext()).getFilterPreferences());
|
||||
return iterator;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
@@ -75,18 +79,21 @@ public class TopFreeApps extends CategoryAppsTask {
|
||||
|
||||
protected void setupListView(List<App> appsToAdd) {
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this.getActivity());
|
||||
endlessAppsAdapter = new EndlessAppsAdapter(getActivity(), appsToAdd);
|
||||
recyclerView.setLayoutManager(mLayoutManager);
|
||||
recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(this.getActivity(), R.anim.layout_anim));
|
||||
recyclerView.setAdapter(new EndlessAppsAdapter(getActivity(), appsToAdd));
|
||||
recyclerView.setAdapter(endlessAppsAdapter);
|
||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
if ((visibleItems + oldItems) >= totalItems + 2)
|
||||
setLooper = false;
|
||||
if (dy > 0) {
|
||||
visibleItems = mLayoutManager.getChildCount();
|
||||
totalItems = mLayoutManager.getItemCount();
|
||||
oldItems = mLayoutManager.findFirstVisibleItemPosition();
|
||||
|
||||
if (loading) {
|
||||
if (loading && !setLooper) {
|
||||
if ((visibleItems + oldItems) >= totalItems - 2) {
|
||||
loading = false;
|
||||
fetchCategoryApps(true);
|
||||
@@ -95,14 +102,15 @@ public class TopFreeApps extends CategoryAppsTask {
|
||||
}
|
||||
}
|
||||
});
|
||||
getLooper();
|
||||
}
|
||||
|
||||
public void fetchCategoryApps(boolean loadMore) {
|
||||
Observable.fromCallable(() -> getResult(iterator))
|
||||
public void fetchCategoryApps(boolean shouldIterate) {
|
||||
disposable = Observable.fromCallable(() -> getResult(iterator))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(appList -> {
|
||||
if (loadMore) {
|
||||
if (shouldIterate) {
|
||||
loading = true;
|
||||
addApps(appList);
|
||||
} else
|
||||
@@ -111,11 +119,16 @@ public class TopFreeApps extends CategoryAppsTask {
|
||||
}
|
||||
|
||||
public void addApps(List<App> appsToAdd) {
|
||||
EndlessAppsAdapter adapter = (EndlessAppsAdapter) recyclerView.getAdapter();
|
||||
for (App app : appsToAdd) {
|
||||
adapter.add(app);
|
||||
if (!appsToAdd.isEmpty()) {
|
||||
for (App app : appsToAdd)
|
||||
endlessAppsAdapter.add(app);
|
||||
endlessAppsAdapter.notifyItemInserted(endlessAppsAdapter.getItemCount() - 1);
|
||||
}
|
||||
adapter.notifyItemInserted(appsToAdd.size());
|
||||
getLooper();
|
||||
}
|
||||
|
||||
public void getLooper() {
|
||||
if (iterator.hasNext() && setLooper)
|
||||
fetchCategoryApps(true);
|
||||
}
|
||||
}
|
||||
@@ -7,9 +7,14 @@
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/endless_apps_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clipToPadding="false"
|
||||
android:nestedScrollingEnabled="false"
|
||||
android:padding="5dp"
|
||||
android:paddingBottom="76dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:scrollbarStyle="outsideOverlay"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -16,20 +16,19 @@
|
||||
android:background="?android:attr/colorBackground"
|
||||
android:orientation="vertical"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<LinearLayout
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/search_apps_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/search_apps_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:nestedScrollingEnabled="false"
|
||||
android:padding="5dp"
|
||||
android:scrollbars="vertical" />
|
||||
</LinearLayout>
|
||||
android:layout_height="wrap_content"
|
||||
android:clipToPadding="false"
|
||||
android:nestedScrollingEnabled="false"
|
||||
android:paddingBottom="76dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:scrollbarStyle="outsideOverlay"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress"
|
||||
|
||||
Reference in New Issue
Block a user