diff --git a/app/build.gradle b/app/build.gradle index 4616987a..d6f6e0d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,6 +36,10 @@ dependencies { implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0' + implementation ("com.github.bumptech.glide:recyclerview-integration:4.8.0") { + // Excludes the support library because it's already included by Glide. + transitive = false + } implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' @@ -49,4 +53,7 @@ dependencies { implementation "joda-time:joda-time:2.9.9" implementation 'com.android.support:cardview-v7:28.0.0' + + + } diff --git a/app/src/main/java/com/readrops/app/MainActivity.java b/app/src/main/java/com/readrops/app/MainActivity.java index 10e8f9fa..8af570ad 100644 --- a/app/src/main/java/com/readrops/app/MainActivity.java +++ b/app/src/main/java/com/readrops/app/MainActivity.java @@ -4,13 +4,11 @@ import android.app.Dialog; import android.arch.lifecycle.ViewModelProvider; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; @@ -20,11 +18,11 @@ import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; import android.view.MenuItem; import android.view.View; -import android.widget.Button; import android.widget.Toast; import com.bumptech.glide.Glide; -import com.bumptech.glide.RequestManager; +import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader; +import com.bumptech.glide.util.ViewPreloadSizeProvider; import com.readrops.app.database.entities.Item; import com.readrops.readropslibrary.ParsingResult; @@ -46,7 +44,7 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S private NavigationView navigationView; private DrawerLayout drawerLayout; - private List itemList; + private List newItems; private TreeMap itemsMap; @@ -84,14 +82,16 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S viewModel.setSimpleCallback(this); itemsMap = new TreeMap<>(LocalDateTime::compareTo); - itemList = new ArrayList<>(); + newItems = new ArrayList<>(); viewModel.getItems().observe(this, (List items) -> { - for (Item item : items) { + /*for (Item item : items) { itemsMap.put(item.getFormatedDate(), item); - } + }*/ - adapter.submitList(items); + newItems = items; + if (!refreshLayout.isRefreshing()) + adapter.submitList(newItems); }); refreshLayout = findViewById(R.id.swipe_refresh_layout); @@ -122,7 +122,12 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S private void initRecyclerView() { recyclerView = findViewById(R.id.items_recycler_view); - adapter = new MainItemListAdapter(Glide.with(this)); + ViewPreloadSizeProvider preloadSizeProvider = new ViewPreloadSizeProvider(); + adapter = new MainItemListAdapter(Glide.with(this), preloadSizeProvider); + + RecyclerViewPreloader preloader = new RecyclerViewPreloader(Glide.with(this), adapter, preloadSizeProvider, 10); + recyclerView.addOnScrollListener(preloader); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); @@ -158,6 +163,10 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S return true; } }).attachToRecyclerView(recyclerView); + + + + } private void updateList() { @@ -167,6 +176,8 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S @Override public void onSuccess() { refreshLayout.setRefreshing(false); + adapter.submitList(newItems); + //newItems.clear(); } @Override diff --git a/app/src/main/java/com/readrops/app/MainItemListAdapter.java b/app/src/main/java/com/readrops/app/MainItemListAdapter.java index 5b541297..4ac429b2 100644 --- a/app/src/main/java/com/readrops/app/MainItemListAdapter.java +++ b/app/src/main/java/com/readrops/app/MainItemListAdapter.java @@ -1,29 +1,44 @@ package com.readrops.app; +import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.recyclerview.extensions.ListAdapter; import android.support.v7.util.DiffUtil; import android.support.v7.widget.RecyclerView; +import android.util.Patterns; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.bumptech.glide.ListPreloader; +import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.RequestManager; import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestOptions; +import com.bumptech.glide.request.transition.DrawableCrossFadeFactory; +import com.bumptech.glide.util.ViewPreloadSizeProvider; import com.readrops.app.database.entities.Item; -public class MainItemListAdapter extends ListAdapter { +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class MainItemListAdapter extends ListAdapter implements ListPreloader.PreloadModelProvider { private RequestManager manager; private OnItemClickListener listener; + private ViewPreloadSizeProvider preloadSizeProvider; - public MainItemListAdapter(RequestManager manager) { + public MainItemListAdapter(RequestManager manager, ViewPreloadSizeProvider preloadSizeProvider) { super(DIFF_CALLBACK); + this.manager = manager; + this.preloadSizeProvider = preloadSizeProvider; } private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { @@ -39,6 +54,8 @@ public class MainItemListAdapter extends ListAdapter getPreloadItems(int position) { + String url = getItem(position).getImageLink(); + + return Collections.singletonList(url); + } + + @Nullable + @Override + public RequestBuilder getPreloadRequestBuilder(@NonNull String url) { + return manager.load(url); } public interface OnItemClickListener { void onItemClick(Item item); } - public void setOnItemClickListener() { - + public void setOnItemClickListener(OnItemClickListener listener) { + this.listener = listener; } class ViewHolder extends RecyclerView.ViewHolder {