// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/app/LoadingStateChangedEvent.java
// public class LoadingStateChangedEvent {
// 
//     private final RequestsState mState;
// 
//     private LoadingStateChangedEvent(RequestsState state) {
//         mState = state;
//     }
// 
//     @Produce
//     @NonNull
//     public static LoadingStateChangedEvent produce(@NonNull RequestsState state) {
//         return new LoadingStateChangedEvent(state);
//     }
// 
//     @NonNull
//     public RequestsState getState() {
//         return mState;
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/app/MainQueue.java
// public class MainQueue {
// 
//     private static volatile Handler sMainHandler;
// 
//     private MainQueue() {
//         getMainHandler();
//     }
// 
//     @NonNull
//     public static MainQueue get() {
//         return Holder.MAIN_QUEUE;
//     }
// 
//     @NonNull
//     public static Handler getMainHandler() {
//         Handler handler = sMainHandler;
//         if (sMainHandler == null) {
//             synchronized (MainQueue.class) {
//                 handler = sMainHandler;
//                 if (sMainHandler == null) {
//                     handler = sMainHandler = new Handler(Looper.getMainLooper());
//                 }
//             }
//         }
//         return handler;
//     }
// 
//     public void invoke(Runnable runnable) {
//         sMainHandler.post(runnable);
//     }
// 
//     private static class Holder {
//         private static final MainQueue MAIN_QUEUE = new MainQueue();
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/app/Otto.java
// public class Otto {
// 
//     private final Bus mBus;
// 
//     private Otto(Bus bus) {
//         mBus = bus;
//     }
// 
//     @NonNull
//     public static Otto get() {
//         return Holder.INSTANCE;
//     }
// 
//     public void post(final @NonNull Object event) {
//         if (Looper.myLooper() == Looper.getMainLooper()) {
//             mBus.post(event);
//         }
//         else {
//             MainQueue.get().invoke(new Runnable() {
//                 @Override
//                 public void run() {
//                     mBus.post(event);
//                 }
//             });
//         }
//     }
// 
//     public void register(@NonNull Object object) {
//         mBus.register(object);
//     }
// 
//     public void unregister(@NonNull Object object) {
//         mBus.unregister(object);
//     }
// 
//     private static final class Holder {
//         public static final Otto INSTANCE = new Otto(new Bus());
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/network/RequestType.java
// public enum RequestType {
// 
//     CONFIG(2_000, R.string.config_request),
//     AUTH(3_000, R.string.auth_request),
//     FRIENDS(6_000, R.string.friends_request),
//     POSTS(10_000, R.string.posts_request),
//     GROUPS(6_000, R.string.groups_request),
//     MESSAGES(8_000, R.string.messages_request),
//     PHOTOS(12_000, R.string.photos_request),
//     ;
// 
//     private final long mDelay;
// 
//     @StringRes
//     private final int mRequestText;
// 
//     RequestType(long delay, @StringRes int requestText) {
//         mDelay = delay;
//         mRequestText = requestText;
//     }
// 
//     public long getDelay() {
//         return mDelay;
//     }
// 
//     @StringRes
//     public int getRequestText() {
//         return mRequestText;
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/network/RequestsState.java
// public class RequestsState {
// 
//     private final GeneralState mState;
// 
//     private final List<RequestType> mLoadingRequests;
// 
//     private final List<RequestType> mLoadedRequest;
// 
//     public RequestsState(GeneralState state) {
//         this(state, new ArrayList<RequestType>(), new ArrayList<RequestType>());
//     }
// 
//     public RequestsState(GeneralState state, @NonNull List<RequestType> loadingRequests, @NonNull List<RequestType> loadedRequest) {
//         mState = state;
//         mLoadingRequests = loadingRequests;
//         mLoadedRequest = loadedRequest;
//     }
// 
//     public boolean isWaiting() {
//         return mState == GeneralState.WIATING;
//     }
// 
//     public boolean isLoading() {
//         return mState == GeneralState.LOADING;
//     }
// 
//     public boolean isLoaded() {
//         return mState == GeneralState.LOADED;
//     }
// 
//     public boolean isError() {
//         return mState == GeneralState.ERROR;
//     }
// 
//     public boolean isRequestLoading(RequestType requestType) {
//         return mLoadingRequests.contains(requestType);
//     }
// 
//     public boolean isRequestLoaded(RequestType requestType) {
//         return mLoadedRequest.contains(requestType);
//     }
// 
//     public enum GeneralState {
//         WIATING,
//         LOADING,
//         LOADED,
//         ERROR
//     }
// 
// }


import android.content.Context;
import android.support.annotation.NonNull;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.squareup.otto.Subscribe;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import itis.homework.parallelrequests.app.LoadingStateChangedEvent;
import itis.homework.parallelrequests.app.MainQueue;
import itis.homework.parallelrequests.app.Otto;
import itis.homework.parallelrequests.network.RequestType;
import itis.homework.parallelrequests.network.RequestsState;
package itis.homework.parallelrequests;





/**
 * @author Artur Vasilov
 */
public class RequestProcessView extends LinearLayout {

    private TextView mTimerTextView;
    private ViewGroup mStatusViewContainer;

// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/app/LoadingStateChangedEvent.java
// public class LoadingStateChangedEvent {
// 
//     private final RequestsState mState;
// 
//     private LoadingStateChangedEvent(RequestsState state) {
//         mState = state;
//     }
// 
//     @Produce
//     @NonNull
//     public static LoadingStateChangedEvent produce(@NonNull RequestsState state) {
//         return new LoadingStateChangedEvent(state);
//     }
// 
//     @NonNull
//     public RequestsState getState() {
//         return mState;
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/app/MainQueue.java
// public class MainQueue {
// 
//     private static volatile Handler sMainHandler;
// 
//     private MainQueue() {
//         getMainHandler();
//     }
// 
//     @NonNull
//     public static MainQueue get() {
//         return Holder.MAIN_QUEUE;
//     }
// 
//     @NonNull
//     public static Handler getMainHandler() {
//         Handler handler = sMainHandler;
//         if (sMainHandler == null) {
//             synchronized (MainQueue.class) {
//                 handler = sMainHandler;
//                 if (sMainHandler == null) {
//                     handler = sMainHandler = new Handler(Looper.getMainLooper());
//                 }
//             }
//         }
//         return handler;
//     }
// 
//     public void invoke(Runnable runnable) {
//         sMainHandler.post(runnable);
//     }
// 
//     private static class Holder {
//         private static final MainQueue MAIN_QUEUE = new MainQueue();
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/app/Otto.java
// public class Otto {
// 
//     private final Bus mBus;
// 
//     private Otto(Bus bus) {
//         mBus = bus;
//     }
// 
//     @NonNull
//     public static Otto get() {
//         return Holder.INSTANCE;
//     }
// 
//     public void post(final @NonNull Object event) {
//         if (Looper.myLooper() == Looper.getMainLooper()) {
//             mBus.post(event);
//         }
//         else {
//             MainQueue.get().invoke(new Runnable() {
//                 @Override
//                 public void run() {
//                     mBus.post(event);
//                 }
//             });
//         }
//     }
// 
//     public void register(@NonNull Object object) {
//         mBus.register(object);
//     }
// 
//     public void unregister(@NonNull Object object) {
//         mBus.unregister(object);
//     }
// 
//     private static final class Holder {
//         public static final Otto INSTANCE = new Otto(new Bus());
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/network/RequestType.java
// public enum RequestType {
// 
//     CONFIG(2_000, R.string.config_request),
//     AUTH(3_000, R.string.auth_request),
//     FRIENDS(6_000, R.string.friends_request),
//     POSTS(10_000, R.string.posts_request),
//     GROUPS(6_000, R.string.groups_request),
//     MESSAGES(8_000, R.string.messages_request),
//     PHOTOS(12_000, R.string.photos_request),
//     ;
// 
//     private final long mDelay;
// 
//     @StringRes
//     private final int mRequestText;
// 
//     RequestType(long delay, @StringRes int requestText) {
//         mDelay = delay;
//         mRequestText = requestText;
//     }
// 
//     public long getDelay() {
//         return mDelay;
//     }
// 
//     @StringRes
//     public int getRequestText() {
//         return mRequestText;
//     }
// }
// 
// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/network/RequestsState.java
// public class RequestsState {
// 
//     private final GeneralState mState;
// 
//     private final List<RequestType> mLoadingRequests;
// 
//     private final List<RequestType> mLoadedRequest;
// 
//     public RequestsState(GeneralState state) {
//         this(state, new ArrayList<RequestType>(), new ArrayList<RequestType>());
//     }
// 
//     public RequestsState(GeneralState state, @NonNull List<RequestType> loadingRequests, @NonNull List<RequestType> loadedRequest) {
//         mState = state;
//         mLoadingRequests = loadingRequests;
//         mLoadedRequest = loadedRequest;
//     }
// 
//     public boolean isWaiting() {
//         return mState == GeneralState.WIATING;
//     }
// 
//     public boolean isLoading() {
//         return mState == GeneralState.LOADING;
//     }
// 
//     public boolean isLoaded() {
//         return mState == GeneralState.LOADED;
//     }
// 
//     public boolean isError() {
//         return mState == GeneralState.ERROR;
//     }
// 
//     public boolean isRequestLoading(RequestType requestType) {
//         return mLoadingRequests.contains(requestType);
//     }
// 
//     public boolean isRequestLoaded(RequestType requestType) {
//         return mLoadedRequest.contains(requestType);
//     }
// 
//     public enum GeneralState {
//         WIATING,
//         LOADING,
//         LOADED,
//         ERROR
//     }
// 
// }


// Path: ParallelRequests/app/src/main/java/itis/homework/parallelrequests/RequestProcessView.java
import android.content.Context;
import android.support.annotation.NonNull;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.squareup.otto.Subscribe;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import itis.homework.parallelrequests.app.LoadingStateChangedEvent;
import itis.homework.parallelrequests.app.MainQueue;
import itis.homework.parallelrequests.app.Otto;
import itis.homework.parallelrequests.network.RequestType;
import itis.homework.parallelrequests.network.RequestsState;

package itis.homework.parallelrequests;





/**
 * @author Artur Vasilov
 */
public class RequestProcessView extends LinearLayout {

    private TextView mTimerTextView;
    private ViewGroup mStatusViewContainer;

    private final Map<RequestType, RequestStatusView> mStatusViews = new HashMap<>();