管灌系统巡查员智能手机App
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cc.shinichi.library.glide.progress
 
import android.text.TextUtils
import cc.shinichi.library.glide.SSLSocketClient
import cc.shinichi.library.glide.progress.ProgressResponseBody.InternalProgressListener
import okhttp3.OkHttpClient
import java.util.*
import java.util.concurrent.TimeUnit
 
/**
 * @author 工藤
 * @email qinglingou@gmail.com
 */
object ProgressManager {
 
    private val listenersMap = Collections.synchronizedMap(HashMap<String, OnProgressListener>())
 
    private val LISTENER = object : InternalProgressListener {
        override fun onProgress(url: String?, bytesRead: Long, totalBytes: Long) {
            val percentage = (bytesRead * 1f / totalBytes * 100f).toInt()
            val isComplete = percentage >= 100
            listenersMap.let {
                for (listener in it.values) {
                    listener.onProgress(url, isComplete, percentage, bytesRead, totalBytes)
                }
            }
            if (isComplete) {
                removeListener(url)
            }
        }
    }
 
    @JvmStatic
    val okHttpClient: OkHttpClient
        get() {
            val builder = OkHttpClient.Builder()
            builder.addNetworkInterceptor { chain ->
                val request = chain.request()
                val response = chain.proceed(request)
                response.newBuilder()
                    .body(
                        response.body()
                            ?.let { ProgressResponseBody(request.url().toString(), LISTENER, it) })
                    .build()
            }
                .sslSocketFactory(
                    SSLSocketClient.sSLSocketFactory,
                    SSLSocketClient.geX509tTrustManager()
                )
                .hostnameVerifier(SSLSocketClient.hostnameVerifier)
            builder.connectTimeout(30, TimeUnit.SECONDS)
            builder.writeTimeout(30, TimeUnit.SECONDS)
            builder.readTimeout(30, TimeUnit.SECONDS)
            return builder.build()
        }
 
    @JvmStatic
    fun addListener(url: String?, listener: OnProgressListener?) {
        if (!TextUtils.isEmpty(url)) {
            listenersMap[url] = listener
            listener?.onProgress(url, false, 1, 0, 0)
        }
    }
 
    private fun removeListener(url: String?) {
        if (!TextUtils.isEmpty(url)) {
            listenersMap.remove(url)
        }
    }
}