(Context context, Persisted data)
| 71 | } |
| 72 | |
| 73 | static List<TupleKeyword> from(Context context, Persisted data) { |
| 74 | if (data.selected == null) |
| 75 | data.selected = new String[0]; |
| 76 | if (data.available == null) |
| 77 | data.available = new String[0]; |
| 78 | |
| 79 | List<TupleKeyword> result = new ArrayList<>(); |
| 80 | |
| 81 | List<String> all = new ArrayList<>(); |
| 82 | List<String> some = Arrays.asList(data.selected); |
| 83 | List<String> selected = Arrays.asList(data.all_selected == null ? data.selected : data.all_selected); |
| 84 | |
| 85 | for (String keyword : selected) |
| 86 | if (!all.contains(keyword)) |
| 87 | all.add(keyword); |
| 88 | |
| 89 | for (String keyword : data.available) |
| 90 | if (!all.contains(keyword)) |
| 91 | all.add(keyword); |
| 92 | |
| 93 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); |
| 94 | |
| 95 | String global = prefs.getString("global_keywords", null); |
| 96 | if (global != null) |
| 97 | for (String kw : global.split(" ")) |
| 98 | if (!all.contains(kw)) |
| 99 | all.add(kw); |
| 100 | |
| 101 | final Collator collator = Collator.getInstance(Locale.getDefault()); |
| 102 | collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc |
| 103 | |
| 104 | Collections.sort(all, new Comparator<String>() { |
| 105 | @Override |
| 106 | public int compare(String k1, String k2) { |
| 107 | k1 = prefs.getString("kwtitle." + k1, getDefaultKeywordAlias(context, k1)); |
| 108 | k2 = prefs.getString("kwtitle." + k2, getDefaultKeywordAlias(context, k2)); |
| 109 | return collator.compare(k1, k2); |
| 110 | } |
| 111 | }); |
| 112 | |
| 113 | for (String keyword : all) { |
| 114 | TupleKeyword k = new TupleKeyword(); |
| 115 | k.name = keyword; |
| 116 | k.selected = selected.contains(keyword); |
| 117 | k.partial = (k.selected && !some.contains(keyword)); |
| 118 | |
| 119 | String c1 = "kwcolor." + keyword; |
| 120 | String c2 = "keyword." + keyword; // legacy |
| 121 | if (prefs.contains(c1)) |
| 122 | k.color = prefs.getInt(c1, Color.GRAY); |
| 123 | else if (prefs.contains(c2)) |
| 124 | k.color = prefs.getInt(c2, Color.GRAY); |
| 125 | |
| 126 | result.add(k); |
| 127 | } |
| 128 | |
| 129 | return result; |
| 130 | } |
no test coverage detected