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) 
 | 
        } 
 | 
    } 
 | 
} 
 |