From 1d7d32076e6608f88873b2543971d9c6c8ce2509 Mon Sep 17 00:00:00 2001 From: adalpari Date: Thu, 25 Sep 2025 18:55:37 +0200 Subject: [PATCH 1/7] Increasing the timeout when loading images --- .../android/networking/GlideRequestFactory.kt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt b/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt index 15e5db1dda99..7c002933e051 100644 --- a/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt +++ b/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt @@ -1,5 +1,6 @@ package org.wordpress.android.networking +import com.android.volley.DefaultRetryPolicy import com.android.volley.Request import com.android.volley.Request.Priority import com.bumptech.glide.integration.volley.VolleyRequestFactory @@ -12,6 +13,8 @@ import java.io.InputStream import javax.inject.Inject import javax.inject.Singleton +private const val TIMEOUT = 15_000 + /** * RequestFactory which adds authorization headers to all Glide requests and makes sure requests to WPcom endpoints * use https. @@ -27,7 +30,18 @@ class GlideRequestFactory @Inject constructor( headers: Map ): Request? { val httpsUrl: String = convertWPcomUrlToHttps(url) - return VolleyStreamFetcher.GlideRequest(httpsUrl, callback, priority, addAuthHeaders(url, headers)) + return VolleyStreamFetcher.GlideRequest( + httpsUrl, + callback, + priority, + addAuthHeaders(url, headers) + ).apply { + retryPolicy = DefaultRetryPolicy( + TIMEOUT, + DefaultRetryPolicy.DEFAULT_MAX_RETRIES, + DefaultRetryPolicy.DEFAULT_BACKOFF_MULT + ) + } } private fun convertWPcomUrlToHttps(url: String): String { From 4bbb2f9b32fc89adbdb5a8cde3d7c8e35e126ad5 Mon Sep 17 00:00:00 2001 From: adalpari Date: Thu, 25 Sep 2025 19:01:40 +0200 Subject: [PATCH 2/7] Add a comment to timeout constant --- .../java/org/wordpress/android/networking/GlideRequestFactory.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt b/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt index 7c002933e051..48816ed50cba 100644 --- a/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt +++ b/WordPress/src/main/java/org/wordpress/android/networking/GlideRequestFactory.kt @@ -13,6 +13,7 @@ import java.io.InputStream import javax.inject.Inject import javax.inject.Singleton +// Timeout in milliseconds for loading complex images at server side (private, heavy...) private const val TIMEOUT = 15_000 /** From 189cfcdb7b0ccd2bf941791f96a37fe40519cfa3 Mon Sep 17 00:00:00 2001 From: adalpari Date: Fri, 26 Sep 2025 09:04:13 +0200 Subject: [PATCH 3/7] Adding logs --- .../wordpress/android/ui/reader/views/ReaderPhotoView.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java index 8bf58a596d74..7d5c035df086 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java @@ -42,6 +42,7 @@ public interface PhotoViewListener { private final TextView mTxtError; private boolean mIsInitialLayout = true; private final ImageManager mImageManager; + private long mLoadStartTime; public ReaderPhotoView(Context context) { this(context, null); @@ -107,12 +108,15 @@ private void loadImage() { } showProgress(); + mLoadStartTime = System.currentTimeMillis(); mImageManager .loadWithResultListener(mImageView, ImageType.IMAGE, mHiResImageUrl, ScaleType.CENTER, mLoResImageUrl, new RequestListener() { @Override public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { + long loadDuration = System.currentTimeMillis() - mLoadStartTime; + AppLog.d(AppLog.T.READER, "ReaderPhotoView image load failed after " + loadDuration + "ms " + mHiResImageUrl); if (e != null) { AppLog.e(AppLog.T.READER, e); } @@ -125,6 +129,9 @@ public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Object model) { + long loadDuration = System.currentTimeMillis() - mLoadStartTime; + AppLog.d(AppLog.T.READER, + "ReaderPhotoView image loaded successfully after " + loadDuration + "ms " + mHiResImageUrl); handleResponse(); } }); From cf34d089dd6924d9ab9bbc870e127beeb5d35277 Mon Sep 17 00:00:00 2001 From: adalpari Date: Wed, 8 Oct 2025 10:55:55 +0200 Subject: [PATCH 4/7] Removing logs --- .../android/ui/reader/views/ReaderPhotoView.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java index 7d5c035df086..486829b0a646 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java @@ -42,7 +42,6 @@ public interface PhotoViewListener { private final TextView mTxtError; private boolean mIsInitialLayout = true; private final ImageManager mImageManager; - private long mLoadStartTime; public ReaderPhotoView(Context context) { this(context, null); @@ -108,15 +107,11 @@ private void loadImage() { } showProgress(); - mLoadStartTime = System.currentTimeMillis(); - mImageManager .loadWithResultListener(mImageView, ImageType.IMAGE, mHiResImageUrl, ScaleType.CENTER, mLoResImageUrl, new RequestListener() { @Override public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { - long loadDuration = System.currentTimeMillis() - mLoadStartTime; - AppLog.d(AppLog.T.READER, "ReaderPhotoView image load failed after " + loadDuration + "ms " + mHiResImageUrl); if (e != null) { AppLog.e(AppLog.T.READER, e); } @@ -129,9 +124,6 @@ public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Object model) { - long loadDuration = System.currentTimeMillis() - mLoadStartTime; - AppLog.d(AppLog.T.READER, - "ReaderPhotoView image loaded successfully after " + loadDuration + "ms " + mHiResImageUrl); handleResponse(); } }); From 2695ef643c427400f47d811810c2bd72b03d45a7 Mon Sep 17 00:00:00 2001 From: adalpari Date: Wed, 8 Oct 2025 11:20:12 +0200 Subject: [PATCH 5/7] Improving the progressbar --- .../android/ui/reader/views/ReaderPhotoView.java | 16 ++++++++-------- .../src/main/res/layout/reader_photo_view.xml | 9 ++++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java index 486829b0a646..6d8f120e3d97 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java @@ -124,18 +124,18 @@ public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Object model) { - handleResponse(); + // Do not hide progress if this is the placeholder loader + boolean isLoResImageUrlLoaded = model instanceof String && model.equals(mLoResImageUrl); + if (!isLoResImageUrlLoaded) { + hideProgress(); + hideError(); + } + // attach the pinch/zoom handler + setupOnTapListeners(); } }); } - private void handleResponse() { - hideProgress(); - hideError(); - // attach the pinch/zoom handler - setupOnTapListeners(); - } - private void setupOnTapListeners() { PhotoViewAttacher attacher = mImageView.getAttacher(); attacher.setOnPhotoTapListener((view, v, v2) -> { diff --git a/WordPress/src/main/res/layout/reader_photo_view.xml b/WordPress/src/main/res/layout/reader_photo_view.xml index 3530dbb099f1..3bb71fd12656 100644 --- a/WordPress/src/main/res/layout/reader_photo_view.xml +++ b/WordPress/src/main/res/layout/reader_photo_view.xml @@ -24,9 +24,12 @@ From c8186ce9c258b02d8efc6cf868276e9c6a1197bd Mon Sep 17 00:00:00 2001 From: adalpari Date: Wed, 8 Oct 2025 11:40:27 +0200 Subject: [PATCH 6/7] Improving dead code and progress color --- .../android/ui/reader/views/ReaderPhotoView.java | 12 +++++++++--- WordPress/src/main/res/layout/reader_photo_view.xml | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java index 6d8f120e3d97..44c500578d03 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java @@ -43,6 +43,9 @@ public interface PhotoViewListener { private boolean mIsInitialLayout = true; private final ImageManager mImageManager; + // Used to determine when the low res placeholder is loaded, so we, at least, show something to the user + private boolean mLowResImageLoaded = false; + public ReaderPhotoView(Context context) { this(context, null); } @@ -107,6 +110,7 @@ private void loadImage() { } showProgress(); + mLowResImageLoaded = false; mImageManager .loadWithResultListener(mImageView, ImageType.IMAGE, mHiResImageUrl, ScaleType.CENTER, mLoResImageUrl, new RequestListener() { @@ -115,9 +119,9 @@ public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { if (e != null) { AppLog.e(AppLog.T.READER, e); } - boolean lowResNotLoadedYet = isLoading(); - if (lowResNotLoadedYet) { - hideProgress(); + hideProgress(); + // Show error only when there's not low res image loaded + if (!mLowResImageLoaded) { showError(); } } @@ -129,6 +133,8 @@ public void onResourceReady(@NonNull Drawable resource, @Nullable Object model) if (!isLoResImageUrlLoaded) { hideProgress(); hideError(); + } else { + mLowResImageLoaded = true; } // attach the pinch/zoom handler setupOnTapListeners(); diff --git a/WordPress/src/main/res/layout/reader_photo_view.xml b/WordPress/src/main/res/layout/reader_photo_view.xml index 3bb71fd12656..8d37ed00ea0e 100644 --- a/WordPress/src/main/res/layout/reader_photo_view.xml +++ b/WordPress/src/main/res/layout/reader_photo_view.xml @@ -30,6 +30,7 @@ android:layout_alignParentBottom="true" android:indeterminate="true" android:indeterminateOnly="true" + android:indeterminateTint="@color/primary" android:visibility="visible" tools:visibility="visible" /> From e58859ab35da688a94938b1b7319d8521df0dc71 Mon Sep 17 00:00:00 2001 From: adalpari Date: Thu, 9 Oct 2025 09:32:33 +0200 Subject: [PATCH 7/7] Reverting linear progress bar --- .../ui/reader/views/ReaderPhotoView.java | 28 ++++++++----------- .../src/main/res/layout/reader_photo_view.xml | 10 ++----- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java index 44c500578d03..486829b0a646 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderPhotoView.java @@ -43,9 +43,6 @@ public interface PhotoViewListener { private boolean mIsInitialLayout = true; private final ImageManager mImageManager; - // Used to determine when the low res placeholder is loaded, so we, at least, show something to the user - private boolean mLowResImageLoaded = false; - public ReaderPhotoView(Context context) { this(context, null); } @@ -110,7 +107,6 @@ private void loadImage() { } showProgress(); - mLowResImageLoaded = false; mImageManager .loadWithResultListener(mImageView, ImageType.IMAGE, mHiResImageUrl, ScaleType.CENTER, mLoResImageUrl, new RequestListener() { @@ -119,29 +115,27 @@ public void onLoadFailed(@Nullable Exception e, @Nullable Object model) { if (e != null) { AppLog.e(AppLog.T.READER, e); } - hideProgress(); - // Show error only when there's not low res image loaded - if (!mLowResImageLoaded) { + boolean lowResNotLoadedYet = isLoading(); + if (lowResNotLoadedYet) { + hideProgress(); showError(); } } @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Object model) { - // Do not hide progress if this is the placeholder loader - boolean isLoResImageUrlLoaded = model instanceof String && model.equals(mLoResImageUrl); - if (!isLoResImageUrlLoaded) { - hideProgress(); - hideError(); - } else { - mLowResImageLoaded = true; - } - // attach the pinch/zoom handler - setupOnTapListeners(); + handleResponse(); } }); } + private void handleResponse() { + hideProgress(); + hideError(); + // attach the pinch/zoom handler + setupOnTapListeners(); + } + private void setupOnTapListeners() { PhotoViewAttacher attacher = mImageView.getAttacher(); attacher.setOnPhotoTapListener((view, v, v2) -> { diff --git a/WordPress/src/main/res/layout/reader_photo_view.xml b/WordPress/src/main/res/layout/reader_photo_view.xml index 8d37ed00ea0e..3530dbb099f1 100644 --- a/WordPress/src/main/res/layout/reader_photo_view.xml +++ b/WordPress/src/main/res/layout/reader_photo_view.xml @@ -24,13 +24,9 @@