package com.laowch.githubtrends.utils; import android.app.Application; import android.content.Context; import com.laowch.githubtrends.MyApplication; import com.laowch.githubtrends.model.Language; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; /** * Created by lao on 15/9/25. */ public class LanguageHelper { static LanguageHelper instance; public static synchronized LanguageHelper getInstance() { return instance; } public static void init(Application application) { instance = new LanguageHelper(application); } Language[] allLanguages; HashMap<String, Language> languageMap = new HashMap<>(); List<Language> selectedLanguages = new ArrayList<>(); Context context; private LanguageHelper(Context context) { this.context = context; String selectedLanguageJson = PreferenceManager.getString(context, "selected_languages", null); Language[] selected = MyApplication.getGson().fromJson(selectedLanguageJson, Language[].class); if (selected != null && selected.length > 0) { selectedLanguages.addAll(Arrays.asList(selected)); } else { selectedLanguages.addAll(getDefaultSelectedLanguage()); } } public Language[] getAllLanguages() { if (allLanguages != null) { return allLanguages; } try { StringBuilder buf = new StringBuilder(); InputStream inputStream = context.getAssets().open("langs.json"); BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); String str; while ((str = in.readLine()) != null) { buf.append(str); } in.close(); allLanguages = MyApplication.getGson().fromJson(buf.toString(), Language[].class); } catch (Exception e) { } return allLanguages; } public void setSelectedLanguages(List<Language> languageList) { selectedLanguages = languageList; saveToPref(); } public void addSelectedLanguages(List<Language> languageList) { for (Language language : languageList) { if (!selectedLanguages.contains(language)) { selectedLanguages.add(language); } } saveToPref(); } public Language[] getSelectedLanguages() { return selectedLanguages.toArray(new Language[0]); } public Language[] getUnselectedLanguages() { List<Language> unselectedLanguages = new ArrayList<>(); for (Language language : getAllLanguages()) { if (!selectedLanguages.contains(language)) { unselectedLanguages.add(language); } } return unselectedLanguages.toArray(new Language[0]); } public Language getLanguageByName(String languageName) { if (languageMap.size() == 0) { for (Language language : getAllLanguages()) { languageMap.put(language.name, language); } } return languageMap.get(languageName); } private void saveToPref() { Language[] languages = selectedLanguages.toArray(new Language[0]); String languagesJson = MyApplication.getGson().toJson(languages); PreferenceManager.putString(context, "selected_languages", languagesJson); } private List<Language> getDefaultSelectedLanguage() { String[] defaultLanguagesName = new String[]{"All Language", "JavaScript", "Java", "Go", "CSS", "Objective-C", "Python", "Swift", "HTML"}; List<Language> defaultLanguages = new ArrayList<>(); for (String langNAme : defaultLanguagesName) { defaultLanguages.add(getLanguageByName(langNAme)); } return defaultLanguages; } }