diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 91cc46108..f3275db16 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -565,7 +565,11 @@ public class API { Status status = new Status(); try { status.setId(resobj.get("id").toString()); - status.setUri(resobj.get("uri").toString()); + if( resobj.has("uri")) { + status.setUri(resobj.get("uri").toString()); + }else { + status.setUri(resobj.get("id").toString()); + } status.setCreated_at(Helper.mstStringToDate(context, resobj.get("created_at").toString())); status.setIn_reply_to_id(resobj.get("in_reply_to_id").toString()); status.setIn_reply_to_account_id(resobj.get("in_reply_to_account_id").toString()); diff --git a/app/src/main/java/app/fedilab/android/client/HttpsConnection.java b/app/src/main/java/app/fedilab/android/client/HttpsConnection.java index 8d9494771..26ea54857 100644 --- a/app/src/main/java/app/fedilab/android/client/HttpsConnection.java +++ b/app/src/main/java/app/fedilab/android/client/HttpsConnection.java @@ -187,6 +187,7 @@ public class HttpsConnection { httpsURLConnection.setRequestProperty("Content-Type", "application/json"); httpsURLConnection.setRequestProperty("Accept", "application/json"); httpsURLConnection.setUseCaches(true); + httpsURLConnection.setDefaultUseCaches(true); httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); if (token != null && !token.startsWith("Basic ")) httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); @@ -287,6 +288,7 @@ public class HttpsConnection { httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); httpsURLConnection.setRequestMethod("GET"); + httpsURLConnection.setDefaultUseCaches(true); httpsURLConnection.setUseCaches(true); String response; if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java index 514279a16..b609a9a9c 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java @@ -35,6 +35,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.recyclerview.widget.LinearLayoutManager; @@ -42,7 +43,14 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import com.bumptech.glide.Glide; +import com.bumptech.glide.ListPreloader; +import com.bumptech.glide.RequestBuilder; +import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader; +import com.bumptech.glide.util.FixedPreloadSizeProvider; + import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -58,6 +66,7 @@ import app.fedilab.android.asynctasks.RetrievePeertubeSearchAsyncTask; import app.fedilab.android.asynctasks.UpdateAccountInfoAsyncTask; import app.fedilab.android.client.APIResponse; import app.fedilab.android.client.Entities.Account; +import app.fedilab.android.client.Entities.Attachment; import app.fedilab.android.client.Entities.Conversation; import app.fedilab.android.client.Entities.Peertube; import app.fedilab.android.client.Entities.RemoteInstance; @@ -194,6 +203,13 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn c1, c2, c1 ); lv_status = rootView.findViewById(R.id.lv_status); + ListPreloader.PreloadSizeProvider sizeProvider = + new FixedPreloadSizeProvider(640, 480); + ListPreloader.PreloadModelProvider modelProvider = new MyPreloadModelProvider(); + RecyclerViewPreloader preloader = + new RecyclerViewPreloader<>( + Glide.with(context), modelProvider, sizeProvider, 20 ); + lv_status.addOnScrollListener(preloader); mainLoader = rootView.findViewById(R.id.loader); nextElementLoader = rootView.findViewById(R.id.loading_next_status); @@ -1231,4 +1247,34 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } } } + + + private class MyPreloadModelProvider implements ListPreloader.PreloadModelProvider { + @Override + @NonNull + public List getPreloadItems(int position) { + if( statuses == null || statuses.size() == 0){ + return Collections.emptyList(); + } + Status status = statuses.get(position); + if (status.getMedia_attachments() == null || status.getMedia_attachments().size() ==0) { + return Collections.emptyList(); + } + List preloaded_urls = new ArrayList<>(); + for(Attachment attachment: status.getMedia_attachments()) { + preloaded_urls.add(attachment.getPreview_url()); + } + return preloaded_urls; + } + + @Nullable + @Override + public RequestBuilder getPreloadRequestBuilder(@NonNull String url) { + return Glide.with(context) + .load(url) + .override(640, 480); + } + + } + }