Skip to content

Commit c161103

Browse files
committed
Release to v1.5.0
1 parent 5c7568c commit c161103

File tree

6 files changed

+54
-47
lines changed

6 files changed

+54
-47
lines changed

README-zh.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ProgressManager
2-
[ ![Bintray](https://img.shields.io/badge/bintray-v1.3.3-brightgreen.svg) ](https://bintray.com/jessyancoding/maven/progressmanager/1.3.3/link)
2+
[ ![Bintray](https://img.shields.io/badge/bintray-v1.5.0-brightgreen.svg) ](https://bintray.com/jessyancoding/maven/progressmanager/1.5.0/link)
33
[ ![Build Status](https://travis-ci.org/JessYanCoding/ProgressManager.svg?branch=master) ](https://travis-ci.org/JessYanCoding/ProgressManager)
44
[ ![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-ProgressManager-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/5865)
55
[ ![API](https://img.shields.io/badge/API-14%2B-blue.svg?style=flat-square) ](https://developer.android.com/about/versions/android-4.0.html)
@@ -32,7 +32,7 @@
3232

3333
## Download
3434
``` gradle
35-
compile 'me.jessyan:progressmanager:1.3.3'
35+
compile 'me.jessyan:progressmanager:1.5.0'
3636
```
3737

3838
## Usage

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ProgressManager
2-
[ ![Bintray](https://img.shields.io/badge/bintray-v1.3.3-brightgreen.svg) ](https://bintray.com/jessyancoding/maven/progressmanager/1.3.3/link)
2+
[ ![Bintray](https://img.shields.io/badge/bintray-v1.5.0-brightgreen.svg) ](https://bintray.com/jessyancoding/maven/progressmanager/1.5.0/link)
33
[ ![Build Status](https://travis-ci.org/JessYanCoding/ProgressManager.svg?branch=master) ](https://travis-ci.org/JessYanCoding/ProgressManager)
44
[ ![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-ProgressManager-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/5865)
55
[ ![API](https://img.shields.io/badge/API-14%2B-blue.svg?style=flat-square) ](https://developer.android.com/about/versions/android-4.0.html)
@@ -31,7 +31,7 @@
3131

3232
## Download
3333
``` gradle
34-
compile 'me.jessyan:progressmanager:1.3.3'
34+
compile 'me.jessyan:progressmanager:1.5.0'
3535
```
3636

3737
## Usage

app/src/main/java/me/jessyan/progressmanager/demo/MainActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
5858
* 为什么这样做? 因为如果直接使用 String mUrl = "url", 这个 url 字符串会被加入全局字符串常量池, 池中的字符串将不会被回收
5959
* 既然 {@code key} 没被回收, 那 {@link WeakHashMap} 中的值也不会被移除
6060
*/
61-
public static final String IMAGE_URL = new String("https://raw.githubusercontent.com/JessYanCoding/MVPArmsTemplate/master/art/step.png");
62-
public static final String DOWNLOAD_URL = new String("https://raw.githubusercontent.com/JessYanCoding/MVPArmsTemplate/master/art/MVPArms.gif");
61+
public static final String IMAGE_URL = new String("http://jessyancoding.github.io/images/RxCache.png");
62+
public static final String DOWNLOAD_URL = new String("http://jessyancoding.github.io/images/RxCache.png");
6363
public static final String UPLOAD_URL = new String("http://upload.qiniu.com/");
6464

6565
private ImageView mImageView;

app/src/test/java/me/jessyan/progressmanager/demo/ExampleUnitTest.java

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@
77
import java.util.WeakHashMap;
88
import java.util.concurrent.TimeUnit;
99

10-
import me.jessyan.progressmanager.ProgressListener;
11-
import me.jessyan.progressmanager.ProgressManager;
12-
import me.jessyan.progressmanager.body.ProgressInfo;
13-
import okhttp3.HttpUrl;
14-
import okhttp3.Request;
15-
1610
/**
1711
* Example local unit test, which will execute on the development machine (host).
1812
*
@@ -22,35 +16,15 @@ public class ExampleUnitTest {
2216

2317
@Test
2418
public void test(){
25-
// testWeakHashMapAPIs();
19+
testWeakHashMapAPIs();
2620
testString();
2721
}
2822

29-
private void testRequest(){
30-
String newUrl = ProgressManager.getInstance().addDiffResponseListenerOnSameUrl("http://www.baidu.com/user", new ProgressListener() {
31-
@Override
32-
public void onProgress(ProgressInfo progressInfo) {
33-
34-
}
35-
36-
@Override
37-
public void onError(long id, Exception e) {
38-
39-
}
40-
});
41-
Request request = new Request
42-
.Builder()
43-
.url(newUrl)
44-
.build();
45-
ProgressManager.getInstance().wrapRequestBody(request);
46-
}
47-
4823
private void testString(){
4924
String s = "http://www.baidu.com/user$JessYan$456";
50-
String substring = s.substring(0, s.indexOf("$JessYan$"));
51-
System.out.println(HttpUrl.parse("http://www.baidu.com/abc/d").toString());
25+
int index = s.indexOf("$JessYan$");
26+
String substring = s.substring(0, index);
5227
System.out.println(substring);
53-
System.out.println(s);
5428
}
5529

5630
private void testWeakHashMapAPIs() {

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ ext {
2626
targetSdkVersion = 26
2727
compileSdkVersion = 26
2828
buildToolsVersion = "26.0.2"
29-
versionCode = 16
30-
versionName = "1.3.3"
29+
versionCode = 20
30+
versionName = "1.5.0"
3131
}

progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import okhttp3.OkHttpClient;
3737
import okhttp3.Request;
3838
import okhttp3.Response;
39+
import okhttp3.internal.http2.Header;
3940

4041
/**
4142
* ================================================
@@ -73,6 +74,7 @@ public final class ProgressManager {
7374
public static final int DEFAULT_REFRESH_TIME = 150;
7475
public static final String IDENTIFICATION_NUMBER = "?JessYan=";
7576
public static final String IDENTIFICATION_HEADER = "JessYan";
77+
public static final String LOCATION_HEADER = "Location";
7678

7779

7880
static {
@@ -209,13 +211,22 @@ public Request wrapRequestBody(Request request) {
209211
return request;
210212
}
211213

214+
/**
215+
* 如果 {@code url} 中含有 {@link #addDiffResponseListenerOnSameUrl(String, String, ProgressListener)}
216+
* 或 {@link #addDiffRequestListenerOnSameUrl(String, String, ProgressListener)} 加入的标识符,则将加入标识符
217+
* 从 {code url} 中删除掉,继续使用 {@code originUrl} 进行请求
218+
*
219+
* @param url {@code url} 地址
220+
* @param request 原始 {@link Request}
221+
* @return 返回可能被修改过的 {@link Request}
222+
*/
212223
private Request pruneIdentification(String url, Request request) {
213224
boolean needPrune = url.contains(IDENTIFICATION_NUMBER);
214225
if (!needPrune)
215226
return request;
216227
return request.newBuilder()
217-
.url(url.substring(0, url.indexOf(IDENTIFICATION_NUMBER)))
218-
.header(IDENTIFICATION_HEADER, url)
228+
.url(url.substring(0, url.indexOf(IDENTIFICATION_NUMBER))) //删除掉标识符
229+
.header(IDENTIFICATION_HEADER, url) //将有标识符的 url 加入 header中, 便于wrapResponseBody(Response) 做处理
219230
.build();
220231
}
221232

@@ -231,13 +242,14 @@ public Response wrapResponseBody(Response response) {
231242
return response;
232243

233244
String key = response.request().url().toString();
234-
if (!TextUtils.isEmpty(response.request().header(IDENTIFICATION_HEADER))) {
245+
if (!TextUtils.isEmpty(response.request().header(IDENTIFICATION_HEADER))) { //从 header 中拿出有标识符的 url
235246
key = response.request().header(IDENTIFICATION_HEADER);
236247
}
237248

238249
if (haveRedirect(response)) {
239250
resolveRedirect(mRequestListeners, response, key);
240-
resolveRedirect(mResponseListeners, response, key);
251+
String location = resolveRedirect(mResponseListeners, response, key);
252+
response = modifyLocation(response, location);
241253
return response;
242254
}
243255

@@ -253,11 +265,27 @@ public Response wrapResponseBody(Response response) {
253265
return response;
254266
}
255267

268+
/**
269+
* 查看 location 是否被加入了标识符, 如果是, 则放入 {@link Header} 中重新定义 {@link Response}
270+
*
271+
* @param response 原始的 {@link Response}
272+
* @param location {@code location} 重定向地址
273+
* @return 返回可能被修改过的 {@link Response}
274+
*/
275+
private Response modifyLocation(Response response, String location) {
276+
if (!TextUtils.isEmpty(location) && location.contains(IDENTIFICATION_NUMBER)) { //将被加入标识符的新的 location 放入 header 中
277+
response = response.newBuilder()
278+
.header(LOCATION_HEADER, location)
279+
.build();
280+
}
281+
return response;
282+
}
283+
256284
/**
257285
* 当出现需要使用同一个 {@code url} 根据 Post 请求参数的不同而下载不同资源的情况
258286
* 请使用 {@link #addDiffResponseListenerOnSameUrl(String, ProgressListener)} 代替 {@link #addResponseListener}
259287
* {@link #addDiffResponseListenerOnSameUrl(String, ProgressListener)} 会返回一个加入了时间戳的新的 {@code url}
260-
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行下载的请求即可
288+
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行下载的请求即可 (当实际请求时依然使用 {@code originUrl} 进行网络请求)
261289
* <p>
262290
* {@link #addDiffResponseListenerOnSameUrl(String, ProgressListener)} 与 {@link #addDiffResponseListenerOnSameUrl(String, String, ProgressListener)}
263291
* 的区别在于:
@@ -277,7 +305,7 @@ public String addDiffResponseListenerOnSameUrl(String originUrl, ProgressListene
277305
* 当出现需要使用同一个 {@code url} 根据 Post 请求参数的不同而下载不同资源的情况
278306
* 请使用 {@link #addDiffResponseListenerOnSameUrl(String, String, ProgressListener)} 代替 {@link #addResponseListener}
279307
* 请使用 {@link #addDiffResponseListenerOnSameUrl(String, String, ProgressListener)} 会返回一个 {@code originUrl} 结合 {@code key} 生成的新的 {@code url}
280-
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行下载的请求即可
308+
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行下载的请求即可 (当实际请求时依然使用 {@code originUrl} 进行网络请求)
281309
* <p>
282310
* {@link #addDiffResponseListenerOnSameUrl(String, ProgressListener)} 与 {@link #addDiffResponseListenerOnSameUrl(String, String, ProgressListener)}
283311
* 的区别在于:
@@ -322,7 +350,7 @@ public String addDiffResponseListenerOnSameUrl(String originUrl, String key, Pro
322350
* 当出现需要使用同一个 {@code url} 根据 Post 请求参数的不同而上传不同资源的情况
323351
* 请使用 {@link #addDiffRequestListenerOnSameUrl(String, ProgressListener)} 代替 {@link #addRequestListener}
324352
* {@link #addDiffRequestListenerOnSameUrl(String, ProgressListener)} 会返回一个加入了时间戳的新的 {@code url}
325-
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行上传的请求即可
353+
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行上传的请求即可 (当实际请求时依然使用 {@code originUrl} 进行网络请求)
326354
* <p>
327355
* {@link #addDiffRequestListenerOnSameUrl(String, ProgressListener)} 与 {@link #addDiffRequestListenerOnSameUrl(String, String, ProgressListener)}
328356
* 的区别在于:
@@ -343,7 +371,7 @@ public String addDiffRequestListenerOnSameUrl(String originUrl, ProgressListener
343371
* 当出现需要使用同一个 {@code url} 根据 Post 请求参数的不同而上传不同资源的情况
344372
* 请使用 {@link #addDiffRequestListenerOnSameUrl(String, ProgressListener)} 代替 {@link #addRequestListener}
345373
* {@link #addDiffRequestListenerOnSameUrl(String, ProgressListener)} 会返回一个 {@code originUrl} 结合 {@code key} 生成的新的 {@code url}
346-
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行上传的请求即可
374+
* 请使用这个新的 {@code url} 去代替 {@code originUrl} 进行上传的请求即可 (当实际请求时依然使用 {@code originUrl} 进行网络请求)
347375
* <p>
348376
* {@link #addDiffRequestListenerOnSameUrl(String, ProgressListener)} 与 {@link #addDiffRequestListenerOnSameUrl(String, String, ProgressListener)}
349377
* 的区别在于:
@@ -410,11 +438,15 @@ private boolean haveRedirect(Response response) {
410438
* @param response 原始的 {@link Response}
411439
* @param url {@code url} 地址
412440
*/
413-
private void resolveRedirect(Map<String, List<ProgressListener>> map, Response response, String url) {
441+
private String resolveRedirect(Map<String, List<ProgressListener>> map, Response response, String url) {
442+
String location = null;
414443
List<ProgressListener> progressListeners = map.get(url); //查看此重定向 url ,是否已经注册过监听器
415444
if (progressListeners != null && progressListeners.size() > 0) {
416-
String location = response.header("Location");// 重定向地址
445+
location = response.header(LOCATION_HEADER);// 重定向地址
417446
if (!TextUtils.isEmpty(location)) {
447+
if (url.contains(IDENTIFICATION_NUMBER) && !location.contains(IDENTIFICATION_NUMBER)) { //如果 url 有标识符,那也将标识符加入用于重定向的 location
448+
location += url.substring(url.indexOf(IDENTIFICATION_NUMBER), url.length());
449+
}
418450
if (!map.containsKey(location)) {
419451
map.put(location, progressListeners); //将需要重定向地址的监听器,提供给重定向地址,保证重定向后也可以监听进度
420452
} else {
@@ -427,6 +459,7 @@ private void resolveRedirect(Map<String, List<ProgressListener>> map, Response r
427459
}
428460
}
429461
}
462+
return location;
430463
}
431464

432465

0 commit comments

Comments
 (0)