// Path: app/src/main/java/org/attentiveness/news/data/News.java
// public class News {
// 
//     @SerializedName("date")
//     private String date;
// 
//     @SerializedName("stories")
//     private List<Story> storyList;
// 
//     @SerializedName("top_stories")
//     private List<Story> topStoryList;
// 
//     public News() {
// 
//     }
// 
//     public String getDate() {
//         return date;
//     }
// 
//     public void setDate(String date) {
//         this.date = date;
//     }
// 
//     public List<Story> getStoryList() {
//         return storyList;
//     }
// 
//     public void setStoryList(List<Story> storyList) {
//         this.storyList = storyList;
//     }
// 
//     public List<Story> getTopStoryList() {
//         return topStoryList;
//     }
// 
//     public void setTopStoryList(List<Story> topStoryList) {
//         this.topStoryList = topStoryList;
//     }
// 
// }
// 
// Path: app/src/main/java/org/attentiveness/news/data/Story.java
// public class Story {
// 
//     private int id;
//     private String title;
// 
//     @SerializedName("images")
//     private List<String> imageList;
// 
//     public Story() {
// 
//     }
// 
//     public Story(int id, String title) {
//         this.id = id;
//         this.title = title;
//     }
// 
//     public int getId() {
//         return id;
//     }
// 
//     public void setId(int id) {
//         this.id = id;
//     }
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public List<String> getImageList() {
//         return imageList;
//     }
// 
//     public void setImageList(List<String> imageList) {
//         this.imageList = imageList;
//     }
// }
// 
// Path: app/src/main/java/org/attentiveness/news/data/StoryDetail.java
// public class StoryDetail {
// 
//     @SerializedName("id")
//     private int id;
// 
//     @SerializedName("body")
//     private String content;
// 
//     @SerializedName("title")
//     private String title;
// 
//     @SerializedName("image")
//     private String imageUrl;
// 
//     @SerializedName("image_source")
//     private String imageSource;
// 
//     @SerializedName("js")
//     private List<String> jsList;
// 
//     @SerializedName("css")
//     private List<String> cssList;
// 
//     public StoryDetail() {
// 
//     }
// 
//     public int getId() {
//         return id;
//     }
// 
//     public void setId(int id) {
//         this.id = id;
//     }
// 
//     public String getContent() {
//         return content;
//     }
// 
//     public void setContent(String content) {
//         this.content = content;
//     }
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public String getImageUrl() {
//         return imageUrl;
//     }
// 
//     public void setImageUrl(String imageUrl) {
//         this.imageUrl = imageUrl;
//     }
// 
//     public String getImageSource() {
//         return imageSource;
//     }
// 
//     public void setImageSource(String imageSource) {
//         this.imageSource = imageSource;
//     }
// 
//     public List<String> getJsList() {
//         return jsList;
//     }
// 
//     public void setJsList(List<String> jsList) {
//         this.jsList = jsList;
//     }
// 
//     public List<String> getCssList() {
//         return cssList;
//     }
// 
//     public void setCssList(List<String> cssList) {
//         this.cssList = cssList;
//     }
// }
// 
// Path: app/src/main/java/org/attentiveness/news/exception/NetworkException.java
// public class NetworkException extends Exception {
// 
//     public NetworkException() {
//         super();
//     }
// 
//     public NetworkException(Throwable throwable) {
//         super(throwable);
//     }
// 
//     public NetworkException(String message) {
//         super(message);
//     }
// }


import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import org.attentiveness.news.R;
import org.attentiveness.news.data.News;
import org.attentiveness.news.data.Story;
import org.attentiveness.news.data.StoryDetail;
import org.attentiveness.news.exception.NetworkException;
import java.util.List;
import java.util.concurrent.Callable;
import io.reactivex.Observable;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
package org.attentiveness.news.net;





/**
 * Http Manager that responds to url request.
 */
public class HttpManager {

    private static final String BASE_URL = "http://news-at.zhihu.com/api/4/news/";

    private static HttpManager INSTANCE = null;

    private Context mContext;
    private StoryService mStoryService;

    public static HttpManager getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = new HttpManager(context);
        }
        return INSTANCE;
    }

    /**
     * Both connection time and read time are 10,000ms by default.
     */
    private HttpManager(Context context) {
        this.mContext = context;
        OkHttpClient client = new OkHttpClient.Builder().build();
        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .baseUrl(BASE_URL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        this.mStoryService = retrofit.create(StoryService.class);
    }

    public Observable<List<Story>> getStoryList(String date) {
        if (!this.isConnected()) {
            return Observable.error(new Callable<Throwable>() {
                @Override
                public Throwable call() {
// Path: app/src/main/java/org/attentiveness/news/data/News.java
// public class News {
// 
//     @SerializedName("date")
//     private String date;
// 
//     @SerializedName("stories")
//     private List<Story> storyList;
// 
//     @SerializedName("top_stories")
//     private List<Story> topStoryList;
// 
//     public News() {
// 
//     }
// 
//     public String getDate() {
//         return date;
//     }
// 
//     public void setDate(String date) {
//         this.date = date;
//     }
// 
//     public List<Story> getStoryList() {
//         return storyList;
//     }
// 
//     public void setStoryList(List<Story> storyList) {
//         this.storyList = storyList;
//     }
// 
//     public List<Story> getTopStoryList() {
//         return topStoryList;
//     }
// 
//     public void setTopStoryList(List<Story> topStoryList) {
//         this.topStoryList = topStoryList;
//     }
// 
// }
// 
// Path: app/src/main/java/org/attentiveness/news/data/Story.java
// public class Story {
// 
//     private int id;
//     private String title;
// 
//     @SerializedName("images")
//     private List<String> imageList;
// 
//     public Story() {
// 
//     }
// 
//     public Story(int id, String title) {
//         this.id = id;
//         this.title = title;
//     }
// 
//     public int getId() {
//         return id;
//     }
// 
//     public void setId(int id) {
//         this.id = id;
//     }
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public List<String> getImageList() {
//         return imageList;
//     }
// 
//     public void setImageList(List<String> imageList) {
//         this.imageList = imageList;
//     }
// }
// 
// Path: app/src/main/java/org/attentiveness/news/data/StoryDetail.java
// public class StoryDetail {
// 
//     @SerializedName("id")
//     private int id;
// 
//     @SerializedName("body")
//     private String content;
// 
//     @SerializedName("title")
//     private String title;
// 
//     @SerializedName("image")
//     private String imageUrl;
// 
//     @SerializedName("image_source")
//     private String imageSource;
// 
//     @SerializedName("js")
//     private List<String> jsList;
// 
//     @SerializedName("css")
//     private List<String> cssList;
// 
//     public StoryDetail() {
// 
//     }
// 
//     public int getId() {
//         return id;
//     }
// 
//     public void setId(int id) {
//         this.id = id;
//     }
// 
//     public String getContent() {
//         return content;
//     }
// 
//     public void setContent(String content) {
//         this.content = content;
//     }
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public String getImageUrl() {
//         return imageUrl;
//     }
// 
//     public void setImageUrl(String imageUrl) {
//         this.imageUrl = imageUrl;
//     }
// 
//     public String getImageSource() {
//         return imageSource;
//     }
// 
//     public void setImageSource(String imageSource) {
//         this.imageSource = imageSource;
//     }
// 
//     public List<String> getJsList() {
//         return jsList;
//     }
// 
//     public void setJsList(List<String> jsList) {
//         this.jsList = jsList;
//     }
// 
//     public List<String> getCssList() {
//         return cssList;
//     }
// 
//     public void setCssList(List<String> cssList) {
//         this.cssList = cssList;
//     }
// }
// 
// Path: app/src/main/java/org/attentiveness/news/exception/NetworkException.java
// public class NetworkException extends Exception {
// 
//     public NetworkException() {
//         super();
//     }
// 
//     public NetworkException(Throwable throwable) {
//         super(throwable);
//     }
// 
//     public NetworkException(String message) {
//         super(message);
//     }
// }


// Path: app/src/main/java/org/attentiveness/news/net/HttpManager.java
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import org.attentiveness.news.R;
import org.attentiveness.news.data.News;
import org.attentiveness.news.data.Story;
import org.attentiveness.news.data.StoryDetail;
import org.attentiveness.news.exception.NetworkException;
import java.util.List;
import java.util.concurrent.Callable;
import io.reactivex.Observable;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

package org.attentiveness.news.net;





/**
 * Http Manager that responds to url request.
 */
public class HttpManager {

    private static final String BASE_URL = "http://news-at.zhihu.com/api/4/news/";

    private static HttpManager INSTANCE = null;

    private Context mContext;
    private StoryService mStoryService;

    public static HttpManager getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = new HttpManager(context);
        }
        return INSTANCE;
    }

    /**
     * Both connection time and read time are 10,000ms by default.
     */
    private HttpManager(Context context) {
        this.mContext = context;
        OkHttpClient client = new OkHttpClient.Builder().build();
        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .baseUrl(BASE_URL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        this.mStoryService = retrofit.create(StoryService.class);
    }

    public Observable<List<Story>> getStoryList(String date) {
        if (!this.isConnected()) {
            return Observable.error(new Callable<Throwable>() {
                @Override
                public Throwable call() {
                    return new NetworkException(mContext.getResources().getString(R.string.error_no_network_connection));