From 6b61c92a7e96e2d0ad6c1a6a83331ad28496e602 Mon Sep 17 00:00:00 2001 From: Stefan Schueller Date: Sat, 3 Mar 2018 02:02:00 +0100 Subject: [PATCH] Added Endless Scrolling --- .../peertube/activity/VideoListActivity.java | 81 ++++++++++++------- .../peertube/adapter/VideoAdapter.java | 14 +++- 2 files changed, 63 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java b/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java index 6e58567..dc89b07 100644 --- a/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java +++ b/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java @@ -9,7 +9,6 @@ import android.support.v7.widget.RecyclerView; import android.util.Log; import android.widget.Toast; - import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.google.android.gms.common.GooglePlayServicesRepairableException; import com.google.android.gms.common.GooglePlayServicesUtil; @@ -20,24 +19,25 @@ import net.schueller.peertube.adapter.VideoAdapter; import net.schueller.peertube.model.VideoList; import net.schueller.peertube.network.GetVideoDataService; import net.schueller.peertube.network.RetrofitInstance; -import net.schueller.peertube.services.RecentlyAddedVideosService; -import net.schueller.peertube.model.Video; import java.util.ArrayList; -import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -import static org.webrtc.ContextUtils.getApplicationContext; - public class VideoListActivity extends AppCompatActivity { private VideoAdapter videoAdapter; private RecyclerView recyclerView; + private int currentStart = 0; + private int count = 12; + private String sort = "-createdAt"; + + private boolean isLoading = false; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -46,11 +46,52 @@ public class VideoListActivity extends AppCompatActivity { // fix android trying to use SSLv3 for handshake updateAndroidSecurityProvider(this); - /*Create handle for the RetrofitInstance interface*/ + createList(); + + } + + + private void createList() { + recyclerView = findViewById(R.id.recyclerView); + + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(VideoListActivity.this); + recyclerView.setLayoutManager(layoutManager); + + videoAdapter = new VideoAdapter(new ArrayList<>(), VideoListActivity.this); + recyclerView.setAdapter(videoAdapter); + + loadVideos(currentStart, count, sort); + + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + + if (dy > 0) { + // is at end of list? + if(!recyclerView.canScrollVertically(RecyclerView.FOCUS_DOWN)){ + if (!isLoading) { + currentStart = currentStart + count; + loadVideos(currentStart, count, sort); + } + } + } + + } + }); + } + + private void loadVideos(int start, int count, String sort) { + + isLoading = true; + GetVideoDataService service = RetrofitInstance.getRetrofitInstance().create(GetVideoDataService.class); - /*Call the method with parameter in the interface to get the employee data*/ - Call call = service.getVideoData(0, 12, "-createdAt"); + Call call = service.getVideoData(start, count, sort); /*Log the URL called*/ Log.wtf("URL Called", call.request().url() + ""); @@ -58,35 +99,19 @@ public class VideoListActivity extends AppCompatActivity { call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - Log.wtf("Response", response + ""); - generateVideoList(response.body().getVideoArrayList()); + videoAdapter.setData(response.body().getVideoArrayList()); + isLoading = false; } @Override public void onFailure(Call call, Throwable t) { Log.wtf("err", t.fillInStackTrace()); Toast.makeText(VideoListActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show(); + isLoading = false; } }); - - } - - /*Method to generate List of employees using RecyclerView with custom adapter*/ - private void generateVideoList(ArrayList