package info.justaway.settings; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import com.google.gson.Gson; import java.util.ArrayList; import java.util.HashMap; import info.justaway.JustawayApplication; import info.justaway.model.Row; import info.justaway.util.StatusUtil; import twitter4j.Status; import twitter4j.UserMentionEntity; public class MuteSettings { private static MuteSettingsData sMuteSettingsData; private static final String PREF_NAME = "mute_settings"; private static final String PREF_KEY = "data"; public static void init() { loadMuteSettings(); } private static SharedPreferences getSharedPreferences() { return JustawayApplication.getApplication() .getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); } @SuppressLint("UseSparseArrays") public static void loadMuteSettings() { String json = getSharedPreferences().getString(PREF_KEY, null); Gson gson = new Gson(); if (json != null) { sMuteSettingsData = gson.fromJson(json, MuteSettingsData.class); } if (sMuteSettingsData == null) { sMuteSettingsData = new MuteSettingsData(); } if (sMuteSettingsData.sourceMap == null) { sMuteSettingsData.sourceMap = new HashMap<>(); } if (sMuteSettingsData.userMap == null) { sMuteSettingsData.userMap = new HashMap<>(); } if (sMuteSettingsData.words == null) { sMuteSettingsData.words = new ArrayList<>(); } } public static void saveMuteSettings() { Gson gson = new Gson(); String exportJson = gson.toJson(sMuteSettingsData); SharedPreferences.Editor editor = getSharedPreferences().edit(); editor.putString(PREF_KEY, exportJson); editor.apply(); } public static boolean isMute(Row row) { if (row.isStatus()) { return isMute(row.getStatus()); } else { return false; } } public static Boolean isMute(Status status) { if (sMuteSettingsData.userMap.get(status.getUser().getId()) != null) { return true; } UserMentionEntity[] mentions = status.getUserMentionEntities(); for (UserMentionEntity mention : mentions) { if (sMuteSettingsData.userMap.get(mention.getId()) != null) { return true; } } Status retweetedStatus = status.getRetweetedStatus(); if (retweetedStatus != null) { if (sMuteSettingsData.userMap.get(retweetedStatus.getUser().getId()) != null) { return true; } } Status source = retweetedStatus != null ? retweetedStatus : status; if (sMuteSettingsData.sourceMap.get(StatusUtil.getClientName(source.getSource())) != null) { return true; } String text = source.getText(); for (String word : getWords()) { if (text.contains(word)) { return true; } } return false; } public static void addSource(String source) { sMuteSettingsData.sourceMap.put(source, true); } public static void removeSource(String source) { sMuteSettingsData.sourceMap.remove(source); } public static void addUser(Long userId, String screenName) { sMuteSettingsData.userMap.put(userId, screenName); } public static void removeUser(Long userId) { sMuteSettingsData.userMap.remove(userId); } public static void addWord(String word) { for (String muteWord : sMuteSettingsData.words) { if (muteWord.equals(word)) { return; } } sMuteSettingsData.words.add(word); } public static void removeWord(String word) { sMuteSettingsData.words.remove(word); } public static ArrayList<String> getSources() { ArrayList<String> sources = new ArrayList<String>(); for (String key : sMuteSettingsData.sourceMap.keySet()) { sources.add(key); } return sources; } public static HashMap<Long, String> getUserMap() { return sMuteSettingsData.userMap; } public static ArrayList<String> getWords() { return sMuteSettingsData.words; } public static class MuteSettingsData { HashMap<String, Boolean> sourceMap; HashMap<Long, String> userMap; /* LongSparseArrayはJSON化するのに都合が悪いのでHashMapを使う */ ArrayList<String> words; } }