// Path: app/src/main/java/com/github/mzule/androidweekly/App.java
// public class App extends Application {
//     private static App instance;
// 
//     public static App getInstance() {
//         return instance;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         instance = this;
//     }
// }
// 
// Path: app/src/main/java/com/github/mzule/androidweekly/util/JsonUtil.java
// public class JsonUtil {
//     private static final Gson gson = new Gson();
// 
//     public static String toJson(Object obj) {
//         try {
//             return gson.toJson(obj);
//         } catch (Throwable e) {
//             return "";
//         }
//     }
// 
//     public static <T> T fromJson(String json, Class<T> cls) {
//         try {
//             return gson.fromJson(json, cls);
//         } catch (Throwable e) {
//             return null;
//         }
//     }
// 
//     public static <T> T fromJson(String json, Type type) {
//         try {
//             return gson.fromJson(json, type);
//         } catch (Throwable e) {
//             return null;
//         }
//     }
// 
//     @WorkerThread
//     public static <T> T fromJson(URL url, Class<T> cls) {
//         try {
//             return gson.fromJson(new BufferedReader(new InputStreamReader(url.openConnection().getInputStream())), cls);
//         } catch (Throwable e) {
//             return null;
//         }
//     }
// }


import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import com.github.mzule.androidweekly.App;
import com.github.mzule.androidweekly.util.JsonUtil;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
package com.github.mzule.androidweekly.dao;




/**
 * Created by CaoDongping on 4/5/16.
 */
public class SearchHistoryKeeper {

    private static final int MAX_SIZE = 5;

    public static void save(String q) {
        List<String> exist = read();
        if (exist.contains(q)) {
            exist.remove(q);
        }
        exist.add(0, q);
        if (exist.size() > MAX_SIZE) {
            exist = exist.subList(0, MAX_SIZE);
        }
        getSharedPreferences().edit().putString("q", JsonUtil.toJson(exist)).apply();
    }

    public static List<String> read() {
        String json = getSharedPreferences().getString("q", null);
        if (TextUtils.isEmpty(json)) {
            return new ArrayList<>();
        } else {
            return JsonUtil.fromJson(json, new TypeToken<List<String>>() {
            }.getType());
        }
    }

    private static SharedPreferences getSharedPreferences() {
// Path: app/src/main/java/com/github/mzule/androidweekly/App.java
// public class App extends Application {
//     private static App instance;
// 
//     public static App getInstance() {
//         return instance;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         instance = this;
//     }
// }
// 
// Path: app/src/main/java/com/github/mzule/androidweekly/util/JsonUtil.java
// public class JsonUtil {
//     private static final Gson gson = new Gson();
// 
//     public static String toJson(Object obj) {
//         try {
//             return gson.toJson(obj);
//         } catch (Throwable e) {
//             return "";
//         }
//     }
// 
//     public static <T> T fromJson(String json, Class<T> cls) {
//         try {
//             return gson.fromJson(json, cls);
//         } catch (Throwable e) {
//             return null;
//         }
//     }
// 
//     public static <T> T fromJson(String json, Type type) {
//         try {
//             return gson.fromJson(json, type);
//         } catch (Throwable e) {
//             return null;
//         }
//     }
// 
//     @WorkerThread
//     public static <T> T fromJson(URL url, Class<T> cls) {
//         try {
//             return gson.fromJson(new BufferedReader(new InputStreamReader(url.openConnection().getInputStream())), cls);
//         } catch (Throwable e) {
//             return null;
//         }
//     }
// }


// Path: app/src/main/java/com/github/mzule/androidweekly/dao/SearchHistoryKeeper.java
import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import com.github.mzule.androidweekly.App;
import com.github.mzule.androidweekly.util.JsonUtil;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;

package com.github.mzule.androidweekly.dao;




/**
 * Created by CaoDongping on 4/5/16.
 */
public class SearchHistoryKeeper {

    private static final int MAX_SIZE = 5;

    public static void save(String q) {
        List<String> exist = read();
        if (exist.contains(q)) {
            exist.remove(q);
        }
        exist.add(0, q);
        if (exist.size() > MAX_SIZE) {
            exist = exist.subList(0, MAX_SIZE);
        }
        getSharedPreferences().edit().putString("q", JsonUtil.toJson(exist)).apply();
    }

    public static List<String> read() {
        String json = getSharedPreferences().getString("q", null);
        if (TextUtils.isEmpty(json)) {
            return new ArrayList<>();
        } else {
            return JsonUtil.fromJson(json, new TypeToken<List<String>>() {
            }.getType());
        }
    }

    private static SharedPreferences getSharedPreferences() {
        return App.getInstance().getSharedPreferences("SearchHistory", Context.MODE_PRIVATE);