package com.ihewro.focus.bean; import com.blankj.ALog; import com.ihewro.focus.GlobalConfig; import org.litepal.LitePal; import org.litepal.annotation.Column; import org.litepal.crud.LitePalSupport; import org.litepal.crud.callback.FindMultiCallback; import org.litepal.crud.callback.SaveCallback; import java.util.HashMap; import java.util.List; import java.util.Map; /** * <pre> * author : hewro * e-mail : [email protected] * time : 2019/05/06 * desc : 用户个人设置表 * version: 1.0 * </pre> */ public class UserPreference extends LitePalSupport { public static final String USE_INTERNET_WHILE_OPEN = "pref_key_use_internet_while_open"; public static final String AUTO_SET_FEED_NAME = "AUTO_SET_FEED_NAME"; public static final String OWN_RSSHUB = "自定义源"; public static final String ODER_CHOICE = "ODER_CHOICE";//排序规则 public static final String FILTER_CHOICE = "FILTER_CHOICE";//过滤规则 public static final String notOpenClick = "notOpenClick";//不要下拉打开连接 public static final String notStar = "notStar";//不要双击收藏 public static final String notToTop = "notToTop";//不要双击回顶部 public static final String not_show_image_in_list = "not_show_image_in_list";//首页列表不要显示图片 public static final String tim_interval = "tim_interval";//后台请求间隔 public static final String tim_is_open = "tim_is_open";//定时器是否已经开启 public static final String back_error = "back_error";//定时器是否已经开启 public static final String notWifi = "notWifi";//仅仅wifi下请求 public static final String notUseChrome = "notUseChrome";//不使用Chrome内核 public static final String READ_BACKGROUND = "READ_BACKGROUND";//阅读背景 public static final String RSS_HUB = "rsshub"; public static final String FIRST_USE_LOCAL_SEARCH_AND_FILTER = "FIRST_USE_LOCAL_SEARCH_AND_FILTER";//是否首次打开APP public static final String FIRST_INTRO_MAIN_FEED_ITEM = "FIRST_INTRO_MAIN_FEED_ITEM";//首次介绍首页的feedItem功能,包括侧滑,等等 public static final String FIST_USE_NEW_COMER = "FIST_USE_NEW_COMER";//首次介绍首页的feedItem功能,包括侧滑,等等 public static final String FIRST_INTRO_DISCOVER = "FIRST_INTRO_DISCOVER";//首次介绍发现市场的功能,包括手动订阅,添加订阅 public static final String DEFAULT_RSSHUB = "跟随上一级设置"; private int id;//主键 @Column(unique = true) private String key; private String value; private String defaultValue; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } public static Map<String,String> map = new HashMap<>(); public static void initCacheMap(){ map.clear(); LitePal.findAllAsync(UserPreference.class).listen(new FindMultiCallback<UserPreference>() { @Override public void onFinish(List<UserPreference> list) { for (UserPreference userPreference:list){ map.put(userPreference.getKey(),userPreference.getValue()); } } }); } public UserPreference(String key, String value) { this.key = key; this.value = value; } public UserPreference(String key, String value, String defaultValue) { this.key = key; this.value = value; this.defaultValue = defaultValue; } public static String queryValueByKey(String key, String defaultValue){ if (map.containsKey(key)){ // ALog.d("缓存数据"); return map.get(key); }else { // ALog.d("非缓存数据"); List<UserPreference> userPreferences = LitePal.where("key = ?", key).find(UserPreference.class); if (userPreferences.size()>0){ UserPreference temp = userPreferences.get(0); return temp.getValue(); }else { return defaultValue; } } } private static void setValueByKey(final String key, final String value){ UserPreference userPreference = new UserPreference(key,value); userPreference.saveAsync().listen(new SaveCallback() { @Override public void onFinish(boolean success) { map.put(key,value); } }); } public static void updateOrSaveValueByKey(String key, String value){ List<UserPreference> userPreferences = LitePal.where("key = ?", key).find(UserPreference.class); if (userPreferences.size()>0){ UserPreference temp = userPreferences.get(0); temp.setValue(value); temp.save(); //修改缓存中键值对 if (map.containsKey(key)){ map.remove(key); map.put(key,value); } }else { setValueByKey(key,value); } } public static void updateOrSaveValueByKeyAsync(final String key, final String value, final FindMultiCallback<UserPreference> callback){ LitePal.where("key = ?", key).limit(0).findAsync(UserPreference.class).listen(new FindMultiCallback<UserPreference>() { @Override public void onFinish(List<UserPreference> list) { if (list.size() > 0) {//缓存中有该值 UserPreference temp = list.get(0); temp.setValue(value); temp.save(); //修改缓存中键值对 if (map.containsKey(key)) { map.remove(key); map.put(key, value); } } else { setValueByKey(key, value); } callback.onFinish(list); } }); } public static String getRssHubUrl(){ String url = queryValueByKey(RSS_HUB, GlobalConfig.OfficialRSSHUB); if (url.equals(OWN_RSSHUB)){//如果有自定义源则选择这个 url = queryValueByKey(OWN_RSSHUB, GlobalConfig.OfficialRSSHUB); //对自定义源的地址进行处理 if (!url.startsWith("http://") && !url.startsWith("https://")){ url = "http://" + url; } if (url.endsWith("/")){ url = url.substring(0,url.length()-1); } return url; }else { return url; } } }