From 16d97f447c6f504a06afc14a60864cb873f0e33b Mon Sep 17 00:00:00 2001 From: andyl Date: Thu, 10 Dec 2020 22:32:50 +0000 Subject: [PATCH 1/5] Patched v1.0.2 tag to use Ok3Http downloader for Picasso, to enable it to follow redirects and 301's through the HTTPS to HTTP redirect at the Letsencrypt gateway --- .idea/gradle.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f43d4284..9bba60da 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,11 +1,10 @@ + From 81928a873255b13b0cd91d1d9847be79b14157a7 Mon Sep 17 00:00:00 2001 From: andyl Date: Fri, 11 Dec 2020 17:28:42 +0000 Subject: [PATCH 2/5] Change to OKhttp3 downloader for Picasso to support redirects --- .idea/jarRepositories.xml | 40 +++++++++++++++++++ .idea/misc.xml | 12 ++++-- .idea/modules.xml | 4 +- app/build.gradle | 6 +++ .../internal/di/module/ApplicationModule.java | 3 +- 5 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 .idea/jarRepositories.xml diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 00000000..11ec93cf --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index eda73df5..0642fc64 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index c9d1dc54..430bc46c 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ - - + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 39eafc3d..941f0ae1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,6 +44,10 @@ if (project.file('../PiwigoSigning.properties').exists()) { } android { + signingConfigs { + release { + } + } compileSdkVersion 29 defaultConfig { applicationId "org.piwigo.android" @@ -52,6 +56,7 @@ android { versionCode 102 versionName "1.0.2" multiDexEnabled true + signingConfig signingConfigs.debug } buildTypes { debug { @@ -148,4 +153,5 @@ dependencies { testImplementation 'androidx.appcompat:appcompat:1.1.0' testAnnotationProcessor 'com.google.guava:guava:24.1-jre' testImplementation 'com.google.code.findbugs:jsr305:3.0.2' + compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' } diff --git a/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java b/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java index 04909045..dfc270e9 100644 --- a/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java +++ b/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java @@ -28,7 +28,7 @@ import org.piwigo.accounts.UserManager; import org.piwigo.internal.cache.PiwigoImageCache; import org.piwigo.io.repository.PreferencesRepository; - +import com.jakewharton.picasso.OkHttp3Downloader; import javax.inject.Singleton; import dagger.Module; @@ -51,6 +51,7 @@ public ApplicationModule(PiwigoApplication application) { return new Picasso.Builder(application) .indicatorsEnabled(BuildConfig.DEBUG) //We may not want this for production build.. .memoryCache(new PiwigoImageCache(application)) //What about this ? + .downloader(new OkHttp3Downloader(application)) .build(); } From 7105b393b6bf66629e2afc7fcdf671837edc2de3 Mon Sep 17 00:00:00 2001 From: andyl Date: Wed, 16 Dec 2020 22:36:09 +0000 Subject: [PATCH 3/5] Fork v1.0.2 onto Glide. --- app/build.gradle | 49 ++++++++++--------- .../adapter/ImageViewBindingAdapter.java | 12 ++--- .../di/component/ApplicationComponent.java | 3 +- .../internal/di/module/ApplicationModule.java | 7 --- .../internal/di/module/BindingModule.java | 4 +- .../PhotoViewerDialogFragment.java | 5 +- .../photoviewer/PhotoViewerPagerAdapter.java | 10 ++-- 7 files changed, 41 insertions(+), 49 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 941f0ae1..30a763b7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -96,23 +96,25 @@ android { } } -def daggerVersion = '2.24' -def okhttpVersion = '4.2.2' -def retrofitVersion = '2.6.1' -def picassoVersion = '2.5.2' +def daggerVersion = '2.30.1' +def okhttpVersion = '4.9.0' +def retrofitVersion = '2.9.0' +def picassoVersion = '2.71828' def assertjVersion = '1.2.0' def acraVersion = '5.4.0' dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.annotation:annotation:1.1.0' - implementation 'com.google.android.material:material:1.0.0' + implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.android.support:multidex:1.0.3' implementation "com.google.dagger:dagger:${daggerVersion}" - implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' - annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.1.0' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' + + annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0' annotationProcessor "com.google.dagger:dagger-compiler:${daggerVersion}" implementation "com.google.dagger:dagger-android:${daggerVersion}" @@ -123,12 +125,12 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:${retrofitVersion}" implementation "com.squareup.retrofit2:converter-gson:${retrofitVersion}" implementation "com.squareup.retrofit2:adapter-rxjava:${retrofitVersion}" - implementation "com.squareup.picasso:picasso:${picassoVersion}" - implementation 'io.reactivex:rxjava:1.3.2' + + implementation 'io.reactivex:rxjava:1.3.8' implementation 'io.reactivex:rxandroid:1.2.1' - implementation 'com.google.guava:guava:28.1-jre' - annotationProcessor 'com.google.guava:guava:24.1-jre' - implementation 'org.apache.commons:commons-lang3:3.9' + implementation 'com.google.guava:guava:30.1-jre' + annotationProcessor 'com.google.guava:guava:30.1-jre' + implementation 'org.apache.commons:commons-lang3:3.11' implementation "ch.acra:acra-mail:$acraVersion" implementation "ch.acra:acra-dialog:$acraVersion" @@ -136,22 +138,25 @@ dependencies { implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar' implementation "com.leinardi.android:speed-dial:3.0.0" implementation 'com.github.tingyik90:snackprogressbar:6.1.1' - implementation 'org.greenrobot:eventbus:3.1.1' + implementation 'org.greenrobot:eventbus:3.2.0' /* Don't forget to add to string libraries if you add a library here. */ - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5' - testImplementation 'junit:junit:4.12' - testImplementation 'org.robolectric:robolectric:4.3' + testImplementation 'junit:junit:4.13.1' + testImplementation 'org.robolectric:robolectric:4.4' testImplementation("com.squareup.assertj:assertj-android:${assertjVersion}") { exclude group: 'com.android.support' } + implementation ("com.github.bumptech.glide:glide:4.11.0") { + exclude group: "com.android.support" + } testAnnotationProcessor "com.google.dagger:dagger-compiler:${daggerVersion}" testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'org.mockito:mockito-core:2.19.0' - testImplementation 'com.google.guava:guava:24.1-jre' - testImplementation 'androidx.appcompat:appcompat:1.1.0' - testAnnotationProcessor 'com.google.guava:guava:24.1-jre' + testImplementation 'org.mockito:mockito-core:3.6.28' + testImplementation 'com.google.guava:guava:30.1-jre' + testImplementation 'androidx.appcompat:appcompat:1.2.0' + testAnnotationProcessor 'com.google.guava:guava:30.1-jre' testImplementation 'com.google.code.findbugs:jsr305:3.0.2' - compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' + implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' } diff --git a/app/src/main/java/org/piwigo/internal/binding/adapter/ImageViewBindingAdapter.java b/app/src/main/java/org/piwigo/internal/binding/adapter/ImageViewBindingAdapter.java index 2015afcc..33d68aa6 100644 --- a/app/src/main/java/org/piwigo/internal/binding/adapter/ImageViewBindingAdapter.java +++ b/app/src/main/java/org/piwigo/internal/binding/adapter/ImageViewBindingAdapter.java @@ -22,20 +22,18 @@ import android.view.ViewGroup; import android.widget.ImageView; -import com.squareup.picasso.Picasso; +import com.bumptech.glide.Glide; public class ImageViewBindingAdapter { - private final Picasso picasso; - public ImageViewBindingAdapter(Picasso picasso) { - this.picasso = picasso; + + public ImageViewBindingAdapter() { + } @BindingAdapter("android:src") public void loadImage(ImageView imageView, String url) { - picasso.load(url) - .resize(500,0) - .into(imageView); // centering and cropping is done by ImageView from the resources + Glide.with(imageView).load(url).override(imageView.getWidth(),0).centerCrop().into(imageView); } @BindingAdapter("heightRatio") public void setHeighRatio(ImageView imageView, double ratio) { diff --git a/app/src/main/java/org/piwigo/internal/di/component/ApplicationComponent.java b/app/src/main/java/org/piwigo/internal/di/component/ApplicationComponent.java index 5a4a18e9..c505d919 100644 --- a/app/src/main/java/org/piwigo/internal/di/component/ApplicationComponent.java +++ b/app/src/main/java/org/piwigo/internal/di/component/ApplicationComponent.java @@ -18,7 +18,7 @@ package org.piwigo.internal.di.component; -import com.squareup.picasso.Picasso; + import org.piwigo.PiwigoApplication; import org.piwigo.bg.UploadService; @@ -39,5 +39,4 @@ public interface ApplicationComponent { void inject(UploadService service); - Picasso picasso(); } diff --git a/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java b/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java index dfc270e9..381b68e8 100644 --- a/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java +++ b/app/src/main/java/org/piwigo/internal/di/module/ApplicationModule.java @@ -47,13 +47,6 @@ public ApplicationModule(PiwigoApplication application) { return application; } - @Provides @Singleton Picasso providePicasso() { - return new Picasso.Builder(application) - .indicatorsEnabled(BuildConfig.DEBUG) //We may not want this for production build.. - .memoryCache(new PiwigoImageCache(application)) //What about this ? - .downloader(new OkHttp3Downloader(application)) - .build(); - } @Provides @Singleton AccountManager provideAccountManager() { return AccountManager.get(application); diff --git a/app/src/main/java/org/piwigo/internal/di/module/BindingModule.java b/app/src/main/java/org/piwigo/internal/di/module/BindingModule.java index be684b6e..d37b604b 100644 --- a/app/src/main/java/org/piwigo/internal/di/module/BindingModule.java +++ b/app/src/main/java/org/piwigo/internal/di/module/BindingModule.java @@ -29,7 +29,7 @@ @Module public class BindingModule { - @Provides @DataBinding ImageViewBindingAdapter provideImageBindingAdapter(Picasso picasso) { - return new ImageViewBindingAdapter(picasso); + @Provides @DataBinding ImageViewBindingAdapter provideImageBindingAdapter() { + return new ImageViewBindingAdapter(); } } diff --git a/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerDialogFragment.java b/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerDialogFragment.java index aad3ded1..ce8f940a 100644 --- a/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerDialogFragment.java +++ b/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerDialogFragment.java @@ -26,8 +26,7 @@ public class PhotoViewerDialogFragment extends DialogFragment private PhotoViewerPagerAdapter pagerAdapter; private int selectedPosition = 0; - @Inject - Picasso picasso; + public static PhotoViewerDialogFragment newInstance() { PhotoViewerDialogFragment f = new PhotoViewerDialogFragment(); @@ -43,7 +42,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa selectedPosition = getArguments().getInt("position"); pagerAdapter = new PhotoViewerPagerAdapter(getContext(), images); - pagerAdapter.setPicassoInstance(picasso); + viewPager.setAdapter(pagerAdapter); viewPager.setOffscreenPageLimit(3); setCurrentItem(selectedPosition); diff --git a/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerPagerAdapter.java b/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerPagerAdapter.java index 0eb99e9f..18cc8d43 100644 --- a/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerPagerAdapter.java +++ b/app/src/main/java/org/piwigo/ui/photoviewer/PhotoViewerPagerAdapter.java @@ -7,6 +7,8 @@ import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; + +import com.bumptech.glide.Glide; import com.squareup.picasso.Picasso; import org.piwigo.R; @@ -19,7 +21,7 @@ public class PhotoViewerPagerAdapter extends PagerAdapter { private Context context; private List images; private LayoutInflater inflater; - private Picasso picasso; + public PhotoViewerPagerAdapter(Context context, List images) { @@ -36,7 +38,7 @@ public Object instantiateItem(@NonNull ViewGroup container, int position) TouchImageView imageViewPreview = view.findViewById(R.id.imgDisplay); ImageInfo image = images.get(position); - picasso.load(image.derivatives.medium.url).noFade().into(imageViewPreview); + Glide.with(container).load(image.derivatives.medium.url).into(imageViewPreview); container.addView(view); return view; } @@ -56,8 +58,4 @@ public void destroyItem(ViewGroup container, int position, @NonNull Object objec container.removeView((View) object); } - void setPicassoInstance(Picasso picasso) - { - this.picasso = picasso; - } } \ No newline at end of file From 9960fa6b98c3473cd21b9156d385c8a483f3c435 Mon Sep 17 00:00:00 2001 From: andyl Date: Fri, 18 Dec 2020 23:52:27 +0000 Subject: [PATCH 4/5] Fix problem loading albums > 100 images, and add placeholder images. --- .idea/gradle.xml | 1 + app/build.gradle | 4 +- .../adapter/ImageViewBindingAdapter.java | 11 ++- .../internal/cache/PiwigoImageCache.java | 91 ------------------ .../internal/di/module/ApplicationModule.java | 4 - .../main/java/org/piwigo/io/RestService.java | 4 +- .../piwigo/io/repository/ImageRepository.java | 4 +- .../piwigo/ui/main/AlbumItemViewModel.java | 7 +- .../org/piwigo/ui/main/AlbumsFragment.java | 4 +- .../org/piwigo/ui/main/AlbumsViewModel.java | 12 ++- .../ic_downloading_placeholder.png | Bin 0 -> 5751 bytes app/src/main/res/layout/fragment_albums.xml | 12 +-- app/src/main/res/layout/item_album.xml | 9 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 15 files changed, 48 insertions(+), 121 deletions(-) delete mode 100644 app/src/main/java/org/piwigo/internal/cache/PiwigoImageCache.java create mode 100644 app/src/main/res/drawable-hdpi/ic_downloading_placeholder.png diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 9bba60da..ed9c379e 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -5,6 +5,7 @@