//package com.xinyingpower.microphoto.request;
//
//import java.util.Random;
//
///**
// * <p>Retry policy that retries a set number of times with increasing sleep time between retries</p>
// */
//public class ExponentialBackOffRetry implements RetryPolicy {
//
//    private static final int MAX_RETRIES_LIMIT = 29;
//    private static final int DEFAULT_MAX_SLEEP_MS = Integer.MAX_VALUE;
//
//    private final Random random = new Random();
//    private final long baseSleepTimeMs;
//    private final int maxRetries;
//    private final int maxSleepMs;
//
//    public ExponentialBackOffRetry(int baseSleepTimeMs, int maxRetries) {
//        this(baseSleepTimeMs, maxRetries, DEFAULT_MAX_SLEEP_MS);
//    }
//
//    public ExponentialBackOffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs) {
//        this.maxRetries = maxRetries;
//        this.baseSleepTimeMs = baseSleepTimeMs;
//        this.maxSleepMs = maxSleepMs;
//    }
//
//    @Override
//    public boolean allowRetry(int retryCount) {
//        if (retryCount < maxRetries) {
//            return true;
//        }
//        return false;
//    }
//
//    @Override
//    public long getSleepTimeMs(int retryCount) {
//        if (retryCount < 0) {
//            throw new IllegalArgumentException("retries count must greater than 0.");
//        }
//        if (retryCount > MAX_RETRIES_LIMIT) {
////            LogUtil.e(String.format("maxRetries too large (%d). Pinning to %d", maxRetries, MAX_RETRIES_LIMIT));
//            retryCount = MAX_RETRIES_LIMIT;
//        }
//        long sleepMs = baseSleepTimeMs * Math.max(1, random.nextInt(1 << retryCount));
//        if (sleepMs > maxSleepMs) {
////            LogUtil.e(String.format("Sleep extension too large (%d). Pinning to %d", sleepMs, maxSleepMs));
//            sleepMs = maxSleepMs;
//        }
//        return sleepMs;
//    }
//}
