From 52f026aa7512e0767f13091a51eba6356f3eee63 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 15 Dec 2019 18:38:24 +0100 Subject: [PATCH] Some fixes --- app/build.gradle | 4 ++ .../android/client/HttpsConnection.java | 4 +- .../android/drawers/StatusListAdapter.java | 13 ++++-- .../fragments/DisplayStatusFragment.java | 44 +++++++++++++++++++ 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1a4b7920e..a804f3005 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,6 +93,10 @@ dependencies { implementation 'androidx.exifinterface:exifinterface:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "com.github.bumptech.glide:glide:$glideLibraryVersion" + implementation ("com.github.bumptech.glide:recyclerview-integration:$glideLibraryVersion") { + // Excludes the support library because it's already included by Glide. + transitive = false + } annotationProcessor "com.github.bumptech.glide:compiler:$glideLibraryVersion" annotationProcessor 'com.android.support:support-annotations:28.0.0' implementation "org.conscrypt:conscrypt-android:$conscryptLibraryVersion" 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 bfc3a42a8..7546c482f 100644 --- a/app/src/main/java/app/fedilab/android/client/HttpsConnection.java +++ b/app/src/main/java/app/fedilab/android/client/HttpsConnection.java @@ -911,7 +911,9 @@ public class HttpsConnection { // always check HTTP response code first if (responseCode == HttpURLConnection.HTTP_OK) { // opens input stream from the HTTP connection - return httpsURLConnection.getInputStream(); + InputStream inputStream = httpsURLConnection.getInputStream(); + httpsURLConnection.getInputStream().close(); + return inputStream; } httpsURLConnection.getInputStream().close(); } catch (IOException | NoSuchAlgorithmException | KeyManagementException ignored) { diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index bf5a4ce1f..f9079f8f4 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -150,6 +150,7 @@ import app.fedilab.android.client.Entities.Relationship; import app.fedilab.android.client.Entities.Status; import app.fedilab.android.client.Entities.StoredStatus; import app.fedilab.android.client.Entities.TagTimeline; +import app.fedilab.android.client.Glide.GlideApp; import app.fedilab.android.fragments.DisplayStatusFragment; import app.fedilab.android.helper.CrossActions; import app.fedilab.android.helper.CustomTextView; @@ -3506,10 +3507,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct imageView.setImageBitmap(null); if (!url.trim().contains("missing.png") && !((Activity) context).isFinishing()) { if (!blur) { - Glide.with(imageView.getContext()) + GlideApp.with(imageView.getContext()) .asBitmap() .load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave) .thumbnail(0.1f) + .override(640, 480) .apply(new RequestOptions().transforms(new CenterCrop(), new RoundedCorners(10))) .into(new SimpleTarget() { @Override @@ -3529,10 +3531,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } }); } else { - Glide.with(imageView.getContext()) + GlideApp.with(imageView.getContext()) .asBitmap() .load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave) .thumbnail(0.1f) + .override(640, 480) .apply(new RequestOptions().transforms(new BlurTransformation(50, 3), new RoundedCorners(10))) .into(new SimpleTarget() { @Override @@ -3555,16 +3558,18 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } else { if (!url.trim().contains("missing.png") && !((Activity) context).isFinishing()) { if (!blur) { - Glide.with(imageView.getContext()) + GlideApp.with(imageView.getContext()) .load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave) .thumbnail(0.1f) + .override(640, 480) .apply(new RequestOptions().transforms(new CenterCrop(), new RoundedCorners(10))) .transition(DrawableTransitionOptions.withCrossFade()) .into(imageView); } else { - Glide.with(imageView.getContext()) + GlideApp.with(imageView.getContext()) .load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave) .thumbnail(0.1f) + .override(640, 480) .apply(new RequestOptions().transforms(new BlurTransformation(50, 3), new RoundedCorners(10))) .transition(DrawableTransitionOptions.withCrossFade()) .into(imageView); 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 33c43ec0b..f6258ced6 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java @@ -25,6 +25,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Looper; +import android.provider.ContactsContract; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -34,13 +35,21 @@ 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; 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; @@ -56,12 +65,14 @@ 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; import app.fedilab.android.client.Entities.RetrieveFeedsParam; import app.fedilab.android.client.Entities.Status; import app.fedilab.android.client.Entities.TagTimeline; +import app.fedilab.android.client.Glide.GlideApp; import app.fedilab.android.drawers.ArtListAdapter; import app.fedilab.android.drawers.PeertubeAdapter; import app.fedilab.android.drawers.PixelfedListAdapter; @@ -130,6 +141,32 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn public DisplayStatusFragment() { } + + private class MyPreloadModelProvider implements ListPreloader.PreloadModelProvider { + @Override + @NonNull + public List getPreloadItems(int position) { + 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 GlideApp.with(context) + .load(url) + .override(640, 480); + } + + } + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_status, container, false); @@ -189,6 +226,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); textviewNoAction = rootView.findViewById(R.id.no_action);