From 52ca0c9d2c9fdfe6c21ec22f72b9d65e4c9254f8 Mon Sep 17 00:00:00 2001 From: Jan Rabe Date: Tue, 30 Apr 2019 09:23:09 +0200 Subject: [PATCH 01/11] added remove listener --- .../jessyan/progressmanager/ProgressManager.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java b/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java index 7e8421e..bd298e8 100644 --- a/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java +++ b/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java @@ -145,6 +145,13 @@ public void addRequestListener(String url, ProgressListener listener) { progressListeners.add(listener); } + public void removeRequestListener(String url) { + checkNotNull(url, "url cannot be null"); + synchronized (ProgressManager.class) { + mRequestListeners.remove(url); + } + } + /** * 将需要被监听下载进度的 {@code url} 注册到管理器,此操作请在页面初始化时进行,切勿多次注册同一个(内容相同)监听器 * @@ -165,6 +172,13 @@ public void addResponseListener(String url, ProgressListener listener) { progressListeners.add(listener); } + public void removeResponseListener(String url) { + checkNotNull(url, "url cannot be null"); + synchronized (ProgressManager.class) { + mResponseListeners.remove(url); + } + } + /** * 当在 {@link ProgressRequestBody} 和 {@link ProgressResponseBody} 内部处理二进制流时发生错误 From ac9ad593004b5ccf6a5c014818f3971f0311bf6a Mon Sep 17 00:00:00 2001 From: Jan Rabe Date: Tue, 30 Apr 2019 09:39:43 +0200 Subject: [PATCH 02/11] added remove by listener method --- .../progressmanager/ProgressManager.java | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java b/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java index bd298e8..90d3c3b 100644 --- a/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java +++ b/progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.lang.ref.ReferenceQueue; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -152,6 +153,23 @@ public void removeRequestListener(String url) { } } + public void removeRequestListener(ProgressListener listener) { + checkNotNull(listener, "listener cannot be null"); + synchronized (ProgressManager.class) { + + Iterator>> it = mRequestListeners.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry> pair = it.next(); + List progressListeners = pair.getValue(); + + progressListeners.remove(listener); + + if (progressListeners.isEmpty()) + it.remove(); // avoids a ConcurrentModificationException + } + } + } + /** * 将需要被监听下载进度的 {@code url} 注册到管理器,此操作请在页面初始化时进行,切勿多次注册同一个(内容相同)监听器 * @@ -172,10 +190,21 @@ public void addResponseListener(String url, ProgressListener listener) { progressListeners.add(listener); } - public void removeResponseListener(String url) { - checkNotNull(url, "url cannot be null"); + + public void removeResponseListener(ProgressListener listener) { + checkNotNull(listener, "listener cannot be null"); synchronized (ProgressManager.class) { - mResponseListeners.remove(url); + + Iterator>> it = mResponseListeners.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry> pair = it.next(); + List progressListeners = pair.getValue(); + + progressListeners.remove(listener); + + if (progressListeners.isEmpty()) + it.remove(); // avoids a ConcurrentModificationException + } } } From c7f6c14fd30ffab8b206fb97e2e281ce4b681f12 Mon Sep 17 00:00:00 2001 From: Jan Rabe Date: Sun, 31 Oct 2021 13:32:09 +0100 Subject: [PATCH 03/11] updated deps and fixed compile errors --- app/build.gradle | 20 +- app/src/main/AndroidManifest.xml | 24 +- .../progressmanager/demo/AdvanceActivity.java | 9 +- .../progressmanager/demo/AdvanceFragment.java | 7 +- .../progressmanager/demo/MainActivity.java | 16 +- .../progressmanager/demo/MainFragment.java | 7 +- app/src/main/res/layout/activity_main.xml | 67 ++-- build.gradle | 28 +- gradle.properties | 74 ++++- gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 290 +++++++++++------- gradlew.bat | 53 ++-- progress/bintray.gradle | 25 -- progress/build.gradle | 48 ++- 15 files changed, 401 insertions(+), 270 deletions(-) delete mode 100644 progress/bintray.gradle diff --git a/app/build.gradle b/app/build.gradle index ccab3fd..d9d8465 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' android { compileSdkVersion rootProject.compileSdkVersion @@ -25,12 +26,19 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation 'junit:junit:4.12' - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.squareup.okhttp3:okhttp:3.10.0' - implementation 'com.github.bumptech.glide:glide:4.6.1' - annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' - implementation 'com.github.bumptech.glide:okhttp3-integration:4.6.1' + testImplementation 'junit:junit:4.13.2' + + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat-resources:1.3.1' + implementation "androidx.annotation:annotation:1.2.0" + implementation 'androidx.core:core-ktx:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation 'com.google.android.material:material:1.4.0' + + implementation 'com.squareup.okhttp3:okhttp:4.9.2' + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' + implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0' implementation project(':progress') // implementation 'me.jessyan:progressmanager:1.5.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fbb8a74..25c4160 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,14 @@ - + - - - + + + + android:exported="true" + android:label="ProgressManager Base"> - + - + + android:exported="false" + android:label="ProgressManager Advance" /> \ No newline at end of file diff --git a/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceActivity.java b/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceActivity.java index dfe0791..ab2455c 100644 --- a/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceActivity.java +++ b/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceActivity.java @@ -17,14 +17,15 @@ import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.bumptech.glide.load.engine.DiskCacheStrategy; import java.io.BufferedInputStream; @@ -79,8 +80,8 @@ protected void onCreate(Bundle savedInstanceState) { initView(); initListener(); //在 Activity 中显示进度条的同时,也在 Fragment 中显示对应 url 的进度条,为了展示此框架的多端同步更新某一个进度信息 - getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, - AdvanceFragment.newInstance(mNewImageUrl, mNewDownloadUrl, mNewUploadUrl)).commit(); +// getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, +// AdvanceFragment.newInstance(mNewImageUrl, mNewDownloadUrl, mNewUploadUrl)).commit(); } diff --git a/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceFragment.java b/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceFragment.java index b87f5f5..bf85091 100644 --- a/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceFragment.java +++ b/app/src/main/java/me/jessyan/progressmanager/demo/AdvanceFragment.java @@ -17,9 +17,6 @@ import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -27,6 +24,10 @@ import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + import java.util.ArrayList; import java.util.Arrays; diff --git a/app/src/main/java/me/jessyan/progressmanager/demo/MainActivity.java b/app/src/main/java/me/jessyan/progressmanager/demo/MainActivity.java index e001091..2d929c9 100644 --- a/app/src/main/java/me/jessyan/progressmanager/demo/MainActivity.java +++ b/app/src/main/java/me/jessyan/progressmanager/demo/MainActivity.java @@ -18,16 +18,18 @@ import android.content.Intent; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; + import com.bumptech.glide.load.engine.DiskCacheStrategy; +import org.jetbrains.annotations.NotNull; + import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; @@ -101,8 +103,8 @@ protected void onCreate(Bundle savedInstanceState) { initView(); initListener(); //在 Activity 中显示进度条的同时,也在 Fragment 中显示对应 url 的进度条,为了展示此框架的多端同步更新某一个进度信息 - getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, - MainFragment.newInstance(mImageUrl, mDownloadUrl, mUploadUrl)).commit(); +// getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, +// MainFragment.newInstance(mImageUrl, mDownloadUrl, mUploadUrl)).commit(); } @@ -135,7 +137,7 @@ private void initListener() { } - @NonNull + @NotNull private ProgressListener getGlideListener() { return new ProgressListener() { @Override @@ -163,7 +165,7 @@ public void run() { }; } - @NonNull + @NotNull private ProgressListener getUploadListener() { return new ProgressListener() { @Override @@ -206,7 +208,7 @@ public void run() { }; } - @NonNull + @NotNull private ProgressListener getDownloadListener() { return new ProgressListener() { @Override diff --git a/app/src/main/java/me/jessyan/progressmanager/demo/MainFragment.java b/app/src/main/java/me/jessyan/progressmanager/demo/MainFragment.java index ac35b3f..419f65f 100644 --- a/app/src/main/java/me/jessyan/progressmanager/demo/MainFragment.java +++ b/app/src/main/java/me/jessyan/progressmanager/demo/MainFragment.java @@ -17,9 +17,6 @@ import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -27,6 +24,10 @@ import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + import java.util.ArrayList; import java.util.Arrays; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d296278..f2b3445 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,7 +1,6 @@ + android:scaleType="centerCrop" /> + android:orientation="horizontal">